diff --git a/BUCK b/BUCK
index 15df39e..519dad4 100644
--- a/BUCK
+++ b/BUCK
@@ -9,7 +9,7 @@
     'Implementation-URL: https://gerrit.googlesource.com/plugins/reviewers-by-blame',
     'Gerrit-PluginName: reviewers-by-blame',
     'Gerrit-ApiType: plugin',
-    'Gerrit-ApiVersion: 2.11.1',
+    'Gerrit-ApiVersion: 2.12-SNAPSHOT',
     'Gerrit-Module: com.googlesource.gerrit.plugins.reviewersbyblame.ReviewersByBlameModule',
   ],
 )
diff --git a/VERSION b/VERSION
index 55773d3..9df7bf7 100644
--- a/VERSION
+++ b/VERSION
@@ -1,5 +1,5 @@
 # Used by BUCK to include "Implementation-Version" in plugin Manifest.
 # If this file doesn't exist the output of 'git describe' is used
 # instead.
-PLUGIN_VERSION = '2.11.1'
+PLUGIN_VERSION = '2.12-SNAPSHOT'
 
diff --git a/lib/gerrit/BUCK b/lib/gerrit/BUCK
index c86049a..19e67dc 100644
--- a/lib/gerrit/BUCK
+++ b/lib/gerrit/BUCK
@@ -1,7 +1,7 @@
 include_defs('//bucklets/maven_jar.bucklet')
 
-VER = '2.11.1'
-REPO = MAVEN_CENTRAL
+VER = '2.12-SNAPSHOT'
+REPO = MAVEN_LOCAL
 
 maven_jar(
   name = 'plugin-api',
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ChangeUpdatedListener.java b/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ChangeUpdatedListener.java
index d21d5c3..0452273 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ChangeUpdatedListener.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ChangeUpdatedListener.java
@@ -36,9 +36,6 @@
 import com.google.inject.Provider;
 import com.google.inject.ProvisionException;
 
-import org.eclipse.jgit.errors.IncorrectObjectTypeException;
-import org.eclipse.jgit.errors.MissingObjectException;
-import org.eclipse.jgit.errors.RepositoryNotFoundException;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.revwalk.RevCommit;
@@ -102,97 +99,74 @@
       return;
     }
 
-    Repository git;
-    try {
-      git = repoManager.openRepository(projectName);
-    } catch (RepositoryNotFoundException x) {
-      log.error(x.getMessage(), x);
-      return;
-    } catch (IOException x) {
-      log.error(x.getMessage(), x);
-      return;
-    }
+    try (final Repository git = repoManager.openRepository(projectName)) {
+      try (final RevWalk rw = new RevWalk(git)) {
+        final ReviewDb reviewDb = schemaFactory.open();
+        try {
+          Change.Id changeId = new Change.Id(Integer.parseInt(e.change.number));
+          PatchSet.Id psId = new PatchSet.Id(changeId, Integer.parseInt(e.patchSet.number));
+          PatchSet ps = reviewDb.patchSets().get(psId);
+          if (ps == null) {
+            log.warn("Patch set " + psId.get() + " not found.");
+            return;
+          }
 
-    final ReviewDb reviewDb;
-    final RevWalk rw = new RevWalk(git);
+          final Change change = reviewDb.changes().get(psId.getParentKey());
+          if (change == null) {
+            log.warn("Change " + changeId.get() + " not found.");
+            return;
+          }
 
-    try {
-      reviewDb = schemaFactory.open();
-      try {
-        Change.Id changeId = new Change.Id(Integer.parseInt(e.change.number));
-        PatchSet.Id psId = new PatchSet.Id(changeId, Integer.parseInt(e.patchSet.number));
-        PatchSet ps = reviewDb.patchSets().get(psId);
-        if (ps == null) {
-          log.warn("Patch set " + psId.get() + " not found.");
-          return;
-        }
+          final RevCommit commit =
+              rw.parseCommit(ObjectId.fromString(e.patchSet.revision));
 
-        final Change change = reviewDb.changes().get(psId.getParentKey());
-        if (change == null) {
-          log.warn("Change " + changeId.get() + " not found.");
-          return;
-        }
+          final Runnable task =
+              reviewersByBlameFactory.create(commit, change, ps, maxReviewers, git);
 
-        final RevCommit commit =
-            rw.parseCommit(ObjectId.fromString(e.patchSet.revision));
+          workQueue.getDefaultQueue().submit(new Runnable() {
+            @Override
+            public void run() {
+              RequestContext old = tl.setContext(new RequestContext() {
 
-        final Runnable task =
-            reviewersByBlameFactory.create(commit, change, ps, maxReviewers, git);
+                @Override
+                public CurrentUser getCurrentUser() {
+                  return identifiedUserFactory.create(change.getOwner());
+                }
 
-        workQueue.getDefaultQueue().submit(new Runnable() {
-          @Override
-          public void run() {
-            RequestContext old = tl.setContext(new RequestContext() {
-
-              @Override
-              public CurrentUser getCurrentUser() {
-                return identifiedUserFactory.create(change.getOwner());
-              }
-
-              @Override
-              public Provider<ReviewDb> getReviewDbProvider() {
-                return new Provider<ReviewDb>() {
-                  @Override
-                  public ReviewDb get() {
-                    if (db == null) {
-                      try {
-                        db = schemaFactory.open();
-                      } catch (OrmException e) {
-                        throw new ProvisionException("Cannot open ReviewDb", e);
+                @Override
+                public Provider<ReviewDb> getReviewDbProvider() {
+                  return new Provider<ReviewDb>() {
+                    @Override
+                    public ReviewDb get() {
+                      if (db == null) {
+                        try {
+                          db = schemaFactory.open();
+                        } catch (OrmException e) {
+                          throw new ProvisionException("Cannot open ReviewDb", e);
+                        }
                       }
+                      return db;
                     }
-                    return db;
-                  }
-                };
-              }
-            });
-            try {
-              task.run();
-            } finally {
-              tl.setContext(old);
-              if (db != null) {
-                db.close();
-                db = null;
+                  };
+                }
+              });
+              try {
+                task.run();
+              } finally {
+                tl.setContext(old);
+                if (db != null) {
+                  db.close();
+                  db = null;
+                }
               }
             }
-          }
-        });
-      } catch (OrmException x) {
-        log.error(x.getMessage(), x);
-      } catch (MissingObjectException x) {
-        log.error(x.getMessage(), x);
-      } catch (IncorrectObjectTypeException x) {
-        log.error(x.getMessage(), x);
-      } catch (IOException x) {
-        log.error(x.getMessage(), x);
-      } finally {
-        reviewDb.close();
+          });
+        } finally {
+          reviewDb.close();
+        }
       }
-    } catch (OrmException x) {
+    } catch (OrmException|IOException x) {
       log.error(x.getMessage(), x);
-    } finally {
-      rw.close();
-      git.close();
     }
   }
 
