diff --git a/WORKSPACE b/WORKSPACE
index d8b188d..10952d1 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,24 +3,24 @@
 load("//:bazlets.bzl", "load_bazlets")
 
 load_bazlets(
-    commit = "631205bc4f7903d3cf656a844cab2bfd6b03f246",
+    commit = "1ddb1d6c71b77972a89aa0a717f6250ef256d166",
     #local_path = "/home/<user>/projects/bazlets",
 )
 
 # Release Plugin API
-load(
-    "@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
-    "gerrit_api",
-)
-
-# Snapshot Plugin API
 #load(
-#    "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
-#    "gerrit_api_maven_local",
+#    "@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
+#    "gerrit_api",
 #)
 
+# Snapshot Plugin API
+load(
+    "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
+    "gerrit_api_maven_local",
+)
+
 # Load release Plugin API
-gerrit_api()
+#gerrit_api()
 
 # Load snapshot Plugin API
-#gerrit_api_maven_local()
+gerrit_api_maven_local()
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 7ee4c83..61406fa 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/GetReviewers.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/GetReviewers.java
@@ -14,6 +14,7 @@
 
 package com.googlesource.gerrit.plugins.reviewers;
 
+import com.google.gerrit.extensions.restapi.Response;
 import com.google.gerrit.extensions.restapi.RestApiException;
 import com.google.gerrit.extensions.restapi.RestReadView;
 import com.google.gerrit.server.project.ProjectResource;
@@ -31,7 +32,8 @@
   }
 
   @Override
-  public List<ReviewerFilterSection> apply(ProjectResource resource) throws RestApiException {
-    return config.forProject(resource.getNameKey()).getReviewerFilterSections();
+  public Response<List<ReviewerFilterSection>> apply(ProjectResource resource)
+      throws RestApiException {
+    return Response.ok(config.forProject(resource.getNameKey()).getReviewerFilterSections());
   }
 }
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 5240bc8..9a3225a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/PutReviewers.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/PutReviewers.java
@@ -23,6 +23,7 @@
 import com.google.gerrit.extensions.restapi.AuthException;
 import com.google.gerrit.extensions.restapi.ResourceConflictException;
 import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
+import com.google.gerrit.extensions.restapi.Response;
 import com.google.gerrit.extensions.restapi.RestApiException;
 import com.google.gerrit.extensions.restapi.RestModifyView;
 import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
@@ -82,7 +83,7 @@
   }
 
   @Override
-  public List<ReviewerFilterSection> apply(ProjectResource rsrc, Input input)
+  public Response<List<ReviewerFilterSection>> apply(ProjectResource rsrc, Input input)
       throws RestApiException, PermissionBackendException {
     Project.NameKey projectName = rsrc.getNameKey();
     ReviewersConfig.ForProject cfg = config.forProject(projectName);
@@ -142,7 +143,7 @@
     } catch (IOException err) {
       throw new ResourceNotFoundException(projectName.get(), err);
     }
