diff --git a/core-api/pom.xml b/core-api/pom.xml
index 8fe0cdd..e926c5a 100644
--- a/core-api/pom.xml
+++ b/core-api/pom.xml
@@ -106,10 +106,18 @@
       <groupId>org.apache.mina</groupId>
       <artifactId>mina-core</artifactId>
     </dependency>
-    
+
     <dependency>
-      <groupId>org.ehcache</groupId>
-      <artifactId>ehcache</artifactId>
+      <groupId>javax.cache</groupId>
+      <artifactId>cache-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.github.ben-manes.caffeine</groupId>
+      <artifactId>caffeine</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.github.ben-manes.caffeine</groupId>
+      <artifactId>jcache</artifactId>
     </dependency>
   </dependencies>
 
@@ -156,12 +164,8 @@
           <instructions>
             <Bundle-SymbolicName>${project.groupId}.core.api</Bundle-SymbolicName>
             <Export-Package>
-                org.ehcache;version=${ehcache.version},
-                org.ehcache.config;version=${ehcache.version},
-                org.ehcache.config.builders;version=${ehcache.version},
-                org.ehcache.xml;version=${ehcache.version},
-                org.ehcache.xml.model;version=${ehcache.version},
-                org.ehcache.xml.exceptions;version=${ehcache.version},
+                javax.cache,
+                com.github.benmanes.caffeine.jcache.spi,
                 org.apache.directory.server.core.api;version=${project.version},
                 org.apache.directory.server.core.api.administrative;version=${project.version},
                 org.apache.directory.server.core.api.authn.ppolicy;version=${project.version},
@@ -181,9 +185,13 @@
                 org.apache.directory.server.core.api.subtree;version=${project.version}
             </Export-Package>
             <Require-Bundle>
-                org.ehcache.ehcache;bundle-version=${ehcache.version}
+                com.github.ben-manes.caffeine;bundle-version=${caffeine.cache.version},
+                com.github.ben-manes.caffeine.jcache;bundle-version=${caffeine.cache.version},
+                javax.cache.api;bundle-version=${javax.cache.version}
             </Require-Bundle>
             <Import-Package>
+                javax.cache,
+                javax.cache.spi,
                 org.apache.commons.lang3;version=${commons.lang.version},
                 org.apache.directory.api.asn1.util;version=${org.apache.directory.api.version},
                 org.apache.directory.api.i18n;version=${org.apache.directory.api.version},
diff --git a/core-api/src/main/java/org/apache/directory/server/core/api/CacheService.java b/core-api/src/main/java/org/apache/directory/server/core/api/CacheService.java
index 46d653e..316b6f6 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/api/CacheService.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/api/CacheService.java
@@ -21,23 +21,23 @@
 package org.apache.directory.server.core.api;
 
 
-import java.io.File;
-import java.net.MalformedURLException;
 import java.util.Iterator;
 
-import org.ehcache.Cache;
-import org.ehcache.Cache.Entry;
-import org.ehcache.CacheManager;
-import org.ehcache.Status;
-import org.ehcache.config.builders.CacheManagerBuilder;
-import org.ehcache.xml.XmlConfiguration;
-import org.ehcache.xml.exceptions.XmlConfigurationException;
+import javax.cache.Cache;
+import javax.cache.Cache.Entry;
+import javax.cache.CacheManager;
+
+import org.apache.directory.api.ldap.model.name.Dn;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.github.benmanes.caffeine.jcache.CacheManagerImpl;
+import com.github.benmanes.caffeine.jcache.spi.CaffeineCachingProvider;
+import com.typesafe.config.ConfigFactory;
+
 
 /**
- * A ehcache based cache service to be used for various caching requirement in the server. 
+ * A cache service to be used for various caching requirement in the server. 
  * 
  * If a cache config file with the name {@link #DIRECTORY_CACHESERVICE_XML} is present in
  * the "workdirectory" of the DirectoryService then that file will be used for configuring 
@@ -49,17 +49,17 @@
 public class CacheService
 {
     /** The cache configuration file */
-    private static final String DIRECTORY_CACHESERVICE_XML = "directory-cacheservice.xml";
+    //private static final String DIRECTORY_CACHESERVICE_XML = "directory-cacheservice.xml";
 
     /** The associated logger */
     private static final Logger LOG = LoggerFactory.getLogger( CacheService.class );
 
-    /** the ehcache cache manager */
+    /** the cache manager */
     private CacheManager cacheManager = null;
 
     /**
      * Utility method to dump the cache contents to a StringBuffer.
-     * This is needed because ehcache 3.x Cache objects only implements Iterable
+     * This is needed because Cache objects only implements Iterable
      * 
      * @return a StringBuffer
      */
