diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..11069ed
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,201 @@
+                              Apache License
+                        Version 2.0, January 2004
+                     http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+   "License" shall mean the terms and conditions for use, reproduction,
+   and distribution as defined by Sections 1 through 9 of this document.
+
+   "Licensor" shall mean the copyright owner or entity authorized by
+   the copyright owner that is granting the License.
+
+   "Legal Entity" shall mean the union of the acting entity and all
+   other entities that control, are controlled by, or are under common
+   control with that entity. For the purposes of this definition,
+   "control" means (i) the power, direct or indirect, to cause the
+   direction or management of such entity, whether by contract or
+   otherwise, or (ii) ownership of fifty percent (50%) or more of the
+   outstanding shares, or (iii) beneficial ownership of such entity.
+
+   "You" (or "Your") shall mean an individual or Legal Entity
+   exercising permissions granted by this License.
+
+   "Source" form shall mean the preferred form for making modifications,
+   including but not limited to software source code, documentation
+   source, and configuration files.
+
+   "Object" form shall mean any form resulting from mechanical
+   transformation or translation of a Source form, including but
+   not limited to compiled object code, generated documentation,
+   and conversions to other media types.
+
+   "Work" shall mean the work of authorship, whether in Source or
+   Object form, made available under the License, as indicated by a
+   copyright notice that is included in or attached to the work
+   (an example is provided in the Appendix below).
+
+   "Derivative Works" shall mean any work, whether in Source or Object
+   form, that is based on (or derived from) the Work and for which the
+   editorial revisions, annotations, elaborations, or other modifications
+   represent, as a whole, an original work of authorship. For the purposes
+   of this License, Derivative Works shall not include works that remain
+   separable from, or merely link (or bind by name) to the interfaces of,
+   the Work and Derivative Works thereof.
+
+   "Contribution" shall mean any work of authorship, including
+   the original version of the Work and any modifications or additions
+   to that Work or Derivative Works thereof, that is intentionally
+   submitted to Licensor for inclusion in the Work by the copyright owner
+   or by an individual or Legal Entity authorized to submit on behalf of
+   the copyright owner. For the purposes of this definition, "submitted"
+   means any form of electronic, verbal, or written communication sent
+   to the Licensor or its representatives, including but not limited to
+   communication on electronic mailing lists, source code control systems,
+   and issue tracking systems that are managed by, or on behalf of, the
+   Licensor for the purpose of discussing and improving the Work, but
+   excluding communication that is conspicuously marked or otherwise
+   designated in writing by the copyright owner as "Not a Contribution."
+
+   "Contributor" shall mean Licensor and any individual or Legal Entity
+   on behalf of whom a Contribution has been received by Licensor and
+   subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+   this License, each Contributor hereby grants to You a perpetual,
+   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+   copyright license to reproduce, prepare Derivative Works of,
+   publicly display, publicly perform, sublicense, and distribute the
+   Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+   this License, each Contributor hereby grants to You a perpetual,
+   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+   (except as stated in this section) patent license to make, have made,
+   use, offer to sell, sell, import, and otherwise transfer the Work,
+   where such license applies only to those patent claims licensable
+   by such Contributor that are necessarily infringed by their
+   Contribution(s) alone or by combination of their Contribution(s)
+   with the Work to which such Contribution(s) was submitted. If You
+   institute patent litigation against any entity (including a
+   cross-claim or counterclaim in a lawsuit) alleging that the Work
+   or a Contribution incorporated within the Work constitutes direct
+   or contributory patent infringement, then any patent licenses
+   granted to You under this License for that Work shall terminate
+   as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+   Work or Derivative Works thereof in any medium, with or without
+   modifications, and in Source or Object form, provided that You
+   meet the following conditions:
+
+   (a) You must give any other recipients of the Work or
+       Derivative Works a copy of this License; and
+
+   (b) You must cause any modified files to carry prominent notices
+       stating that You changed the files; and
+
+   (c) You must retain, in the Source form of any Derivative Works
+       that You distribute, all copyright, patent, trademark, and
+       attribution notices from the Source form of the Work,
+       excluding those notices that do not pertain to any part of
+       the Derivative Works; and
+
+   (d) If the Work includes a "NOTICE" text file as part of its
+       distribution, then any Derivative Works that You distribute must
+       include a readable copy of the attribution notices contained
+       within such NOTICE file, excluding those notices that do not
+       pertain to any part of the Derivative Works, in at least one
+       of the following places: within a NOTICE text file distributed
+       as part of the Derivative Works; within the Source form or
+       documentation, if provided along with the Derivative Works; or,
+       within a display generated by the Derivative Works, if and
+       wherever such third-party notices normally appear. The contents
+       of the NOTICE file are for informational purposes only and
+       do not modify the License. You may add Your own attribution
+       notices within Derivative Works that You distribute, alongside
+       or as an addendum to the NOTICE text from the Work, provided
+       that such additional attribution notices cannot be construed
+       as modifying the License.
+
+   You may add Your own copyright statement to Your modifications and
+   may provide additional or different license terms and conditions
+   for use, reproduction, or distribution of Your modifications, or
+   for any such Derivative Works as a whole, provided Your use,
+   reproduction, and distribution of the Work otherwise complies with
+   the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+   any Contribution intentionally submitted for inclusion in the Work
+   by You to the Licensor shall be under the terms and conditions of
+   this License, without any additional terms or conditions.
+   Notwithstanding the above, nothing herein shall supersede or modify
+   the terms of any separate license agreement you may have executed
+   with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+   names, trademarks, service marks, or product names of the Licensor,
+   except as required for reasonable and customary use in describing the
+   origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+   agreed to in writing, Licensor provides the Work (and each
+   Contributor provides its Contributions) on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+   implied, including, without limitation, any warranties or conditions
+   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+   PARTICULAR PURPOSE. You are solely responsible for determining the
+   appropriateness of using or redistributing the Work and assume any
+   risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+   whether in tort (including negligence), contract, or otherwise,
+   unless required by applicable law (such as deliberate and grossly
+   negligent acts) or agreed to in writing, shall any Contributor be
+   liable to You for damages, including any direct, indirect, special,
+   incidental, or consequential damages of any character arising as a
+   result of this License or out of the use or inability to use the
+   Work (including but not limited to damages for loss of goodwill,
+   work stoppage, computer failure or malfunction, or any and all
+   other commercial damages or losses), even if such Contributor
+   has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+   the Work or Derivative Works thereof, You may choose to offer,
+   and charge a fee for, acceptance of support, warranty, indemnity,
+   or other liability obligations and/or rights consistent with this
+   License. However, in accepting such obligations, You may act only
+   on Your own behalf and on Your sole responsibility, not on behalf
+   of any other Contributor, and only if You agree to indemnify,
+   defend, and hold each Contributor harmless for any liability
+   incurred by, or claims asserted against, such Contributor by reason
+   of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+   To apply the Apache License to your work, attach the following
+   boilerplate notice, with the fields enclosed by brackets "[]"
+   replaced with your own identifying information. (Don't include
+   the brackets!)  The text should be enclosed in the appropriate
+   comment syntax for the file format. We also recommend that a
+   file or class name and description of purpose be included on the
+   same "printed page" as the copyright notice for easier
+   identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed 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.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..c539da7
--- /dev/null
+++ b/README.md
@@ -0,0 +1,88 @@
+# Plugin to cache Git repository's access to refdb
+
+When [Serialize AccountCache series](https://gerrit-review.googlesource.com/c/gerrit/+/260992)
+was introduced it simplified the cache eviction by always reaching out to JGit
+for data. Unfortunately it comes with
+[price](https://bugs.chromium.org/p/gerrit/issues/detail?id=14945)
+which is especially high when *All-Users* repository is accessed through the
+NFS and `core.trustFolderStat = false` is configured in
+`${GERRIT_SITE}/etc/jgit.config` (quite common setup for HA/Multi-Site ens).
+
+This plugin was developed to introduce the in-memory cache (managed by Gerrit
+so that evictions could be coordinated to multiple nodes) that reduces the
+price for reaching to refs in JGit. It is a Gerrit native alternative (that can
+be applied to Gerrit 3.2) to work that is currently under progress for
+[caching Refs in JGit](https://git.eclipse.org/r/c/jgit/jgit/+/186205).
+
+Here is the short comparison of _heavy-refs-related_ operations performance.
+The test scenario was to get random change details (over the same REST API that
+is used in Gerrit's details page) in 8 parallel threads over 5mins period of
+time. The `core.trustFolderStat = false` was set in
+`${GERRIT_SITE}/etc/jgit.config`.
+It was called against:
+* vanilla Gerrit 3.1.16 version (marked as `stable-3.1` in the results)
+* vanilla Gerrit 3.2.12 version (marked as `stable-3.2` in the results)
+* Gerrit 3.2.14 with libCache module loaded (marked as `stable-3.2-libCache` in
+  the results).
+
+Note that `TRS` is `Reqs/Sec` for each Thread.
+
+---
+| version | TRS Avg | TRS Std Dev | TRS Max | Total Reqs/sec | Transfer/sec(MB)|
+| -- | -- | -- | -- | -- | -- |
+| stable-3.1 | 57,33 | 8,26 | 80 | 456,95 | 4,34 |
+| stable-3.2 | 13,87 | 4,92 | 20 | 110,18 | 1,07 |
+| stable-3.2-libCache | 105,27 | 14,55 | 150 | 834,88 | 8,41 |
+| stable-3.1 vs stable-3.2 | 313,34% | 67,89% | 300,00% | 314,73% | 305,61% |
+| stable-3.2-libCache vs stable-3.2 | 658,98% | 195,73% | 650,00% | 657,74% | 685,98% |
+| stable-3.2-libCache vs stable-3.1 | 83,62% | 76,15% | 87,50% | 82,71% | 93,78% |
+---
+
+One can clearly see that in this setup using this library module outperforms both
+Gerrit 3.2 and 3.1 by factor of *6* and *2* correspondingly.
+The test script, detailed description and more results are available
+[here](https://gist.github.com/geminicaprograms/b2cae199793f0f2b18759a803000447f).
+
+## How to build
+
+Clone or link this plugin to the plugins directory of Gerrit's source tree,
+and then run bazel build on the plugin's directory.
+
+Example:
+
+```
+git clone --recursive https://gerrit.googlesource.com/gerrit
+cd plugins
+git clone "https://review.gerrithub.io/geminicaprograms/gerrit-cached-refdb"
+cd .. && bazel build plugins/gerrit-cached-refdb
+```
+
+The output plugin jar is created in:
+
+```
+bazel-bin/plugins/gerrit-cached-refdb/gerrit-cached-refdb.jar
+```
+
+## How to install
+
+Copy the gerrit-cached-refdb.jar into the `${GERRIT_SITE}/lib/` so that it is
+being loaded when the Gerrit instance is started. Note that the following
+configuration options need to be added
+
+```
+git config --file ${GERRIT_SITE}/etc/gerrit.config gerrit.installDbModule\
+  com.googlesource.gerrit.plugins.gerritcachedrefdb.LibDbModule
+git config --file ${GERRIT_SITE}/etc/gerrit.config gerrit.installModule\
+  com.googlesource.gerrit.plugins.gerritcachedrefdb.LibSysModule
+```
+
+By default cache can hold up to `1024` refs which will not be sufficient for
+any production site therefore one can configure it through the standard Gerrit
+cache configuration means e.g.
+
+```
+git config --file ${GERRIT_SITE}/etc/gerrit.config cache.ref_by_name.memoryLimit 10240
+```
+
+Note that libraty module requires the Gerrit instance restart in order to pick
+up the configuration changes.
\ No newline at end of file
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/BatchRefUpdateWithCacheUpdate.java b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/BatchRefUpdateWithCacheUpdate.java
index 360dfa1..a3ebb47 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/BatchRefUpdateWithCacheUpdate.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/BatchRefUpdateWithCacheUpdate.java
@@ -22,7 +22,6 @@
 import org.eclipse.jgit.lib.BatchRefUpdate;
 import org.eclipse.jgit.lib.PersonIdent;
 import org.eclipse.jgit.lib.ProgressMonitor;
-import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.revwalk.RevWalk;
 import org.eclipse.jgit.transport.PushCertificate;
 import org.eclipse.jgit.transport.ReceiveCommand;
@@ -30,17 +29,17 @@
 
 class BatchRefUpdateWithCacheUpdate extends BatchRefUpdate {
   interface Factory {
-    BatchRefUpdateWithCacheUpdate create(Repository repo, BatchRefUpdate delegate);
+    BatchRefUpdateWithCacheUpdate create(CachedRefRepository repo, BatchRefUpdate delegate);
   }
 
-  private final Repository repo;
+  private final CachedRefRepository repo;
   private final RefByNameCacheWrapper refsCache;
   private final BatchRefUpdate delegate;
 
   @Inject
   BatchRefUpdateWithCacheUpdate(
       RefByNameCacheWrapper refsCache,
-      @Assisted Repository repo,
+      @Assisted CachedRefRepository repo,
       @Assisted BatchRefUpdate delegate) {
     super(repo.getRefDatabase());
     this.refsCache = refsCache;
@@ -177,7 +176,7 @@
         .forEach(
             cmd -> {
               if (cmd.getResult() == ReceiveCommand.Result.OK) {
-                refsCache.evict(repo.getIdentifier(), cmd.getRefName());
+                refsCache.evict(repo.getProjectName(), cmd.getRefName());
               }
             });
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/CachedRefDatabase.java b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/CachedRefDatabase.java
index 79a619c..fdbca56 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/CachedRefDatabase.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/CachedRefDatabase.java
@@ -88,7 +88,7 @@
   @Override
   public Ref exactRef(String name) throws IOException {
     return refsCache.computeIfAbsent(
-        repo.getIdentifier(), name, () -> Optional.ofNullable(delegate.exactRef(name)));
+        repo.getProjectName(), name, () -> Optional.ofNullable(delegate.exactRef(name)));
   }
 
   @Deprecated
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/CachedRefRepository.java b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/CachedRefRepository.java
index e7960e3..86cf9b9 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/CachedRefRepository.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/CachedRefRepository.java
@@ -48,9 +48,10 @@
 
 class CachedRefRepository extends DelegateRepository {
   interface Factory {
-    CachedRefRepository create(Repository repo);
+    CachedRefRepository create(String projectName, Repository repo);
   }
 
+  private final String projectName;
   private final CachedRefDatabase refDb;
   private final RefUpdateWithCacheUpdate.Factory updateFactory;
   private final RefRenameWithCacheUpdate.Factory renameFactory;
@@ -60,8 +61,10 @@
       CachedRefDatabase.Factory refDbFactory,
       RefUpdateWithCacheUpdate.Factory updateFactory,
       RefRenameWithCacheUpdate.Factory renameFactory,
+      @Assisted String projectName,
       @Assisted Repository repo) {
     super(repo);
+    this.projectName = projectName;
     this.updateFactory = updateFactory;
     this.renameFactory = renameFactory;
     this.refDb = refDbFactory.create(this);
@@ -347,4 +350,8 @@
   public void create() throws IOException {
     getDelegate().create();
   }
+
+  public String getProjectName() {
+    return projectName;
+  }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/GerritCachedGitRepositoryManager.java b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/GerritCachedGitRepositoryManager.java
index 4eb0cf1..5a222c3 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/GerritCachedGitRepositoryManager.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/GerritCachedGitRepositoryManager.java
@@ -14,6 +14,7 @@
 
 package com.googlesource.gerrit.plugins.gerritcachedrefdb;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.gerrit.entities.Project;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.git.LocalDiskRepositoryManager;
@@ -37,16 +38,21 @@
 
   @Override
   public Repository openRepository(Project.NameKey name) throws IOException {
-    return repoWrapperFactory.create(repoManager.openRepository(name));
+    return repoWrapperFactory.create(name.get(), repoManager.openRepository(name));
   }
 
   @Override
   public Repository createRepository(Project.NameKey name) throws IOException {
-    return repoWrapperFactory.create(repoManager.createRepository(name));
+    return repoWrapperFactory.create(name.get(), repoManager.createRepository(name));
   }
 
   @Override
   public SortedSet<Project.NameKey> list() {
     return repoManager.list();
   }
+
+  @VisibleForTesting
+  LocalDiskRepositoryManager getRepoManager() {
+    return repoManager;
+  }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/LibDbModule.java b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/LibDbModule.java
index 3c857cf..21300d4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/LibDbModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/LibDbModule.java
@@ -17,13 +17,27 @@
 import static com.google.inject.Scopes.SINGLETON;
 
 import com.google.common.flogger.FluentLogger;
-import com.google.gerrit.extensions.config.FactoryModule;
 import com.google.gerrit.extensions.registration.DynamicItem;
+import com.google.gerrit.lifecycle.LifecycleModule;
+import com.google.gerrit.server.ModuleImpl;
+import com.google.gerrit.server.config.RepositoryConfig;
 import com.google.gerrit.server.git.GitRepositoryManager;
+import com.google.gerrit.server.git.GitRepositoryManagerModule;
+import com.google.gerrit.server.git.LocalDiskRepositoryManager;
+import com.google.gerrit.server.git.MultiBaseLocalDiskRepositoryManager;
+import com.google.inject.Inject;
 
-public class LibDbModule extends FactoryModule {
+@ModuleImpl(name = GitRepositoryManagerModule.MANAGER_MODULE)
+public class LibDbModule extends LifecycleModule {
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
+  private final RepositoryConfig repoConfig;
+
+  @Inject
+  LibDbModule(RepositoryConfig repoConfig) {
+    this.repoConfig = repoConfig;
+  }
+
   @Override
   protected void configure() {
     DynamicItem.itemOf(binder(), RefByNameCache.class);
@@ -36,6 +50,12 @@
     factory(CachedRefRepository.Factory.class);
 
     bind(GitRepositoryManager.class).to(GerritCachedGitRepositoryManager.class);
+
+    // part responsible for physical repositories handling
+    listener().to(LocalDiskRepositoryManager.Lifecycle.class);
+    if (!repoConfig.getAllBasePaths().isEmpty()) {
+      bind(LocalDiskRepositoryManager.class).to(MultiBaseLocalDiskRepositoryManager.class);
+    }
     logger.atInfo().log("DB library loaded");
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/RefByNameCacheWrapper.java b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/RefByNameCacheWrapper.java
index c9744ad..9ce127a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/RefByNameCacheWrapper.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/RefByNameCacheWrapper.java
@@ -24,22 +24,26 @@
 class RefByNameCacheWrapper implements RefByNameCache {
   private static final RefByNameCache NOOP_CACHE = new NoOpRefByNameCache();
 
-  @Inject(optional = true)
-  private DynamicItem<RefByNameCache> refByNameCache;
+  private final RefByNameCache cache;
+
+  @Inject
+  RefByNameCacheWrapper(DynamicItem<RefByNameCache> refByNameCache) {
+    this.cache = Optional.ofNullable(refByNameCache.get()).orElse(NOOP_CACHE);
+  }
 
   @Override
   public Ref computeIfAbsent(
       String identifier, String ref, Callable<? extends Optional<Ref>> loader) {
-    return cache().computeIfAbsent(identifier, ref, loader);
+    return cache.computeIfAbsent(identifier, ref, loader);
   }
 
   @Override
   public void evict(String identifier, String ref) {
-    cache().evict(identifier, ref);
+    cache.evict(identifier, ref);
   }
 
   @VisibleForTesting
   RefByNameCache cache() {
-    return Optional.ofNullable(refByNameCache).map(DynamicItem::get).orElse(NOOP_CACHE);
+    return cache;
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/RefRenameWithCacheUpdate.java b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/RefRenameWithCacheUpdate.java
index 68de4ca..7bb9a46 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/RefRenameWithCacheUpdate.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/RefRenameWithCacheUpdate.java
@@ -22,12 +22,11 @@
 import org.eclipse.jgit.lib.RefRename;
 import org.eclipse.jgit.lib.RefUpdate;
 import org.eclipse.jgit.lib.RefUpdate.Result;
-import org.eclipse.jgit.lib.Repository;
 
 class RefRenameWithCacheUpdate extends RefRename {
   interface Factory {
     RefRenameWithCacheUpdate create(
-        Repository repo,
+        CachedRefRepository repo,
         RefRename delegate,
         @Assisted("src") RefUpdate src,
         @Assisted("dst") RefUpdate dst);
@@ -38,14 +37,14 @@
       EnumSet.of(Result.NEW, Result.FORCED, Result.FAST_FORWARD, Result.RENAMED);
 
   private final RefByNameCacheWrapper refsCache;
-  private final Repository repo;
+  private final CachedRefRepository repo;
   private final RefRename delegate;
   private final RefUpdate src;
 
   @Inject
   RefRenameWithCacheUpdate(
       RefByNameCacheWrapper refsCache,
-      @Assisted Repository repo,
+      @Assisted CachedRefRepository repo,
       @Assisted RefRename delegate,
       @Assisted("src") RefUpdate src,
       @Assisted("dst") RefUpdate dst) {
@@ -95,7 +94,7 @@
   public Result rename() throws IOException {
     Result r = delegate.rename();
     if (SUCCESSFUL_RENAMES.contains(r)) {
-      refsCache.evict(repo.getIdentifier(), src.getName());
+      refsCache.evict(repo.getProjectName(), src.getName());
     }
     return r;
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/RefUpdateWithCacheUpdate.java b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/RefUpdateWithCacheUpdate.java
index a4bee39..a8be44d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/RefUpdateWithCacheUpdate.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/RefUpdateWithCacheUpdate.java
@@ -16,7 +16,8 @@
 
 class RefUpdateWithCacheUpdate extends RefUpdate {
   interface Factory {
-    RefUpdateWithCacheUpdate create(RefDatabase refDb, Repository repo, RefUpdate delegate);
+    RefUpdateWithCacheUpdate create(
+        RefDatabase refDb, CachedRefRepository repo, RefUpdate delegate);
   }
 
   private static final String NOT_SUPPORTED_MSG = "Should never be called";
@@ -25,14 +26,14 @@
 
   private final RefByNameCacheWrapper refsCache;
   private final RefDatabase refDb;
-  private final Repository repo;
+  private final CachedRefRepository repo;
   private final RefUpdate delegate;
 
   @Inject
   RefUpdateWithCacheUpdate(
       RefByNameCacheWrapper refsCache,
       @Assisted RefDatabase refDb,
-      @Assisted Repository repo,
+      @Assisted CachedRefRepository repo,
       @Assisted RefUpdate delegate) {
     super(delegate.getRef());
     this.refsCache = refsCache;
@@ -208,7 +209,7 @@
 
   private Result evictCache(Result r) {
     if (SUCCESSFUL_UPDATES.contains(r)) {
-      refsCache.evict(repo.getIdentifier(), getName());
+      refsCache.evict(repo.getProjectName(), getName());
     }
     return r;
   }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/GerritCachedRefDbIT.java b/src/test/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/GerritCachedRefDbIT.java
index bf2ca31..a6168da 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/GerritCachedRefDbIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/GerritCachedRefDbIT.java
@@ -21,6 +21,8 @@
 import com.google.gerrit.acceptance.UseLocalDisk;
 import com.google.gerrit.acceptance.config.GerritConfig;
 import com.google.gerrit.server.git.GitRepositoryManager;
+import com.google.gerrit.server.git.LocalDiskRepositoryManager;
+import com.google.gerrit.server.git.MultiBaseLocalDiskRepositoryManager;
 import com.google.inject.Inject;
 import org.junit.Test;
 
@@ -40,6 +42,23 @@
       value = "com.googlesource.gerrit.plugins.gerritcachedrefdb.LibSysModule")
   public void shouldBeAbleToInstallGerritCachedGitRepoManager() {
     assertThat(gitRepoManager).isInstanceOf(GerritCachedGitRepositoryManager.class);
+    assertThat(((GerritCachedGitRepositoryManager) gitRepoManager).getRepoManager().getClass())
+        .isEqualTo(LocalDiskRepositoryManager.class);
+    assertThat(refByNameCacheWrapper.cache()).isInstanceOf(RefByNameGerritCache.class);
+  }
+
+  @Test
+  @GerritConfig(
+      name = "gerrit.installDbModule",
+      value = "com.googlesource.gerrit.plugins.gerritcachedrefdb.LibDbModule")
+  @GerritConfig(
+      name = "gerrit.installModule",
+      value = "com.googlesource.gerrit.plugins.gerritcachedrefdb.LibSysModule")
+  @GerritConfig(name = "repository.r1.basePath", value = "/tmp/git1")
+  public void shouldMultiBaseRepoManagerBeUsedWhenConfigured() {
+    assertThat(gitRepoManager).isInstanceOf(GerritCachedGitRepositoryManager.class);
+    assertThat(((GerritCachedGitRepositoryManager) gitRepoManager).getRepoManager())
+        .isInstanceOf(MultiBaseLocalDiskRepositoryManager.class);
     assertThat(refByNameCacheWrapper.cache()).isInstanceOf(RefByNameGerritCache.class);
   }
 }