-    return cfg.getReviewerFilterSections();
+    return Response.ok(cfg.getReviewerFilterSections());
   }
 
   private void validateReviewer(String reviewer) throws RestApiException {
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 c2eae68..956c032 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/Reviewers.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Reviewers.java
@@ -44,6 +44,7 @@
 import com.google.inject.Singleton;
 import java.util.List;
 import java.util.Set;
+import java.util.concurrent.Future;
 
 @Singleton
 class Reviewers
@@ -158,7 +159,8 @@
           byConfigFactory.create(
               c, resolver.resolve(reviewers, projectName, changeNumber, uploader));
 
-      workQueue.getDefaultQueue().submit(task);
+      @SuppressWarnings("unused")
+      Future<?> ignored = workQueue.getDefaultQueue().submit(task);
     } catch (QueryParseException e) {
       logger.atWarning().log(
           "Could not add default reviewers for change %d of project %s, filter is invalid: %s",
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewersResolver.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewersResolver.java
index 7556553..5034afe 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewersResolver.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewersResolver.java
@@ -91,7 +91,7 @@
     try {
       AccountResolver.Result result = accountResolver.resolve(accountName);
       if (result.asList().size() == 1) {
-        Account.Id id = result.asList().get(0).getAccount().getId();
+        Account.Id id = result.asList().get(0).getAccount().id();
         if (uploader == null || id.get() != uploader._accountId) {
           reviewers.add(id);
           return true;
@@ -117,7 +117,7 @@
           groupMembers.listAccounts(groupResolver.get().parse(group).getGroupUUID(), project)
               .stream()
               .filter(Account::isActive)
-              .map(Account::getId)
+              .map(Account::id)
               .collect(toSet());
       reviewers.addAll(accounts);
     } catch (UnprocessableEntityException e) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/SuggestProjectReviewers.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/SuggestProjectReviewers.java
index 5329f7c..3ce2d61 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/SuggestProjectReviewers.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/SuggestProjectReviewers.java
@@ -15,9 +15,11 @@
 package com.googlesource.gerrit.plugins.reviewers;
 
 import com.google.gerrit.exceptions.StorageException;
+import com.google.gerrit.extensions.client.ReviewerState;
 import com.google.gerrit.extensions.common.AccountVisibility;
 import com.google.gerrit.extensions.common.SuggestedReviewerInfo;
 import com.google.gerrit.extensions.restapi.BadRequestException;
+import com.google.gerrit.extensions.restapi.Response;
 import com.google.gerrit.extensions.restapi.RestReadView;
 import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.server.config.GerritServerConfig;
@@ -49,11 +51,12 @@
   }
 
   @Override
-  public List<SuggestedReviewerInfo> apply(ProjectResource rsrc)
+  public Response<List<SuggestedReviewerInfo>> apply(ProjectResource rsrc)
       throws BadRequestException, StorageException, IOException, ConfigInvalidException,
           PermissionBackendException {
-    return reviewersUtil.suggestReviewers(
-        null, this, rsrc.getProjectState(), getVisibility(rsrc), true);
+    return Response.ok(
+        reviewersUtil.suggestReviewers(
+            ReviewerState.REVIEWER, null, this, rsrc.getProjectState(), getVisibility(rsrc), true));
   }
 
   private VisibilityControl getVisibility(final ProjectResource rsrc) {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersIT.java b/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersIT.java
index fdc7fe4..e0dd539 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersIT.java
@@ -15,7 +15,7 @@
 package com.googlesource.gerrit.plugins.reviewers;
 
 import static com.google.common.truth.Truth.assertThat;
-import static com.google.common.truth.Truth.assert_;
+import static com.google.common.truth.Truth.assertWithMessage;
 import static com.google.gerrit.acceptance.GitUtil.fetch;
 import static com.google.gerrit.extensions.client.ReviewerState.REVIEWER;
 import static com.googlesource.gerrit.plugins.reviewers.ReviewersConfig.FILENAME;
@@ -29,9 +29,11 @@
 import com.google.gerrit.acceptance.NoHttpd;
 import com.google.gerrit.acceptance.TestAccount;
 import com.google.gerrit.acceptance.TestPlugin;
+import com.google.gerrit.acceptance.testsuite.project.ProjectOperations;
 import com.google.gerrit.extensions.common.AccountInfo;
-import com.google.gerrit.reviewdb.client.Branch;
+import com.google.gerrit.reviewdb.client.BranchNameKey;
 import com.google.gerrit.reviewdb.client.RefNames;
+import com.google.inject.Inject;
 import java.util.Collection;
 import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.revwalk.RevCommit;
@@ -41,6 +43,8 @@
 @NoHttpd
 @TestPlugin(name = "reviewers", sysModule = "com.googlesource.gerrit.plugins.reviewers.Module")
 public class ReviewersIT extends LightweightPluginDaemonTest {
+  @Inject private ProjectOperations projectOperations;
+
   @Before
   public void setUp() throws Exception {
     fetch(testRepo, RefNames.REFS_CONFIG + ":refs/heads/config");
@@ -49,7 +53,7 @@
 
   @Test
   public void addReviewers() throws Exception {
-    RevCommit oldHead = getRemoteHead();
+    RevCommit oldHead = projectOperations.project(project).getHead("master");
     TestAccount user2 = accountCreator.user2();
 
     Config cfg = new Config();
@@ -74,7 +78,7 @@
         Thread.sleep(10);
         wait += 10;
         if (wait > 100) {
-          assert_().fail("Timeout of 100 ms exceeded");
+          assertWithMessage("Timeout of 100 ms exceeded").fail();
         }
       }
     } while (reviewers == null);
@@ -86,7 +90,7 @@
 
   @Test
   public void addReviewersMatchMultipleSections() throws Exception {
-    RevCommit oldHead = getRemoteHead();
+    RevCommit oldHead = projectOperations.project(project).getHead("master");
     TestAccount user2 = accountCreator.user2();
 
     Config cfg = new Config();
@@ -111,7 +115,7 @@
         Thread.sleep(10);
         wait += 10;
         if (wait > 100) {
-          assert_().fail("Timeout of 100 ms exceeded");
+          assertWithMessage("Timeout of 100 ms exceeded").fail();
         }
       }
     } while (reviewers == null);
@@ -123,7 +127,7 @@
 
   @Test
   public void doNotAddReviewersFromNonMatchingFilters() throws Exception {
-    RevCommit oldHead = getRemoteHead();
+    RevCommit oldHead = projectOperations.project(project).getHead("master");
 
     Config cfg = new Config();
     cfg.setString(SECTION_FILTER, "branch:master", KEY_REVIEWER, user.email());
@@ -135,7 +139,7 @@
 
     testRepo.reset(oldHead);
 
-    createBranch(Branch.nameKey(project, "other-branch"));
+    createBranch(BranchNameKey.create(project, "other-branch"));
 
     // Create a change that matches the filter section.
     createChange("refs/for/master");
@@ -156,7 +160,7 @@
 
   @Test
   public void addReviewersFromMatchingFilters() throws Exception {
-    RevCommit oldHead = getRemoteHead();
+    RevCommit oldHead = projectOperations.project(project).getHead("master");
 
     Config cfg = new Config();
     cfg.setString(SECTION_FILTER, "branch:other-branch", KEY_REVIEWER, user.email());
@@ -168,7 +172,7 @@
 
     testRepo.reset(oldHead);
 
-    createBranch(Branch.nameKey(project, "other-branch"));
+    createBranch(BranchNameKey.create(project, "other-branch"));
 
     // Create a change that doesn't match the filter section.
     createChange("refs/for/master");