@@ -70,7 +70,7 @@
         
         while ( it.hasNext() )
         {
-            Cache.Entry< ?, ? > nextObj = ( Entry<?, ?> ) it.next();
+            Entry<?, ?> nextObj = ( Entry<?, ?> ) it.next();
             sb.append( '\t' )
             .append( nextObj.getKey().toString() )
             .append( " -> " )
@@ -92,7 +92,7 @@
     /**
      * Creates a new instance of CacheService with the given cache manager.
      *
-     * @param cachemanager The provided CaxcheManager instance
+     * @param cachemanager The provided CacheManager instance
      */
     public CacheService( CacheManager cachemanager )
     {
@@ -121,48 +121,26 @@
     {
         LOG.debug( "CacheService initialization, for instance {}", instanceId );
 
-        if ( ( cacheManager != null ) && ( cacheManager.getStatus() == Status.AVAILABLE ) )
+        if ( ( cacheManager != null ) && ( !cacheManager.isClosed() ) )
         {
             LOG.warn( "cache service was already initialized and is available" );
 
             return;
         }
 
-        XmlConfiguration cc = null;
+        CaffeineCachingProvider p = new CaffeineCachingProvider();
+        cacheManager = new CacheManagerImpl( p, p.getDefaultURI(), getClass().getClassLoader(),
+            p.getDefaultProperties(),
+            ConfigFactory.load( getClass().getClassLoader() ) );
+        //CaffeineCachingProvider
+//        CachingProvider cachingProvider = Caching.getCachingProvider(
+//            "com.github.benmanes.caffeine.jcache.spi.CaffeineCachingProvider",
+//            getClass().getClassLoader() );
+//        cacheManager = cachingProvider.getCacheManager();
+        System.out.println( "###### entryDn cache: " + cacheManager.getCache( "entryDn", String.class, Dn.class ) );
 
-        if ( layout != null )
-        {
-            File configFile = new File( layout.getConfDirectory(), DIRECTORY_CACHESERVICE_XML );
-
-            if ( !configFile.exists() )
-            {
-                LOG.info( "no custom cache configuration was set, loading the default cache configuration" );
-                cc = new XmlConfiguration( getClass().getClassLoader().getResource(
-                    DIRECTORY_CACHESERVICE_XML ), getClass().getClassLoader() );
-            }
-            else
-            {
-                LOG.info( "loading cache configuration from the file {}", configFile );
-                
-                try
-                {
-                    cc = new XmlConfiguration( configFile.toURI().toURL(), getClass().getClassLoader() );
-                }
-                catch ( XmlConfigurationException | MalformedURLException e ) 
-                {
-                    LOG.error( "exception loading cache configuration from the file {}: {}", configFile, e.toString() );
-                }
-            }
-        }
-        else
-        {
-            LOG.info( "no custom cache configuration was set, loading the default cache configuration" );
-            cc = new XmlConfiguration( getClass().getClassLoader().getResource(
-                DIRECTORY_CACHESERVICE_XML ), getClass().getClassLoader() );
-        }
-
-        cacheManager = CacheManagerBuilder.newCacheManager( cc );
-        cacheManager.init();
+        // TODO: need to create caches?
+        //cacheManager.createCache( cacheName, configuration )
     }
 
 
@@ -200,7 +178,7 @@
         LOG.info( "fetching the cache named {}", name );
 
         Cache<K, V> cache = cacheManager.getCache( name, keyClazz, valueClazz );
-        
+
         return cache;
     }
 
@@ -214,6 +192,6 @@
     {
         LOG.info( "Removing the cache named {}", name );
         
-        cacheManager.removeCache( name );
+        cacheManager.destroyCache( name );
     }
 }
diff --git a/core-api/src/main/resources/application.conf b/core-api/src/main/resources/application.conf
new file mode 100644
index 0000000..67bfcb8
--- /dev/null
+++ b/core-api/src/main/resources/application.conf
@@ -0,0 +1,111 @@
+caffeine.jcache {
+
+  groupCache {
+    key-type = java.lang.String
+    value-type = java.util.Set
+    policy {
+      lazy-expiration {
+        creation = 1200s
+      }
+      maximum {
+        size = 10000
+      }
+    }
+  }
+  dnCache {
+    key-type = java.lang.String
+    value-type = org.apache.directory.api.ldap.model.name.Dn
+    policy {
+      lazy-expiration {
+        creation = 600s
+      }
+      maximum {
+        size = 10000
+      }
+    }
+  }
+  kdcReplayCache {
+    key-type = java.lang.String
+    value-type = org.apache.directory.server.kerberos.shared.replay.ReplayCacheImpl.ReplayCacheEntry
+    policy {
+      lazy-expiration {
+        creation = 600s
+      }
+      maximum {
+        size = 100
+      }
+    }
+  }
+  changePwdReplayCache {
+    key-type = java.lang.String
+    value-type = org.apache.directory.server.kerberos.shared.replay.ReplayCacheImpl.ReplayCacheEntry
+    policy {
+      lazy-expiration {
+        creation = 600s
+      }
+      maximum {
+        size = 100
+      }
+    }
+  }
+  "ou=system" {
+    key-type = java.lang.String
+    value-type = java.lang.Object
+    policy {
+      lazy-expiration {
+        creation = 600s
+      }
+      maximum {
+        size = 1000
+      }
+    }
+  }
+  "ou=system:apacheRdn" {
+    key-type = java.lang.String
+    value-type = java.lang.Object
+    policy {
+      lazy-expiration {
+        creation = 600s
+      }
+      maximum {
+        size = 10000
+      }
+    }
+  }
+  alias {
+    key-type = java.lang.String
+    value-type = org.apache.directory.api.ldap.model.name.Dn
+    policy {
+      lazy-expiration {
+        creation = 1200s
+      }
+      maximum {
+        size = 1000
+      }
+    }
+  }
+  entryDn {
+    key-type = java.lang.String
+    value-type = org.apache.directory.api.ldap.model.name.Dn
+    policy {
+      lazy-expiration {
+        creation = 1200s
+      }
+      maximum {
+        size = 1000
+      }
+    }
+  }
+  piar {
+    key-type = java.lang.String
+    value-type = org.apache.directory.server.xdbm.ParentIdAndRdn
+    policy {
+      lazy-expiration {
+        creation = 1200s
+      }
+      maximum {
+        size = 1000
+      }
+    }
+  }
+}
diff --git a/core-shared/pom.xml b/core-shared/pom.xml
index 7d1ca28..ce022f0 100644
--- a/core-shared/pom.xml
+++ b/core-shared/pom.xml
@@ -76,10 +76,10 @@
       <groupId>org.apache.directory.api</groupId>
       <artifactId>api-util</artifactId>
     </dependency>
