diff --git a/pom.xml b/pom.xml
index b607858..dfbc4fa 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.12-SNAPSHOT</version>
+  <version>2.13-SNAPSHOT</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 2805ba4..7a6449e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/DeleteImage.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/DeleteImage.java
@@ -14,7 +14,6 @@
 
 package com.googlesource.gerrit.plugins.imagare;
 
-import com.google.gerrit.common.ChangeHooks;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.restapi.AuthException;
 import com.google.gerrit.extensions.restapi.ResourceConflictException;
@@ -51,17 +50,16 @@
   private final Provider<IdentifiedUser> self;
   private final GitRepositoryManager repoManager;
   private final GitReferenceUpdated referenceUpdated;
-  private final ChangeHooks hooks;
 
   @Inject
-  public DeleteImage(@PluginName String pluginName, Provider<IdentifiedUser> self,
-      GitRepositoryManager repoManager, GitReferenceUpdated referenceUpdated,
-      ChangeHooks hooks) {
+  public DeleteImage(@PluginName String pluginName,
+      Provider<IdentifiedUser> self,
+      GitRepositoryManager repoManager,
+      GitReferenceUpdated referenceUpdated) {
     this.pluginName = pluginName;
     this.self = self;
     this.repoManager = repoManager;
     this.referenceUpdated = referenceUpdated;
-    this.hooks = hooks;
   }
 
   @Override
@@ -95,8 +93,7 @@
         case NO_CHANGE:
         case FAST_FORWARD:
         case FORCED:
-          referenceUpdated.fire(rsrc.getProject(), u);
-          hooks.doRefUpdatedHook(rsrc.getBranchKey(), u, self.get().getAccount());
+          referenceUpdated.fire(rsrc.getProject(), u, self.get().getAccount());
           break;
 
         case REJECTED_CURRENT_BRANCH:
@@ -113,7 +110,7 @@
 
   private void validateOwnImage(Repository repo, String ref)
       throws IOException, ResourceNotFoundException, AuthException {
-    Ref r = repo.getRef(ref);
+    Ref r = repo.exactRef(ref);
     if (r == null) {
       throw new ResourceNotFoundException(ref);
     }
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 4218fcc..69ef8d1 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageServlet.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageServlet.java
@@ -142,7 +142,7 @@
         if (ObjectId.isId(rev)) {
           try (RevWalk rw = new RevWalk(repo)) {
             RevCommit commit = rw.parseCommit(repo.resolve(rev));
-            if (!projectControl.canReadCommit(db.get(), rw, commit)) {
+            if (!projectControl.canReadCommit(db.get(), repo, commit)) {
               notFound(res);
               return;
             }
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 c41e75a..5b58590 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java
@@ -14,7 +14,6 @@
 
 package com.googlesource.gerrit.plugins.imagare;
 
-import com.google.gerrit.common.ChangeHooks;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.restapi.AuthException;
 import com.google.gerrit.extensions.restapi.BadRequestException;
@@ -23,7 +22,6 @@
 import com.google.gerrit.extensions.restapi.ResourceConflictException;
 import com.google.gerrit.extensions.restapi.Response;
 import com.google.gerrit.extensions.restapi.RestModifyView;
-import com.google.gerrit.reviewdb.client.Branch;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.server.mime.FileTypeRegistry;
@@ -74,7 +72,6 @@
   private final Provider<IdentifiedUser> self;
   private final GitRepositoryManager repoManager;
   private final GitReferenceUpdated referenceUpdated;
-  private final ChangeHooks hooks;
   private final PersonIdent myIdent;
   private final String canonicalWebUrl;
   private final Config cfg;
@@ -82,17 +79,20 @@
   private final String pluginName;
 
   @Inject
-  public PostImage(FileTypeRegistry registry, Provider<IdentifiedUser> self,
-      GitRepositoryManager repoManager, GitReferenceUpdated referenceUpdated,
-      ChangeHooks hooks, @GerritPersonIdent PersonIdent myIdent,
-      @CanonicalWebUrl String canonicalWebUrl, @GerritServerConfig Config cfg,
-      Provider<ReviewDb> db, @PluginName String pluginName) {
+  public PostImage(FileTypeRegistry registry,
+      Provider<IdentifiedUser> self,
+      GitRepositoryManager repoManager,
+      GitReferenceUpdated referenceUpdated,
+      @GerritPersonIdent PersonIdent myIdent,
+      @CanonicalWebUrl String canonicalWebUrl,
+      @GerritServerConfig Config cfg,
+      Provider<ReviewDb> db,
+      @PluginName String pluginName) {
     this.registry = registry;
     this.imageDataPattern = Pattern.compile("data:([\\w/.-]+);([\\w]+),(.*)");
     this.self = self;
     this.repoManager = repoManager;
     this.referenceUpdated = referenceUpdated;
-    this.hooks = hooks;
     this.myIdent = myIdent;
     this.canonicalWebUrl = canonicalWebUrl;
     this.cfg = cfg;
@@ -192,7 +192,7 @@
         commitId = oi.insert(cb);
         oi.flush();
 
-        if (!rc.canCreate(db.get(), rw, rw.parseCommit(commitId))) {
+        if (!rc.canCreate(db.get(), repo, rw.parseCommit(commitId))) {
           throw new AuthException(String.format(
               "Project %s doesn't allow image upload.", pc.getProject().getName()));
         }
@@ -202,9 +202,8 @@
         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());
+          referenceUpdated.fire(pc.getProject().getNameKey(), ru,
+              self.get().getAccount());
         } else {
           throw new IOException(String.format(
               "Failed to create ref %s in %s: %s", ref,
