diff --git a/BUILD b/BUILD
index bd46d6c..1ad5f3a 100644
--- a/BUILD
+++ b/BUILD
@@ -50,7 +50,7 @@
     srcs = glob(["src/main/java/**/*.java"]),
     manifest_entries = [
         "Gerrit-PluginName: batch",
-        "Gerrit-ApiVersion: 3.4.0-SNAPSHOT",
+        "Gerrit-ApiVersion: 3.4.0",
         "Implementation-Title: Batch Plugin",
         "Implementation-URL: https://gerrit-review.googlesource.com/#/admin/projects/plugins/batch",
         "Gerrit-Module: com.googlesource.gerrit.plugins.batch.Module",
diff --git a/WORKSPACE b/WORKSPACE
index d17aa23..e90a918 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,7 +3,7 @@
 load("//:bazlets.bzl", "load_bazlets")
 
 load_bazlets(
-    commit = "0f81174e3d1b892a1342ebc75bb4bbb158ae0efe",
+    commit = "7ff4605f48db148197675a0d2ea41ee07cb72fd3",
     #local_path = "/home/<user>/projects/bazlets",
 )
 
@@ -13,10 +13,7 @@
 )
 
 # Load release Plugin API
-#gerrit_api()
-
-# Load snapshot Plugin API
-gerrit_api(version = "3.4.0-SNAPSHOT")
+gerrit_api()
 
 load("//:external_plugin_deps.bzl", "external_plugin_deps")
 
diff --git a/pom.xml b/pom.xml
index aabad3d..13ab7db 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,7 +22,7 @@
   <groupId>com.googlesource.gerrit.plugins.batch</groupId>
   <artifactId>batch</artifactId>
   <packaging>jar</packaging>
-  <version>3.4.0-SNAPSHOT</version>
+  <version>3.4.0</version>
   <name>batch</name>
 
   <properties>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/batch/BatchSubmitter.java b/src/main/java/com/googlesource/gerrit/plugins/batch/BatchSubmitter.java
index 546ae42..06bcd27 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/batch/BatchSubmitter.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/batch/BatchSubmitter.java
@@ -136,24 +136,24 @@
       throws IOException, RepositoryNotFoundException, RestApiException, UpdateException,
           PermissionBackendException {
     if (dest.changes != null) {
+      Project.NameKey project = Project.nameKey(dest.project);
       // TODO: Is using the first change in the batch for each dest the correct thing to do?
       Change firstInDest =
           notesFactory
-              .createChecked(
-                  Project.nameKey(dest.project), dest.changes.get(0).toPatchSetId().changeId())
+              .createChecked(project, dest.changes.get(0).toPatchSetId().changeId())
               .getChange();
       SubmissionId submissionId = new SubmissionId(firstInDest);
       for (Batch.Change change : dest.changes) {
-        closeChange(Project.nameKey(dest.project), change.toPatchSetId(), dest.sha1, submissionId);
+        closeChange(project, change.toPatchSetId(), dest.sha1, submissionId);
       }
     }
   }
 
   private void closeChange(
-      Project.NameKey destProject, PatchSet.Id psId, String sha1, SubmissionId submissionId)
+      Project.NameKey project, PatchSet.Id psId, String sha1, SubmissionId submissionId)
       throws IOException, RepositoryNotFoundException, RestApiException, UpdateException,
           PermissionBackendException {
-    ChangeNotes changeNotes = notesFactory.createChecked(destProject, psId.changeId());
+    ChangeNotes changeNotes = notesFactory.createChecked(project, psId.changeId());
     permissionBackend.user(user).change(changeNotes).check(ChangePermission.READ);
     Change change = changeNotes.getChange();
     PatchSet ps = psUtil.get(changeNotes, psId);
@@ -166,8 +166,6 @@
         || change.getStatus() == Change.Status.ABANDONED) {
       return;
     }
-    BranchNameKey destination = change.getDest();
-    Project.NameKey project = destination.project();
 
     try (TraceContext traceContext =
             TraceContext.open()
@@ -182,7 +180,7 @@
       bu.addOp(
           psId.changeId(),
           mergedByPushOpFactory.create(
-              requestScopePropagator, psId, submissionId, destination.branch(), sha1));
+              requestScopePropagator, psId, submissionId, change.getDest().branch(), sha1));
       bu.execute();
     }
   }
