diff --git a/WORKSPACE b/WORKSPACE
index 4825cd4..6504d44 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,24 +3,24 @@
 load("//:bazlets.bzl", "load_bazlets")
 
 load_bazlets(
-    commit = "51049da0140c58ee26f8285bca4393c5e43ce4a1",
+    commit = "d826d85285bb22d3fe817fe165a7e1d3472f65fa",
     #local_path = "/home/<user>/projects/bazlets",
 )
 
 #Snapshot Plugin API
-#load(
-#    "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
-#    "gerrit_api_maven_local",
-#)
-
-# Load snapshot Plugin API
-#gerrit_api_maven_local()
-
-# Release Plugin API
 load(
-    "@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
-    "gerrit_api",
+    "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
+    "gerrit_api_maven_local",
 )
 
+# Load snapshot Plugin API
+gerrit_api_maven_local()
+
+# Release Plugin API
+#load(
+#    "@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
+#    "gerrit_api",
+#)
+
 # Load release Plugin API
-gerrit_api()
+#gerrit_api()
diff --git a/src/main/java/com/criteo/gerrit/plugins/automerge/AtomicityHelper.java b/src/main/java/com/criteo/gerrit/plugins/automerge/AtomicityHelper.java
index 90208ce..948a26b 100644
--- a/src/main/java/com/criteo/gerrit/plugins/automerge/AtomicityHelper.java
+++ b/src/main/java/com/criteo/gerrit/plugins/automerge/AtomicityHelper.java
@@ -88,7 +88,7 @@
     RelatedChangesInfo related = getRelated.apply(r);
     log.debug(String.format("Checking for related changes on review %d", number));
 
-    String checkedCommitSha1 = r.getPatchSet().getRevision().get();
+    String checkedCommitSha1 = r.getPatchSet().commitId().name();
     int firstParentIndex = 0;
     int i = 0;
     for (RelatedChangeAndCommitInfo c : related.changes) {
@@ -142,7 +142,7 @@
   public boolean isSubmittable(String project, int change) {
     ChangeData changeData =
         changeDataFactory.create(
-            new Project.NameKey(project), new com.google.gerrit.reviewdb.client.Change.Id(change));
+            Project.nameKey(project), com.google.gerrit.reviewdb.client.Change.id(change));
     // For draft reviews, the patchSet must be set to avoid an NPE.
     final List<SubmitRecord> cansubmit =
         submitRuleEvaluatorFactory.create(SubmitRuleOptions.defaults()).evaluate(changeData);
@@ -164,11 +164,11 @@
 
   public RevisionResource getRevisionResource(String project, int changeNumber) {
     com.google.gerrit.reviewdb.client.Change.Id changeId =
-        new com.google.gerrit.reviewdb.client.Change.Id(changeNumber);
+        com.google.gerrit.reviewdb.client.Change.id(changeNumber);
     ChangeNotes notes = changeNotesFactory.createChecked(changeId);
     try {
       permissionBackend.user(getBotUser()).change(notes).check(READ);
-      ChangeData changeData = changeDataFactory.create(new Project.NameKey(project), changeId);
+      ChangeData changeData = changeDataFactory.create(Project.nameKey(project), changeId);
 
       RevisionResource r =
           new RevisionResource(
diff --git a/src/test/java/com/criteo/gerrit/plugins/automerge/AutomaticMergerTest.java b/src/test/java/com/criteo/gerrit/plugins/automerge/AutomaticMergerTest.java
index ed84b29..49713ec 100644
--- a/src/test/java/com/criteo/gerrit/plugins/automerge/AutomaticMergerTest.java
+++ b/src/test/java/com/criteo/gerrit/plugins/automerge/AutomaticMergerTest.java
@@ -54,7 +54,7 @@
     regularUser =
         accountCreator.create("developer", "developer@mycompany.com", "Developer", DEVELOPERS);
     grant(project, "refs/*", "submit", false, groupUUID(BOT_USERS));
-    grantLabel("Code-Review", -2, 2, project, "refs/*", false, groupUUID(DEVELOPERS), false);
+    grantLabel("Code-Review", -2, 2, project, "refs/*", groupUUID(DEVELOPERS), false);
   }
 
   @Test
@@ -89,7 +89,7 @@
   }
 
   private AccountGroup.UUID groupUUID(String name) {
-    return groupCache.get(new AccountGroup.NameKey(name)).get().getGroupUUID();
+    return groupCache.get(AccountGroup.nameKey(name)).get().getGroupUUID();
   }
 
   private Changes changesApi() {
