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 8de2cc4..80b9365 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java
@@ -60,7 +60,7 @@
             protected void configure() {
               bind(ReviewerSuggestion.class)
                   .annotatedWith(Exports.named("reviewer-suggest"))
-                  .to(Reviewers.class);
+                  .to(ReviewerSuggest.class);
             }
           });
     } else {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewerSuggest.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewerSuggest.java
new file mode 100644
index 0000000..3751548
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewerSuggest.java
@@ -0,0 +1,81 @@
+// 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.reviewers;
+
+import static java.util.stream.Collectors.toSet;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.common.flogger.FluentLogger;
+import com.google.gerrit.entities.Account;
+import com.google.gerrit.entities.Change.Id;
+import com.google.gerrit.entities.Project.NameKey;
+import com.google.gerrit.exceptions.StorageException;
+import com.google.gerrit.index.query.QueryParseException;
+import com.google.gerrit.server.change.ReviewerSuggestion;
+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 java.util.List;
+import java.util.Set;
+
+@Singleton
+public class ReviewerSuggest implements ReviewerSuggestion {
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
+
+  private final ReviewersConfig config;
+  private final ReviewersFilterUtil util;
+  private final ReviewersResolver resolver;
+
+  @Inject
+  public ReviewerSuggest(
+      ReviewersConfig config, ReviewersFilterUtil filterUtil, ReviewersResolver resolver) {
+    this.config = config;
+    this.util = filterUtil;
+    this.resolver = resolver;
+  }
+
+  @Override
+  public Set<SuggestedReviewer> suggestReviewers(
+      NameKey project,
+      Id changeId,
+      String query,
+      Set<com.google.gerrit.entities.Account.Id> candidates) {
+    List<ReviewerFilter> sections = config.filtersWithInheritance(project);
+
+    if (sections.isEmpty() || changeId == null) {
+      return ImmutableSet.of();
+    }
+
+    try {
+      Set<String> reviewers = util.findReviewers(changeId.get(), sections);
+      if (!reviewers.isEmpty()) {
+        return resolver.resolve(reviewers, project, changeId.get(), null).stream()
+            .map(a -> suggestedReviewer(a))
+            .collect(toSet());
+      }
+    } catch (StorageException | QueryParseException x) {
+      logger.atSevere().withCause(x).log(x.getMessage());
+    }
+    return ImmutableSet.of();
+  }
+
+  private SuggestedReviewer suggestedReviewer(Account.Id account) {
+    SuggestedReviewer reviewer = new SuggestedReviewer();
+    reviewer.account = account;
+    reviewer.score = 1;
+    return reviewer;
+  }
+}
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 6ace126..a3b96ab 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/Reviewers.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Reviewers.java
@@ -14,13 +14,7 @@
 
 package com.googlesource.gerrit.plugins.reviewers;
 
-import static java.util.stream.Collectors.toSet;
-
-import com.google.common.collect.ImmutableSet;
 import com.google.common.flogger.FluentLogger;
-import com.google.gerrit.common.Nullable;
-import com.google.gerrit.entities.Account;
-import com.google.gerrit.entities.Change;
 import com.google.gerrit.entities.Project;
 import com.google.gerrit.exceptions.StorageException;
 import com.google.gerrit.extensions.common.AccountInfo;
@@ -30,8 +24,6 @@
 import com.google.gerrit.extensions.events.RevisionCreatedListener;
 import com.google.gerrit.extensions.events.WorkInProgressStateChangedListener;
 import com.google.gerrit.index.query.QueryParseException;
-import com.google.gerrit.server.change.ReviewerSuggestion;
-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;
@@ -43,8 +35,7 @@
 class Reviewers
     implements RevisionCreatedListener,
         PrivateStateChangedListener,
-        WorkInProgressStateChangedListener,
-        ReviewerSuggestion {
+        WorkInProgressStateChangedListener {
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
   private final ReviewersResolver resolver;
@@ -82,38 +73,6 @@
     onEvent(event);
   }
 
-  @Override
-  public Set<SuggestedReviewer> suggestReviewers(
-      Project.NameKey projectName,
-      @Nullable Change.Id changeId,
-      @Nullable String query,
-      Set<Account.Id> candidates) {
-    List<ReviewerFilter> filters = getFilters(projectName);
-
-    if (filters.isEmpty() || changeId == null) {
-      return ImmutableSet.of();
-    }
-
-    try {
-      Set<String> reviewers = filterUtil.findReviewers(changeId.get(), filters);
-      if (!reviewers.isEmpty()) {
-        return resolver.resolve(reviewers, projectName, changeId.get(), null).stream()
-            .map(a -> suggestedReviewer(a))
-            .collect(toSet());
-      }
-    } catch (StorageException | QueryParseException x) {
-      logger.atSevere().withCause(x).log(x.getMessage());
-    }
-    return ImmutableSet.of();
-  }
-
-  private SuggestedReviewer suggestedReviewer(Account.Id account) {
-    SuggestedReviewer reviewer = new SuggestedReviewer();
-    reviewer.account = account;
-    reviewer.score = 1;
-    return reviewer;
-  }
-
   private List<ReviewerFilter> getFilters(Project.NameKey projectName) {
     // TODO(davido): we have to cache per project configuration
     return config.filtersWithInheritance(projectName);
