diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/GetReviewers.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/GetReviewers.java
index 212b544..43d8bd1 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/GetReviewers.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/GetReviewers.java
@@ -20,7 +20,7 @@
 import com.google.gerrit.server.project.ProjectResource;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
-import com.googlesource.gerrit.plugins.reviewers.config.ReviewersConfig;
+import com.googlesource.gerrit.plugins.reviewers.config.FiltersFactory;
 import java.util.List;
 
 /**
@@ -29,15 +29,15 @@
  */
 @Singleton
 class GetReviewers implements RestReadView<ProjectResource> {
-  private final ReviewersConfig config;
+  private final FiltersFactory filters;
 
   @Inject
-  GetReviewers(ReviewersConfig config) {
-    this.config = config;
+  GetReviewers(FiltersFactory filters) {
+    this.filters = filters;
   }
 
   @Override
   public Response<List<ReviewerFilter>> apply(ProjectResource resource) throws RestApiException {
-    return Response.ok(config.filtersWithInheritance(resource.getNameKey()));
+    return Response.ok(filters.withInheritance(resource.getNameKey()));
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java
index 80b9365..c069a0c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java
@@ -30,14 +30,14 @@
 import com.google.gerrit.server.change.ReviewerSuggestion;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
-import com.googlesource.gerrit.plugins.reviewers.config.ReviewersConfig;
+import com.googlesource.gerrit.plugins.reviewers.config.GlobalConfig;
 
 public class Module extends FactoryModule {
   private final boolean enableREST;
   private final boolean suggestOnly;
 
   @Inject
-  public Module(ReviewersConfig cfg) {
+  public Module(GlobalConfig cfg) {
     this(cfg.enableREST(), cfg.suggestOnly());
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/PutReviewers.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/PutReviewers.java
index d815633..c108177 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/PutReviewers.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/PutReviewers.java
@@ -41,7 +41,8 @@
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
 import com.googlesource.gerrit.plugins.reviewers.PutReviewers.Input;
-import com.googlesource.gerrit.plugins.reviewers.config.ReviewersConfig;
+import com.googlesource.gerrit.plugins.reviewers.config.FiltersFactory;
+import com.googlesource.gerrit.plugins.reviewers.config.ForProject;
 import java.io.IOException;
 import java.util.List;
 import org.eclipse.jgit.errors.ConfigInvalidException;
@@ -65,7 +66,7 @@
   }
 
   private final String pluginName;
-  private final ReviewersConfig config;
+  private final FiltersFactory filters;
   private final Provider<MetaDataUpdate.User> metaDataUpdateFactory;
   private final ProjectCache projectCache;
   private final AccountResolver accountResolver;
@@ -75,14 +76,14 @@
   @Inject
   PutReviewers(
       @PluginName String pluginName,
-      ReviewersConfig config,
+      FiltersFactory filters,
       Provider<MetaDataUpdate.User> metaDataUpdateFactory,
       ProjectCache projectCache,
       AccountResolver accountResolver,
       Provider<GroupResolver> groupResolver,
       PermissionBackend permissionBackend) {
     this.pluginName = pluginName;
-    this.config = config;
+    this.filters = filters;
     this.metaDataUpdateFactory = metaDataUpdateFactory;
     this.projectCache = projectCache;
     this.accountResolver = accountResolver;
@@ -94,7 +95,7 @@
   public Response<List<ReviewerFilter>> apply(ProjectResource rsrc, Input input)
       throws RestApiException, PermissionBackendException {
     Project.NameKey projectName = rsrc.getNameKey();
-    ReviewersConfig.ForProject forProject = new ReviewersConfig.ForProject();
+    ForProject forProject = new ForProject();
 
     PermissionBackend.WithUser userPermission = permissionBackend.user(rsrc.getUser());
     if (!userPermission.project(rsrc.getNameKey()).testOrFalse(ProjectPermission.WRITE_CONFIG)
@@ -154,7 +155,7 @@
     } catch (IOException err) {
       throw new ResourceNotFoundException(projectName.get(), err);
     }
-    return Response.ok(config.filtersWithInheritance(projectName));
+    return Response.ok(filters.withInheritance(projectName));
   }
 
   private void validateReviewer(String reviewer) throws RestApiException {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewerSuggest.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewerSuggest.java
index 3751548..d397579 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewerSuggest.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewerSuggest.java
@@ -27,7 +27,7 @@
 import com.google.gerrit.server.change.SuggestedReviewer;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
-import com.googlesource.gerrit.plugins.reviewers.config.ReviewersConfig;
+import com.googlesource.gerrit.plugins.reviewers.config.FiltersFactory;
 import java.util.List;
 import java.util.Set;
 
@@ -35,14 +35,14 @@
 public class ReviewerSuggest implements ReviewerSuggestion {
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
-  private final ReviewersConfig config;
+  private final FiltersFactory filters;
   private final ReviewersFilterUtil util;
   private final ReviewersResolver resolver;
 
   @Inject
   public ReviewerSuggest(
-      ReviewersConfig config, ReviewersFilterUtil filterUtil, ReviewersResolver resolver) {
-    this.config = config;
+      FiltersFactory filters, ReviewersFilterUtil filterUtil, ReviewersResolver resolver) {
+    this.filters = filters;
     this.util = filterUtil;
     this.resolver = resolver;
   }
@@ -53,7 +53,7 @@
       Id changeId,
       String query,
       Set<com.google.gerrit.entities.Account.Id> candidates) {
-    List<ReviewerFilter> sections = config.filtersWithInheritance(project);
+    List<ReviewerFilter> sections = filters.withInheritance(project);
 
     if (sections.isEmpty() || changeId == null) {
       return ImmutableSet.of();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/Reviewers.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Reviewers.java
index a3b96ab..fb5855c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/Reviewers.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Reviewers.java
@@ -26,7 +26,8 @@
 import com.google.gerrit.index.query.QueryParseException;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
-import com.googlesource.gerrit.plugins.reviewers.config.ReviewersConfig;
+import com.googlesource.gerrit.plugins.reviewers.config.FiltersFactory;
+import com.googlesource.gerrit.plugins.reviewers.config.GlobalConfig;
 import java.util.List;
 import java.util.Set;
 
@@ -41,7 +42,8 @@
   private final ReviewersResolver resolver;
   private final AddReviewers.Factory addReviewersFactory;
   private final ReviewerWorkQueue workQueue;
-  private final ReviewersConfig config;
+  private final GlobalConfig config;
+  private final FiltersFactory filters;
   private final ReviewersFilterUtil filterUtil;
 
   @Inject
@@ -49,12 +51,14 @@
       ReviewersResolver resolver,
       AddReviewers.Factory addReviewersFactory,
       ReviewerWorkQueue workQueue,
-      ReviewersConfig config,
+      GlobalConfig config,
+      FiltersFactory filters,
       ReviewersFilterUtil util) {
     this.resolver = resolver;
     this.addReviewersFactory = addReviewersFactory;
     this.workQueue = workQueue;
     this.config = config;
+    this.filters = filters;
     this.filterUtil = util;
   }
 
@@ -75,7 +79,7 @@
 
   private List<ReviewerFilter> getFilters(Project.NameKey projectName) {
     // TODO(davido): we have to cache per project configuration
-    return config.filtersWithInheritance(projectName);
+    return filters.withInheritance(projectName);
   }
 
   private void onEvent(ChangeEvent event) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/FiltersFactory.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/FiltersFactory.java
new file mode 100644
index 0000000..04c3d62
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/FiltersFactory.java
@@ -0,0 +1,51 @@
+// Copyright (C) 2021 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.reviewers.config;
+
+import com.google.common.flogger.FluentLogger;
+import com.google.gerrit.entities.Project;
+import com.google.gerrit.extensions.annotations.PluginName;
+import com.google.gerrit.server.config.PluginConfigFactory;
+import com.google.gerrit.server.project.NoSuchProjectException;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import com.googlesource.gerrit.plugins.reviewers.ReviewerFilter;
+import java.util.List;
+import org.eclipse.jgit.lib.Config;
+
+@Singleton
+public class FiltersFactory {
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
+
+  private final PluginConfigFactory configFactory;
+  private final String pluginName;
+
+  @Inject
+  public FiltersFactory(PluginConfigFactory configFactory, @PluginName String pluginName) {
+    this.configFactory = configFactory;
+    this.pluginName = pluginName;
+  }
+
+  public List<ReviewerFilter> withInheritance(Project.NameKey projectName) {
+    Config cfg;
+    try {
+      cfg = configFactory.getProjectPluginConfigWithMergedInheritance(projectName, pluginName);
+    } catch (NoSuchProjectException e) {
+      logger.atSevere().log("Unable to get config for project %s", projectName.get());
+      cfg = new Config();
+    }
+    return new ReviewerFilterCollection(cfg).getAll();
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/ForProject.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/ForProject.java
new file mode 100644
index 0000000..c53fdba
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/ForProject.java
@@ -0,0 +1,75 @@
+// Copyright (C) 2021 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.reviewers.config;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Strings;
+import com.google.gerrit.entities.RefNames;
+import com.google.gerrit.server.git.meta.VersionedMetaData;
+import com.googlesource.gerrit.plugins.reviewers.ReviewerType;
+import java.io.IOException;
+import org.eclipse.jgit.errors.ConfigInvalidException;
+import org.eclipse.jgit.lib.CommitBuilder;
+import org.eclipse.jgit.lib.Config;
+
+public class ForProject extends VersionedMetaData {
+  @VisibleForTesting public static final String FILENAME = "reviewers.config";
+  @VisibleForTesting public static final String SECTION_FILTER = "filter";
+  @VisibleForTesting public static final String KEY_CC = "cc";
+  @VisibleForTesting public static final String KEY_REVIEWER = "reviewer";
+
+  private Config cfg;
+  private ReviewerFilterCollection filters;
+
+  public void addReviewer(String filter, String reviewer, ReviewerType type) {
+    switch (type) {
+      case REVIEWER:
+        filters.get(filter).addReviewer(reviewer);
+        break;
+      case CC:
+        filters.get(filter).addCc(reviewer);
+    }
+  }
+
+  public void removeReviewer(String filter, String reviewer, ReviewerType type) {
+    switch (type) {
+      case REVIEWER:
+        filters.get(filter).removeReviewer(reviewer);
+        break;
+      case CC:
+        filters.get(filter).removeCc(reviewer);
+    }
+  }
+
+  @Override
+  protected String getRefName() {
+    return RefNames.REFS_CONFIG;
+  }
+
+  @Override
+  protected void onLoad() throws IOException, ConfigInvalidException {
+    this.cfg = readConfig(FILENAME);
+    this.filters = new ReviewerFilterCollection(cfg);
+  }
+
+  @Override
+  protected boolean onSave(CommitBuilder commit) throws IOException, ConfigInvalidException {
+    if (Strings.isNullOrEmpty(commit.getMessage())) {
+      commit.setMessage("Update reviewers configuration\n");
+    }
+    saveConfig(FILENAME, cfg);
+    return true;
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/GlobalConfig.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/GlobalConfig.java
new file mode 100644
index 0000000..b61279f
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/GlobalConfig.java
@@ -0,0 +1,53 @@
+// Copyright (C) 2014 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.reviewers.config;
+
+import com.google.gerrit.extensions.annotations.PluginName;
+import com.google.gerrit.server.config.PluginConfigFactory;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import org.eclipse.jgit.lib.Config;
+
+/** Global and project local configurations. */
+@Singleton
+public class GlobalConfig {
+  private static final String KEY_ENABLE_REST = "enableREST";
+  private static final String KEY_SUGGEST_ONLY = "suggestOnly";
+  private static final String KEY_IGNORE_WIP = "ignoreWip";
+
+  private final boolean enableREST;
+  private final boolean suggestOnly;
+  private final boolean ignoreWip;
+
+  @Inject
+  GlobalConfig(PluginConfigFactory cfgFactory, @PluginName String pluginName) {
+    Config cfg = cfgFactory.getGlobalPluginConfig(pluginName);
+    this.enableREST = cfg.getBoolean(pluginName, null, KEY_ENABLE_REST, true);
+    this.suggestOnly = cfg.getBoolean(pluginName, null, KEY_SUGGEST_ONLY, false);
+    this.ignoreWip = cfg.getBoolean(pluginName, null, KEY_IGNORE_WIP, true);
+  }
+
+  public boolean enableREST() {
+    return enableREST;
+  }
+
+  public boolean suggestOnly() {
+    return suggestOnly;
+  }
+
+  public boolean ignoreWip() {
+    return ignoreWip;
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/ReviewerFilterCollection.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/ReviewerFilterCollection.java
index cd41373..bd44ccd 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/ReviewerFilterCollection.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/ReviewerFilterCollection.java
@@ -14,9 +14,9 @@
 
 package com.googlesource.gerrit.plugins.reviewers.config;
 
-import static com.googlesource.gerrit.plugins.reviewers.config.ReviewersConfig.KEY_CC;
-import static com.googlesource.gerrit.plugins.reviewers.config.ReviewersConfig.KEY_REVIEWER;
-import static com.googlesource.gerrit.plugins.reviewers.config.ReviewersConfig.SECTION_FILTER;
+import static com.googlesource.gerrit.plugins.reviewers.config.ForProject.KEY_CC;
+import static com.googlesource.gerrit.plugins.reviewers.config.ForProject.KEY_REVIEWER;
+import static com.googlesource.gerrit.plugins.reviewers.config.ForProject.SECTION_FILTER;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/ReviewersConfig.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/ReviewersConfig.java
deleted file mode 100644
index c81cbd5..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/ReviewersConfig.java
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright (C) 2014 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.reviewers.config;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Strings;
-import com.google.common.flogger.FluentLogger;
-import com.google.gerrit.entities.Project;
-import com.google.gerrit.entities.RefNames;
-import com.google.gerrit.extensions.annotations.PluginName;
-import com.google.gerrit.server.config.PluginConfigFactory;
-import com.google.gerrit.server.git.meta.VersionedMetaData;
-import com.google.gerrit.server.project.NoSuchProjectException;
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-import com.googlesource.gerrit.plugins.reviewers.ReviewerFilter;
-import com.googlesource.gerrit.plugins.reviewers.ReviewerType;
-import java.io.IOException;
-import java.util.List;
-import org.eclipse.jgit.errors.ConfigInvalidException;
-import org.eclipse.jgit.lib.CommitBuilder;
-import org.eclipse.jgit.lib.Config;
-
-/** Global and project local configurations. */
-@Singleton
-public class ReviewersConfig {
-  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
-
-  @VisibleForTesting public static final String FILENAME = "reviewers.config";
-  @VisibleForTesting public static final String SECTION_FILTER = "filter";
-  @VisibleForTesting public static final String KEY_CC = "cc";
-  @VisibleForTesting public static final String KEY_REVIEWER = "reviewer";
-  private static final String KEY_ENABLE_REST = "enableREST";
-  private static final String KEY_SUGGEST_ONLY = "suggestOnly";
-  private static final String KEY_IGNORE_WIP = "ignoreWip";
-
-  private final PluginConfigFactory cfgFactory;
-  private final String pluginName;
-
-  private final boolean enableREST;
-  private final boolean suggestOnly;
-  private final boolean ignoreWip;
-
-  @Inject
-  ReviewersConfig(PluginConfigFactory cfgFactory, @PluginName String pluginName) {
-    this.cfgFactory = cfgFactory;
-    this.pluginName = pluginName;
-    Config cfg = cfgFactory.getGlobalPluginConfig(pluginName);
-    this.enableREST = cfg.getBoolean(pluginName, null, KEY_ENABLE_REST, true);
-    this.suggestOnly = cfg.getBoolean(pluginName, null, KEY_SUGGEST_ONLY, false);
-    this.ignoreWip = cfg.getBoolean(pluginName, null, KEY_IGNORE_WIP, true);
-  }
-
-  public List<ReviewerFilter> filtersWithInheritance(Project.NameKey projectName) {
-    Config cfg;
-    try {
-      cfg = cfgFactory.getProjectPluginConfigWithMergedInheritance(projectName, pluginName);
-    } catch (NoSuchProjectException e) {
-      logger.atSevere().log("Unable to get config for project %s", projectName.get());
-      cfg = new Config();
-    }
-    return new ReviewerFilterCollection(cfg).getAll();
-  }
-
-  public boolean enableREST() {
-    return enableREST;
-  }
-
-  public boolean suggestOnly() {
-    return suggestOnly;
-  }
-
-  public boolean ignoreWip() {
-    return ignoreWip;
-  }
-
-  public static class ForProject extends VersionedMetaData {
-    private Config cfg;
-    private ReviewerFilterCollection filters;
-
-    public void addReviewer(String filter, String reviewer, ReviewerType type) {
-      switch (type) {
-        case REVIEWER:
-          filters.get(filter).addReviewer(reviewer);
-          break;
-        case CC:
-          filters.get(filter).addCc(reviewer);
-      }
-    }
-
-    public void removeReviewer(String filter, String reviewer, ReviewerType type) {
-      switch (type) {
-        case REVIEWER:
-          filters.get(filter).removeReviewer(reviewer);
-          break;
-        case CC:
-          filters.get(filter).removeCc(reviewer);
-      }
-    }
-
-    @Override
-    protected String getRefName() {
-      return RefNames.REFS_CONFIG;
-    }
-
-    @Override
-    protected void onLoad() throws IOException, ConfigInvalidException {
-      this.cfg = readConfig(FILENAME);
-      this.filters = new ReviewerFilterCollection(cfg);
-    }
-
-    @Override
-    protected boolean onSave(CommitBuilder commit) throws IOException, ConfigInvalidException {
-      if (Strings.isNullOrEmpty(commit.getMessage())) {
-        commit.setMessage("Update reviewers configuration\n");
-      }
-      saveConfig(FILENAME, cfg);
-      return true;
-    }
-  }
-}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/reviewers/AbstractReviewersPluginTest.java b/src/test/java/com/googlesource/gerrit/plugins/reviewers/AbstractReviewersPluginTest.java
index 1407b48..cd13812 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/reviewers/AbstractReviewersPluginTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/reviewers/AbstractReviewersPluginTest.java
@@ -15,10 +15,10 @@
 package com.googlesource.gerrit.plugins.reviewers;
 
 import static com.google.gerrit.acceptance.GitUtil.fetch;
-import static com.googlesource.gerrit.plugins.reviewers.config.ReviewersConfig.FILENAME;
-import static com.googlesource.gerrit.plugins.reviewers.config.ReviewersConfig.KEY_CC;
-import static com.googlesource.gerrit.plugins.reviewers.config.ReviewersConfig.KEY_REVIEWER;
-import static com.googlesource.gerrit.plugins.reviewers.config.ReviewersConfig.SECTION_FILTER;
+import static com.googlesource.gerrit.plugins.reviewers.config.ForProject.FILENAME;
+import static com.googlesource.gerrit.plugins.reviewers.config.ForProject.KEY_CC;
+import static com.googlesource.gerrit.plugins.reviewers.config.ForProject.KEY_REVIEWER;
+import static com.googlesource.gerrit.plugins.reviewers.config.ForProject.SECTION_FILTER;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
@@ -66,10 +66,6 @@
     return repo;
   }
 
-  private TestFilter filter(String filter, Set<String> reviewers, Set<String> ccs) {
-    return new TestFilter(filter, reviewers, ccs);
-  }
-
   protected TestFilter filter(String filter) {
     return new TestFilter(filter);
   }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/reviewers/config/ReviewersConfigIT.java b/src/test/java/com/googlesource/gerrit/plugins/reviewers/config/ReviewersConfigIT.java
index cd593c8..5f71d91 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/reviewers/config/ReviewersConfigIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/reviewers/config/ReviewersConfigIT.java
@@ -78,11 +78,11 @@
   }
 
   private void assertProjectHasFilters(Project.NameKey project, TestFilter... filters) {
-    assertThat(reviewersConfig().filtersWithInheritance(project))
+    assertThat(filters().withInheritance(project))
         .containsExactlyElementsIn(ImmutableList.copyOf(filters));
   }
 
-  private ReviewersConfig reviewersConfig() {
-    return plugin.getSysInjector().getInstance(ReviewersConfig.class);
+  private FiltersFactory filters() {
+    return plugin.getSysInjector().getInstance(FiltersFactory.class);
   }
 }
