diff --git a/pom.xml b/pom.xml
index 69f7ae6..7371465 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
 
     <groupId>com.gerritforge</groupId>
     <artifactId>global-refdb</artifactId>
-    <version>3.6.0-rc5</version>
+    <version>3.6.3.1</version>
     <packaging>jar</packaging>
 
     <name>global-refdb</name>
@@ -38,7 +38,7 @@
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <gerrit.version>${project.version}</gerrit.version>
+        <gerrit.version>3.6.3</gerrit.version>
     </properties>
 
     <dependencies>
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java
index baf69d3..513f062 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java
@@ -14,6 +14,7 @@
 
 package com.gerritforge.gerrit.globalrefdb.validation;
 
+import com.google.common.base.MoreObjects;
 import com.google.common.collect.ImmutableSet;
 import com.google.gerrit.entities.Project;
 import com.google.gerrit.entities.Project.NameKey;
@@ -50,7 +51,11 @@
    */
   public static final String IGNORED_REFS = "ignored_refs";
 
-  private final GitRepositoryManager gitRepositoryManager;
+  @Inject(optional = true)
+  @Named("LocalDiskRepositoryManager")
+  private GitRepositoryManager gitRepositoryManager;
+
+  private final LocalDiskRepositoryManager localDiskRepositoryManager;
   private final SharedRefDbRepository.Factory sharedRefDbRepoFactory;
 
   @Inject(optional = true)
@@ -71,7 +76,7 @@
       SharedRefDbRepository.Factory sharedRefDbRepoFactory,
       LocalDiskRepositoryManager localDiskRepositoryManager) {
     this.sharedRefDbRepoFactory = sharedRefDbRepoFactory;
-    this.gitRepositoryManager = localDiskRepositoryManager;
+    this.localDiskRepositoryManager = localDiskRepositoryManager;
   }
 
   /**
@@ -85,7 +90,7 @@
   @Override
   public Repository openRepository(Project.NameKey name)
       throws RepositoryNotFoundException, IOException {
-    return wrap(name, gitRepositoryManager.openRepository(name));
+    return wrap(name, repositoryManager().openRepository(name));
   }
 
   /**
@@ -101,12 +106,12 @@
   @Override
   public Repository createRepository(Project.NameKey name)
       throws RepositoryCaseMismatchException, RepositoryNotFoundException, IOException {
-    return wrap(name, gitRepositoryManager.createRepository(name));
+    return wrap(name, repositoryManager().createRepository(name));
   }
 
   @Override
-  public NavigableSet<NameKey> list() {
-    return gitRepositoryManager.list();
+  public NavigableSet<Project.NameKey> list() {
+    return repositoryManager().list();
   }
 
   @Override
@@ -122,4 +127,8 @@
   private Repository wrap(Project.NameKey projectName, Repository projectRepo) {
     return sharedRefDbRepoFactory.create(projectName.get(), projectRepo, ignoredRefs);
   }
+
+  private GitRepositoryManager repositoryManager() {
+    return MoreObjects.firstNonNull(gitRepositoryManager, localDiskRepositoryManager);
+  }
 }