-    
+
     <dependency>
-      <groupId>org.ehcache</groupId>
-      <artifactId>ehcache</artifactId>
+      <groupId>javax.cache</groupId>
+      <artifactId>cache-api</artifactId>
     </dependency>
 
     <dependency>
@@ -143,11 +143,11 @@
             </Export-Package>
             <Import-Package>
                 javax.naming.directory,
+                javax.cache,
                 jdbm,
                 jdbm.btree,
                 jdbm.helper,
                 jdbm.recman,
-                org.ehcache;version=${ehcache.version},
                 org.apache.directory.api.ldap.codec.api;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.extras.controls.syncrepl.syncDone;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.extras.controls.syncrepl.syncState;version=${org.apache.directory.api.version},
diff --git a/core-shared/src/main/java/org/apache/directory/server/core/shared/DefaultDnFactory.java b/core-shared/src/main/java/org/apache/directory/server/core/shared/DefaultDnFactory.java
index af896fd..b066201 100644
--- a/core-shared/src/main/java/org/apache/directory/server/core/shared/DefaultDnFactory.java
+++ b/core-shared/src/main/java/org/apache/directory/server/core/shared/DefaultDnFactory.java
@@ -20,8 +20,7 @@
 
 package org.apache.directory.server.core.shared;
 
-
-import org.ehcache.Cache;
+import javax.cache.Cache;
 
 import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
 import org.apache.directory.api.ldap.model.name.Dn;
diff --git a/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java b/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
index a8a965f..ea930ba 100644
--- a/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
+++ b/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
@@ -267,7 +267,7 @@
 
     private static final String LOCK_FILE_NAME = ".dirservice.lock";
 
-    /** the ehcache based cache service */
+    /** the cache service */
     private CacheService cacheService;
 
     /** The AccessControl AdministrativePoint cache */
diff --git a/interceptors/authz/pom.xml b/interceptors/authz/pom.xml
index 48fd893..abcdd4a 100644
--- a/interceptors/authz/pom.xml
+++ b/interceptors/authz/pom.xml
@@ -73,8 +73,8 @@
     </dependency>
     
     <dependency>
-      <groupId>org.ehcache</groupId>
-      <artifactId>ehcache</artifactId>
+      <groupId>javax.cache</groupId>
+      <artifactId>cache-api</artifactId>
     </dependency>
   </dependencies>
 
@@ -130,7 +130,7 @@
             </Export-Package>
             <Import-Package>
                 javax.naming.directory,
-                org.ehcache;version=${ehcache.version},
+                javax.cache,
                 org.apache.directory.api.ldap.aci;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.aci.protectedItem;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.model.constants;version=${org.apache.directory.api.version},
diff --git a/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/GroupCache.java b/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/GroupCache.java
index 5dc6eef..7db86ab 100644
--- a/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/GroupCache.java
+++ b/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/GroupCache.java
@@ -25,10 +25,9 @@
 import java.util.List;
 import java.util.Set;
 
+import javax.cache.Cache;
 import javax.naming.directory.SearchControls;
 
-import org.ehcache.Cache;
-
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
 import org.apache.directory.api.ldap.model.entry.Attribute;
 import org.apache.directory.api.ldap.model.entry.Entry;
diff --git a/interceptors/subtree/pom.xml b/interceptors/subtree/pom.xml
index e822e71..44349af 100644
--- a/interceptors/subtree/pom.xml
+++ b/interceptors/subtree/pom.xml
@@ -78,8 +78,19 @@
     </dependency>
     
     <dependency>
-      <groupId>org.ehcache</groupId>
-      <artifactId>ehcache</artifactId>
+      <groupId>javax.cache</groupId>
+      <artifactId>cache-api</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.github.ben-manes.caffeine</groupId>
+      <artifactId>caffeine</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.github.ben-manes.caffeine</groupId>
+      <artifactId>jcache</artifactId>
+      <scope>test</scope>
     </dependency>
   </dependencies>
 
@@ -134,8 +145,7 @@
             </Export-Package>
             <Import-Package>
                 javax.naming.directory,
-                org.ehcache;version=${ehcache.version},
-                org.ehcache.config.builders;version=${ehcache.version},
+                javax.cache,
                 org.apache.directory.api.ldap.codec.controls.search.subentries;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.model.constants;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.model.entry;version=${org.apache.directory.api.version},
diff --git a/interceptors/subtree/src/test/java/org/apache/directory/server/core/subtree/SubtreeEvaluatorTest.java b/interceptors/subtree/src/test/java/org/apache/directory/server/core/subtree/SubtreeEvaluatorTest.java
index ad384f5..ed7a5a6 100644
--- a/interceptors/subtree/src/test/java/org/apache/directory/server/core/subtree/SubtreeEvaluatorTest.java
+++ b/interceptors/subtree/src/test/java/org/apache/directory/server/core/subtree/SubtreeEvaluatorTest.java
@@ -28,6 +28,12 @@
 import java.util.HashSet;
 import java.util.Set;
 
+import javax.cache.Cache;
+import javax.cache.CacheManager;
+import javax.cache.Caching;
+import javax.cache.configuration.MutableConfiguration;
+import javax.cache.spi.CachingProvider;
+
 import org.apache.directory.api.ldap.model.entry.DefaultEntry;
 import org.apache.directory.api.ldap.model.entry.Entry;
 import org.apache.directory.api.ldap.model.filter.ExprNode;
@@ -46,11 +52,6 @@
 import org.apache.directory.server.core.api.normalization.FilterNormalizingVisitor;
 import org.apache.directory.server.core.api.subtree.SubtreeEvaluator;
 import org.apache.directory.server.core.shared.DefaultDnFactory;
