diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResource.java b/src/main/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResource.java
index 0a2afa6..5d308a5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResource.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResource.java
@@ -30,6 +30,7 @@
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
+import java.util.function.Predicate;
 import java.util.stream.Stream;
 import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.eclipse.jgit.internal.storage.file.FileSnapshot;
@@ -65,6 +66,8 @@
 
   @Override
   public void update(Config updates) throws IOException {
+    super.update(filterOutRemotes(updates));
+
     Set<String> remotes = updates.getSubsections("remote");
     for (String remote : remotes) {
       File remoteFile = remoteConfigsDirPath.resolve(remote + ".config").toFile();
@@ -79,12 +82,10 @@
       for (String option : options) {
         List<String> values = List.of(updates.getStringList("remote", remote, option));
         remoteConfig.setStringList("remote", remote, option, values);
+        config.setStringList("remote", remote, option, values);
       }
       remoteConfig.save();
     }
-
-    removeRemotes(updates);
-    super.update(updates);
   }
 
   private static void removeRemotes(Config config) {
@@ -111,6 +112,40 @@
     }
   }
 
+  private static Config filterOutRemotes(Config config) {
+    Config filteredConfig = new Config();
+    Set<String> sections = config.getSections();
+    sections.stream()
+        .filter(Predicate.not("remote"::equalsIgnoreCase))
+        .forEach(
+            section -> {
+              config
+                  .getNames(section)
+                  .forEach(
+                      sectionName ->
+                          filteredConfig.setStringList(
+                              section,
+                              null,
+                              sectionName,
+                              List.of(config.getStringList(section, null, sectionName))));
+              config
+                  .getSubsections(section)
+                  .forEach(
+                      subsection ->
+                          config
+                              .getNames(section, subsection)
+                              .forEach(
+                                  name ->
+                                      filteredConfig.setStringList(
+                                          section,
+                                          subsection,
+                                          name,
+                                          List.of(
+                                              config.getStringList(section, subsection, name)))));
+            });
+    return filteredConfig;
+  }
+
   private static boolean isValid(Config cfg) {
     if (cfg.getSections().size() != 1 || !cfg.getSections().contains("remote")) {
       logger.atSevere().log(
diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResourceTest.java b/src/test/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResourceTest.java
index a622170..c91ac14 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResourceTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResourceTest.java
@@ -321,6 +321,8 @@
 
     objectUnderTest.update(update);
 
+    assertThat(objectUnderTest.getConfig().getString("remote", remoteName1, "url"))
+        .isEqualTo(remoteUrl1);
     Config actual = loadRemoteConfig(remoteName1);
     assertThat(actual.getString("remote", remoteName1, "url")).isEqualTo(remoteUrl1);
   }
@@ -336,6 +338,8 @@
 
     objectUnderTest.update(update);
 
+    assertThat(objectUnderTest.getConfig().getString("remote", remoteName1, "url"))
+        .isEqualTo(remoteUrl2);
     Config actual = loadRemoteConfig(remoteName1);
     assertThat(actual.getString("remote", remoteName1, "url")).isEqualTo(remoteUrl2);
   }
