OFBIZ-4098 Extract interfaces for CacheManager and Cache, add basic abstract and concrete factories and move the current cache implementation into a separate package. 



git-svn-id: https://svn.apache.org/repos/asf/ofbiz/branches/OFBIZ-4098-make-cache-pluggable@1647934 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/applications/content/src/org/ofbiz/content/ContentManagementServices.java b/applications/content/src/org/ofbiz/content/ContentManagementServices.java
index ad260f9..462868a 100644
--- a/applications/content/src/org/ofbiz/content/ContentManagementServices.java
+++ b/applications/content/src/org/ofbiz/content/ContentManagementServices.java
@@ -37,7 +37,7 @@
 import org.ofbiz.base.util.UtilMisc;
 import org.ofbiz.base.util.UtilProperties;
 import org.ofbiz.base.util.UtilValidate;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.content.content.ContentServices;
 import org.ofbiz.content.content.ContentWorker;
@@ -1175,7 +1175,7 @@
 
     public static Map<String, Object> clearContentAssocViewCache(DispatchContext dctx, Map<String, ? extends Object> context) throws GenericServiceException{
         Map<String, Object> results = FastMap.newInstance();
-        OFBizCache<?, ?> utilCache = UtilCache.findCache("entitycache.entity-list.default.ContentAssocViewFrom");
+        Cache<?, ?> utilCache = UtilCache.findCache("entitycache.entity-list.default.ContentAssocViewFrom");
 
         if (utilCache != null) {
             utilCache.clear();
@@ -1192,7 +1192,7 @@
     public static Map<String, Object> clearContentAssocDataResourceViewCache(DispatchContext dctx, Map<String, ? extends Object> context) throws GenericServiceException{
         Map<String, Object> results = FastMap.newInstance();
 
-        OFBizCache<?, ?> utilCache = UtilCache.findCache("entitycache.entity-list.default.ContentAssocViewDataResourceFrom");
+        Cache<?, ?> utilCache = UtilCache.findCache("entitycache.entity-list.default.ContentAssocViewDataResourceFrom");
         if (utilCache != null) {
             utilCache.clear();
         }
diff --git a/applications/order/src/org/ofbiz/order/order/OrderContentWrapper.java b/applications/order/src/org/ofbiz/order/order/OrderContentWrapper.java
index 0ebafa0..624bd4f 100644
--- a/applications/order/src/org/ofbiz/order/order/OrderContentWrapper.java
+++ b/applications/order/src/org/ofbiz/order/order/OrderContentWrapper.java
@@ -32,7 +32,7 @@
 import org.ofbiz.base.util.GeneralException;
 import org.ofbiz.base.util.UtilHttp;
 import org.ofbiz.base.util.UtilValidate;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.content.content.ContentWorker;
 import org.ofbiz.entity.Delegator;
@@ -49,7 +49,7 @@
     public static final String module = OrderContentWrapper.class.getName();
     public static final String SEPARATOR = "::";    // cache key separator
 
-    private static final OFBizCache<String, String> orderContentCache = UtilCache.createUtilCache("order.content", true); // use soft reference to free up memory if needed
+    private static final Cache<String, String> orderContentCache = UtilCache.createUtilCache("order.content", true); // use soft reference to free up memory if needed
 
     public static OrderContentWrapper makeOrderContentWrapper(GenericValue order, HttpServletRequest request) {
         return new OrderContentWrapper(order, request);
diff --git a/applications/party/src/org/ofbiz/party/content/PartyContentWrapper.java b/applications/party/src/org/ofbiz/party/content/PartyContentWrapper.java
index 33512fb..9619940 100644
--- a/applications/party/src/org/ofbiz/party/content/PartyContentWrapper.java
+++ b/applications/party/src/org/ofbiz/party/content/PartyContentWrapper.java
@@ -21,7 +21,7 @@
 
 import org.ofbiz.content.content.ContentWrapper;
 import org.ofbiz.content.content.ContentWorker;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.base.util.*;
 import org.ofbiz.entity.GenericValue;
@@ -49,7 +49,7 @@
     public static final String module = PartyContentWrapper.class.getName();
     public static final String CACHE_KEY_SEPARATOR = "::";
 
-    private static final OFBizCache<String, String> partyContentCache = UtilCache.createUtilCache("party.content.rendered", true);
+    private static final Cache<String, String> partyContentCache = UtilCache.createUtilCache("party.content.rendered", true);
 
     protected LocalDispatcher dispatcher;
     protected GenericValue party;
diff --git a/applications/product/src/org/ofbiz/product/config/ProductConfigWorker.java b/applications/product/src/org/ofbiz/product/config/ProductConfigWorker.java
index e7537ed..00d3f76 100644
--- a/applications/product/src/org/ofbiz/product/config/ProductConfigWorker.java
+++ b/applications/product/src/org/ofbiz/product/config/ProductConfigWorker.java
@@ -44,7 +44,7 @@
 import org.ofbiz.product.store.ProductStoreWorker;
 import org.ofbiz.service.LocalDispatcher;
 import org.ofbiz.webapp.website.WebSiteWorker;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 
 /**
@@ -56,7 +56,7 @@
     public static final String resource = "ProductUiLabels";
     public static final String SEPARATOR = "::";    // cache key separator
 
-    private static final OFBizCache<String, ProductConfigWrapper> productConfigCache = UtilCache.createUtilCache("product.config", true);     // use soft reference to free up memory if needed
+    private static final Cache<String, ProductConfigWrapper> productConfigCache = UtilCache.createUtilCache("product.config", true);     // use soft reference to free up memory if needed
 
     public static ProductConfigWrapper getProductConfigWrapper(String productId, String currencyUomId, HttpServletRequest request) {
         ProductConfigWrapper configWrapper = null;
diff --git a/applications/product/src/org/ofbiz/product/product/ProductContentWrapper.java b/applications/product/src/org/ofbiz/product/product/ProductContentWrapper.java
index 2edd906..aa55d12 100644
--- a/applications/product/src/org/ofbiz/product/product/ProductContentWrapper.java
+++ b/applications/product/src/org/ofbiz/product/product/ProductContentWrapper.java
@@ -35,7 +35,7 @@
 import org.ofbiz.base.util.UtilHttp;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.GeneralRuntimeException;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.content.content.ContentWorker;
 import org.ofbiz.content.content.ContentWrapper;
@@ -55,7 +55,7 @@
     public static final String module = ProductContentWrapper.class.getName();
     public static final String SEPARATOR = "::";    // cache key separator
 
-    private static final OFBizCache<String, String> productContentCache = UtilCache.createUtilCache("product.content.rendered", true);
+    private static final Cache<String, String> productContentCache = UtilCache.createUtilCache("product.content.rendered", true);
 
     public static ProductContentWrapper makeProductContentWrapper(GenericValue product, HttpServletRequest request) {
         return new ProductContentWrapper(product, request);
diff --git a/applications/product/src/org/ofbiz/product/product/ProductPromoContentWrapper.java b/applications/product/src/org/ofbiz/product/product/ProductPromoContentWrapper.java
index 35a5db9..25e93e4 100644
--- a/applications/product/src/org/ofbiz/product/product/ProductPromoContentWrapper.java
+++ b/applications/product/src/org/ofbiz/product/product/ProductPromoContentWrapper.java
@@ -37,7 +37,7 @@
 import org.ofbiz.base.util.UtilHttp;
 import org.ofbiz.base.util.UtilMisc;
 import org.ofbiz.base.util.UtilValidate;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.content.content.ContentWorker;
 import org.ofbiz.content.content.ContentWrapper;
@@ -60,7 +60,7 @@
     public static final String module = ProductPromoContentWrapper.class.getName();
     public static final String SEPARATOR = "::";    // cache key separator
 
-    private static final OFBizCache<String, String> productPromoContentCache = UtilCache.createUtilCache("product.promo.content.rendered", true);
+    private static final Cache<String, String> productPromoContentCache = UtilCache.createUtilCache("product.promo.content.rendered", true);
 
     public static ProductPromoContentWrapper makeProductPromoContentWrapper(GenericValue productPromo, HttpServletRequest request) {
         return new ProductPromoContentWrapper(productPromo, request);
diff --git a/applications/workeffort/src/org/ofbiz/workeffort/content/WorkEffortContentWrapper.java b/applications/workeffort/src/org/ofbiz/workeffort/content/WorkEffortContentWrapper.java
index b34fd9f..05732ef 100644
--- a/applications/workeffort/src/org/ofbiz/workeffort/content/WorkEffortContentWrapper.java
+++ b/applications/workeffort/src/org/ofbiz/workeffort/content/WorkEffortContentWrapper.java
@@ -38,7 +38,7 @@
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.GeneralRuntimeException;
 import org.ofbiz.base.util.Debug;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.service.LocalDispatcher;
 import javolution.util.FastMap;
@@ -52,7 +52,7 @@
     public static final String module = WorkEffortContentWrapper.class.getName();
     public static final String CACHE_KEY_SEPARATOR = "::";
 
-    private static final OFBizCache<String, String> workEffortContentCache = UtilCache.createUtilCache("workeffort.content.rendered", true);
+    private static final Cache<String, String> workEffortContentCache = UtilCache.createUtilCache("workeffort.content.rendered", true);
 
     protected LocalDispatcher dispatcher;
     protected GenericValue workEffort;
diff --git a/framework/base/src/META-INF/services/org.ofbiz.base.util.cache.CacheManagerFactory b/framework/base/src/META-INF/services/org.ofbiz.base.util.cache.CacheManagerFactory
new file mode 100644
index 0000000..e705461
--- /dev/null
+++ b/framework/base/src/META-INF/services/org.ofbiz.base.util.cache.CacheManagerFactory
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+org.ofbiz.base.util.cache.impl.OFBizCacheManagerFactory
diff --git a/framework/base/src/org/ofbiz/base/config/ResourceLoader.java b/framework/base/src/org/ofbiz/base/config/ResourceLoader.java
index f582180..ad1cf38 100644
--- a/framework/base/src/org/ofbiz/base/config/ResourceLoader.java
+++ b/framework/base/src/org/ofbiz/base/config/ResourceLoader.java
@@ -24,7 +24,7 @@
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.UtilURL;
 import org.ofbiz.base.util.UtilXml;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -35,9 +35,9 @@
 public abstract class ResourceLoader {
 
     public static final String module = ResourceLoader.class.getName();
-    private static final OFBizCache<String, ResourceLoader> loaderCache = UtilCache.createUtilCache("resource.ResourceLoaders", 0, 0);
+    private static final Cache<String, ResourceLoader> loaderCache = UtilCache.createUtilCache("resource.ResourceLoaders", 0, 0);
     // This cache is temporary - we will use it until the framework has been refactored to eliminate DOM tree caching, then it can be removed.
-    private static final OFBizCache<String, Document> domCache = UtilCache.createUtilCache("resource.DomTrees", 0, 0);
+    private static final Cache<String, Document> domCache = UtilCache.createUtilCache("resource.DomTrees", 0, 0);
 
     public static InputStream loadResource(String xmlFilename, String location, String loaderName) throws GenericConfigException {
         ResourceLoader loader = getLoader(xmlFilename, loaderName);
diff --git a/framework/base/src/org/ofbiz/base/metrics/MetricsFactory.java b/framework/base/src/org/ofbiz/base/metrics/MetricsFactory.java
index 05807bb..2449fd8 100644
--- a/framework/base/src/org/ofbiz/base/metrics/MetricsFactory.java
+++ b/framework/base/src/org/ofbiz/base/metrics/MetricsFactory.java
@@ -35,7 +35,7 @@
 import org.ofbiz.base.lang.ThreadSafe;
 import org.ofbiz.base.util.Assert;
 import org.ofbiz.base.util.UtilProperties;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.w3c.dom.Element;
 
@@ -44,7 +44,7 @@
  */
 @ThreadSafe
 public final class MetricsFactory {
-    private static final OFBizCache<String, Metrics> METRICS_CACHE = UtilCache.createUtilCache("base.metrics", 0, 0);
+    private static final Cache<String, Metrics> METRICS_CACHE = UtilCache.createUtilCache("base.metrics", 0, 0);
     /**
      * A "do-nothing" <code>Metrics</code> instance.
      */
diff --git a/framework/base/src/org/ofbiz/base/util/BshUtil.java b/framework/base/src/org/ofbiz/base/util/BshUtil.java
index 2601a69..61c9c42 100644
--- a/framework/base/src/org/ofbiz/base/util/BshUtil.java
+++ b/framework/base/src/org/ofbiz/base/util/BshUtil.java
@@ -28,12 +28,13 @@
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.ofbiz.base.location.FlexibleLocation;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 
 import bsh.BshClassManager;
 import bsh.EvalError;
 import bsh.Interpreter;
+import bsh.Interpreter.ParsedScript;
 import bsh.NameSpace;
 import bsh.ParseException;
 
@@ -46,7 +47,7 @@
     public static final String module = BshUtil.class.getName();
 
     protected static ConcurrentHashMap<ClassLoader, BshClassManager> masterClassManagers = new ConcurrentHashMap<ClassLoader, BshClassManager>();
-    private static final OFBizCache<String, Interpreter.ParsedScript> parsedScripts = UtilCache.createUtilCache("script.BshLocationParsedCache", 0, 0, false);
+    private static final Cache<String, ParsedScript> parsedScripts = UtilCache.createUtilCache("script.BshLocationParsedCache", 0, 0, false);
 
     /**
      * Evaluate a BSH condition or expression
diff --git a/framework/base/src/org/ofbiz/base/util/GroovyUtil.java b/framework/base/src/org/ofbiz/base/util/GroovyUtil.java
index 4c7cdb4..fc0d601 100644
--- a/framework/base/src/org/ofbiz/base/util/GroovyUtil.java
+++ b/framework/base/src/org/ofbiz/base/util/GroovyUtil.java
@@ -35,7 +35,7 @@
 import org.codehaus.groovy.control.CompilerConfiguration;
 import org.codehaus.groovy.runtime.InvokerHelper;
 import org.ofbiz.base.location.FlexibleLocation;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 
 /**
@@ -46,7 +46,7 @@
 
     public static final String module = GroovyUtil.class.getName();
 
-    private static final OFBizCache<String, Class<?>> parsedScripts = UtilCache.createUtilCache("script.GroovyLocationParsedCache", 0, 0, false);
+    private static final Cache<String, Class<?>> parsedScripts = UtilCache.createUtilCache("script.GroovyLocationParsedCache", 0, 0, false);
 
     private static final GroovyClassLoader groovyScriptClassLoader;
     static {
diff --git a/framework/base/src/org/ofbiz/base/util/JNDIContextFactory.java b/framework/base/src/org/ofbiz/base/util/JNDIContextFactory.java
index 87f7098..c201d3a 100644
--- a/framework/base/src/org/ofbiz/base/util/JNDIContextFactory.java
+++ b/framework/base/src/org/ofbiz/base/util/JNDIContextFactory.java
@@ -25,7 +25,7 @@
 
 import org.ofbiz.base.config.GenericConfigException;
 import org.ofbiz.base.config.JNDIConfigUtil;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 
 /**
@@ -35,7 +35,7 @@
 public class JNDIContextFactory {
 
     public static final String module = JNDIContextFactory.class.getName();
-    private static final OFBizCache<String, InitialContext> contexts = UtilCache.createUtilCache("entity.JNDIContexts", 0, 0);
+    private static final Cache<String, InitialContext> contexts = UtilCache.createUtilCache("entity.JNDIContexts", 0, 0);
 
     /**
      * Return the initial context according to the entityengine.xml parameters that correspond to the given prefix
diff --git a/framework/base/src/org/ofbiz/base/util/OfbizBshBsfEngine.java b/framework/base/src/org/ofbiz/base/util/OfbizBshBsfEngine.java
index d04eda7..486c6c0 100644
--- a/framework/base/src/org/ofbiz/base/util/OfbizBshBsfEngine.java
+++ b/framework/base/src/org/ofbiz/base/util/OfbizBshBsfEngine.java
@@ -33,6 +33,7 @@
 
 import bsh.EvalError;
 import bsh.Interpreter;
+import bsh.Interpreter.ParsedScript;
 import bsh.InterpreterError;
 import bsh.TargetError;
 
@@ -41,7 +42,7 @@
 import org.apache.bsf.BSFManager;
 import org.apache.bsf.util.BSFEngineImpl;
 
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 
 /**
@@ -62,7 +63,7 @@
     protected Interpreter interpreter;
     protected boolean installedApplyMethod;
 
-    private static final OFBizCache<String, Interpreter.ParsedScript> parsedScripts = UtilCache.createUtilCache("script.BshBsfParsedCache", 0, 0, false);
+    private static final Cache<String, ParsedScript> parsedScripts = UtilCache.createUtilCache("script.BshBsfParsedCache", 0, 0, false);
 
     @SuppressWarnings("unchecked")
     @Override
diff --git a/framework/base/src/org/ofbiz/base/util/PatternFactory.java b/framework/base/src/org/ofbiz/base/util/PatternFactory.java
index f4cb837..13ac317 100644
--- a/framework/base/src/org/ofbiz/base/util/PatternFactory.java
+++ b/framework/base/src/org/ofbiz/base/util/PatternFactory.java
@@ -21,7 +21,7 @@
 import org.apache.oro.text.regex.MalformedPatternException;
 import org.apache.oro.text.regex.Pattern;
 import org.apache.oro.text.regex.Perl5Compiler;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 
 /**
@@ -31,7 +31,7 @@
 public class PatternFactory {
 
     public static final String module = PatternFactory.class.getName();
-    private static final OFBizCache<String, Pattern> compiledPerl5Patterns = UtilCache.createUtilCache("regularExpression.compiledPerl5Patterns", false);
+    private static final Cache<String, Pattern> compiledPerl5Patterns = UtilCache.createUtilCache("regularExpression.compiledPerl5Patterns", false);
 
     /**
      * Compiles and caches a Perl5 regexp pattern for the given string pattern.
diff --git a/framework/base/src/org/ofbiz/base/util/ScriptUtil.java b/framework/base/src/org/ofbiz/base/util/ScriptUtil.java
index 2a54bf9..c38312d 100644
--- a/framework/base/src/org/ofbiz/base/util/ScriptUtil.java
+++ b/framework/base/src/org/ofbiz/base/util/ScriptUtil.java
@@ -48,7 +48,7 @@
 
 import org.codehaus.groovy.runtime.InvokerHelper;
 import org.ofbiz.base.location.FlexibleLocation;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 
 /**
@@ -70,7 +70,7 @@
     public static final String RESULT_KEY = "result";
     /** The <code>ScriptHelper</code> key. */
     public static final String SCRIPT_HELPER_KEY = "ofbiz";
-    private static final OFBizCache<String, CompiledScript> parsedScripts = UtilCache.createUtilCache("script.ParsedScripts", 0, 0, false);
+    private static final Cache<String, CompiledScript> parsedScripts = UtilCache.createUtilCache("script.ParsedScripts", 0, 0, false);
     private static final Object[] EMPTY_ARGS = {};
     private static ScriptHelperFactory helperFactory = null;
     /** A set of script names - derived from the JSR-223 scripting engines. */
diff --git a/framework/base/src/org/ofbiz/base/util/UtilProperties.java b/framework/base/src/org/ofbiz/base/util/UtilProperties.java
index 156a07e..5dbe322 100644
--- a/framework/base/src/org/ofbiz/base/util/UtilProperties.java
+++ b/framework/base/src/org/ofbiz/base/util/UtilProperties.java
@@ -45,7 +45,8 @@
 import java.util.Set;
 
 import org.ofbiz.base.location.FlexibleLocation;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.UtilProperties.UtilResourceBundle;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.base.util.collections.ResourceBundleMapWrapper;
 import org.ofbiz.base.util.string.FlexibleStringExpander;
@@ -71,12 +72,12 @@
     /** An instance of the generic cache for storing the non-locale-specific properties.
      *  Each Properties instance is keyed by the resource String.
      */
-    private static final OFBizCache<String, Properties> resourceCache = UtilCache.createUtilCache("properties.UtilPropertiesResourceCache");
+    private static final Cache<String, Properties> resourceCache = UtilCache.createUtilCache("properties.UtilPropertiesResourceCache");
 
     /** An instance of the generic cache for storing the non-locale-specific properties.
      *  Each Properties instance is keyed by the file's URL.
      */
-    private static final OFBizCache<String, Properties> urlCache = UtilCache.createUtilCache("properties.UtilPropertiesUrlCache");
+    private static final Cache<String, Properties> urlCache = UtilCache.createUtilCache("properties.UtilPropertiesUrlCache");
 
     protected static Locale fallbackLocale = null;
     protected static Set<Locale> defaultCandidateLocales = null;
@@ -1013,7 +1014,7 @@
      * properties file format.
      */
     public static class UtilResourceBundle extends ResourceBundle {
-        private static final OFBizCache<String, UtilResourceBundle> bundleCache = UtilCache.createUtilCache("properties.UtilPropertiesBundleCache");
+        private static final Cache<String, UtilResourceBundle> bundleCache = UtilCache.createUtilCache("properties.UtilPropertiesBundleCache");
         protected Properties properties = null;
         protected Locale locale = null;
         protected int hashCode = hashCode();
diff --git a/framework/base/src/org/ofbiz/base/util/cache/Cache.java b/framework/base/src/org/ofbiz/base/util/cache/Cache.java
new file mode 100644
index 0000000..eb4de08
--- /dev/null
+++ b/framework/base/src/org/ofbiz/base/util/cache/Cache.java
@@ -0,0 +1,133 @@
+package org.ofbiz.base.util.cache;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+
+public interface Cache<K, V> {
+
+    /** Getter for the name of the Cache instance.
+     * @return The name of the instance
+     */
+    public String getName();
+
+    public void setMaxInMemory(int newInMemory);
+
+    public int getMaxInMemory();
+
+    public void setSizeLimit(int newSizeLimit);
+
+    public int getSizeLimit();
+
+    /** Sets the expire time for the cache elements.
+     * If 0, elements never expire.
+     * @param expireTimeMillis The expire time for the cache elements
+     */
+    public void setExpireTime(long expireTimeMillis);
+
+    /** return the current expire time for the cache elements
+     * @return The expire time for the cache elements
+     */
+    public long getExpireTime();
+
+    /** Set whether or not the cache lines should use a soft reference to the data */
+    public void setUseSoftReference(boolean useSoftReference);
+
+    /** Return whether or not the cache lines should use a soft reference to the data */
+    public boolean getUseSoftReference();
+
+    public boolean getUseFileSystemStore();
+
+    /** Returns the number of elements currently in the cache
+     * @return The number of elements currently in the cache
+     */
+    public long size();
+
+    /** Returns a boolean specifying whether or not an element with the specified key is in the cache.
+     * @param key The key for the element, used to reference it in the hashtables and LRU linked list
+     * @return True is the cache contains an element corresponding to the specified key, otherwise false
+     */
+    public boolean containsKey(Object key);
+
+    /**
+     * NOTE: this returns an unmodifiable copy of the keySet, so removing from here won't have an effect,
+     * and calling a remove while iterating through the set will not cause a concurrent modification exception.
+     * This behavior is necessary for now for the persisted cache feature.
+     */
+    public Set<? extends K> getCacheLineKeys();
+
+    public Collection<? extends Map<String, Object>> getLineInfos();
+
+    /** Adds an event listener for key removals */
+    public void addListener(CacheListener<K, V> listener);
+
+    /** Removes an event listener for key removals */
+    public void removeListener(CacheListener<K, V> listener);
+
+    /** Puts or loads the passed element into the cache
+     * @param key The key for the element, used to reference it in the hashtables and LRU linked list
+     * @param value The value of the element
+     */
+    public V put(K key, V value);
+
+    public V putIfAbsent(K key, V value);
+
+    public V putIfAbsentAndGet(K key, V value);
+
+    /** Gets an element from the cache according to the specified key.
+     * @param key The key for the element, used to reference it in the hashtables and LRU linked list
+     * @return The value of the element specified by the key
+     */
+    public V get(Object key);
+
+    /** Removes an element from the cache according to the specified key
+     * @param key The key for the element, used to reference it in the hashtables and LRU linked list
+     * @return The value of the removed element specified by the key
+     */
+    public V remove(Object key);
+
+    public Collection<V> values();
+
+    public void clear();
+
+    /** Removes all elements from this cache */
+    public void erase();
+
+    public boolean isEmpty();
+
+    /** Returns the number of successful hits on the cache
+     * @return The number of successful cache hits
+     */
+    public long getHitCount();
+
+    public long getSizeInBytes();
+
+    /** Returns the number of cache misses from entries that are not found in the cache
+     * @return The number of cache misses
+     */
+    public long getMissCountNotFound();
+
+    /** Returns the number of cache misses from entries that are expired
+     * @return The number of cache misses
+     */
+    public long getMissCountExpired();
+
+    /** Returns the number of cache misses from entries that are have had the soft reference cleared out (by garbage collector and such)
+     * @return The number of cache misses
+     */
+    public long getMissCountSoftRef();
+
+    /** Returns the number of cache misses caused by any reason
+     * @return The number of cache misses
+     */
+    public long getMissCountTotal();
+
+    public long getRemoveHitCount();
+
+    public long getRemoveMissCount();
+
+    /** Clears the hit and miss counters
+     */
+    public void clearCounters();
+
+}
\ No newline at end of file
diff --git a/framework/base/src/org/ofbiz/base/util/cache/CacheListener.java b/framework/base/src/org/ofbiz/base/util/cache/CacheListener.java
index ab591a0..73c7b59 100644
--- a/framework/base/src/org/ofbiz/base/util/cache/CacheListener.java
+++ b/framework/base/src/org/ofbiz/base/util/cache/CacheListener.java
@@ -20,9 +20,9 @@
 
 public interface CacheListener<K, V> {
 
-    public void noteKeyRemoval(OFBizCache<K, V> cache, K key, V oldValue);
+    public void noteKeyRemoval(Cache<K, V> cache, K key, V oldValue);
 
-    public void noteKeyAddition(OFBizCache<K, V> cache, K key, V newValue);
+    public void noteKeyAddition(Cache<K, V> cache, K key, V newValue);
 
-    public void noteKeyUpdate(OFBizCache<K, V> cache, K key, V newValue, V oldValue);
+    public void noteKeyUpdate(Cache<K, V> cache, K key, V newValue, V oldValue);
 }
diff --git a/framework/base/src/org/ofbiz/base/util/cache/CacheManager.java b/framework/base/src/org/ofbiz/base/util/cache/CacheManager.java
new file mode 100644
index 0000000..0232696
--- /dev/null
+++ b/framework/base/src/org/ofbiz/base/util/cache/CacheManager.java
@@ -0,0 +1,44 @@
+package org.ofbiz.base.util.cache;
+
+import java.util.Set;
+
+public interface CacheManager {
+
+    /** Removes all elements from this cache */
+    public void clearAllCaches();
+
+    public Set<String> getUtilCacheTableKeySet();
+
+    /** Getter for the name of the UtilCache instance.
+     * @return The name of the instance
+     */
+    public String getName();
+
+    /** Checks for a non-expired key in a specific cache */
+    public boolean validKey(String cacheName, Object key);
+
+    public void clearCachesThatStartWith(String startsWith);
+
+    public void clearCache(String cacheName);
+
+    public <K, V> Cache<K, V> getOrCreateCache(String name, int sizeLimit, int maxInMemory, long expireTime, boolean useSoftReference, boolean useFileSystemStore, String... names);
+
+    public <K, V> Cache<K, V> createCache(String name, int sizeLimit, int maxInMemory, long expireTime, boolean useSoftReference, boolean useFileSystemStore, String... names);
+
+    public <K, V> Cache<K, V> createCache(String name, int sizeLimit, int maxInMemory, long expireTime, boolean useSoftReference, boolean useFileSystemStore);
+
+    public <K, V> Cache<K, V> createCache(String name, int sizeLimit, long expireTime, boolean useSoftReference);
+
+    public <K, V> Cache<K, V> createCache(String name, int sizeLimit, long expireTime);
+
+    public <K, V> Cache<K, V> createCache(int sizeLimit, long expireTime);
+
+    public <K, V> Cache<K, V> createCache(String name, boolean useSoftReference);
+
+    public <K, V> Cache<K, V> createCache(String name);
+
+    public <K, V> Cache<K, V> createCache();
+
+    public <K, V> Cache<K, V> findCache(String cacheName);
+
+}
\ No newline at end of file
diff --git a/framework/base/src/org/ofbiz/base/util/cache/CacheManagerFactory.java b/framework/base/src/org/ofbiz/base/util/cache/CacheManagerFactory.java
new file mode 100644
index 0000000..bb3ecc2
--- /dev/null
+++ b/framework/base/src/org/ofbiz/base/util/cache/CacheManagerFactory.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.ofbiz.base.util.cache;
+
+import org.ofbiz.base.lang.Factory;
+import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.UtilObject;
+
+public abstract class CacheManagerFactory implements Factory<CacheManager, String> {
+
+    public static final String module = CacheManagerFactory.class.getName();
+
+    public static CacheManager getCacheManager(String cacheManagerName) {
+        CacheManager cacheManager = null;
+        try {
+            cacheManager = UtilObject.getObjectFromFactory(CacheManagerFactory.class, cacheManagerName);
+        } catch (ClassNotFoundException e) {
+            Debug.logError(e, module);
+        }
+        return cacheManager;
+    }
+}
diff --git a/framework/base/src/org/ofbiz/base/util/cache/UtilCache.java b/framework/base/src/org/ofbiz/base/util/cache/UtilCache.java
index 27c7087..3a1a667 100644
--- a/framework/base/src/org/ofbiz/base/util/cache/UtilCache.java
+++ b/framework/base/src/org/ofbiz/base/util/cache/UtilCache.java
@@ -20,6 +20,8 @@
 
 import java.util.Set;
 
+import org.ofbiz.base.util.cache.impl.OFBizCacheManager;
+
 /**
  * Generalized caching utility. Provides a number of caching features:
  * <ul>
@@ -36,7 +38,7 @@
 
     public static final String module = UtilCache.class.getName();
 
-    private static final OFBizCacheManager cacheManager = new OFBizCacheManager("cache");
+    private static final CacheManager cacheManager = CacheManagerFactory.getCacheManager("cache");
 
     public static Set<String> getUtilCacheTableKeySet() {
         return cacheManager.getUtilCacheTableKeySet();
@@ -44,7 +46,7 @@
 
     /** Checks for a non-expired key in a specific cache */
     public static boolean validKey(String cacheName, Object key) {
-        OFBizCache<?, ?> cache = findCache(cacheName);
+        Cache<?, ?> cache = findCache(cacheName);
         if (cache != null) {
             if (cache.containsKey(key))
                 return true;
@@ -65,43 +67,43 @@
         cacheManager.clearCachesThatStartWith(startsWith);
     }
 
-    public static <K, V> OFBizCache<K, V> getOrCreateUtilCache(String name, int sizeLimit, int maxInMemory, long expireTime, boolean useSoftReference, boolean useFileSystemStore, String... names) {
-        return cacheManager.getOrCreateUtilCache(name, sizeLimit, maxInMemory, expireTime, useSoftReference, useFileSystemStore, names);
+    public static <K, V> Cache<K, V> getOrCreateUtilCache(String name, int sizeLimit, int maxInMemory, long expireTime, boolean useSoftReference, boolean useFileSystemStore, String... names) {
+        return cacheManager.getOrCreateCache(name, sizeLimit, maxInMemory, expireTime, useSoftReference, useFileSystemStore, names);
     }
 
-    public static <K, V> OFBizCache<K, V> createUtilCache(String name, int sizeLimit, int maxInMemory, long expireTime, boolean useSoftReference, boolean useFileSystemStore, String... names) {
-        return cacheManager.createUtilCache(name, sizeLimit, maxInMemory, expireTime, useSoftReference, useFileSystemStore, names);
+    public static <K, V> Cache<K, V> createUtilCache(String name, int sizeLimit, int maxInMemory, long expireTime, boolean useSoftReference, boolean useFileSystemStore, String... names) {
+        return cacheManager.createCache(name, sizeLimit, maxInMemory, expireTime, useSoftReference, useFileSystemStore, names);
     }
 
-    public static <K, V> OFBizCache<K, V> createUtilCache(String name, int sizeLimit, int maxInMemory, long expireTime, boolean useSoftReference, boolean useFileSystemStore) {
-        return cacheManager.createUtilCache(name, sizeLimit, maxInMemory, expireTime, useSoftReference, useFileSystemStore);
+    public static <K, V> Cache<K, V> createUtilCache(String name, int sizeLimit, int maxInMemory, long expireTime, boolean useSoftReference, boolean useFileSystemStore) {
+        return cacheManager.createCache(name, sizeLimit, maxInMemory, expireTime, useSoftReference, useFileSystemStore);
     }
 
-    public static <K,V> OFBizCache<K, V> createUtilCache(String name, int sizeLimit, long expireTime, boolean useSoftReference) {
-        return cacheManager.createUtilCache(name, sizeLimit, expireTime, useSoftReference);
+    public static <K,V> Cache<K, V> createUtilCache(String name, int sizeLimit, long expireTime, boolean useSoftReference) {
+        return cacheManager.createCache(name, sizeLimit, expireTime, useSoftReference);
     }
 
-    public static <K,V> OFBizCache<K, V> createUtilCache(String name, int sizeLimit, long expireTime) {
-        return cacheManager.createUtilCache(name, sizeLimit, expireTime);
+    public static <K,V> Cache<K, V> createUtilCache(String name, int sizeLimit, long expireTime) {
+        return cacheManager.createCache(name, sizeLimit, expireTime);
     }
 
-    public static <K,V> OFBizCache<K, V> createUtilCache(int sizeLimit, long expireTime) {
-        return cacheManager.createUtilCache(sizeLimit, expireTime);
+    public static <K,V> Cache<K, V> createUtilCache(int sizeLimit, long expireTime) {
+        return cacheManager.createCache(sizeLimit, expireTime);
     }
 
-    public static <K,V> OFBizCache<K, V> createUtilCache(String name, boolean useSoftReference) {
-        return cacheManager.createUtilCache(name, useSoftReference);
+    public static <K,V> Cache<K, V> createUtilCache(String name, boolean useSoftReference) {
+        return cacheManager.createCache(name, useSoftReference);
     }
 
-    public static <K,V> OFBizCache<K, V> createUtilCache(String name) {
-        return cacheManager.createUtilCache(name);
+    public static <K,V> Cache<K, V> createUtilCache(String name) {
+        return cacheManager.createCache(name);
     }
 
-    public static <K,V> OFBizCache<K, V> createUtilCache() {
-        return cacheManager.createUtilCache();
+    public static <K,V> Cache<K, V> createUtilCache() {
+        return cacheManager.createCache();
     }
 
-    public static <K, V> OFBizCache<K, V> findCache(String cacheName) {
+    public static <K, V> Cache<K, V> findCache(String cacheName) {
         return cacheManager.findCache(cacheName);
     }
 
diff --git a/framework/base/src/org/ofbiz/base/util/cache/CacheLine.java b/framework/base/src/org/ofbiz/base/util/cache/impl/CacheLine.java
similarity index 97%
rename from framework/base/src/org/ofbiz/base/util/cache/CacheLine.java
rename to framework/base/src/org/ofbiz/base/util/cache/impl/CacheLine.java
index d78bfb5..a7c1827 100644
--- a/framework/base/src/org/ofbiz/base/util/cache/CacheLine.java
+++ b/framework/base/src/org/ofbiz/base/util/cache/impl/CacheLine.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  *******************************************************************************/
-package org.ofbiz.base.util.cache;
+package org.ofbiz.base.util.cache.impl;
 
 import org.ofbiz.base.concurrent.ExecutionPool;
 
diff --git a/framework/base/src/org/ofbiz/base/util/cache/CacheSoftReference.java b/framework/base/src/org/ofbiz/base/util/cache/impl/CacheSoftReference.java
similarity index 97%
rename from framework/base/src/org/ofbiz/base/util/cache/CacheSoftReference.java
rename to framework/base/src/org/ofbiz/base/util/cache/impl/CacheSoftReference.java
index d574e96..fe4cbb3 100644
--- a/framework/base/src/org/ofbiz/base/util/cache/CacheSoftReference.java
+++ b/framework/base/src/org/ofbiz/base/util/cache/impl/CacheSoftReference.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  *******************************************************************************/
-package org.ofbiz.base.util.cache;
+package org.ofbiz.base.util.cache.impl;
 
 import java.io.Serializable;
 
diff --git a/framework/base/src/org/ofbiz/base/util/cache/HardRefCacheLine.java b/framework/base/src/org/ofbiz/base/util/cache/impl/HardRefCacheLine.java
similarity index 96%
rename from framework/base/src/org/ofbiz/base/util/cache/HardRefCacheLine.java
rename to framework/base/src/org/ofbiz/base/util/cache/impl/HardRefCacheLine.java
index 209b07a..890cc2b 100644
--- a/framework/base/src/org/ofbiz/base/util/cache/HardRefCacheLine.java
+++ b/framework/base/src/org/ofbiz/base/util/cache/impl/HardRefCacheLine.java
@@ -16,7 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  *******************************************************************************/
-package org.ofbiz.base.util.cache;
+package org.ofbiz.base.util.cache.impl;
+
 
 public abstract class HardRefCacheLine<V> extends CacheLine<V> {
     public final V value;
diff --git a/framework/base/src/org/ofbiz/base/util/cache/JdbmRecordManager.java b/framework/base/src/org/ofbiz/base/util/cache/impl/JdbmRecordManager.java
similarity index 98%
rename from framework/base/src/org/ofbiz/base/util/cache/JdbmRecordManager.java
rename to framework/base/src/org/ofbiz/base/util/cache/impl/JdbmRecordManager.java
index 60a4859..fab2e8a 100644
--- a/framework/base/src/org/ofbiz/base/util/cache/JdbmRecordManager.java
+++ b/framework/base/src/org/ofbiz/base/util/cache/impl/JdbmRecordManager.java
@@ -16,10 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  *******************************************************************************/
-package org.ofbiz.base.util.cache;
+package org.ofbiz.base.util.cache.impl;
 
 import java.io.IOException;
 
+
 import jdbm.RecordManager;
 import jdbm.helper.ISerializationHandler;
 import jdbm.helper.Serializer;
diff --git a/framework/base/src/org/ofbiz/base/util/cache/JdbmSerializer.java b/framework/base/src/org/ofbiz/base/util/cache/impl/JdbmSerializer.java
similarity index 97%
rename from framework/base/src/org/ofbiz/base/util/cache/JdbmSerializer.java
rename to framework/base/src/org/ofbiz/base/util/cache/impl/JdbmSerializer.java
index 842ed10..e5b435c 100644
--- a/framework/base/src/org/ofbiz/base/util/cache/JdbmSerializer.java
+++ b/framework/base/src/org/ofbiz/base/util/cache/impl/JdbmSerializer.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  *******************************************************************************/
-package org.ofbiz.base.util.cache;
+package org.ofbiz.base.util.cache.impl;
 
 import java.io.IOException;
 
diff --git a/framework/base/src/org/ofbiz/base/util/cache/OFBizCache.java b/framework/base/src/org/ofbiz/base/util/cache/impl/OFBizCache.java
similarity index 89%
rename from framework/base/src/org/ofbiz/base/util/cache/OFBizCache.java
rename to framework/base/src/org/ofbiz/base/util/cache/impl/OFBizCache.java
index d8edc01..42a2071 100644
--- a/framework/base/src/org/ofbiz/base/util/cache/OFBizCache.java
+++ b/framework/base/src/org/ofbiz/base/util/cache/impl/OFBizCache.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  *******************************************************************************/
-package org.ofbiz.base.util.cache;
+package org.ofbiz.base.util.cache.impl;
 
 import java.io.IOException;
 import java.io.NotSerializableException;
@@ -47,6 +47,7 @@
 import org.ofbiz.base.util.UtilGenerics;
 import org.ofbiz.base.util.UtilObject;
 import org.ofbiz.base.util.UtilValidate;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.CacheListener;
 
 import com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap;
@@ -65,7 +66,7 @@
  *
  */
 @SuppressWarnings("serial")
-public class OFBizCache<K, V> implements Serializable, EvictionListener<Object, CacheLine<V>> {
+public class OFBizCache<K, V> implements Serializable, EvictionListener<Object, CacheLine<V>>, Cache<K, V> {
 
     public static final String module = OFBizCache.class.getName();
 
@@ -229,10 +230,10 @@
         }
     }
 
-    public Object getCacheLineTable() {
-        throw new UnsupportedOperationException();
-    }
-
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#isEmpty()
+     */
+    @Override
     public boolean isEmpty() {
         if (fileTable != null) {
             try {
@@ -248,18 +249,26 @@
         }
     }
 
-    /** Puts or loads the passed element into the cache
-     * @param key The key for the element, used to reference it in the hashtables and LRU linked list
-     * @param value The value of the element
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#put(K, V)
      */
+    @Override
     public V put(K key, V value) {
         return putInternal(key, value, expireTimeNanos);
     }
 
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#putIfAbsent(K, V)
+     */
+    @Override
     public V putIfAbsent(K key, V value) {
         return putIfAbsentInternal(key, value, expireTimeNanos);
     }
 
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#putIfAbsentAndGet(K, V)
+     */
+    @Override
     public V putIfAbsentAndGet(K key, V value) {
         V cachedValue = putIfAbsent(key, value);
         return (cachedValue != null? cachedValue: value);
@@ -405,10 +414,10 @@
         }
     }
 
-    /** Gets an element from the cache according to the specified key.
-     * @param key The key for the element, used to reference it in the hashtables and LRU linked list
-     * @return The value of the element specified by the key
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#get(java.lang.Object)
      */
+    @Override
     public V get(Object key) {
         boolean countGet = true;
         Object nulledKey = fromKey(key);
@@ -441,6 +450,10 @@
         return line != null ? line.getValue() : null;
     }
 
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#values()
+     */
+    @Override
     public Collection<V> values() {
         if (fileTable != null) {
             List<V> values = new LinkedList<V>();
@@ -491,6 +504,10 @@
         }
     }
 
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#getSizeInBytes()
+     */
+    @Override
     public long getSizeInBytes() {
         long totalSize = 0;
         if (fileTable != null) {
@@ -515,10 +532,10 @@
         return totalSize;
     }
 
-    /** Removes an element from the cache according to the specified key
-     * @param key The key for the element, used to reference it in the hashtables and LRU linked list
-     * @return The value of the removed element specified by the key
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#remove(java.lang.Object)
      */
+    @Override
     public V remove(Object key) {
         return this.removeInternal(key, true);
     }
@@ -585,7 +602,10 @@
         noteRemoval(UtilGenerics.<K>cast(key), existingCacheLine.getValue());
     }
 
-    /** Removes all elements from this cache */
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#erase()
+     */
+    @Override
     public synchronized void erase() {
         if (fileTable != null) {
             // FIXME: erase from memory too
@@ -620,63 +640,83 @@
         }
     }
 
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#clear()
+     */
+    @Override
     public void clear() {
         erase();
         clearCounters();
     }
 
-    /** Getter for the name of the UtilCache instance.
-     * @return The name of the instance
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#getName()
      */
+    @Override
     public String getName() {
         return this.name;
     }
 
-    /** Returns the number of successful hits on the cache
-     * @return The number of successful cache hits
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#getHitCount()
      */
+    @Override
     public long getHitCount() {
         return this.hitCount.get();
     }
 
-    /** Returns the number of cache misses from entries that are not found in the cache
-     * @return The number of cache misses
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#getMissCountNotFound()
      */
+    @Override
     public long getMissCountNotFound() {
         return this.missCountNotFound.get();
     }
 
-    /** Returns the number of cache misses from entries that are expired
-     * @return The number of cache misses
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#getMissCountExpired()
      */
+    @Override
     public long getMissCountExpired() {
         return this.missCountExpired.get();
     }
 
-    /** Returns the number of cache misses from entries that are have had the soft reference cleared out (by garbage collector and such)
-     * @return The number of cache misses
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#getMissCountSoftRef()
      */
+    @Override
     public long getMissCountSoftRef() {
         return this.missCountSoftRef.get();
     }
 
-    /** Returns the number of cache misses caused by any reason
-     * @return The number of cache misses
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#getMissCountTotal()
      */
+    @Override
     public long getMissCountTotal() {
         return getMissCountSoftRef() + getMissCountNotFound() + getMissCountExpired();
     }
 
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#getRemoveHitCount()
+     */
+    @Override
     public long getRemoveHitCount() {
         return this.removeHitCount.get();
     }
 
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#getRemoveMissCount()
+     */
+    @Override
     public long getRemoveMissCount() {
         return this.removeMissCount.get();
     }
 
-    /** Clears the hit and miss counters
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#clearCounters()
      */
+    @Override
     public void clearCounters() {
         this.hitCount.set(0);
         this.missCountNotFound.set(0);
@@ -686,6 +726,10 @@
         this.removeMissCount.set(0);
     }
 
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#setMaxInMemory(int)
+     */
+    @Override
     public void setMaxInMemory(int newInMemory) {
         this.maxInMemory = newInMemory;
         Map<Object, CacheLine<V>> oldmap = this.memoryTable;
@@ -706,22 +750,34 @@
         this.memoryTable.putAll(oldmap);
     }
 
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#getMaxInMemory()
+     */
+    @Override
     public int getMaxInMemory() {
         return maxInMemory;
     }
 
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#setSizeLimit(int)
+     */
+    @Override
     public void setSizeLimit(int newSizeLimit) {
         this.sizeLimit = newSizeLimit;
     }
 
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#getSizeLimit()
+     */
+    @Override
     public int getSizeLimit() {
         return sizeLimit;
     }
 
-    /** Sets the expire time for the cache elements.
-     * If 0, elements never expire.
-     * @param expireTimeMillis The expire time for the cache elements
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#setExpireTime(long)
      */
+    @Override
     public void setExpireTime(long expireTimeMillis) {
         // if expire time was <= 0 and is now greater, fill expire table now
         if (expireTimeMillis > 0) {
@@ -735,14 +791,18 @@
         }
     }
 
-    /** return the current expire time for the cache elements
-     * @return The expire time for the cache elements
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#getExpireTime()
      */
+    @Override
     public long getExpireTime() {
         return TimeUnit.MILLISECONDS.convert(expireTimeNanos, TimeUnit.NANOSECONDS);
     }
 
-    /** Set whether or not the cache lines should use a soft reference to the data */
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#setUseSoftReference(boolean)
+     */
+    @Override
     public void setUseSoftReference(boolean useSoftReference) {
         if (this.useSoftReference != useSoftReference) {
             this.useSoftReference = useSoftReference;
@@ -752,18 +812,26 @@
         }
     }
 
-    /** Return whether or not the cache lines should use a soft reference to the data */
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#getUseSoftReference()
+     */
+    @Override
     public boolean getUseSoftReference() {
         return this.useSoftReference;
     }
 
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#getUseFileSystemStore()
+     */
+    @Override
     public boolean getUseFileSystemStore() {
         return this.useFileSystemStore;
     }
 
-    /** Returns the number of elements currently in the cache
-     * @return The number of elements currently in the cache
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#size()
      */
+    @Override
     public long size() {
         if (fileTable != null) {
             int size = 0;
@@ -783,10 +851,10 @@
         }
     }
 
-    /** Returns a boolean specifying whether or not an element with the specified key is in the cache.
-     * @param key The key for the element, used to reference it in the hashtables and LRU linked list
-     * @return True is the cache contains an element corresponding to the specified key, otherwise false
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#containsKey(java.lang.Object)
      */
+    @Override
     public boolean containsKey(Object key) {
         Object nulledKey = fromKey(key);
         CacheLine<V> line = memoryTable.get(nulledKey);
@@ -812,11 +880,10 @@
         }
     }
 
-    /**
-     * NOTE: this returns an unmodifiable copy of the keySet, so removing from here won't have an effect,
-     * and calling a remove while iterating through the set will not cause a concurrent modification exception.
-     * This behavior is necessary for now for the persisted cache feature.
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#getCacheLineKeys()
      */
+    @Override
     public Set<? extends K> getCacheLineKeys() {
         // note that this must be a HashSet and not a FastSet in order to have a null value
         Set<Object> keys;
@@ -869,6 +936,10 @@
         return lineInfo;
     }
 
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#getLineInfos()
+     */
+    @Override
     public Collection<? extends Map<String, Object>> getLineInfos() {
         List<Map<String, Object>> lineInfos = new LinkedList<Map<String, Object>>();
         int keyIndex = 0;
@@ -914,16 +985,25 @@
         }
     }
 
-    /** Adds an event listener for key removals */
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#addListener(org.ofbiz.base.util.cache.CacheListener)
+     */
+    @Override
     public void addListener(CacheListener<K, V> listener) {
         listeners.add(listener);
     }
 
-    /** Removes an event listener for key removals */
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#removeListener(org.ofbiz.base.util.cache.CacheListener)
+     */
+    @Override
     public void removeListener(CacheListener<K, V> listener) {
         listeners.remove(listener);
     }
 
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.Cache#onEviction(java.lang.Object, org.ofbiz.base.util.cache.CacheLine)
+     */
     @Override
     public void onEviction(Object key, CacheLine<V> value) {
         ExecutionPool.removePulse(value);
diff --git a/framework/base/src/org/ofbiz/base/util/cache/OFBizCacheManager.java b/framework/base/src/org/ofbiz/base/util/cache/impl/OFBizCacheManager.java
similarity index 70%
rename from framework/base/src/org/ofbiz/base/util/cache/OFBizCacheManager.java
rename to framework/base/src/org/ofbiz/base/util/cache/impl/OFBizCacheManager.java
index ea04b6d..03e4fec 100644
--- a/framework/base/src/org/ofbiz/base/util/cache/OFBizCacheManager.java
+++ b/framework/base/src/org/ofbiz/base/util/cache/impl/OFBizCacheManager.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  *******************************************************************************/
-package org.ofbiz.base.util.cache;
+package org.ofbiz.base.util.cache.impl;
 
 import java.io.IOException;
 import java.util.HashSet;
@@ -27,6 +27,7 @@
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.cache.CacheManager;
 
 /**
  * Generalized caching utility. Provides a number of caching features:
@@ -40,7 +41,7 @@
  *
  */
 @SuppressWarnings("serial")
-public class OFBizCacheManager {
+public class OFBizCacheManager implements CacheManager {
 
     public static final String module = OFBizCacheManager.class.getName();
 
@@ -99,7 +100,10 @@
     }
 
 
-    /** Removes all elements from this cache */
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.CacheManager#clearAllCaches()
+     */
+    @Override
     public void clearAllCaches() {
         // We make a copy since clear may take time
         for (OFBizCache<?,?> cache : ofbizCacheTable.values()) {
@@ -107,20 +111,28 @@
         }
     }
 
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.CacheManager#getUtilCacheTableKeySet()
+     */
+    @Override
     public Set<String> getUtilCacheTableKeySet() {
         Set<String> set = new HashSet<String>(ofbizCacheTable.size());
         set.addAll(ofbizCacheTable.keySet());
         return set;
     }
 
-    /** Getter for the name of the UtilCache instance.
-     * @return The name of the instance
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.CacheManager#getName()
      */
+    @Override
     public String getName() {
         return this.name;
     }
 
-    /** Checks for a non-expired key in a specific cache */
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.CacheManager#validKey(java.lang.String, java.lang.Object)
+     */
+    @Override
     public boolean validKey(String cacheName, Object key) {
         OFBizCache<?, ?> cache = findCache(cacheName);
         if (cache != null) {
@@ -130,6 +142,10 @@
         return false;
     }
 
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.CacheManager#clearCachesThatStartWith(java.lang.String)
+     */
+    @Override
     public void clearCachesThatStartWith(String startsWith) {
         for (Map.Entry<String, OFBizCache<?, ?>> entry: ofbizCacheTable.entrySet()) {
             String name = entry.getKey();
@@ -140,14 +156,22 @@
         }
     }
 
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.CacheManager#clearCache(java.lang.String)
+     */
+    @Override
     public void clearCache(String cacheName) {
         OFBizCache<?, ?> cache = findCache(cacheName);
         if (cache == null) return;
         cache.clear();
     }
 
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.CacheManager#getOrCreateUtilCache(java.lang.String, int, int, long, boolean, boolean, java.lang.String)
+     */
+    @Override
     @SuppressWarnings("unchecked")
-    public <K, V> OFBizCache<K, V> getOrCreateUtilCache(String name, int sizeLimit, int maxInMemory, long expireTime, boolean useSoftReference, boolean useFileSystemStore, String... names) {
+    public <K, V> OFBizCache<K, V> getOrCreateCache(String name, int sizeLimit, int maxInMemory, long expireTime, boolean useSoftReference, boolean useFileSystemStore, String... names) {
         OFBizCache<K, V> existingCache = (OFBizCache<K, V>) ofbizCacheTable.get(name);
         if (existingCache != null) return existingCache;
         String cacheName = name + getNextDefaultIndex(name);
@@ -156,42 +180,74 @@
         return (OFBizCache<K, V>) ofbizCacheTable.get(name);
     }
 
-    public <K, V> OFBizCache<K, V> createUtilCache(String name, int sizeLimit, int maxInMemory, long expireTime, boolean useSoftReference, boolean useFileSystemStore, String... names) {
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.CacheManager#createUtilCache(java.lang.String, int, int, long, boolean, boolean, java.lang.String)
+     */
+    @Override
+    public <K, V> OFBizCache<K, V> createCache(String name, int sizeLimit, int maxInMemory, long expireTime, boolean useSoftReference, boolean useFileSystemStore, String... names) {
         String cacheName = name + getNextDefaultIndex(name);
         return storeCache(new OFBizCache<K, V>(this, cacheName, sizeLimit, maxInMemory, expireTime, useSoftReference, useFileSystemStore, name, names));
     }
 
-    public <K, V> OFBizCache<K, V> createUtilCache(String name, int sizeLimit, int maxInMemory, long expireTime, boolean useSoftReference, boolean useFileSystemStore) {
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.CacheManager#createUtilCache(java.lang.String, int, int, long, boolean, boolean)
+     */
+    @Override
+    public <K, V> OFBizCache<K, V> createCache(String name, int sizeLimit, int maxInMemory, long expireTime, boolean useSoftReference, boolean useFileSystemStore) {
         String cacheName = name + getNextDefaultIndex(name);
         return storeCache(new OFBizCache<K, V>(this, cacheName, sizeLimit, maxInMemory, expireTime, useSoftReference, useFileSystemStore, name));
     }
 
-    public <K,V> OFBizCache<K, V> createUtilCache(String name, int sizeLimit, long expireTime, boolean useSoftReference) {
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.CacheManager#createUtilCache(java.lang.String, int, long, boolean)
+     */
+    @Override
+    public <K,V> OFBizCache<K, V> createCache(String name, int sizeLimit, long expireTime, boolean useSoftReference) {
         String cacheName = name + getNextDefaultIndex(name);
         return storeCache(new OFBizCache<K, V>(this, cacheName, sizeLimit, sizeLimit, expireTime, useSoftReference, false, name));
     }
 
-    public <K,V> OFBizCache<K, V> createUtilCache(String name, int sizeLimit, long expireTime) {
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.CacheManager#createUtilCache(java.lang.String, int, long)
+     */
+    @Override
+    public <K,V> OFBizCache<K, V> createCache(String name, int sizeLimit, long expireTime) {
         String cacheName = name + getNextDefaultIndex(name);
         return storeCache(new OFBizCache<K, V>(this, cacheName, sizeLimit, sizeLimit, expireTime, false, false, name));
     }
 
-    public <K,V> OFBizCache<K, V> createUtilCache(int sizeLimit, long expireTime) {
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.CacheManager#createUtilCache(int, long)
+     */
+    @Override
+    public <K,V> OFBizCache<K, V> createCache(int sizeLimit, long expireTime) {
         String cacheName = "specified" + getNextDefaultIndex("specified");
         return storeCache(new OFBizCache<K, V>(this, cacheName, sizeLimit, sizeLimit, expireTime, false, false, "specified"));
     }
 
-    public <K,V> OFBizCache<K, V> createUtilCache(String name, boolean useSoftReference) {
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.CacheManager#createUtilCache(java.lang.String, boolean)
+     */
+    @Override
+    public <K,V> OFBizCache<K, V> createCache(String name, boolean useSoftReference) {
         String cacheName = name + getNextDefaultIndex(name);
         return storeCache(new OFBizCache<K, V>(this, cacheName, 0, 0, 0, useSoftReference, false, "default", name));
     }
 
-    public <K,V> OFBizCache<K, V> createUtilCache(String name) {
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.CacheManager#createUtilCache(java.lang.String)
+     */
+    @Override
+    public <K,V> OFBizCache<K, V> createCache(String name) {
         String cacheName = name + getNextDefaultIndex(name);
         return storeCache(new OFBizCache<K, V>(this, cacheName, 0, 0, 0, false, false, "default", name));
     }
 
-    public <K,V> OFBizCache<K, V> createUtilCache() {
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.CacheManager#createUtilCache()
+     */
+    @Override
+    public <K,V> OFBizCache<K, V> createCache() {
         String cacheName = "default" + getNextDefaultIndex("default");
         return storeCache(new OFBizCache<K, V>(this, cacheName, 0, 0, 0, false, false, "default"));
     }
@@ -201,6 +257,10 @@
         return cache;
     }
 
+    /* (non-Javadoc)
+     * @see org.ofbiz.base.util.cache.CacheManager#findCache(java.lang.String)
+     */
+    @Override
     @SuppressWarnings("unchecked")
     public <K, V> OFBizCache<K, V> findCache(String cacheName) {
         return (OFBizCache<K, V>) ofbizCacheTable.get(cacheName);
diff --git a/framework/base/src/org/ofbiz/base/util/cache/impl/OFBizCacheManagerFactory.java b/framework/base/src/org/ofbiz/base/util/cache/impl/OFBizCacheManagerFactory.java
new file mode 100644
index 0000000..cbc593e
--- /dev/null
+++ b/framework/base/src/org/ofbiz/base/util/cache/impl/OFBizCacheManagerFactory.java
@@ -0,0 +1,22 @@
+package org.ofbiz.base.util.cache.impl;
+
+import java.util.concurrent.atomic.AtomicReference;
+
+import org.ofbiz.base.util.cache.CacheManager;
+import org.ofbiz.base.util.cache.CacheManagerFactory;
+
+public class OFBizCacheManagerFactory extends CacheManagerFactory {
+
+    private static AtomicReference<CacheManager> singleton = new AtomicReference<CacheManager>();
+
+    @Override
+    public CacheManager getInstance(String cacheManagerName) {
+        CacheManager cacheManager = singleton.get();
+        if (cacheManager == null) {
+            cacheManager = new OFBizCacheManager(cacheManagerName);
+            singleton.compareAndSet(null, cacheManager);
+        }
+        return singleton.get();
+    }
+
+}
diff --git a/framework/base/src/org/ofbiz/base/util/cache/SoftRefCacheLine.java b/framework/base/src/org/ofbiz/base/util/cache/impl/SoftRefCacheLine.java
similarity index 97%
rename from framework/base/src/org/ofbiz/base/util/cache/SoftRefCacheLine.java
rename to framework/base/src/org/ofbiz/base/util/cache/impl/SoftRefCacheLine.java
index ec651fd..82c159f 100644
--- a/framework/base/src/org/ofbiz/base/util/cache/SoftRefCacheLine.java
+++ b/framework/base/src/org/ofbiz/base/util/cache/impl/SoftRefCacheLine.java
@@ -16,7 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  *******************************************************************************/
-package org.ofbiz.base.util.cache;
+package org.ofbiz.base.util.cache.impl;
+
 
 @SuppressWarnings("serial")
 public abstract class SoftRefCacheLine<V> extends CacheLine<V> {
diff --git a/framework/base/src/org/ofbiz/base/util/cache/test/UtilCacheTests.java b/framework/base/src/org/ofbiz/base/util/cache/test/UtilCacheTests.java
index ce50f13..cfc3ccd 100644
--- a/framework/base/src/org/ofbiz/base/util/cache/test/UtilCacheTests.java
+++ b/framework/base/src/org/ofbiz/base/util/cache/test/UtilCacheTests.java
@@ -31,9 +31,10 @@
 import org.ofbiz.base.test.GenericTestCaseBase;
 import org.ofbiz.base.util.UtilMisc;
 import org.ofbiz.base.util.UtilObject;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.CacheListener;
-import org.ofbiz.base.util.cache.OFBizCache;
 import org.ofbiz.base.util.cache.UtilCache;
+import org.ofbiz.base.util.cache.impl.OFBizCache;
 
 @SuppressWarnings("serial")
 public class UtilCacheTests extends GenericTestCaseBase implements Serializable {
@@ -132,15 +133,15 @@
             changeSet.add(change);
         }
 
-        public synchronized void noteKeyRemoval(OFBizCache<K, V> cache, K key, V oldValue) {
+        public synchronized void noteKeyRemoval(Cache<K, V> cache, K key, V oldValue) {
             add(key, new Removal<V>(oldValue));
         }
 
-        public synchronized void noteKeyAddition(OFBizCache<K, V> cache, K key, V newValue) {
+        public synchronized void noteKeyAddition(Cache<K, V> cache, K key, V newValue) {
             add(key, new Addition<V>(newValue));
         }
 
-        public synchronized void noteKeyUpdate(OFBizCache<K, V> cache, K key, V newValue, V oldValue) {
+        public synchronized void noteKeyUpdate(Cache<K, V> cache, K key, V newValue, V oldValue) {
             add(key, new Update<V>(newValue, oldValue));
         }
 
@@ -151,7 +152,7 @@
         }
     }
 
-    private static <K, V> Listener<K, V> createListener(OFBizCache<K, V> cache) {
+    private static <K, V> Listener<K, V> createListener(Cache<K, V> cache) {
         Listener<K, V> listener = new Listener<K, V>();
         cache.addListener(listener);
         return listener;
@@ -161,11 +162,11 @@
         super(name);
     }
 
-    private <K, V> OFBizCache<K, V> createUtilCache(int sizeLimit, int maxInMemory, long ttl, boolean useSoftReference, boolean useFileSystemStore) {
+    private <K, V> Cache<K, V> createUtilCache(int sizeLimit, int maxInMemory, long ttl, boolean useSoftReference, boolean useFileSystemStore) {
         return UtilCache.createUtilCache(getClass().getName() + "." + getName(), sizeLimit, maxInMemory, ttl, useSoftReference, useFileSystemStore);
     }
 
-    private static <K, V> void assertUtilCacheSettings(OFBizCache<K, V> cache, Integer sizeLimit, Integer maxInMemory, Long expireTime, Boolean useSoftReference, Boolean useFileSystemStore) {
+    private static <K, V> void assertUtilCacheSettings(Cache<K, V> cache, Integer sizeLimit, Integer maxInMemory, Long expireTime, Boolean useSoftReference, Boolean useFileSystemStore) {
         if (sizeLimit != null) {
             assertEquals(cache.getName() + ":sizeLimit", sizeLimit.intValue(), cache.getSizeLimit());
         }
@@ -204,7 +205,7 @@
         assertUtilCacheSettings(UtilCache.createUtilCache(name, 12, 8, 22000, false, true, "c", "d"), 12, 8, 22000L, Boolean.FALSE, Boolean.TRUE);
     }
 
-    public static <K, V> void assertKey(String label, OFBizCache<K, V> cache, K key, V value, V other, int size, Map<K, V> map) {
+    public static <K, V> void assertKey(String label, Cache<K, V> cache, K key, V value, V other, int size, Map<K, V> map) {
         assertNull(label + ":get-empty", cache.get(key));
         assertFalse(label + ":containsKey-empty", cache.containsKey(key));
         V oldValue = cache.put(key, other);
@@ -222,7 +223,7 @@
         assertEquals(label + ":map-values", map.values(), cache.values());
     }
 
-    private static <K, V> void assertHasSingleKey(OFBizCache<K, V> cache, K key, V value) {
+    private static <K, V> void assertHasSingleKey(Cache<K, V> cache, K key, V value) {
         assertFalse("is-empty", cache.isEmpty());
         assertEquals("size", 1, cache.size());
         assertTrue("found", cache.containsKey(key));
@@ -233,7 +234,7 @@
         assertEquals("values", UtilMisc.toList(value), cache.values());
     }
 
-    private static <K, V> void assertNoSingleKey(OFBizCache<K, V> cache, K key) {
+    private static <K, V> void assertNoSingleKey(Cache<K, V> cache, K key) {
         assertFalse("not-found", cache.containsKey(key));
         assertFalse("validKey", UtilCache.validKey(cache.getName(), key));
         assertNull("no-get", cache.get(key));
@@ -244,7 +245,7 @@
         assertEquals("values", Collections.emptyList(), cache.values());
     }
 
-    private static void basicTest(OFBizCache<String, String> cache) throws Exception {
+    private static void basicTest(Cache<String, String> cache) throws Exception {
         Listener<String, String> gotListener = createListener(cache);
         Listener<String, String> wantedListener = new Listener<String, String>();
         for (int i = 0; i < 2; i++) {
@@ -318,17 +319,17 @@
     }
 
     public void testBasicDisk() throws Exception {
-        OFBizCache<String, String> cache = createUtilCache(5, 0, 0, false, true);
+        Cache<String, String> cache = createUtilCache(5, 0, 0, false, true);
         basicTest(cache);
     }
 
     public void testSimple() throws Exception {
-        OFBizCache<String, String> cache = createUtilCache(5, 0, 0, false, false);
+        Cache<String, String> cache = createUtilCache(5, 0, 0, false, false);
         basicTest(cache);
     }
 
     public void testPutIfAbsent() throws Exception {
-        OFBizCache<String, String> cache = createUtilCache(5, 5, 2000, false, false);
+        Cache<String, String> cache = createUtilCache(5, 5, 2000, false, false);
         Listener<String, String> gotListener = createListener(cache);
         Listener<String, String> wantedListener = new Listener<String, String>();
         wantedListener.noteKeyAddition(cache, "two", "dos");
@@ -341,7 +342,7 @@
     }
 
     public void testPutIfAbsentAndGet() throws Exception {
-        OFBizCache<String, String> cache = createUtilCache(5, 5, 2000, false, false);
+        Cache<String, String> cache = createUtilCache(5, 5, 2000, false, false);
         Listener<String, String> gotListener = createListener(cache);
         Listener<String, String> wantedListener = new Listener<String, String>();
         wantedListener.noteKeyAddition(cache, "key", "value");
@@ -367,7 +368,7 @@
     public void testChangeMemSize() throws Exception {
         int size = 5;
         long ttl = 2000;
-        OFBizCache<String, Serializable> cache = createUtilCache(size, size, ttl, false, false);
+        Cache<String, Serializable> cache = createUtilCache(size, size, ttl, false, false);
         Map<String, Serializable> map = new HashMap<String, Serializable>();
         for (int i = 0; i < size; i++) {
             String s = Integer.toString(i);
@@ -398,7 +399,7 @@
         assertEquals("map-values", map.values().size(), cache.values().size());
     }
 
-    private void expireTest(OFBizCache<String, Serializable> cache, int size, long ttl) throws Exception {
+    private void expireTest(Cache<String, Serializable> cache, int size, long ttl) throws Exception {
         Map<String, Serializable> map = new HashMap<String, Serializable>();
         for (int i = 0; i < size; i++) {
             String s = Integer.toString(i);
@@ -421,7 +422,7 @@
     }
 
     public void testExpire() throws Exception {
-        OFBizCache<String, Serializable> cache = createUtilCache(5, 5, 2000, false, false);
+        Cache<String, Serializable> cache = createUtilCache(5, 5, 2000, false, false);
         expireTest(cache, 5, 2000);
         long start = System.currentTimeMillis();
         useAllMemory();
diff --git a/framework/base/src/org/ofbiz/base/util/collections/FlexibleMapAccessor.java b/framework/base/src/org/ofbiz/base/util/collections/FlexibleMapAccessor.java
index 9171b6a..3200208 100644
--- a/framework/base/src/org/ofbiz/base/util/collections/FlexibleMapAccessor.java
+++ b/framework/base/src/org/ofbiz/base/util/collections/FlexibleMapAccessor.java
@@ -29,7 +29,7 @@
 import org.ofbiz.base.util.UtilGenerics;
 import org.ofbiz.base.util.UtilObject;
 import org.ofbiz.base.util.UtilValidate;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.base.util.string.FlexibleStringExpander;
 import org.ofbiz.base.util.string.UelUtil;
@@ -43,7 +43,7 @@
 @SuppressWarnings("serial")
 public final class FlexibleMapAccessor<T> implements Serializable, IsEmpty {
     public static final String module = FlexibleMapAccessor.class.getName();
-    private static final OFBizCache<String, FlexibleMapAccessor<?>> fmaCache = UtilCache.createUtilCache("flexibleMapAccessor.ExpressionCache");
+    private static final Cache<String, FlexibleMapAccessor<?>> fmaCache = UtilCache.createUtilCache("flexibleMapAccessor.ExpressionCache");
     @SuppressWarnings("unchecked")
     private static final FlexibleMapAccessor nullFma = new FlexibleMapAccessor("");
 
diff --git a/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java b/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java
index 5d66e6f..829978d 100644
--- a/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java
+++ b/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java
@@ -38,7 +38,7 @@
 import org.ofbiz.base.util.UtilGenerics;
 import org.ofbiz.base.util.UtilMisc;
 import org.ofbiz.base.util.UtilValidate;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 
 /** Expands String values that contain Unified Expression Language (JSR 245)
@@ -56,7 +56,7 @@
     public static final String module = FlexibleStringExpander.class.getName();
     public static final String openBracket = "${";
     public static final String closeBracket = "}";
-    protected static final OFBizCache<Key, FlexibleStringExpander> exprCache = UtilCache.createUtilCache("flexibleStringExpander.ExpressionCache");
+    protected static final Cache<Key, FlexibleStringExpander> exprCache = UtilCache.createUtilCache("flexibleStringExpander.ExpressionCache");
     protected static final FlexibleStringExpander nullExpr = new ConstSimpleElem(new char[0]);
 
     /**
diff --git a/framework/base/src/org/ofbiz/base/util/string/NodeELResolver.java b/framework/base/src/org/ofbiz/base/util/string/NodeELResolver.java
index da7e170..fd23175 100644
--- a/framework/base/src/org/ofbiz/base/util/string/NodeELResolver.java
+++ b/framework/base/src/org/ofbiz/base/util/string/NodeELResolver.java
@@ -35,7 +35,7 @@
 
 import org.apache.xerces.dom.NodeImpl;
 import org.ofbiz.base.util.Debug;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
@@ -52,7 +52,7 @@
  */
 public class NodeELResolver extends ELResolver {
     private final XPath xpath;
-    private final OFBizCache<String, XPathExpression> exprCache = UtilCache.createUtilCache("nodeElResolver.ExpressionCache");
+    private final Cache<String, XPathExpression> exprCache = UtilCache.createUtilCache("nodeElResolver.ExpressionCache");
     private static final String module = NodeELResolver.class.getName();
 
     /**
diff --git a/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java b/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java
index 1095584..1e5bc46 100644
--- a/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java
+++ b/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java
@@ -51,7 +51,7 @@
 import org.ofbiz.base.util.UtilMisc;
 import org.ofbiz.base.util.UtilProperties;
 import org.ofbiz.base.util.UtilValidate;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 
 import freemarker.cache.TemplateLoader;
@@ -80,7 +80,7 @@
     public static final Version version = new Version(2, 3, 21);
 
     // use soft references for this so that things from Content records don't kill all of our memory, or maybe not for performance reasons... hmmm, leave to config file...
-    private static final OFBizCache<String, Template> cachedTemplates = UtilCache.createUtilCache("template.ftl.general", 0, 0, false);
+    private static final Cache<String, Template> cachedTemplates = UtilCache.createUtilCache("template.ftl.general", 0, 0, false);
     private static final BeansWrapper defaultOfbizWrapper = new BeansWrapperBuilder(version).build();
     private static final Configuration defaultOfbizConfig = makeConfiguration(defaultOfbizWrapper);
 
@@ -329,7 +329,7 @@
         return getTemplate(templateLocation, cachedTemplates, defaultOfbizConfig);
     }
 
-    public static Template getTemplate(String templateLocation, OFBizCache<String, Template> cache, Configuration config) throws TemplateException, IOException {
+    public static Template getTemplate(String templateLocation, Cache<String, Template> cache, Configuration config) throws TemplateException, IOException {
         Template template = cache.get(templateLocation);
         if (template == null) {
             // only make the reader if we need it, and then close it right after!
diff --git a/framework/base/src/org/ofbiz/base/util/template/XslTransform.java b/framework/base/src/org/ofbiz/base/util/template/XslTransform.java
index 09f434b..22be7d7 100644
--- a/framework/base/src/org/ofbiz/base/util/template/XslTransform.java
+++ b/framework/base/src/org/ofbiz/base/util/template/XslTransform.java
@@ -32,7 +32,7 @@
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
 import org.ofbiz.base.util.URLConnector;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.base.location.FlexibleLocation;
 import org.ofbiz.base.util.GeneralException;
@@ -57,7 +57,7 @@
 public final class XslTransform {
 
     public static final String module = XslTransform.class.getName();
-    private static final OFBizCache<String, Templates> xslTemplatesCache = UtilCache.createUtilCache("XsltTemplates", 0, 0);
+    private static final Cache<String, Templates> xslTemplatesCache = UtilCache.createUtilCache("XsltTemplates", 0, 0);
 
     /**
      * @param template the content or url of the xsl template
diff --git a/framework/common/src/org/ofbiz/common/CommonEvents.java b/framework/common/src/org/ofbiz/common/CommonEvents.java
index abfefde..7ff3c21 100644
--- a/framework/common/src/org/ofbiz/common/CommonEvents.java
+++ b/framework/common/src/org/ofbiz/common/CommonEvents.java
@@ -52,7 +52,7 @@
 import org.ofbiz.base.util.UtilMisc;
 import org.ofbiz.base.util.UtilProperties;
 import org.ofbiz.base.util.UtilValidate;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.entity.Delegator;
 import org.ofbiz.entity.GenericEntityException;
@@ -82,7 +82,7 @@
         "thisRequestUri"
     };
 
-    private static final OFBizCache<String, Map<String, String>> appletSessions = UtilCache.createUtilCache("AppletSessions", 0, 600000, true);
+    private static final Cache<String, Map<String, String>> appletSessions = UtilCache.createUtilCache("AppletSessions", 0, 600000, true);
 
     public static String checkAppletRequest(HttpServletRequest request, HttpServletResponse response) {
         Delegator delegator = (Delegator) request.getAttribute("delegator");
diff --git a/framework/datafile/src/org/ofbiz/datafile/ModelDataFileReader.java b/framework/datafile/src/org/ofbiz/datafile/ModelDataFileReader.java
index a36d980..a692c83 100644
--- a/framework/datafile/src/org/ofbiz/datafile/ModelDataFileReader.java
+++ b/framework/datafile/src/org/ofbiz/datafile/ModelDataFileReader.java
@@ -29,7 +29,7 @@
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -42,7 +42,7 @@
 public final class ModelDataFileReader {
 
     public static final String module = ModelDataFileReader.class.getName();
-    private static final OFBizCache<URL, ModelDataFileReader> readers = UtilCache.createUtilCache("ModelDataFile", true);
+    private static final Cache<URL, ModelDataFileReader> readers = UtilCache.createUtilCache("ModelDataFile", true);
 
     public static ModelDataFileReader getModelDataFileReader(URL readerURL) throws DataFileException {
         ModelDataFileReader reader = readers.get(readerURL);
diff --git a/framework/entity/src/org/ofbiz/entity/cache/AbstractCache.java b/framework/entity/src/org/ofbiz/entity/cache/AbstractCache.java
index 192dc37..39bc04a 100644
--- a/framework/entity/src/org/ofbiz/entity/cache/AbstractCache.java
+++ b/framework/entity/src/org/ofbiz/entity/cache/AbstractCache.java
@@ -18,7 +18,7 @@
  *******************************************************************************/
 package org.ofbiz.entity.cache;
 
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.entity.Delegator;
 import org.ofbiz.entity.DelegatorFactory;
@@ -71,11 +71,11 @@
         return names;
     }
 
-    protected OFBizCache<K, V> getCache(String entityName) {
+    protected Cache<K, V> getCache(String entityName) {
         return UtilCache.findCache(getCacheName(entityName));
     }
 
-    protected OFBizCache<K, V> getOrCreateCache(String entityName) {
+    protected Cache<K, V> getOrCreateCache(String entityName) {
         String name = getCacheName(entityName);
         return UtilCache.getOrCreateUtilCache(name, 0, 0, 0, true, false, getCacheNames(entityName));
     }
diff --git a/framework/entity/src/org/ofbiz/entity/cache/AbstractEntityConditionCache.java b/framework/entity/src/org/ofbiz/entity/cache/AbstractEntityConditionCache.java
index 02ba29c..92371a6 100644
--- a/framework/entity/src/org/ofbiz/entity/cache/AbstractEntityConditionCache.java
+++ b/framework/entity/src/org/ofbiz/entity/cache/AbstractEntityConditionCache.java
@@ -27,7 +27,7 @@
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.UtilMisc;
 import org.ofbiz.base.util.UtilValidate;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.entity.GenericEntity;
 import org.ofbiz.entity.GenericPK;
@@ -76,7 +76,7 @@
     }
 
     public void remove(String entityName, EntityCondition condition) {
-        OFBizCache<EntityCondition, ConcurrentMap<K, V>> cache = getCache(entityName);
+        Cache<EntityCondition, ConcurrentMap<K, V>> cache = getCache(entityName);
         if (cache == null) return;
         cache.remove(condition);
     }
@@ -104,13 +104,13 @@
     }
 
     protected ConcurrentMap<K, V> getConditionCache(String entityName, EntityCondition condition) {
-        OFBizCache<EntityCondition, ConcurrentMap<K, V>> cache = getCache(entityName);
+        Cache<EntityCondition, ConcurrentMap<K, V>> cache = getCache(entityName);
         if (cache == null) return null;
         return cache.get(getConditionKey(condition));
     }
 
     protected Map<K, V> getOrCreateConditionCache(String entityName, EntityCondition condition) {
-        OFBizCache<EntityCondition, ConcurrentMap<K, V>> utilCache = getOrCreateCache(entityName);
+        Cache<EntityCondition, ConcurrentMap<K, V>> utilCache = getOrCreateCache(entityName);
         EntityCondition conditionKey = getConditionKey(condition);
         ConcurrentMap<K, V> conditionCache = utilCache.get(conditionKey);
         if (conditionCache == null) {
@@ -183,7 +183,7 @@
     }
 
     protected <T1 extends Map<String, Object>, T2 extends Map<String, Object>> void storeHook(String entityName, boolean isPK, List<T1> oldValues, List<T2> newValues) {
-        OFBizCache<EntityCondition, Map<K, V>> entityCache = UtilCache.findCache(getCacheName(entityName));
+        Cache<EntityCondition, Map<K, V>> entityCache = UtilCache.findCache(getCacheName(entityName));
         // for info about cache clearing
         if (UtilValidate.isEmpty(newValues) || newValues.get(0) == null) {
             //Debug.logInfo("In storeHook (cache clear) for entity name [" + entityName + "], got entity cache with name: " + (entityCache == null ? "[No cache found to remove from]" : entityCache.getName()), module);
diff --git a/framework/entity/src/org/ofbiz/entity/cache/EntityCache.java b/framework/entity/src/org/ofbiz/entity/cache/EntityCache.java
index fe67f14..264a897 100644
--- a/framework/entity/src/org/ofbiz/entity/cache/EntityCache.java
+++ b/framework/entity/src/org/ofbiz/entity/cache/EntityCache.java
@@ -21,7 +21,7 @@
 import java.util.Iterator;
 
 import org.ofbiz.base.util.Debug;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.entity.GenericPK;
 import org.ofbiz.entity.GenericValue;
@@ -36,7 +36,7 @@
     }
 
     public GenericValue get(GenericPK pk) {
-        OFBizCache<GenericPK, GenericValue> entityCache = getCache(pk.getEntityName());
+        Cache<GenericPK, GenericValue> entityCache = getCache(pk.getEntityName());
         if (entityCache == null) return null;
         return entityCache.get(pk);
     }
@@ -58,12 +58,12 @@
             // before going into the cache, make this value immutable
             entity.setImmutable();
         }
-        OFBizCache<GenericPK, GenericValue> entityCache = getOrCreateCache(pk.getEntityName());
+        Cache<GenericPK, GenericValue> entityCache = getOrCreateCache(pk.getEntityName());
         return entityCache.put(pk, entity);
     }
 
     public void remove(String entityName, EntityCondition condition) {
-        OFBizCache<GenericPK, GenericValue> entityCache = getCache(entityName);
+        Cache<GenericPK, GenericValue> entityCache = getCache(entityName);
         if (entityCache == null) return;
         for (GenericPK pk: entityCache.getCacheLineKeys()) {
             GenericValue entity = entityCache.get(pk);
@@ -77,7 +77,7 @@
     }
 
     public GenericValue remove(GenericPK pk) {
-        OFBizCache<GenericPK, GenericValue> entityCache = getCache(pk.getEntityName());
+        Cache<GenericPK, GenericValue> entityCache = getCache(pk.getEntityName());
         if (Debug.verboseOn()) Debug.logVerbose("Removing from EntityCache with PK [" + pk + "], will remove from this cache: " + (entityCache == null ? "[No cache found to remove from]" : entityCache.getName()), module);
         if (entityCache == null) return null;
         GenericValue retVal = entityCache.remove(pk);
diff --git a/framework/entity/src/org/ofbiz/entity/model/ModelFieldTypeReader.java b/framework/entity/src/org/ofbiz/entity/model/ModelFieldTypeReader.java
index d1de20a..55d00dd 100644
--- a/framework/entity/src/org/ofbiz/entity/model/ModelFieldTypeReader.java
+++ b/framework/entity/src/org/ofbiz/entity/model/ModelFieldTypeReader.java
@@ -31,7 +31,7 @@
 import org.ofbiz.base.util.UtilTimer;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.entity.GenericEntityConfException;
 import org.ofbiz.entity.config.model.Datasource;
@@ -48,7 +48,7 @@
 public class ModelFieldTypeReader implements Serializable {
 
     public static final String module = ModelFieldTypeReader.class.getName();
-    protected static final OFBizCache<String, ModelFieldTypeReader> readers = UtilCache.createUtilCache("entity.ModelFieldTypeReader", 0, 0);
+    protected static final Cache<String, ModelFieldTypeReader> readers = UtilCache.createUtilCache("entity.ModelFieldTypeReader", 0, 0);
 
     protected static Map<String, ModelFieldType> createFieldTypeCache(Element docElement, String location) {
         docElement.normalize();
diff --git a/framework/entity/src/org/ofbiz/entity/model/ModelGroupReader.java b/framework/entity/src/org/ofbiz/entity/model/ModelGroupReader.java
index 1691823..f5e050a 100644
--- a/framework/entity/src/org/ofbiz/entity/model/ModelGroupReader.java
+++ b/framework/entity/src/org/ofbiz/entity/model/ModelGroupReader.java
@@ -35,7 +35,7 @@
 import org.ofbiz.base.util.UtilTimer;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.entity.GenericEntityConfException;
 import org.ofbiz.entity.config.model.DelegatorElement;
@@ -54,7 +54,7 @@
 public class ModelGroupReader implements Serializable {
 
     public static final String module = ModelGroupReader.class.getName();
-    private static final OFBizCache<String, ModelGroupReader> readers = UtilCache.createUtilCache("entity.ModelGroupReader", 0, 0);
+    private static final Cache<String, ModelGroupReader> readers = UtilCache.createUtilCache("entity.ModelGroupReader", 0, 0);
 
     private Map<String, String> groupCache = null;
     private Set<String> groupNames = null;
diff --git a/framework/entity/src/org/ofbiz/entity/model/ModelReader.java b/framework/entity/src/org/ofbiz/entity/model/ModelReader.java
index 395d7db..9ad6d5c 100644
--- a/framework/entity/src/org/ofbiz/entity/model/ModelReader.java
+++ b/framework/entity/src/org/ofbiz/entity/model/ModelReader.java
@@ -38,7 +38,7 @@
 import org.ofbiz.base.util.UtilTimer;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.entity.GenericEntityConfException;
 import org.ofbiz.entity.GenericEntityException;
@@ -59,7 +59,7 @@
 public class ModelReader implements Serializable {
 
     public static final String module = ModelReader.class.getName();
-    private static final OFBizCache<String, ModelReader> readers = UtilCache.createUtilCache("entity.ModelReader", 0, 0);
+    private static final Cache<String, ModelReader> readers = UtilCache.createUtilCache("entity.ModelReader", 0, 0);
 
     protected Map<String, ModelEntity> entityCache = null;
 
diff --git a/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaUtil.java b/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaUtil.java
index d4d3391..3077d09 100644
--- a/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaUtil.java
+++ b/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaUtil.java
@@ -33,7 +33,7 @@
 import org.ofbiz.base.config.ResourceHandler;
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.UtilXml;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.entity.Delegator;
 import org.ofbiz.entity.GenericEntityConfException;
@@ -50,7 +50,7 @@
 
     public static final String module = EntityEcaUtil.class.getName();
 
-    private static final OFBizCache<String, Map<String, Map<String, List<EntityEcaRule>>>> entityEcaReaders = UtilCache.createUtilCache("entity.EcaReaders", 0, 0, false);
+    private static final Cache<String, Map<String, Map<String, List<EntityEcaRule>>>> entityEcaReaders = UtilCache.createUtilCache("entity.EcaReaders", 0, 0, false);
 
     public static Map<String, Map<String, List<EntityEcaRule>>> getEntityEcaCache(String entityEcaReaderName) {
         Map<String, Map<String, List<EntityEcaRule>>> ecaCache = entityEcaReaders.get(entityEcaReaderName);
diff --git a/framework/minilang/src/org/ofbiz/minilang/SimpleMapProcessor.java b/framework/minilang/src/org/ofbiz/minilang/SimpleMapProcessor.java
index 8f14685..c3af977 100644
--- a/framework/minilang/src/org/ofbiz/minilang/SimpleMapProcessor.java
+++ b/framework/minilang/src/org/ofbiz/minilang/SimpleMapProcessor.java
@@ -27,7 +27,7 @@
 
 import org.ofbiz.base.location.FlexibleLocation;
 import org.ofbiz.base.util.UtilXml;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.minilang.operation.MapProcessor;
 import org.w3c.dom.Document;
@@ -38,8 +38,8 @@
  */
 public class SimpleMapProcessor {
 
-    private static final OFBizCache<String, Map<String, MapProcessor>> simpleMapProcessorsResourceCache = UtilCache.createUtilCache("minilang.SimpleMapProcessorsResource", 0, 0);
-    private static final OFBizCache<URL, Map<String, MapProcessor>> simpleMapProcessorsURLCache = UtilCache.createUtilCache("minilang.SimpleMapProcessorsURL", 0, 0);
+    private static final Cache<String, Map<String, MapProcessor>> simpleMapProcessorsResourceCache = UtilCache.createUtilCache("minilang.SimpleMapProcessorsResource", 0, 0);
+    private static final Cache<URL, Map<String, MapProcessor>> simpleMapProcessorsURLCache = UtilCache.createUtilCache("minilang.SimpleMapProcessorsURL", 0, 0);
 
     protected static Map<String, MapProcessor> getAllProcessors(URL xmlURL) throws MiniLangException {
         Map<String, MapProcessor> mapProcessors = new HashMap<String, MapProcessor>();
diff --git a/framework/minilang/src/org/ofbiz/minilang/SimpleMethod.java b/framework/minilang/src/org/ofbiz/minilang/SimpleMethod.java
index 57c0e5b..a977bec 100644
--- a/framework/minilang/src/org/ofbiz/minilang/SimpleMethod.java
+++ b/framework/minilang/src/org/ofbiz/minilang/SimpleMethod.java
@@ -43,7 +43,7 @@
 import org.ofbiz.base.util.UtilProperties;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.entity.GenericEntity;
 import org.ofbiz.entity.GenericValue;
@@ -85,8 +85,8 @@
     private static final String err_resource = "MiniLangErrorUiLabels";
     private static final String[] DEPRECATED_ATTRIBUTES = {"parameter-map-name", "locale-name", "delegator-name", "security-name", "dispatcher-name", "user-login-name"};
     private static final Map<String, MethodOperation.Factory<MethodOperation>> methodOperationFactories;
-    private static final OFBizCache<String, Map<String, SimpleMethod>> simpleMethodsDirectCache = UtilCache.createUtilCache("minilang.SimpleMethodsDirect", 0, 0);
-    private static final OFBizCache<String, SimpleMethod> simpleMethodsResourceCache = UtilCache.createUtilCache("minilang.SimpleMethodsResource", 0, 0);
+    private static final Cache<String, Map<String, SimpleMethod>> simpleMethodsDirectCache = UtilCache.createUtilCache("minilang.SimpleMethodsDirect", 0, 0);
+    private static final Cache<String, SimpleMethod> simpleMethodsResourceCache = UtilCache.createUtilCache("minilang.SimpleMethodsResource", 0, 0);
 
     static {
         Map<String, MethodOperation.Factory<MethodOperation>> mapFactories = new HashMap<String, MethodOperation.Factory<MethodOperation>>();
diff --git a/framework/security/src/org/ofbiz/security/SecurityFactory.java b/framework/security/src/org/ofbiz/security/SecurityFactory.java
index 5bc2831..8c739de 100644
--- a/framework/security/src/org/ofbiz/security/SecurityFactory.java
+++ b/framework/security/src/org/ofbiz/security/SecurityFactory.java
@@ -30,7 +30,7 @@
 import org.ofbiz.base.util.Assert;
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.UtilMisc;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.entity.Delegator;
 import org.ofbiz.entity.GenericEntityException;
@@ -51,7 +51,7 @@
     // The default implementation stores a Delegator reference, so we will cache by delegator name.
     // The goal is to remove Delegator references in the Security interface, then we can use a singleton
     // and eliminate the cache.
-    private static final OFBizCache<String, Security> authorizationCache = UtilCache.createUtilCache("security.AuthorizationCache");
+    private static final Cache<String, Security> authorizationCache = UtilCache.createUtilCache("security.AuthorizationCache");
 
     /**
      * Returns a <code>Security</code> instance. The method uses Java's
diff --git a/framework/service/src/org/ofbiz/service/ServiceDispatcher.java b/framework/service/src/org/ofbiz/service/ServiceDispatcher.java
index b90ee38..2386e8d 100644
--- a/framework/service/src/org/ofbiz/service/ServiceDispatcher.java
+++ b/framework/service/src/org/ofbiz/service/ServiceDispatcher.java
@@ -41,7 +41,7 @@
 import org.ofbiz.base.util.UtilProperties;
 import org.ofbiz.base.util.UtilTimer;
 import org.ofbiz.base.util.UtilValidate;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.entity.Delegator;
 import org.ofbiz.entity.DelegatorFactory;
@@ -83,7 +83,7 @@
     public static final int lruLogSize = 200;
     public static final int LOCK_RETRIES = 3;
 
-    private static final OFBizCache<String, Map<String, ModelService>> modelServiceMapByModel = UtilCache.createUtilCache("service.ModelServiceMapByModel", 0, 0, false);
+    private static final Cache<String, Map<String, ModelService>> modelServiceMapByModel = UtilCache.createUtilCache("service.ModelServiceMapByModel", 0, 0, false);
     protected static final Map<RunningService, ServiceDispatcher> runLog = new ConcurrentLinkedHashMap.Builder<RunningService, ServiceDispatcher>().maximumWeightedCapacity(lruLogSize).build();
     protected static ConcurrentHashMap<String, ServiceDispatcher> dispatchers = new ConcurrentHashMap<String, ServiceDispatcher>();
     // FIXME: These fields are not thread-safe. They are modified by EntityDataLoadContainer.
diff --git a/framework/service/src/org/ofbiz/service/config/ServiceConfigUtil.java b/framework/service/src/org/ofbiz/service/config/ServiceConfigUtil.java
index b054750..1ffc213 100644
--- a/framework/service/src/org/ofbiz/service/config/ServiceConfigUtil.java
+++ b/framework/service/src/org/ofbiz/service/config/ServiceConfigUtil.java
@@ -27,7 +27,7 @@
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.UtilURL;
 import org.ofbiz.base.util.UtilXml;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.service.config.model.Engine;
 import org.ofbiz.service.config.model.ServiceConfig;
@@ -50,7 +50,7 @@
     public static final String engine = "default";
     public static final String SERVICE_ENGINE_XML_FILENAME = "serviceengine.xml";
     // Keep the ServiceConfig instance in a cache - so the configuration can be reloaded at run-time. There will be only one ServiceConfig instance in the cache.
-    private static final OFBizCache<String, ServiceConfig> serviceConfigCache = UtilCache.createUtilCache("service.ServiceConfig", 0, 0, false);
+    private static final Cache<String, ServiceConfig> serviceConfigCache = UtilCache.createUtilCache("service.ServiceConfig", 0, 0, false);
     private static final List<ServiceConfigListener> configListeners = new CopyOnWriteArrayList<ServiceConfigListener>();
 
     /**
diff --git a/framework/service/src/org/ofbiz/service/engine/BSFEngine.java b/framework/service/src/org/ofbiz/service/engine/BSFEngine.java
index 48abf93..241c048 100644
--- a/framework/service/src/org/ofbiz/service/engine/BSFEngine.java
+++ b/framework/service/src/org/ofbiz/service/engine/BSFEngine.java
@@ -23,7 +23,7 @@
 
 import org.ofbiz.base.util.HttpClient;
 import org.ofbiz.base.util.HttpClientException;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.base.util.UtilGenerics;
 import org.ofbiz.base.util.UtilURL;
@@ -41,7 +41,7 @@
 public class BSFEngine extends GenericAsyncEngine {
 
     public static final String module = BSFEngine.class.getName();
-    private static final OFBizCache<String, String> scriptCache = UtilCache.createUtilCache("BSFScripts", 0, 0);
+    private static final Cache<String, String> scriptCache = UtilCache.createUtilCache("BSFScripts", 0, 0);
 
     public BSFEngine(ServiceDispatcher dispatcher) {
         super(dispatcher);
diff --git a/framework/service/src/org/ofbiz/service/mail/ServiceMcaUtil.java b/framework/service/src/org/ofbiz/service/mail/ServiceMcaUtil.java
index 8d08f6e..ec77193 100644
--- a/framework/service/src/org/ofbiz/service/mail/ServiceMcaUtil.java
+++ b/framework/service/src/org/ofbiz/service/mail/ServiceMcaUtil.java
@@ -27,7 +27,7 @@
 import org.ofbiz.base.config.ResourceHandler;
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.UtilXml;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.entity.GenericValue;
 import org.ofbiz.service.GenericServiceException;
@@ -37,7 +37,7 @@
 public class ServiceMcaUtil {
 
     public static final String module = ServiceMcaUtil.class.getName();
-    private static final OFBizCache<String, ServiceMcaRule> mcaCache = UtilCache.createUtilCache("service.ServiceMCAs", 0, 0, false);
+    private static final Cache<String, ServiceMcaRule> mcaCache = UtilCache.createUtilCache("service.ServiceMCAs", 0, 0, false);
 
     public static void reloadConfig() {
         mcaCache.clear();
diff --git a/framework/webapp/src/org/ofbiz/webapp/WebAppUtil.java b/framework/webapp/src/org/ofbiz/webapp/WebAppUtil.java
index 2424ba0..265d93b 100644
--- a/framework/webapp/src/org/ofbiz/webapp/WebAppUtil.java
+++ b/framework/webapp/src/org/ofbiz/webapp/WebAppUtil.java
@@ -35,7 +35,7 @@
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.UtilXml.LocalErrorHandler;
 import org.ofbiz.base.util.UtilXml.LocalResolver;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.xml.sax.ErrorHandler;
 import org.xml.sax.InputSource;
@@ -51,7 +51,7 @@
 
     public static final String module = WebAppUtil.class.getName();
     private static final String webAppFileName = "/WEB-INF/web.xml";
-    private static final OFBizCache<String, WebXml> webXmlCache = UtilCache.createUtilCache("webapp.WebXml");
+    private static final Cache<String, WebXml> webXmlCache = UtilCache.createUtilCache("webapp.WebXml");
 
     /**
      * Returns the control servlet path. The path consists of the web application's mount-point
diff --git a/framework/webapp/src/org/ofbiz/webapp/control/ConfigXMLReader.java b/framework/webapp/src/org/ofbiz/webapp/control/ConfigXMLReader.java
index c4e51a5..d4d0cda 100644
--- a/framework/webapp/src/org/ofbiz/webapp/control/ConfigXMLReader.java
+++ b/framework/webapp/src/org/ofbiz/webapp/control/ConfigXMLReader.java
@@ -43,9 +43,10 @@
 import org.ofbiz.base.util.UtilHttp;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.base.util.collections.MapContext;
+import org.ofbiz.webapp.control.ConfigXMLReader.ControllerConfig;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
@@ -56,8 +57,8 @@
 
     public static final String module = ConfigXMLReader.class.getName();
     public static final String controllerXmlFileName = "/WEB-INF/controller.xml";
-    private static final OFBizCache<URL, ControllerConfig> controllerCache = UtilCache.createUtilCache("webapp.ControllerConfig");
-    private static final OFBizCache<String, List<ControllerConfig>> controllerSearchResultsCache = UtilCache.createUtilCache("webapp.ControllerSearchResults");
+    private static final Cache<URL, ControllerConfig> controllerCache = UtilCache.createUtilCache("webapp.ControllerConfig");
+    private static final Cache<String, List<ControllerConfig>> controllerSearchResultsCache = UtilCache.createUtilCache("webapp.ControllerSearchResults");
     public static final RequestResponse emptyNoneRequestResponse = RequestResponse.createEmptyNoneRequestResponse();
 
     public static Set<String> findControllerFilesWithRequest(String requestUri, String controllerPartialPath) throws GeneralException {
diff --git a/framework/webapp/src/org/ofbiz/webapp/event/BsfEventHandler.java b/framework/webapp/src/org/ofbiz/webapp/event/BsfEventHandler.java
index ed357a2..0301a80 100644
--- a/framework/webapp/src/org/ofbiz/webapp/event/BsfEventHandler.java
+++ b/framework/webapp/src/org/ofbiz/webapp/event/BsfEventHandler.java
@@ -34,7 +34,7 @@
 import org.ofbiz.base.location.FlexibleLocation;
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.UtilValidate;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.webapp.control.ConfigXMLReader;
 
@@ -44,7 +44,7 @@
 public class BsfEventHandler implements EventHandler {
 
     public static final String module = BsfEventHandler.class.getName();
-    private static final OFBizCache<String, String> eventCache = UtilCache.createUtilCache("webapp.BsfEvents");
+    private static final Cache<String, String> eventCache = UtilCache.createUtilCache("webapp.BsfEvents");
 
     /**
      * @see org.ofbiz.webapp.event.EventHandler#init(javax.servlet.ServletContext)
diff --git a/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizCacheStorage.java b/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizCacheStorage.java
index 356efaa..6b873e7 100644
--- a/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizCacheStorage.java
+++ b/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizCacheStorage.java
@@ -20,7 +20,7 @@
 
 import freemarker.cache.CacheStorage;
 
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 
 /**
@@ -28,7 +28,7 @@
  */
 public class OfbizCacheStorage implements CacheStorage {
     //can't have global cache because names/keys are relative to the webapp
-    protected final OFBizCache<Object, Object> localCache;
+    protected final Cache<Object, Object> localCache;
 
     public OfbizCacheStorage(String id) {
         this.localCache = UtilCache.createUtilCache("webapp.FreeMarkerCache." + id, 0, 0, false);
diff --git a/framework/webtools/src/org/ofbiz/webtools/UtilCacheEvents.java b/framework/webtools/src/org/ofbiz/webtools/UtilCacheEvents.java
index 69f32fe..e366c0a 100644
--- a/framework/webtools/src/org/ofbiz/webtools/UtilCacheEvents.java
+++ b/framework/webtools/src/org/ofbiz/webtools/UtilCacheEvents.java
@@ -28,7 +28,7 @@
 import org.ofbiz.base.util.UtilHttp;
 import org.ofbiz.base.util.UtilMisc;
 import org.ofbiz.base.util.UtilProperties;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.security.Security;
 
@@ -76,7 +76,7 @@
             return "error";
         }
 
-        OFBizCache<?, ?> utilCache = UtilCache.findCache(name);
+        Cache<?, ?> utilCache = UtilCache.findCache(name);
 
         if (utilCache != null) {
             Object key = null;
@@ -134,7 +134,7 @@
             request.setAttribute("_ERROR_MESSAGE_", errMsg);
             return "error";
         }
-        OFBizCache<?, ?> utilCache = UtilCache.findCache(name);
+        Cache<?, ?> utilCache = UtilCache.findCache(name);
 
         if (utilCache != null) {
             utilCache.clear();
@@ -207,7 +207,7 @@
             expireTime = Long.valueOf(expireTimeStr);
         } catch (Exception e) {}
 
-        OFBizCache<?, ?> utilCache = UtilCache.findCache(name);
+        Cache<?, ?> utilCache = UtilCache.findCache(name);
 
         if (utilCache != null) {
             if (maxInMemory != null)
diff --git a/framework/webtools/src/org/ofbiz/webtools/artifactinfo/ArtifactInfoFactory.java b/framework/webtools/src/org/ofbiz/webtools/artifactinfo/ArtifactInfoFactory.java
index e51e68c..0d83dd0 100644
--- a/framework/webtools/src/org/ofbiz/webtools/artifactinfo/ArtifactInfoFactory.java
+++ b/framework/webtools/src/org/ofbiz/webtools/artifactinfo/ArtifactInfoFactory.java
@@ -41,7 +41,7 @@
 import org.ofbiz.base.util.FileUtil;
 import org.ofbiz.base.util.GeneralException;
 import org.ofbiz.base.util.UtilValidate;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.entity.GenericEntityException;
 import org.ofbiz.entity.config.model.DelegatorElement;
@@ -68,7 +68,7 @@
 
     public static final String module = ArtifactInfoFactory.class.getName();
 
-    private static final OFBizCache<String, ArtifactInfoFactory> artifactInfoFactoryCache = UtilCache.createUtilCache("ArtifactInfoFactory");
+    private static final Cache<String, ArtifactInfoFactory> artifactInfoFactoryCache = UtilCache.createUtilCache("ArtifactInfoFactory");
 
     public static final String EntityInfoTypeId = "entity";
     public static final String ServiceInfoTypeId = "service";
diff --git a/framework/widget/src/org/ofbiz/widget/cache/AbstractCache.java b/framework/widget/src/org/ofbiz/widget/cache/AbstractCache.java
index 0c0f780..bb61075 100644
--- a/framework/widget/src/org/ofbiz/widget/cache/AbstractCache.java
+++ b/framework/widget/src/org/ofbiz/widget/cache/AbstractCache.java
@@ -18,7 +18,7 @@
  *******************************************************************************/
 package org.ofbiz.widget.cache;
 
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 
 public abstract class AbstractCache {
@@ -45,11 +45,11 @@
         return getCacheNamePrefix() + widgetName;
     }
 
-    protected <K,V> OFBizCache<K,V> getCache(String widgetName) {
+    protected <K,V> Cache<K, V> getCache(String widgetName) {
         return UtilCache.findCache(getCacheName(widgetName));
     }
 
-    protected OFBizCache<WidgetContextCacheKey, GenericWidgetOutput> getOrCreateCache(String widgetName) {
+    protected Cache<WidgetContextCacheKey, GenericWidgetOutput> getOrCreateCache(String widgetName) {
         String name = getCacheName(widgetName);
         return UtilCache.getOrCreateUtilCache(name, 0, 0, 0, true, false, name);
     }
diff --git a/framework/widget/src/org/ofbiz/widget/cache/ScreenCache.java b/framework/widget/src/org/ofbiz/widget/cache/ScreenCache.java
index 2d48d69..84944cb 100644
--- a/framework/widget/src/org/ofbiz/widget/cache/ScreenCache.java
+++ b/framework/widget/src/org/ofbiz/widget/cache/ScreenCache.java
@@ -19,7 +19,7 @@
 package org.ofbiz.widget.cache;
 
 import org.ofbiz.base.util.Debug;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 
 public class ScreenCache extends AbstractCache {
     public static final String module = ScreenCache.class.getName();
@@ -29,18 +29,18 @@
     }
 
     public GenericWidgetOutput get(String screenName, WidgetContextCacheKey wcck) {
-        OFBizCache<WidgetContextCacheKey,GenericWidgetOutput> screenCache = getCache(screenName);
+        Cache<WidgetContextCacheKey, GenericWidgetOutput> screenCache = getCache(screenName);
         if (screenCache == null) return null;
         return screenCache.get(wcck);
     }
 
     public GenericWidgetOutput put(String screenName, WidgetContextCacheKey wcck, GenericWidgetOutput output) {
-        OFBizCache<WidgetContextCacheKey, GenericWidgetOutput> screenCache = getOrCreateCache(screenName);
+        Cache<WidgetContextCacheKey, GenericWidgetOutput> screenCache = getOrCreateCache(screenName);
         return screenCache.put(wcck, output);
     }
 
     public GenericWidgetOutput remove(String screenName, WidgetContextCacheKey wcck) {
-        OFBizCache<WidgetContextCacheKey,GenericWidgetOutput> screenCache = getCache(screenName);
+        Cache<WidgetContextCacheKey, GenericWidgetOutput> screenCache = getCache(screenName);
         if (Debug.verboseOn()) Debug.logVerbose("Removing from ScreenCache with key [" + wcck + "], will remove from this cache: " + (screenCache == null ? "[No cache found to remove from]" : screenCache.getName()), module);
         if (screenCache == null) return null;
         GenericWidgetOutput retVal = screenCache.remove(wcck);
diff --git a/framework/widget/src/org/ofbiz/widget/form/FormFactory.java b/framework/widget/src/org/ofbiz/widget/form/FormFactory.java
index 458d6f4..a5e00de 100644
--- a/framework/widget/src/org/ofbiz/widget/form/FormFactory.java
+++ b/framework/widget/src/org/ofbiz/widget/form/FormFactory.java
@@ -30,7 +30,7 @@
 import org.ofbiz.base.location.FlexibleLocation;
 import org.ofbiz.base.util.UtilHttp;
 import org.ofbiz.base.util.UtilXml;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.entity.Delegator;
 import org.ofbiz.entity.model.ModelReader;
@@ -48,8 +48,8 @@
 public class FormFactory {
 
     public static final String module = FormFactory.class.getName();
-    private static final OFBizCache<String, ModelForm> formLocationCache = UtilCache.createUtilCache("widget.form.locationResource", 0, 0, false);
-    private static final OFBizCache<String, ModelForm> formWebappCache = UtilCache.createUtilCache("widget.form.webappResource", 0, 0, false);
+    private static final Cache<String, ModelForm> formLocationCache = UtilCache.createUtilCache("widget.form.locationResource", 0, 0, false);
+    private static final Cache<String, ModelForm> formWebappCache = UtilCache.createUtilCache("widget.form.webappResource", 0, 0, false);
 
     public static Map<String, ModelForm> getFormsFromLocation(String resourceName, ModelReader entityModelReader, DispatchContext dispatchContext)
             throws IOException, SAXException, ParserConfigurationException {
diff --git a/framework/widget/src/org/ofbiz/widget/menu/MenuFactory.java b/framework/widget/src/org/ofbiz/widget/menu/MenuFactory.java
index bd0e912..d8cf933 100644
--- a/framework/widget/src/org/ofbiz/widget/menu/MenuFactory.java
+++ b/framework/widget/src/org/ofbiz/widget/menu/MenuFactory.java
@@ -31,7 +31,7 @@
 import org.ofbiz.base.util.UtilHttp;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -45,8 +45,8 @@
 
     public static final String module = MenuFactory.class.getName();
 
-    public static final OFBizCache<String, Map<String, ModelMenu>> menuWebappCache = UtilCache.createUtilCache("widget.menu.webappResource", 0, 0, false);
-    public static final OFBizCache<String, Map<String, ModelMenu>> menuLocationCache = UtilCache.createUtilCache("widget.menu.locationResource", 0, 0, false);
+    public static final Cache<String, Map<String, ModelMenu>> menuWebappCache = UtilCache.createUtilCache("widget.menu.webappResource", 0, 0, false);
+    public static final Cache<String, Map<String, ModelMenu>> menuLocationCache = UtilCache.createUtilCache("widget.menu.locationResource", 0, 0, false);
 
     public static ModelMenu getMenuFromWebappContext(String resourceName, String menuName, HttpServletRequest request)
             throws IOException, SAXException, ParserConfigurationException {
diff --git a/framework/widget/src/org/ofbiz/widget/screen/HtmlWidget.java b/framework/widget/src/org/ofbiz/widget/screen/HtmlWidget.java
index 2f37bb8..a588f07 100644
--- a/framework/widget/src/org/ofbiz/widget/screen/HtmlWidget.java
+++ b/framework/widget/src/org/ofbiz/widget/screen/HtmlWidget.java
@@ -33,7 +33,7 @@
 import org.ofbiz.base.util.UtilGenerics;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.base.util.collections.MapStack;
 import org.ofbiz.base.util.string.FlexibleStringExpander;
@@ -60,7 +60,7 @@
 public class HtmlWidget extends ModelScreenWidget {
     public static final String module = HtmlWidget.class.getName();
 
-    private static final OFBizCache<String, Template> specialTemplateCache = UtilCache.createUtilCache("widget.screen.template.ftl.general", 0, 0, false);
+    private static final Cache<String, Template> specialTemplateCache = UtilCache.createUtilCache("widget.screen.template.ftl.general", 0, 0, false);
     protected static Configuration specialConfig = FreeMarkerWorker.makeConfiguration(new ExtendedWrapper(FreeMarkerWorker.version));
 
     // not sure if this is the best way to get FTL to use my fancy MapModel derivative, but should work at least...
diff --git a/framework/widget/src/org/ofbiz/widget/screen/ScreenFactory.java b/framework/widget/src/org/ofbiz/widget/screen/ScreenFactory.java
index 3330cdc..dfa82e4 100644
--- a/framework/widget/src/org/ofbiz/widget/screen/ScreenFactory.java
+++ b/framework/widget/src/org/ofbiz/widget/screen/ScreenFactory.java
@@ -34,7 +34,7 @@
 import org.ofbiz.base.util.UtilHttp;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -48,8 +48,8 @@
 
     public static final String module = ScreenFactory.class.getName();
 
-    public static final OFBizCache<String, Map<String, ModelScreen>> screenLocationCache = UtilCache.createUtilCache("widget.screen.locationResource", 0, 0, false);
-    public static final OFBizCache<String, Map<String, ModelScreen>> screenWebappCache = UtilCache.createUtilCache("widget.screen.webappResource", 0, 0, false);
+    public static final Cache<String, Map<String, ModelScreen>> screenLocationCache = UtilCache.createUtilCache("widget.screen.locationResource", 0, 0, false);
+    public static final Cache<String, Map<String, ModelScreen>> screenWebappCache = UtilCache.createUtilCache("widget.screen.webappResource", 0, 0, false);
 
     public static boolean isCombinedName(String combinedName) {
         int numSignIndex = combinedName.lastIndexOf("#");
diff --git a/framework/widget/src/org/ofbiz/widget/tree/TreeFactory.java b/framework/widget/src/org/ofbiz/widget/tree/TreeFactory.java
index 45acb68..1b457c2 100644
--- a/framework/widget/src/org/ofbiz/widget/tree/TreeFactory.java
+++ b/framework/widget/src/org/ofbiz/widget/tree/TreeFactory.java
@@ -27,7 +27,7 @@
 
 import org.ofbiz.base.location.FlexibleLocation;
 import org.ofbiz.base.util.UtilXml;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.entity.Delegator;
 import org.ofbiz.service.LocalDispatcher;
@@ -43,7 +43,7 @@
 
     public static final String module = TreeFactory.class.getName();
 
-    public static final OFBizCache<String, Map<String, ModelTree>> treeLocationCache = UtilCache.createUtilCache("widget.tree.locationResource", 0, 0, false);
+    public static final Cache<String, Map<String, ModelTree>> treeLocationCache = UtilCache.createUtilCache("widget.tree.locationResource", 0, 0, false);
 
     public static ModelTree getTreeFromLocation(String resourceName, String treeName, Delegator delegator, LocalDispatcher dispatcher)
             throws IOException, SAXException, ParserConfigurationException {
diff --git a/specialpurpose/pos/src/org/ofbiz/pos/config/ButtonEventConfig.java b/specialpurpose/pos/src/org/ofbiz/pos/config/ButtonEventConfig.java
index 04067b6..461f08f 100644
--- a/specialpurpose/pos/src/org/ofbiz/pos/config/ButtonEventConfig.java
+++ b/specialpurpose/pos/src/org/ofbiz/pos/config/ButtonEventConfig.java
@@ -33,7 +33,7 @@
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
 import org.ofbiz.base.util.Debug;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 import org.ofbiz.pos.screen.PosScreen;
 
@@ -44,7 +44,7 @@
 
     public static final String module = ButtonEventConfig.class.getName();
     public static final String BUTTON_EVENT_CONFIG = "buttonevents.xml";
-    private static transient OFBizCache<String, ButtonEventConfig> buttonConfig = UtilCache.createUtilCache("pos.ButtonEvent", 0, 0, 0, false, true);
+    private static transient Cache<String, ButtonEventConfig> buttonConfig = UtilCache.createUtilCache("pos.ButtonEvent", 0, 0, 0, false, true);
 
     protected String buttonName = null;
     protected String className = null;
diff --git a/specialpurpose/pos/src/org/ofbiz/pos/screen/PosDialog.java b/specialpurpose/pos/src/org/ofbiz/pos/screen/PosDialog.java
index 0ed90a9..3dc79ca 100644
--- a/specialpurpose/pos/src/org/ofbiz/pos/screen/PosDialog.java
+++ b/specialpurpose/pos/src/org/ofbiz/pos/screen/PosDialog.java
@@ -43,13 +43,13 @@
 import net.xoetrope.xui.XProjectManager;
 
 import org.ofbiz.base.util.Debug;
-import org.ofbiz.base.util.cache.OFBizCache;
+import org.ofbiz.base.util.cache.Cache;
 import org.ofbiz.base.util.cache.UtilCache;
 
 public class PosDialog {
 
     public static final String module = PosDialog.class.getName();
-    private static final OFBizCache<XPage, PosDialog> instances = UtilCache.createUtilCache("pos.Dialogs", 0, 0);
+    private static final Cache<XPage, PosDialog> instances = UtilCache.createUtilCache("pos.Dialogs", 0, 0);
 
     protected final Frame clientFrame = XProjectManager.getCurrentProject().getAppFrame();
     protected final Window appWindow = XProjectManager.getCurrentProject().getAppWindow();