diff --git a/pom.xml b/pom.xml
index 9005b6b..c74323b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,7 +21,7 @@
   <groupId>com.googlesource.gerrit.plugins.imagare</groupId>
   <artifactId>imagare</artifactId>
   <packaging>jar</packaging>
-  <version>2.11</version>
+  <version>2.11.1</version>
   <name>imagare</name>
 
   <properties>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/DeleteImage.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/DeleteImage.java
index 675c99d..2805ba4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/DeleteImage.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/DeleteImage.java
@@ -74,8 +74,7 @@
       throw new AuthException("not allowed to delete image");
     }
 
-    Repository r = repoManager.openRepository(rsrc.getProject());
-    try {
+    try (Repository r = repoManager.openRepository(rsrc.getProject())) {
       if (!rsrc.getControl().canDelete()) {
         validateOwnImage(r, rsrc.getRef());
       }
@@ -108,8 +107,6 @@
           log.error("Cannot delete " + rsrc.getRef() + ": " + result.name());
           throw new ResourceConflictException("cannot delete branch: " + result.name());
       }
-    } finally {
-      r.close();
     }
     return Response.none();
   }
@@ -120,15 +117,12 @@
     if (r == null) {
       throw new ResourceNotFoundException(ref);
     }
-    RevWalk rw = new RevWalk(repo);
-    try {
+    try (RevWalk rw = new RevWalk(repo)) {
       RevCommit commit = rw.parseCommit(r.getObjectId());
       if (!self.get().getNameEmail()
           .equals(getNameEmail(commit.getCommitterIdent()))) {
         throw new AuthException("not allowed to delete image");
       }
-    } finally {
-      rw.release();
     }
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageServlet.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageServlet.java
index a3c2ed8..b8093bd 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageServlet.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageServlet.java
@@ -127,8 +127,7 @@
           }
         }
       }
