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();
