diff --git a/lib/gerrit/BUCK b/lib/gerrit/BUCK
index a02c9a4..acb4718 100644
--- a/lib/gerrit/BUCK
+++ b/lib/gerrit/BUCK
@@ -1,12 +1,11 @@
 include_defs('//bucklets/maven_jar.bucklet')
 
-VER = '2.12.4'
-REPO = MAVEN_CENTRAL
+VER = '2.13-SNAPSHOT'
+REPO = MAVEN_LOCAL
 
 maven_jar(
   name = 'plugin-api',
   id = 'com.google.gerrit:gerrit-plugin-api:' + VER,
-  sha1 = 'aad189fe4f9fa5c3f8048b5e4972512b4b3e2a24',
   license = 'Apache2.0',
   attach_source = False,
   repository = REPO,
@@ -15,7 +14,6 @@
 maven_jar(
   name = 'gwtui-api',
   id = 'com.google.gerrit:gerrit-plugin-gwtui:' + VER,
-  sha1 = 'd57778f60399938f473254e97bf5de86885d48d0',
   license = 'Apache2.0',
   attach_source = False,
   repository = REPO,
diff --git a/pom.xml b/pom.xml
index d120542..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.4</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/ImagareMenu.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/ImagareMenu.java
index 975c6ae..2dbc0a9 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/ImagareMenu.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/ImagareMenu.java
@@ -15,6 +15,7 @@
 package com.googlesource.gerrit.plugins.imagare;
 
 import com.google.gerrit.extensions.annotations.PluginName;
+import com.google.gerrit.extensions.client.MenuItem;
 import com.google.gerrit.extensions.webui.TopMenu;
 import com.google.gerrit.server.config.PluginConfig;
 import com.google.gerrit.server.config.PluginConfigFactory;
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,
diff --git a/src/main/resources/Documentation/about.md b/src/main/resources/Documentation/about.md
index 9279cb3..0ae87f3 100644
--- a/src/main/resources/Documentation/about.md
+++ b/src/main/resources/Documentation/about.md
@@ -41,12 +41,12 @@
 
 To configure an external image server the image server that comes with
 the plugin must be disabled. This is done by setting the
-[enableImageServer](config.html#enable-image-server) to `false`.
+[enableImageServer](config.md#enable-image-server) to `false`.
 
 A regular expression to match URLs of images that should be embedded
-must be configured as [pattern](config.html#pattern).
+must be configured as [pattern](config.md#pattern).
 
-Optionally also a [URL for uploading images](config.html#upload-url)
+Optionally also a [URL for uploading images](config.md#upload-url)
 can be defined.
 
 ```
diff --git a/src/main/resources/Documentation/rest-api-projects.md b/src/main/resources/Documentation/rest-api-projects.md
index 9e738eb..cbd7f59 100644
--- a/src/main/resources/Documentation/rest-api-projects.md
+++ b/src/main/resources/Documentation/rest-api-projects.md
@@ -22,7 +22,7 @@
 [Create Reference](../../../Documentation/access-control.html#category_create)
 access right on the `refs/images/*` namespace of the project.
 
-Only available if [image server is enabled](config.html#enable-image-server).
+Only available if [image server is enabled](config.md#enable-image-server).
 
 #### Request
 
@@ -52,7 +52,7 @@
 granted the `Delete Own Images` global capability which allows deleting
 own images.
 
-Only available if [image server is enabled](config.html#enable-image-server).
+Only available if [image server is enabled](config.md#enable-image-server).
 
 #### Request
 
diff --git a/src/main/resources/static/imagare.js b/src/main/resources/static/imagare.js
index 971becf..91bec6f 100644
--- a/src/main/resources/static/imagare.js
+++ b/src/main/resources/static/imagare.js
@@ -13,24 +13,20 @@
 // limitations under the License.
 
 Gerrit.install(function(self) {
-    function onHistory(t) {
-      if (!startsWith(t, "/c/")) {
-        return;
-      }
-
+    function onComment(e) {
       var prefs = getPrefsFromCookie();
       if (prefs !== null) {
-        convertImageLinks(prefs);
+        convertImageLinks(getLinks(e), prefs);
       } else {
         Gerrit.get('/accounts/self/' + self.getPluginName() + '~preference', function(prefs) {
           storePrefsInCookie(prefs);
-          convertImageLinks(prefs);
+          convertImageLinks(getLinks(e), prefs);
         });
       }
     }
 
-    function startsWith(s, p) {
-      return s.slice(0, p.length) == p;
+    function getLinks(e) {
+      return e.getElementsByTagName("a");
     }
 
     function storePrefsInCookie(prefs) {
@@ -64,20 +60,19 @@
       return self.getPluginName() + "~prefs";
     }
 
-    function convertImageLinks(prefs) {
+    function convertImageLinks(l, prefs) {
       if (!prefs.pattern) {
         return;
       }
 
       if ('TOOLTIP' === prefs.link_decoration) {
-        addTooltips(prefs.pattern);
+        addTooltips(l, prefs.pattern);
       } else if ('INLINE' === prefs.link_decoration) {
-        inlineImages(prefs.pattern);
+        inlineImages(l, prefs.pattern);
       }
     }
 
-    function inlineImages(pattern) {
-      var l = document.links;
+    function inlineImages(l, pattern) {
       for(var i = 0; i < l.length; i++) {
         if (l[i].href.match(pattern)) {
           var a = document.createElement('a');
@@ -92,7 +87,6 @@
     }
 
     function addTooltips(pattern) {
-      var l = document.links;
       for(var i = 0; i < l.length; i++) {
         if (l[i].href.match(pattern)) {
           l[i].onmouseover = function (evt) {
@@ -108,5 +102,5 @@
       }
     }
 
-    Gerrit.on('history', onHistory);
+    Gerrit.on('comment', onComment);
   });
