diff --git a/java/com/googlesource/gerrit/plugins/supermanifest/ConfigEntry.java b/java/com/googlesource/gerrit/plugins/supermanifest/ConfigEntry.java
index 0adfe2f..6c2cf84 100644
--- a/java/com/googlesource/gerrit/plugins/supermanifest/ConfigEntry.java
+++ b/java/com/googlesource/gerrit/plugins/supermanifest/ConfigEntry.java
@@ -28,7 +28,7 @@
 import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.lib.Repository;
 
-class ConfigEntry {
+public class ConfigEntry {
   public static final String SECTION_NAME = "superproject";
 
   Project.NameKey srcRepoKey;
diff --git a/java/com/googlesource/gerrit/plugins/supermanifest/SuperManifestModule.java b/java/com/googlesource/gerrit/plugins/supermanifest/SuperManifestModule.java
index 33aa1dd..99ea379 100644
--- a/java/com/googlesource/gerrit/plugins/supermanifest/SuperManifestModule.java
+++ b/java/com/googlesource/gerrit/plugins/supermanifest/SuperManifestModule.java
@@ -21,6 +21,7 @@
 import com.google.gerrit.extensions.events.LifecycleListener;
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.extensions.restapi.RestApiModule;
+import com.google.inject.assistedinject.FactoryModuleBuilder;
 
 public class SuperManifestModule extends RestApiModule {
   SuperManifestModule() {}
@@ -33,6 +34,12 @@
     DynamicSet.bind(binder(), LifecycleListener.class)
         .to(SuperManifestRefUpdatedListener.class)
         .in(SINGLETON);
+    install(
+        new FactoryModuleBuilder()
+            .implement(
+                SuperManifestRefUpdatedListener.SuperManifestRepoManager.class,
+                SuperManifestRefUpdatedListener.GerritSuperManifestRepoManager.class)
+            .build(SuperManifestRefUpdatedListener.SuperManifestRepoManager.Factory.class));
     post(BRANCH_KIND, "update_manifest").to(SuperManifestRefUpdatedListener.class).in(SINGLETON);
   }
 }
diff --git a/java/com/googlesource/gerrit/plugins/supermanifest/SuperManifestRefUpdatedListener.java b/java/com/googlesource/gerrit/plugins/supermanifest/SuperManifestRefUpdatedListener.java
index c82c830..bca414c 100644
--- a/java/com/googlesource/gerrit/plugins/supermanifest/SuperManifestRefUpdatedListener.java
+++ b/java/com/googlesource/gerrit/plugins/supermanifest/SuperManifestRefUpdatedListener.java
@@ -43,6 +43,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
+import com.google.inject.assistedinject.Assisted;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
@@ -79,7 +80,7 @@
         RestModifyView<BranchResource, BranchInput> {
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
-  private final GitRepositoryManager repoManager;
+  private final SuperManifestRepoManager.Factory repoManagerFactory;
   private final URI canonicalWebUrl;
   private final PluginConfigFactory cfgFactory;
   private final String pluginName;
@@ -102,14 +103,14 @@
       PluginConfigFactory cfgFactory,
       ProjectCache projectCache,
       @GerritPersonIdent Provider<PersonIdent> serverIdent,
-      GitRepositoryManager repoManager,
+      SuperManifestRepoManager.Factory repoManagerFactory,
       Provider<IdentifiedUser> identifiedUser,
       PermissionBackend permissionBackend) {
 
     this.pluginName = pluginName;
     this.serverIdent = serverIdent;
     this.allProjectsName = allProjectsName;
-    this.repoManager = repoManager;
+    this.repoManagerFactory = repoManagerFactory;
     try {
       this.canonicalWebUrl = new URI(canonicalWebUrl);
     } catch (URISyntaxException e) {
@@ -329,9 +330,7 @@
             String.format("invalid toolType: %s", c.getToolType().name()));
     }
     try (GerritRemoteReader reader =
-        new GerritRemoteReader(
-            new GerritSuperManifestRepoManager(repoManager, canonicalWebUrl.toString()),
-            canonicalWebUrl.toString())) {
+        new GerritRemoteReader(repoManagerFactory.create(c), canonicalWebUrl.toString())) {
       subModuleUpdater.update(reader, c, refName);
     }
   }
@@ -443,6 +442,10 @@
     Repository openByUri(String uriStr) throws IOException;
 
     Repository openByName(Project.NameKey repoName) throws IOException;
+
+    interface Factory {
+      SuperManifestRepoManager create(ConfigEntry c);
+    }
   }
 
   static class GerritSuperManifestRepoManager implements SuperManifestRepoManager {
@@ -450,8 +453,11 @@
     private final GitRepositoryManager repoManager;
     private final String canonicalWebUrl;
 
+    @Inject
     GerritSuperManifestRepoManager(
-        GitRepositoryManager repoManager, @CanonicalWebUrl String canonicalWebUrl) {
+        GitRepositoryManager repoManager,
+        @CanonicalWebUrl String canonicalWebUrl,
+        @Assisted ConfigEntry e) {
       this.repos = new HashMap<>();
       this.repoManager = repoManager;
       this.canonicalWebUrl = canonicalWebUrl;
diff --git a/javatests/com/googlesource/gerrit/plugins/supermanifest/GerritRemoteReaderTest.java b/javatests/com/googlesource/gerrit/plugins/supermanifest/GerritRemoteReaderTest.java
index bf32da6..4b4c832 100644
--- a/javatests/com/googlesource/gerrit/plugins/supermanifest/GerritRemoteReaderTest.java
+++ b/javatests/com/googlesource/gerrit/plugins/supermanifest/GerritRemoteReaderTest.java
@@ -27,7 +27,7 @@
   private GitRepositoryManager repoManager = new InMemoryRepositoryManager();
   SuperManifestRefUpdatedListener.GerritSuperManifestRepoManager superManifestRepoManager =
       new SuperManifestRefUpdatedListener.GerritSuperManifestRepoManager(
-          repoManager, CANONICAL_WEB_URL);
+          repoManager, CANONICAL_WEB_URL, null);
   private SuperManifestRefUpdatedListener.GerritRemoteReader reader =
       new SuperManifestRefUpdatedListener.GerritRemoteReader(
           superManifestRepoManager, CANONICAL_WEB_URL);
diff --git a/javatests/com/googlesource/gerrit/plugins/supermanifest/GerritSuperManifestRepoManagerTest.java b/javatests/com/googlesource/gerrit/plugins/supermanifest/GerritSuperManifestRepoManagerTest.java
index 08980fe..9dad5ea 100644
--- a/javatests/com/googlesource/gerrit/plugins/supermanifest/GerritSuperManifestRepoManagerTest.java
+++ b/javatests/com/googlesource/gerrit/plugins/supermanifest/GerritSuperManifestRepoManagerTest.java
@@ -23,7 +23,7 @@
     repoManager.createRepository(Project.nameKey("project/x"));
     superManifestRepoManager =
         new SuperManifestRefUpdatedListener.GerritSuperManifestRepoManager(
-            repoManager, CANONICAL_WEB_URL);
+            repoManager, CANONICAL_WEB_URL, null);
   }
 
   @Test
