diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecorator.java b/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecorator.java
index a0d9624..b6532d9 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecorator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecorator.java
@@ -42,7 +42,7 @@
   public AutoReloadConfigDecorator(
       @PluginName String pluginName,
       WorkQueue workQueue,
-      @MainReplicationConfig ReplicationConfig replicationConfig,
+      FileReplicationConfig replicationConfig,
       AutoReloadRunnable reloadRunner,
       EventBus eventBus) {
     this.currentConfig = replicationConfig;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadRunnable.java b/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadRunnable.java
index 71f7c67..9ed43fe 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadRunnable.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadRunnable.java
@@ -27,14 +27,14 @@
   private final Provider<ObservableQueue> queueObserverProvider;
   private final ConfigParser configParser;
   private ReplicationConfig loadedConfig;
-  private Provider<ReplicationConfig> replicationConfigProvider;
+  private Provider<FileReplicationConfig> replicationConfigProvider;
   private String loadedConfigVersion;
   private String lastFailedConfigVersion;
 
   @Inject
   public AutoReloadRunnable(
       ConfigParser configParser,
-      @MainReplicationConfig Provider<ReplicationConfig> replicationConfigProvider,
+      Provider<FileReplicationConfig> replicationConfigProvider,
       EventBus eventBus,
       Provider<ObservableQueue> queueObserverProvider) {
     this.replicationConfigProvider = replicationConfigProvider;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java b/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
index 04af9db..9c70aa6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
@@ -15,7 +15,7 @@
 package com.googlesource.gerrit.plugins.replication;
 
 import static com.google.gerrit.server.project.ProjectCache.noSuchProject;
-import static com.googlesource.gerrit.plugins.replication.ReplicationFileBasedConfig.replaceName;
+import static com.googlesource.gerrit.plugins.replication.FileReplicationConfig.replaceName;
 import static org.eclipse.jgit.transport.RemoteRefUpdate.Status.NON_EXISTING;
 import static org.eclipse.jgit.transport.RemoteRefUpdate.Status.REJECTED_OTHER_REASON;
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/DestinationsCollection.java b/src/main/java/com/googlesource/gerrit/plugins/replication/DestinationsCollection.java
index 79a0683..1d471fe 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/DestinationsCollection.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/DestinationsCollection.java
@@ -17,7 +17,7 @@
 import static com.googlesource.gerrit.plugins.replication.AdminApiFactory.isGerrit;
 import static com.googlesource.gerrit.plugins.replication.AdminApiFactory.isGerritHttp;
 import static com.googlesource.gerrit.plugins.replication.AdminApiFactory.isSSH;
-import static com.googlesource.gerrit.plugins.replication.ReplicationFileBasedConfig.replaceName;
+import static com.googlesource.gerrit.plugins.replication.FileReplicationConfig.replaceName;
 import static com.googlesource.gerrit.plugins.replication.ReplicationQueue.repLog;
 import static java.util.stream.Collectors.toList;
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/FanoutReplicationConfig.java b/src/main/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResource.java
similarity index 68%
rename from src/main/java/com/googlesource/gerrit/plugins/replication/FanoutReplicationConfig.java
rename to src/main/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResource.java
index 80d8b9d..4220ddb 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/FanoutReplicationConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResource.java
@@ -17,12 +17,10 @@
 import static com.google.common.io.Files.getNameWithoutExtension;
 import static java.nio.charset.StandardCharsets.UTF_8;
 
-import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.Lists;
 import com.google.common.flogger.FluentLogger;
 import com.google.common.hash.Hasher;
 import com.google.common.hash.Hashing;
-import com.google.gerrit.extensions.annotations.PluginData;
 import com.google.gerrit.server.config.SitePaths;
 import com.google.inject.Inject;
 import java.io.IOException;
@@ -37,38 +35,26 @@
 import org.eclipse.jgit.storage.file.FileBasedConfig;
 import org.eclipse.jgit.util.FS;
 
-public class FanoutReplicationConfig implements ReplicationConfig {
+public class FanoutConfigResource extends FileConfigResource {
+  public static String CONFIG_DIR = "replication";
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
-  private final ReplicationFileBasedConfig replicationConfig;
-  private final Config config;
   private final Path remoteConfigsDirPath;
 
-  @VisibleForTesting
-  public FanoutReplicationConfig(SitePaths sitePaths, @PluginData Path pluginDataDir)
-      throws IOException, ConfigInvalidException {
-    this(
-        new ReplicationFileBasedConfig(new FileConfigResource(sitePaths), sitePaths, pluginDataDir),
-        sitePaths);
-  }
-
   @Inject
-  FanoutReplicationConfig(ReplicationFileBasedConfig replicationConfig, SitePaths site)
-      throws IOException, ConfigInvalidException {
-
-    remoteConfigsDirPath = site.etc_dir.resolve("replication");
-    this.replicationConfig = replicationConfig;
-    config = replicationConfig.getConfig();
+  FanoutConfigResource(SitePaths site) throws IOException, ConfigInvalidException {
+    super(site);
+    this.remoteConfigsDirPath = site.etc_dir.resolve(CONFIG_DIR);
     removeRemotes(config);
 
     try (Stream<Path> files = Files.list(remoteConfigsDirPath)) {
       files
           .filter(Files::isRegularFile)
-          .filter(FanoutReplicationConfig::isConfig)
-          .map(FanoutReplicationConfig::loadConfig)
+          .filter(FanoutConfigResource::isConfig)
+          .map(FanoutConfigResource::loadConfig)
           .filter(Optional::isPresent)
           .map(Optional::get)
-          .filter(FanoutReplicationConfig::isValid)
+          .filter(FanoutConfigResource::isValid)
           .forEach(cfg -> addRemoteConfig(cfg, config));
     } catch (IllegalStateException e) {
       throw new ConfigInvalidException(e.getMessage());
@@ -131,53 +117,14 @@
   }
 
   @Override
-  public boolean isReplicateAllOnPluginStart() {
-    return replicationConfig.isReplicateAllOnPluginStart();
-  }
-
-  @Override
-  public boolean isDefaultForceUpdate() {
-    return replicationConfig.isDefaultForceUpdate();
-  }
-
-  @Override
-  public int getMaxRefsToLog() {
-    return replicationConfig.getMaxRefsToLog();
-  }
-
-  @Override
-  public int getMaxRefsToShow() {
-    return replicationConfig.getMaxRefsToShow();
-  }
-
-  @Override
-  public Path getEventsDirectory() {
-    return replicationConfig.getEventsDirectory();
-  }
-
-  @Override
-  public int getSshConnectionTimeout() {
-    return replicationConfig.getSshConnectionTimeout();
-  }
-
-  @Override
-  public int getSshCommandTimeout() {
-    return replicationConfig.getSshCommandTimeout();
-  }
-
-  @Override
-  public int getDistributionInterval() {
-    return replicationConfig.getDistributionInterval();
-  }
-
-  @Override
   public String getVersion() {
+    String parentVersion = super.getVersion();
     Hasher hasher = Hashing.murmur3_128().newHasher();
-    hasher.putString(replicationConfig.getVersion(), UTF_8);
+    hasher.putString(parentVersion, UTF_8);
     try (Stream<Path> files = Files.list(remoteConfigsDirPath)) {
       files
           .filter(Files::isRegularFile)
-          .filter(FanoutReplicationConfig::isConfig)
+          .filter(FanoutConfigResource::isConfig)
           .sorted()
           .map(Path::toFile)
           .map(FileSnapshot::save)
@@ -190,12 +137,7 @@
       logger.atSevere().withCause(e).log(
           "Cannot list remote configuration files from %s. Returning replication.config file version",
           remoteConfigsDirPath);
-      return replicationConfig.getVersion();
+      return parentVersion;
     }
   }
-
-  @Override
-  public Config getConfig() {
-    return config;
-  }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/FileConfigResource.java b/src/main/java/com/googlesource/gerrit/plugins/replication/FileConfigResource.java
index aad4666..d220b24 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/FileConfigResource.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/FileConfigResource.java
@@ -27,7 +27,7 @@
 
 public class FileConfigResource implements ConfigResource {
   public static final String CONFIG_NAME = "replication.config";
-  private final FileBasedConfig config;
+  protected final FileBasedConfig config;
 
   @Inject
   FileConfigResource(SitePaths site) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationFileBasedConfig.java b/src/main/java/com/googlesource/gerrit/plugins/replication/FileReplicationConfig.java
similarity index 91%
rename from src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationFileBasedConfig.java
rename to src/main/java/com/googlesource/gerrit/plugins/replication/FileReplicationConfig.java
index 9f45702..b34ea54 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationFileBasedConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/FileReplicationConfig.java
@@ -22,7 +22,7 @@
 import java.nio.file.Path;
 import org.eclipse.jgit.lib.Config;
 
-public class ReplicationFileBasedConfig implements ReplicationConfig {
+public class FileReplicationConfig implements ReplicationConfig {
   private static final int DEFAULT_SSH_CONNECTION_TIMEOUT_MS = 2 * 60 * 1000; // 2 minutes
 
   private final SitePaths site;
@@ -35,14 +35,16 @@
   private final ConfigResource configResource;
   private final Path pluginDataDir;
 
+  // TODO: remove in follow-up change, as this was added to reduce the diff size
+  // for change Ic6a5c5b8ab5
   @VisibleForTesting
-  public ReplicationFileBasedConfig(SitePaths paths, @PluginData Path pluginDataDir) {
+  public FileReplicationConfig(SitePaths paths, @PluginData Path pluginDataDir) {
     this(new FileConfigResource(paths), paths, pluginDataDir);
   }
 
   @Inject
-  public ReplicationFileBasedConfig(
-      FileConfigResource configResource, SitePaths site, @PluginData Path pluginDataDir) {
+  public FileReplicationConfig(
+      ConfigResource configResource, SitePaths site, @PluginData Path pluginDataDir) {
     this.site = site;
     this.configResource = configResource;
     Config config = configResource.getConfig();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/MainReplicationConfig.java b/src/main/java/com/googlesource/gerrit/plugins/replication/MainReplicationConfig.java
deleted file mode 100644
index e8d95ec..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/MainReplicationConfig.java
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (C) 2020 The Android Open Source Project
-//
-// 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.
-
-package com.googlesource.gerrit.plugins.replication;
-
-import com.google.inject.BindingAnnotation;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-@BindingAnnotation
-@Retention(RetentionPolicy.RUNTIME)
-public @interface MainReplicationConfig {}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigModule.java b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigModule.java
index 2cc3982..220ec50 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigModule.java
@@ -14,6 +14,7 @@
 
 package com.googlesource.gerrit.plugins.replication;
 
+import static com.googlesource.gerrit.plugins.replication.FanoutConfigResource.CONFIG_DIR;
 import static com.googlesource.gerrit.plugins.replication.FileConfigResource.CONFIG_NAME;
 
 import com.google.gerrit.extensions.events.LifecycleListener;
@@ -44,16 +45,15 @@
 
   @Override
   protected void configure() {
+    bind(ConfigResource.class).to(getConfigResourceClass());
+
     if (getReplicationConfig().getBoolean("gerrit", "autoReload", false)) {
-      bind(ReplicationConfig.class)
-          .annotatedWith(MainReplicationConfig.class)
-          .to(getReplicationConfigClass());
       bind(ReplicationConfig.class).to(AutoReloadConfigDecorator.class).in(Scopes.SINGLETON);
       bind(LifecycleListener.class)
           .annotatedWith(UniqueAnnotations.create())
           .to(AutoReloadConfigDecorator.class);
     } else {
-      bind(ReplicationConfig.class).to(getReplicationConfigClass()).in(Scopes.SINGLETON);
+      bind(ReplicationConfig.class).to(FileReplicationConfig.class).in(Scopes.SINGLETON);
     }
   }
 
@@ -68,10 +68,10 @@
     return config;
   }
 
-  private Class<? extends ReplicationConfig> getReplicationConfigClass() {
-    if (Files.exists(site.etc_dir.resolve("replication"))) {
-      return FanoutReplicationConfig.class;
+  private Class<? extends ConfigResource> getConfigResourceClass() {
+    if (Files.exists(site.etc_dir.resolve(CONFIG_DIR))) {
+      return FanoutConfigResource.class;
     }
-    return ReplicationFileBasedConfig.class;
+    return FileConfigResource.class;
   }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/AbstractConfigTest.java b/src/test/java/com/googlesource/gerrit/plugins/replication/AbstractConfigTest.java
index 2b6a8c4..4c43cb0 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/replication/AbstractConfigTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/replication/AbstractConfigTest.java
@@ -128,6 +128,12 @@
     assertThatIsDestination(matchingDestinations.get(0), remoteName, remoteUrls);
   }
 
+  protected DestinationsCollection newDestinationsCollections(ConfigResource configResource)
+      throws ConfigInvalidException {
+    return newDestinationsCollections(
+        new FileReplicationConfig(configResource, sitePaths, pluginDataPath));
+  }
+
   protected DestinationsCollection newDestinationsCollections(ReplicationConfig replicationConfig)
       throws ConfigInvalidException {
     return new DestinationsCollection(
@@ -138,7 +144,7 @@
         eventBus);
   }
 
-  protected ReplicationConfig newReplicationFileBasedConfig() {
-    return new ReplicationFileBasedConfig(sitePaths, pluginDataPath);
+  protected FileReplicationConfig newReplicationFileBasedConfig() {
+    return new FileReplicationConfig(sitePaths, pluginDataPath);
   }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecoratorTest.java b/src/test/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecoratorTest.java
index b1b9453..bb08830 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecoratorTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecoratorTest.java
@@ -75,12 +75,14 @@
     remoteConfig.setString("remote", null, "url", remoteUrl1);
     remoteConfig.save();
 
-    replicationConfig = new FanoutReplicationConfig(sitePaths, pluginDataPath);
+    replicationConfig =
+        new FileReplicationConfig(new FanoutConfigResource(sitePaths), sitePaths, pluginDataPath);
 
     newAutoReloadConfig(
             () -> {
               try {
-                return new FanoutReplicationConfig(sitePaths, pluginDataPath);
+                return new FileReplicationConfig(
+                    new FanoutConfigResource(sitePaths), sitePaths, pluginDataPath);
               } catch (IOException | ConfigInvalidException e) {
                 throw new RuntimeException(e);
               }
@@ -122,12 +124,14 @@
     remoteConfig.setString("remote", null, "url", remoteUrl2);
     remoteConfig.save();
 
-    replicationConfig = new FanoutReplicationConfig(sitePaths, pluginDataPath);
+    replicationConfig =
+        new FileReplicationConfig(new FanoutConfigResource(sitePaths), sitePaths, pluginDataPath);
 
     newAutoReloadConfig(
             () -> {
               try {
-                return new FanoutReplicationConfig(sitePaths, pluginDataPath);
+                return new FileReplicationConfig(
+                    new FanoutConfigResource(sitePaths), sitePaths, pluginDataPath);
               } catch (IOException | ConfigInvalidException e) {
                 throw new RuntimeException(e);
               }
@@ -168,12 +172,14 @@
     remoteConfig.setString("remote", null, "url", remoteUrl2);
     remoteConfig.save();
 
-    replicationConfig = new FanoutReplicationConfig(sitePaths, pluginDataPath);
+    replicationConfig =
+        new FileReplicationConfig(new FanoutConfigResource(sitePaths), sitePaths, pluginDataPath);
 
     newAutoReloadConfig(
             () -> {
               try {
-                return new FanoutReplicationConfig(sitePaths, pluginDataPath);
+                return new FileReplicationConfig(
+                    new FanoutConfigResource(sitePaths), sitePaths, pluginDataPath);
               } catch (IOException | ConfigInvalidException e) {
                 throw new RuntimeException(e);
               }
@@ -228,14 +234,14 @@
   }
 
   private AutoReloadConfigDecorator newAutoReloadConfig(
-      Supplier<ReplicationConfig> configSupplier) {
+      Supplier<FileReplicationConfig> configSupplier) {
     AutoReloadRunnable autoReloadRunnable =
         new AutoReloadRunnable(
             configParser,
-            new Provider<ReplicationConfig>() {
+            new Provider<FileReplicationConfig>() {
 
               @Override
-              public ReplicationConfig get() {
+              public FileReplicationConfig get() {
                 return configSupplier.get();
               }
             },
diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/AutoReloadRunnableTest.java b/src/test/java/com/googlesource/gerrit/plugins/replication/AutoReloadRunnableTest.java
index 725052c..14307f8 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/replication/AutoReloadRunnableTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/replication/AutoReloadRunnableTest.java
@@ -81,11 +81,11 @@
     autoReloadRunnable.run();
   }
 
-  private Provider<ReplicationConfig> newVersionConfigProvider() {
+  private Provider<FileReplicationConfig> newVersionConfigProvider() {
     return new Provider<>() {
       @Override
-      public ReplicationConfig get() {
-        return new ReplicationFileBasedConfig(sitePaths, sitePaths.data_dir) {
+      public FileReplicationConfig get() {
+        return new FileReplicationConfig(sitePaths, sitePaths.data_dir) {
           @Override
           public String getVersion() {
             return String.format("%s", System.nanoTime());
diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/FanoutReplicationConfigTest.java b/src/test/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResourceTest.java
similarity index 84%
rename from src/test/java/com/googlesource/gerrit/plugins/replication/FanoutReplicationConfigTest.java
rename to src/test/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResourceTest.java
index 8cba4bb..34712a7 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/replication/FanoutReplicationConfigTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResourceTest.java
@@ -27,9 +27,9 @@
 import org.junit.Before;
 import org.junit.Test;
 
-public class FanoutReplicationConfigTest extends AbstractConfigTest {
+public class FanoutConfigResourceTest extends AbstractConfigTest {
 
-  public FanoutReplicationConfigTest() throws IOException {
+  public FanoutConfigResourceTest() throws IOException {
     super();
   }
 
@@ -62,7 +62,7 @@
     config.save();
 
     DestinationsCollection destinationsCollections =
-        newDestinationsCollections(new FanoutReplicationConfig(sitePaths, pluginDataPath));
+        newDestinationsCollections(new FanoutConfigResource(sitePaths));
     List<Destination> destinations = destinationsCollections.getAll(FilterType.ALL);
     assertThat(destinations).hasSize(1);
 
@@ -81,7 +81,7 @@
     config.save();
 
     DestinationsCollection destinationsCollections =
-        newDestinationsCollections(new FanoutReplicationConfig(sitePaths, pluginDataPath));
+        newDestinationsCollections(new FanoutConfigResource(sitePaths));
     List<Destination> destinations = destinationsCollections.getAll(FilterType.ALL);
     assertThat(destinations).hasSize(2);
 
@@ -101,7 +101,7 @@
     config.save();
 
     DestinationsCollection destinationsCollections =
-        newDestinationsCollections(new FanoutReplicationConfig(sitePaths, pluginDataPath));
+        newDestinationsCollections(new FanoutConfigResource(sitePaths));
     List<Destination> destinations = destinationsCollections.getAll(FilterType.ALL);
     assertThat(destinations).hasSize(1);
 
@@ -123,7 +123,7 @@
     config.save();
 
     DestinationsCollection destinationsCollections =
-        newDestinationsCollections(new FanoutReplicationConfig(sitePaths, pluginDataPath));
+        newDestinationsCollections(new FanoutConfigResource(sitePaths));
     List<Destination> destinations = destinationsCollections.getAll(FilterType.ALL);
     assertThat(destinations).hasSize(1);
 
@@ -136,7 +136,7 @@
     config.setString("remote", null, "url", "ssh://git@git.elsewhere.com/name");
     config.save();
 
-    newDestinationsCollections(new FanoutReplicationConfig(sitePaths, pluginDataPath));
+    newDestinationsCollections(new FanoutConfigResource(sitePaths));
   }
 
   @Test
@@ -145,7 +145,7 @@
     config.save();
 
     DestinationsCollection destinationsCollections =
-        newDestinationsCollections(new FanoutReplicationConfig(sitePaths, pluginDataPath));
+        newDestinationsCollections(new FanoutConfigResource(sitePaths));
     List<Destination> destinations = destinationsCollections.getAll(FilterType.ALL);
     assertThat(destinations).hasSize(0);
   }
@@ -158,7 +158,7 @@
     config.save();
 
     DestinationsCollection destinationsCollections =
-        newDestinationsCollections(new FanoutReplicationConfig(sitePaths, pluginDataPath));
+        newDestinationsCollections(new FanoutConfigResource(sitePaths));
     List<Destination> destinations = destinationsCollections.getAll(FilterType.ALL);
     assertThat(destinations).hasSize(0);
   }
@@ -170,7 +170,7 @@
     config.save();
 
     DestinationsCollection destinationsCollections =
-        newDestinationsCollections(new FanoutReplicationConfig(sitePaths, pluginDataPath));
+        newDestinationsCollections(new FanoutConfigResource(sitePaths));
     List<Destination> destinations = destinationsCollections.getAll(FilterType.ALL);
     assertThat(destinations).hasSize(0);
   }
@@ -186,12 +186,11 @@
     config.setString("remote", null, "url", remoteUrl2);
     config.save();
 
-    FanoutReplicationConfig objectUnderTest =
-        new FanoutReplicationConfig(sitePaths, pluginDataPath);
+    FanoutConfigResource objectUnderTest = new FanoutConfigResource(sitePaths);
 
     String version = objectUnderTest.getVersion();
 
-    objectUnderTest = new FanoutReplicationConfig(sitePaths, pluginDataPath);
+    objectUnderTest = new FanoutConfigResource(sitePaths);
 
     assertThat(objectUnderTest.getVersion()).isEqualTo(version);
   }
@@ -203,8 +202,7 @@
     config.setString("remote", null, "url", remoteUrl1);
     config.save();
 
-    FanoutReplicationConfig objectUnderTest =
-        new FanoutReplicationConfig(sitePaths, pluginDataPath);
+    FanoutConfigResource objectUnderTest = new FanoutConfigResource(sitePaths);
 
     String version = objectUnderTest.getVersion();
 
@@ -222,8 +220,7 @@
     config.setString("remote", null, "url", remoteUrl1);
     config.save();
 
-    FanoutReplicationConfig objectUnderTest =
-        new FanoutReplicationConfig(sitePaths, pluginDataPath);
+    FanoutConfigResource objectUnderTest = new FanoutConfigResource(sitePaths);
 
     String version = objectUnderTest.getVersion();
 
@@ -244,8 +241,7 @@
     config.setString("remote", null, "url", remoteUrl2);
     config.save();
 
-    FanoutReplicationConfig objectUnderTest =
-        new FanoutReplicationConfig(sitePaths, pluginDataPath);
+    FanoutConfigResource objectUnderTest = new FanoutConfigResource(sitePaths);
 
     String version = objectUnderTest.getVersion();
     assertThat(
@@ -267,11 +263,10 @@
     config.setString("remote", null, "url", remoteUrl2);
     config.save();
 
-    FanoutReplicationConfig objectUnderTest =
-        new FanoutReplicationConfig(sitePaths, pluginDataPath);
+    FanoutConfigResource objectUnderTest = new FanoutConfigResource(sitePaths);
 
     String replicationConfigVersion =
-        new ReplicationFileBasedConfig(sitePaths, pluginDataPath).getVersion();
+        new FileReplicationConfig(sitePaths, pluginDataPath).getVersion();
 
     MoreFiles.deleteRecursively(sitePaths.etc_dir.resolve("replication"), ALLOW_INSECURE);
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationFileBasedConfigTest.java b/src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigImplTest.java
similarity index 95%
rename from src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationFileBasedConfigTest.java
rename to src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigImplTest.java
index 79b05cc..068e5ff 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationFileBasedConfigTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigImplTest.java
@@ -22,9 +22,9 @@
 import org.eclipse.jgit.storage.file.FileBasedConfig;
 import org.junit.Test;
 
-public class ReplicationFileBasedConfigTest extends AbstractConfigTest {
+public class ReplicationConfigImplTest extends AbstractConfigTest {
 
-  public ReplicationFileBasedConfigTest() throws IOException {
+  public ReplicationConfigImplTest() throws IOException {
     super();
   }
 