-      Repository repo = repoManager.openRepository(key.project);
-      try {
+      try (Repository repo = repoManager.openRepository(key.project)) {
         ObjectId revId =
             repo.resolve(rev != null ? rev : Constants.HEAD);
         if (revId == null) {
@@ -137,15 +136,12 @@
         }
 
         if (ObjectId.isId(rev)) {
-          RevWalk rw = new RevWalk(repo);
-          try {
+          try (RevWalk rw = new RevWalk(repo)) {
             RevCommit commit = rw.parseCommit(repo.resolve(rev));
             if (!projectControl.canReadCommit(db.get(), rw, commit)) {
               notFound(res);
               return;
             }
-          } finally {
-            rw.release();
           }
         }
 
@@ -164,12 +160,10 @@
           return;
         }
 
-        RevWalk rw = new RevWalk(repo);
-        try {
+        try (RevWalk rw = new RevWalk(repo)) {
           RevCommit commit = rw.parseCommit(revId);
           RevTree tree = commit.getTree();
-          TreeWalk tw = new TreeWalk(repo);
-          try {
+          try (TreeWalk tw = new TreeWalk(repo)) {
             tw.addTree(tree);
             tw.setRecursive(true);
             tw.setFilter(PathFilter.create(key.file));
@@ -194,17 +188,11 @@
             CacheHeaders.setCacheablePrivate(res, 7, TimeUnit.DAYS, false);
             send(req, res, content, mimeType.toString(), commit.getCommitTime());
             return;
-          } finally {
-            tw.release();
           }
         } catch (IOException e) {
           notFound(res);
           return;
-        } finally {
-          rw.release();
         }
-      } finally {
-        repo.close();
       }
     } catch (RepositoryNotFoundException | NoSuchProjectException
         | ResourceNotFoundException | AuthException | RevisionSyntaxException e) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java
index 31e38e0..c25a242 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java
@@ -165,68 +165,56 @@
     String ref = getRef(content, fileName);
     RefControl rc = pc.controlForRef(ref);
 
-    Repository repo = repoManager.openRepository(pc.getProject().getNameKey());
-    try {
+    try (Repository repo = repoManager.openRepository(pc.getProject().getNameKey())) {
       ObjectId commitId = repo.resolve(ref);
       if (commitId != null) {
         // this image exists already
         return getUrl(pc.getProject().getNameKey(), ref, fileName);
       }
 
-      RevWalk rw = new RevWalk(repo);
-      try {
-        ObjectInserter oi = repo.newObjectInserter();
-        try {
-          ObjectId blobId = oi.insert(Constants.OBJ_BLOB, content);
-          oi.flush();
+      try (RevWalk rw = new RevWalk(repo);
+          ObjectInserter oi = repo.newObjectInserter()) {
+        ObjectId blobId = oi.insert(Constants.OBJ_BLOB, content);
+        oi.flush();
 
-          TreeFormatter tf = new TreeFormatter();
-          tf.append(fileName, FileMode.REGULAR_FILE, blobId);
-          ObjectId treeId = tf.insertTo(oi);
-          oi.flush();
+        TreeFormatter tf = new TreeFormatter();
+        tf.append(fileName, FileMode.REGULAR_FILE, blobId);
+        ObjectId treeId = tf.insertTo(oi);
+        oi.flush();
 
-          PersonIdent authorIdent =
-              self.get().newCommitterIdent(myIdent.getWhen(), myIdent.getTimeZone());
-          CommitBuilder cb = new CommitBuilder();
-          cb.setTreeId(treeId);
-          cb.setAuthor(authorIdent);
-          cb.setCommitter(authorIdent);
-          cb.setMessage("Image Upload");
+        PersonIdent authorIdent =
+            self.get().newCommitterIdent(myIdent.getWhen(), myIdent.getTimeZone());
+        CommitBuilder cb = new CommitBuilder();
+        cb.setTreeId(treeId);
+        cb.setAuthor(authorIdent);
+        cb.setCommitter(authorIdent);
+        cb.setMessage("Image Upload");
 
-          commitId = oi.insert(cb);
-          oi.flush();
+        commitId = oi.insert(cb);
+        oi.flush();
 
-          if (!rc.canCreate(db.get(), rw, rw.parseCommit(commitId))) {
-            throw new AuthException(String.format(
-                "Project %s doesn't allow image upload.", pc.getProject().getName()));
-          }
-
-          RefUpdate ru = repo.updateRef(ref);
-          ru.setExpectedOldObjectId(ObjectId.zeroId());
-          ru.setNewObjectId(commitId);
-          ru.disableRefLog();
-          if (ru.update(rw) == RefUpdate.Result.NEW) {
-            referenceUpdated.fire(pc.getProject().getNameKey(), ru);
-            hooks.doRefUpdatedHook(new Branch.NameKey(pc.getProject()
-                .getNameKey(), ref), ru, self.get().getAccount());
-          } else {
-            throw new IOException(String.format(
-                "Failed to create ref %s in %s: %s", ref,
-                pc.getProject().getName(), ru.getResult()));
-          }
-
-          return getUrl(pc.getProject().getNameKey(), ref, fileName);
-        } finally {
-          oi.release();
+        if (!rc.canCreate(db.get(), rw, rw.parseCommit(commitId))) {
+          throw new AuthException(String.format(
+              "Project %s doesn't allow image upload.", pc.getProject().getName()));
         }
 
-      } finally {
-        rw.release();
-      }
-    } finally {
-      repo.close();
-    }
+        RefUpdate ru = repo.updateRef(ref);
+        ru.setExpectedOldObjectId(ObjectId.zeroId());
+        ru.setNewObjectId(commitId);
+        ru.disableRefLog();
+        if (ru.update(rw) == RefUpdate.Result.NEW) {
+          referenceUpdated.fire(pc.getProject().getNameKey(), ru);
+          hooks.doRefUpdatedHook(new Branch.NameKey(pc.getProject()
+              .getNameKey(), ref), ru, self.get().getAccount());
+        } else {
+          throw new IOException(String.format(
+              "Failed to create ref %s in %s: %s", ref,
+              pc.getProject().getName(), ru.getResult()));
+        }
 
+        return getUrl(pc.getProject().getNameKey(), ref, fileName);
+      }
+    }
   }
 
   private String getRef(byte[] content, String fileName) {