-import org.ehcache.Cache;
-import org.ehcache.CacheManager;
-import org.ehcache.config.builders.CacheConfigurationBuilder;
-import org.ehcache.config.builders.CacheManagerBuilder;
-import org.ehcache.config.builders.ResourcePoolsBuilder;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -102,9 +103,10 @@
             fail( "Schema load failed : " + Exceptions.printErrors( schemaManager.getErrors() ) );
         }
 
-        CacheManager cm = CacheManagerBuilder.newCacheManagerBuilder().withCache( "dnCache", CacheConfigurationBuilder.newCacheConfigurationBuilder( String.class, Dn.class, ResourcePoolsBuilder.heap(1000)).build()).build();
-        cm.init();
-        dnCache = cm.getCache( "dnCache", String.class, Dn.class );        dnFactory = new DefaultDnFactory( schemaManager, dnCache );
+        CachingProvider cachingProvider = Caching.getCachingProvider();
+        CacheManager cm = cachingProvider.getCacheManager();
+        dnCache = cm.getCache( "dnCache");
+        dnFactory = new DefaultDnFactory( schemaManager, dnCache );
 
         ncn = new ConcreteNameComponentNormalizer( schemaManager );
 
diff --git a/jdbm-partition/pom.xml b/jdbm-partition/pom.xml
index 21c35ce..ae03963 100644
--- a/jdbm-partition/pom.xml
+++ b/jdbm-partition/pom.xml
@@ -150,7 +150,7 @@
                 jdbm.btree,
                 jdbm.helper,
                 jdbm.recman,
-                org.ehcache;version=${ehcache.version},
+                javax.cache,
                 org.apache.directory.api.ldap.model.constants;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.model.csn;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.model.cursor;version=${org.apache.directory.api.version},
diff --git a/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java b/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java
index 263ec91..89c0921 100644
--- a/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java
+++ b/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java
@@ -29,6 +29,8 @@
 import java.util.List;
 import java.util.UUID;
 
+import javax.cache.Cache;
+
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
 import org.apache.directory.api.ldap.model.csn.CsnFactory;
 import org.apache.directory.api.ldap.model.cursor.Cursor;
@@ -70,7 +72,6 @@
 import org.apache.directory.server.xdbm.search.impl.DefaultSearchEngine;
 import org.apache.directory.server.xdbm.search.impl.EvaluatorBuilder;
 import org.apache.directory.server.xdbm.search.impl.NoOpOptimizer;
-import org.ehcache.Cache;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/kerberos-codec/pom.xml b/kerberos-codec/pom.xml
index 918e1aa..901325f 100644
--- a/kerberos-codec/pom.xml
+++ b/kerberos-codec/pom.xml
@@ -69,8 +69,18 @@
     </dependency>
     
     <dependency>
-      <groupId>org.ehcache</groupId>
-      <artifactId>ehcache</artifactId>
+      <groupId>javax.cache</groupId>
+      <artifactId>cache-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.github.ben-manes.caffeine</groupId>
+      <artifactId>caffeine</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.github.ben-manes.caffeine</groupId>
+      <artifactId>jcache</artifactId>
+      <scope>test</scope>
     </dependency>
   </dependencies>
 
@@ -134,7 +144,7 @@
                 javax.crypto,
                 javax.crypto.spec,
                 javax.security.auth.kerberos,
-                org.ehcache;version=${ehcache.version},
+                javax.cache,
                 org.apache.directory.api.asn1;version=${org.apache.directory.api.version},
                 org.apache.directory.api.asn1.actions;version=${org.apache.directory.api.version},
                 org.apache.directory.api.asn1.ber;version=${org.apache.directory.api.version},
diff --git a/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/shared/replay/ReplayCacheImpl.java b/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/shared/replay/ReplayCacheImpl.java
index 58aa5a0..c4e4026 100644
--- a/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/shared/replay/ReplayCacheImpl.java
+++ b/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/shared/replay/ReplayCacheImpl.java
@@ -22,10 +22,10 @@
 
 import java.io.Serializable;
 
+import javax.cache.Cache;
 import javax.security.auth.kerberos.KerberosPrincipal;
 
 import org.apache.directory.shared.kerberos.KerberosTime;
-import org.ehcache.Cache;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -44,8 +44,8 @@
 
     private static final Logger LOG = LoggerFactory.getLogger( ReplayCacheImpl.class );
 
-    /** ehcache based storage to store the entries */
-    private Cache< String, Object > cache;
+    /** cache to store the entries */
+    private Cache<String, ReplayCacheEntry> cache;
 
     /** default clock skew */
     private static final long DEFAULT_CLOCK_SKEW = 5L * KerberosTime.MINUTE;
@@ -141,7 +141,7 @@
      * Creates a new instance of InMemoryReplayCache. Sets the
      * delay between each cleaning run to 5 seconds.
      */
-    public ReplayCacheImpl( Cache < String, Object > cache )
+    public ReplayCacheImpl( Cache<String, ReplayCacheEntry> cache )
     {
         this.cache = cache;
     }
@@ -154,7 +154,7 @@
      * 
      * @param clockSkew the allowed skew (milliseconds)
      */
-    public ReplayCacheImpl( Cache< String, Object > cache, long clockSkew )
+    public ReplayCacheImpl( Cache<String, ReplayCacheEntry> cache, long clockSkew )
     {
         this.cache = cache;
         this.clockSkew = clockSkew;
@@ -180,7 +180,7 @@
     {
         ReplayCacheEntry entry = new ReplayCacheEntry( serverPrincipal, 
             clientPrincipal, clientTime, clientMicroSeconds );
-        ReplayCacheEntry found = ( ReplayCacheEntry ) cache.get( entry.createKey() );
+        ReplayCacheEntry found = cache.get( entry.createKey() );
 
         if ( found == null )
         {
diff --git a/kerberos-codec/src/test/java/org/apache/directory/server/kerberos/shared/replay/ReplayCacheImplTest.java b/kerberos-codec/src/test/java/org/apache/directory/server/kerberos/shared/replay/ReplayCacheImplTest.java
index 1de75b1..00c4145 100644
--- a/kerberos-codec/src/test/java/org/apache/directory/server/kerberos/shared/replay/ReplayCacheImplTest.java
+++ b/kerberos-codec/src/test/java/org/apache/directory/server/kerberos/shared/replay/ReplayCacheImplTest.java
@@ -20,6 +20,7 @@
 package org.apache.directory.server.kerberos.shared.replay;
 
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
@@ -28,25 +29,26 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.OptionalLong;
 
+import javax.cache.Cache;
+import javax.cache.CacheManager;
+import javax.cache.Caching;
+import javax.cache.configuration.MutableConfiguration;
+import javax.cache.spi.CachingProvider;
 import javax.security.auth.kerberos.KerberosPrincipal;
 
+import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.junit.tools.MultiThreadedMultiInvoker;
+import org.apache.directory.server.kerberos.shared.replay.ReplayCacheImpl.ReplayCacheEntry;
 import org.apache.directory.shared.kerberos.KerberosTime;
 import org.apache.directory.shared.kerberos.codec.types.PrincipalNameType;
-import org.ehcache.Cache;
-import org.ehcache.Cache.Entry;
-import org.ehcache.CacheManager;
-import org.ehcache.Status;
-import org.ehcache.config.builders.CacheConfigurationBuilder;
-import org.ehcache.config.builders.CacheManagerBuilder;
-import org.ehcache.config.builders.ExpiryPolicyBuilder;
-import org.ehcache.config.builders.ResourcePoolsBuilder;
 
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import com.github.benmanes.caffeine.jcache.configuration.CaffeineConfiguration;
 import com.mycila.junit.concurrent.Concurrency;
 import com.mycila.junit.concurrent.ConcurrentJunitRunner;
 
@@ -79,25 +81,14 @@
         {
             long clockSkew = 1000; // 1 sec
 
-            cacheManager = CacheManagerBuilder.newCacheManagerBuilder().build();
-            
-            cacheManager.init();
+            CachingProvider cachingProvider = Caching.getCachingProvider();
+            CacheManager cm = cachingProvider.getCacheManager();
+            CaffeineConfiguration<String, ReplayCacheEntry> config = new CaffeineConfiguration<>();
+            config.setMaximumSize( OptionalLong.of( 4L ) );
+            config.setExpireAfterAccess( OptionalLong.of( 1000L * 1000L * 1000L) );
+            Cache<String, ReplayCacheEntry> kdcReplayCache = cm.createCache( "kdcReplayCache", config );
 
-            Cache< String, Object > ehCache = cacheManager.createCache( 
-                    "kdcReplayCache", 
-                    CacheConfigurationBuilder.newCacheConfigurationBuilder(
-                            String.class, 
-                            Object.class, 
-                            ResourcePoolsBuilder.heap(4)
-                    )
-                        .withExpiry(
-                            ExpiryPolicyBuilder
-                                .timeToIdleExpiration( Duration.ofMillis( 1000 ) )
-                                )
-                        .withExpiry(ExpiryPolicyBuilder.timeToLiveExpiration( Duration.ofMillis( 1000 )))
-            );
-            
-            ReplayCacheImpl cache = new ReplayCacheImpl( ehCache, clockSkew );
+            ReplayCacheImpl cache = new ReplayCacheImpl( kdcReplayCache, clockSkew );
 
             int i = 0;
 
@@ -115,7 +106,7 @@
             }
 
             List<String> keys = new ArrayList<>();
-            Iterator<Entry<String, Object>> it = ehCache.iterator();
+            Iterator<Cache.Entry<String, ReplayCacheEntry>> it = kdcReplayCache.iterator();
             
             while (it.hasNext())
             {
@@ -123,6 +114,7 @@
             }
 
             // We should have 4 entries
+            assertEquals( 4, keys.size() );
             assertTrue( keys.size() != 0 );
 
             // Wait till the timetolive time exceeds
@@ -131,14 +123,14 @@
             // then access the cache so that the objects present in the cache will be expired
             for ( String k : keys )
             {
-                assertNull( ehCache.get( k ) );
+                assertNull( kdcReplayCache.get( k ) );
             }
 
-            assertFalse( ehCache.iterator().hasNext() );
+            assertFalse( kdcReplayCache.iterator().hasNext() );
         }
         finally
         {
-            if ( cacheManager != null && cacheManager.getStatus() != Status.UNINITIALIZED)
+            if ( cacheManager != null && !cacheManager.isClosed() )
             {
                 cacheManager.close();
             }
diff --git a/mavibot-partition/pom.xml b/mavibot-partition/pom.xml
index ea03943..6d7ae6a 100644
--- a/mavibot-partition/pom.xml
+++ b/mavibot-partition/pom.xml
@@ -133,7 +133,7 @@
                 org.apache.directory.server.core.partition.impl.btree.mavibot;version=${project.version}
             </Export-Package>
             <Import-Package>
-                org.ehcache;version=${ehcache.version},
+                javax.cache,
                 org.apache.directory.api.ldap.model.constants;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.model.cursor;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.model.entry;version=${org.apache.directory.api.version},
diff --git a/mavibot-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/mavibot/MavibotPartition.java b/mavibot-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/mavibot/MavibotPartition.java
index 42ea6a9..f8b6569 100644
--- a/mavibot-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/mavibot/MavibotPartition.java
+++ b/mavibot-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/mavibot/MavibotPartition.java
@@ -30,7 +30,8 @@
 import java.util.List;
 import java.util.Set;
 
-import org.ehcache.Cache;
+import javax.cache.Cache;
+
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
 import org.apache.directory.api.ldap.model.cursor.Cursor;
 import org.apache.directory.api.ldap.model.cursor.Tuple;
diff --git a/osgi-integ/src/test/java/org/apache/directory/server/osgi/integ/ServerCoreAnnotationsOsgiTest.java b/osgi-integ/src/test/java/org/apache/directory/server/osgi/integ/ServerCoreAnnotationsOsgiTest.java
index 818aad8..2268296 100644
--- a/osgi-integ/src/test/java/org/apache/directory/server/osgi/integ/ServerCoreAnnotationsOsgiTest.java
+++ b/osgi-integ/src/test/java/org/apache/directory/server/osgi/integ/ServerCoreAnnotationsOsgiTest.java
@@ -22,8 +22,22 @@
 
 import static org.junit.Assert.assertNotNull;
 
+import java.util.Set;
+
+import javax.cache.Cache;
+import javax.cache.CacheManager;
+import javax.cache.Caching;
+import javax.cache.spi.CachingProvider;
+
+import org.apache.directory.api.ldap.model.name.Dn;
+import org.apache.directory.server.core.api.CacheService;
 import org.apache.directory.server.core.api.DirectoryService;
 import org.apache.directory.server.core.factory.DefaultDirectoryServiceFactory;
+import org.junit.Test;
+
+import com.github.benmanes.caffeine.jcache.CacheManagerImpl;
+import com.github.benmanes.caffeine.jcache.spi.CaffeineCachingProvider;
+import com.typesafe.config.ConfigFactory;
 
 
 public class ServerCoreAnnotationsOsgiTest extends ServerOsgiTestBase
@@ -44,5 +58,28 @@
         DirectoryService ds = factory.getDirectoryService();
         assertNotNull( ds );
     }
+    
+    @Test
+    public void test123() {
+        CachingProvider cachingProvider = Caching.getCachingProvider(
+            "com.github.benmanes.caffeine.jcache.spi.CaffeineCachingProvider",
+            CacheService.class.getClassLoader());
+        Cache<String, Set> cache = cachingProvider.getCacheManager()
+            .getCache("groupCache", String.class, Set.class);
+        System.out.println( cache );
+    }
+    
+    @Test
+    public void test234() {
+        CaffeineCachingProvider p = new CaffeineCachingProvider();
+        CacheManager cacheManager = new CacheManagerImpl( p, p.getDefaultURI(), getClass().getClassLoader(),
+            p.getDefaultProperties(),
+            ConfigFactory.load( getClass().getClassLoader() ) );
+
+        
+        Cache<String, Set> cache = cacheManager
+            .getCache("groupCache", String.class, Set.class);
+        System.out.println( cache );
+    }
 
 }
diff --git a/osgi-integ/src/test/java/org/apache/directory/server/osgi/integ/ServerOsgiTestBase.java b/osgi-integ/src/test/java/org/apache/directory/server/osgi/integ/ServerOsgiTestBase.java
index a5a6f20..e0de1a0 100644
--- a/osgi-integ/src/test/java/org/apache/directory/server/osgi/integ/ServerOsgiTestBase.java
+++ b/osgi-integ/src/test/java/org/apache/directory/server/osgi/integ/ServerOsgiTestBase.java
@@ -122,7 +122,7 @@
         
         for ( Bundle bundle : bundles )
         {
-            //System.out.println( "### bundle=" + bundle + " " + bundle.getState() );
+            System.out.println( "### bundle=" + bundle + " " + bundle.getState() );
             if ( bundle != null && bundle.getSymbolicName() != null && bundle.getSymbolicName().equals( bundleName ) )
             {
                 bundleFound = true;
diff --git a/osgi-integ/src/test/resources/application.conf b/osgi-integ/src/test/resources/application.conf
new file mode 100644
index 0000000..67bfcb8
--- /dev/null
+++ b/osgi-integ/src/test/resources/application.conf
@@ -0,0 +1,111 @@
+caffeine.jcache {
+
+  groupCache {
+    key-type = java.lang.String
+    value-type = java.util.Set
+    policy {
+      lazy-expiration {
+        creation = 1200s
+      }
+      maximum {
+        size = 10000
+      }
+    }
+  }
+  dnCache {
+    key-type = java.lang.String
+    value-type = org.apache.directory.api.ldap.model.name.Dn
+    policy {
+      lazy-expiration {
+        creation = 600s
+      }
+      maximum {
+        size = 10000
+      }
+    }
+  }
+  kdcReplayCache {
+    key-type = java.lang.String
+    value-type = org.apache.directory.server.kerberos.shared.replay.ReplayCacheImpl.ReplayCacheEntry
+    policy {
+      lazy-expiration {
+        creation = 600s
+      }
+      maximum {
+        size = 100
+      }
+    }
+  }
+  changePwdReplayCache {
+    key-type = java.lang.String
+    value-type = org.apache.directory.server.kerberos.shared.replay.ReplayCacheImpl.ReplayCacheEntry
+    policy {
+      lazy-expiration {
+        creation = 600s
+      }
+      maximum {
+        size = 100
+      }
+    }
+  }
+  "ou=system" {
+    key-type = java.lang.String
+    value-type = java.lang.Object
+    policy {
+      lazy-expiration {
+        creation = 600s
+      }
+      maximum {
+        size = 1000
+      }
+    }
+  }
+  "ou=system:apacheRdn" {
+    key-type = java.lang.String
+    value-type = java.lang.Object
+    policy {
+      lazy-expiration {
+        creation = 600s
+      }
+      maximum {
+        size = 10000
+      }
+    }
+  }
+  alias {
+    key-type = java.lang.String
+    value-type = org.apache.directory.api.ldap.model.name.Dn
+    policy {
+      lazy-expiration {
+        creation = 1200s
+      }
+      maximum {
+        size = 1000
+      }
+    }
+  }
+  entryDn {
+    key-type = java.lang.String
+    value-type = org.apache.directory.api.ldap.model.name.Dn
+    policy {
+      lazy-expiration {
+        creation = 1200s
+      }
+      maximum {
+        size = 1000
+      }
+    }
+  }
+  piar {
+    key-type = java.lang.String
+    value-type = org.apache.directory.server.xdbm.ParentIdAndRdn
+    policy {
+      lazy-expiration {
+        creation = 1200s
+      }
+      maximum {
+        size = 1000
+      }
+    }
+  }
+}
diff --git a/pom.xml b/pom.xml
index ca4ac5b..09778cc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -57,15 +57,15 @@
     <ant.version>1.10.1</ant.version>
     <bcprov.version>1.60</bcprov.version>
     <commons.cli.version>1.4</commons.cli.version>
-    <commons.codec.version>1.11</commons.codec.version>
-    <commons.collections.version>4.2</commons.collections.version>
+    <commons.codec.version>1.12</commons.codec.version>
+    <commons.collections.version>4.3</commons.collections.version>
     <commons.daemon.version>1.0.15</commons.daemon.version>
     <commons.lang.version>3.8.1</commons.lang.version>
     <commons.net.version>3.6</commons.net.version>
-    <commons.pool.version>2.6.0</commons.pool.version>
+    <commons.pool.version>2.6.1</commons.pool.version>
     <dnsjava.version>2.1.8</dnsjava.version>
-    <!-- OSGi related issue in ehcache 3.6.x: https://github.com/ehcache/ehcache3/issues/2554 -->
-    <ehcache.version>3.5.3</ehcache.version>
+    <javax.cache.version>1.1.0</javax.cache.version>
+    <caffeine.cache.version>2.7.0</caffeine.cache.version>
     <findbugs.annotations.version>1.0.0</findbugs.annotations.version>
     <jetty.version>9.4.14.v20181114</jetty.version>
     <!-- The Jetty bundle exports are using version 9.4.5, not 9.4.5.v20170502... -->
@@ -78,7 +78,7 @@
     <maven.artifact.version>3.3.9</maven.artifact.version>
     <maven.plugin.api.version>3.3.9</maven.plugin.api.version>
     <maven.project.version>3.0-alpha-2</maven.project.version>
-    <mina.core.version>2.0.18</mina.core.version>
+    <mina.core.version>2.1.0</mina.core.version>
     <org.apache.felix.version>6.0.0</org.apache.felix.version>
     <pax-exam.version>4.11.0</pax-exam.version>
     <pax-url.version>2.5.4</pax-url.version>
@@ -1238,11 +1238,37 @@
         <artifactId>annotations</artifactId>
         <version>${findbugs.annotations.version}</version>
       </dependency>
-      
+
       <dependency>
-        <groupId>org.ehcache</groupId>
-        <artifactId>ehcache</artifactId>
-        <version>${ehcache.version}</version>
+        <groupId>javax.cache</groupId>
+        <artifactId>cache-api</artifactId>
+        <version>${javax.cache.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>com.github.ben-manes.caffeine</groupId>
+        <artifactId>caffeine</artifactId>
+        <version>${caffeine.cache.version}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>com.google.errorprone</groupId>
+            <artifactId>error_prone_annotations</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>org.checkerframework</groupId>
+            <artifactId>checker-qual</artifactId>
+           </exclusion>
+         </exclusions>
+      </dependency>
+      <dependency>
+        <groupId>com.github.ben-manes.caffeine</groupId>
+        <artifactId>jcache</artifactId>
+        <version>${caffeine.cache.version}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+          </exclusion>
+         </exclusions>
       </dependency>
     </dependencies>
   </dependencyManagement>
diff --git a/protocol-kerberos/pom.xml b/protocol-kerberos/pom.xml
index aed97c0..897f1e1 100644
--- a/protocol-kerberos/pom.xml
+++ b/protocol-kerberos/pom.xml
@@ -73,8 +73,8 @@
     </dependency>
 
     <dependency>
-      <groupId>org.ehcache</groupId>
-      <artifactId>ehcache</artifactId>
+      <groupId>javax.cache</groupId>
+      <artifactId>cache-api</artifactId>
     </dependency>
   </dependencies>
 
@@ -139,7 +139,7 @@
                 javax.naming,
                 javax.naming.directory,
                 javax.security.auth.kerberos,
-                org.ehcache;version=${ehcache.version},
+                javax.cache,
                 org.apache.directory.api.asn1;version=${org.apache.directory.api.version},
                 org.apache.directory.api.asn1.ber;version=${org.apache.directory.api.version},
                 org.apache.directory.api.asn1.ber.tlv;version=${org.apache.directory.api.version},
diff --git a/protocol-kerberos/src/main/java/org/apache/directory/server/kerberos/changepwd/ChangePasswordServer.java b/protocol-kerberos/src/main/java/org/apache/directory/server/kerberos/changepwd/ChangePasswordServer.java
index b9b9b90..4a80c48 100644
--- a/protocol-kerberos/src/main/java/org/apache/directory/server/kerberos/changepwd/ChangePasswordServer.java
+++ b/protocol-kerberos/src/main/java/org/apache/directory/server/kerberos/changepwd/ChangePasswordServer.java
@@ -22,6 +22,8 @@
 
 import java.io.IOException;
 
+import javax.cache.Cache;
+
 import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.server.kerberos.ChangePasswordConfig;
@@ -29,6 +31,7 @@
 import org.apache.directory.server.kerberos.kdc.DirectoryPrincipalStore;
 import org.apache.directory.server.kerberos.shared.replay.ReplayCache;
 import org.apache.directory.server.kerberos.shared.replay.ReplayCacheImpl;
+import org.apache.directory.server.kerberos.shared.replay.ReplayCacheImpl.ReplayCacheEntry;
 import org.apache.directory.server.kerberos.shared.store.PrincipalStore;
 import org.apache.directory.server.protocol.shared.DirectoryBackedService;
 import org.apache.directory.server.protocol.shared.transport.TcpTransport;
@@ -37,7 +40,6 @@
 import org.apache.mina.core.service.IoAcceptor;
 import org.apache.mina.transport.socket.DatagramSessionConfig;
 import org.apache.mina.transport.socket.SocketAcceptor;
-import org.ehcache.Cache;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -94,8 +96,8 @@
 
         LOG.debug( "initializing the changepassword replay cache" );
 
-        Cache< String, Object > cache = getDirectoryService().getCacheService().
-            getCache( "changePwdReplayCache", String.class, Object.class );
+        Cache<String, ReplayCacheEntry> cache = getDirectoryService().getCacheService().getCache( "changePwdReplayCache",
+            String.class, ReplayCacheEntry.class );
         replayCache = new ReplayCacheImpl( cache );
 
         for ( Transport transport : transports )
diff --git a/protocol-kerberos/src/main/java/org/apache/directory/server/kerberos/kdc/KdcServer.java b/protocol-kerberos/src/main/java/org/apache/directory/server/kerberos/kdc/KdcServer.java
index e23488f..4232c53 100644
--- a/protocol-kerberos/src/main/java/org/apache/directory/server/kerberos/kdc/KdcServer.java
+++ b/protocol-kerberos/src/main/java/org/apache/directory/server/kerberos/kdc/KdcServer.java
@@ -22,6 +22,8 @@
 
 import java.io.IOException;
 
+import javax.cache.Cache;
+
 import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.server.kerberos.KerberosConfig;
@@ -30,6 +32,7 @@
 import org.apache.directory.server.kerberos.protocol.codec.KerberosProtocolCodecFactory;
 import org.apache.directory.server.kerberos.shared.replay.ReplayCache;
 import org.apache.directory.server.kerberos.shared.replay.ReplayCacheImpl;
+import org.apache.directory.server.kerberos.shared.replay.ReplayCacheImpl.ReplayCacheEntry;
 import org.apache.directory.server.kerberos.shared.store.PrincipalStore;
 import org.apache.directory.server.protocol.shared.DirectoryBackedService;
 import org.apache.directory.server.protocol.shared.transport.TcpTransport;
@@ -39,7 +42,6 @@
 import org.apache.mina.core.service.IoAcceptor;
 import org.apache.mina.filter.codec.ProtocolCodecFilter;
 import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
-import org.ehcache.Cache;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -110,8 +112,8 @@
 
         LOG.debug( "initializing the kerberos replay cache" );
 
-        Cache< String, Object > cache = getDirectoryService().getCacheService().
-            getCache( "kdcReplayCache", String.class, Object.class );
+        Cache<String, ReplayCacheEntry> cache = getDirectoryService().getCacheService().getCache( "kdcReplayCache",
+            String.class, ReplayCacheEntry.class );
         replayCache = new ReplayCacheImpl( cache, config.getAllowableClockSkew() );
 
         // Kerberos can use UDP or TCP
diff --git a/xdbm-partition/pom.xml b/xdbm-partition/pom.xml
index 84c156a..11ebbfc 100644
--- a/xdbm-partition/pom.xml
+++ b/xdbm-partition/pom.xml
@@ -121,8 +121,7 @@
             </Export-Package>
             <Import-Package>
                 javax.naming,
-                org.ehcache;version=${ehcache.version},
-                org.ehcache.config;version=${ehcache.version},
+                javax.cache,
                 org.apache.directory.api.i18n;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.model.constants;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.model.cursor;version=${org.apache.directory.api.version},
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/AbstractBTreePartition.java b/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/AbstractBTreePartition.java
index 51fd374..a0c4dcd 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/AbstractBTreePartition.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/AbstractBTreePartition.java
@@ -35,8 +35,7 @@
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
-import org.ehcache.Cache;
-import org.ehcache.config.CacheConfiguration;
+import javax.cache.Cache;
 
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
 import org.apache.directory.api.ldap.model.cursor.Cursor;
@@ -627,7 +626,7 @@
         {
             aliasCache = cacheService.getCache( "alias", String.class, Dn.class );
     
-            CacheConfiguration< String, Dn > aliasCacheConfig = aliasCache.getRuntimeConfiguration();
+            //CacheConfiguration< String, Dn > aliasCacheConfig = aliasCache.getRuntimeConfiguration();
             
             piarCache = cacheService.getCache( "piar", String.class, ParentIdAndRdn.class );
             
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/Store.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/Store.java
index 595f4ab..4978d61 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/Store.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/Store.java
@@ -30,7 +30,7 @@
 import java.util.Set;
 import java.util.concurrent.locks.ReadWriteLock;
 
-import org.ehcache.Cache;
+import javax.cache.Cache;
 
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
 import org.apache.directory.api.ldap.model.entry.Entry;
@@ -485,5 +485,5 @@
      * @return the Alias cache
      * @return The cache
      */
-    Cache< String, Dn > getAliasCache();
+    Cache<String, Dn> getAliasCache();
 }
