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 ff9cfb5..6446e2a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/DeleteImage.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/DeleteImage.java
@@ -14,12 +14,16 @@
 
 package com.googlesource.gerrit.plugins.imagare;
 
+import com.google.gerrit.common.ChangeHooks;
 import com.google.gerrit.extensions.restapi.AuthException;
 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.server.IdentifiedUser;
+import com.google.gerrit.server.extensions.events.GitReferenceUpdated;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.inject.Inject;
+import com.google.inject.Provider;
 
 import com.googlesource.gerrit.plugins.imagare.DeleteImage.Input;
 
@@ -37,11 +41,19 @@
   public static class Input {
   }
 
+  private final Provider<IdentifiedUser> self;
   private final GitRepositoryManager repoManager;
+  private final GitReferenceUpdated referenceUpdated;
+  private final ChangeHooks hooks;
 
   @Inject
-  public DeleteImage(GitRepositoryManager repoManager) {
+  public DeleteImage(Provider<IdentifiedUser> self,
+      GitRepositoryManager repoManager, GitReferenceUpdated referenceUpdated,
+      ChangeHooks hooks) {
+    this.self = self;
     this.repoManager = repoManager;
+    this.referenceUpdated = referenceUpdated;
+    this.hooks = hooks;
   }
 
   @Override
@@ -70,6 +82,8 @@
         case NO_CHANGE:
         case FAST_FORWARD:
         case FORCED:
+          referenceUpdated.fire(rsrc.getProject(), u);
+          hooks.doRefUpdatedHook(rsrc.getBranchKey(), u, self.get().getAccount());
           break;
 
         case REJECTED_CURRENT_BRANCH:
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageResource.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageResource.java
index b76f013..131ae51 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageResource.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageResource.java
@@ -16,6 +16,7 @@
 
 import com.google.gerrit.extensions.restapi.RestResource;
 import com.google.gerrit.extensions.restapi.RestView;
+import com.google.gerrit.reviewdb.client.Branch;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.project.RefControl;
 import com.google.inject.TypeLiteral;
@@ -41,4 +42,8 @@
   public String getRef() {
     return refControl.getRefName();
   }
+
+  public Branch.NameKey getBranchKey() {
+    return new Branch.NameKey(getProject(), getRef());
+  }
 }
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 5abfc5c..a669271 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java
@@ -14,17 +14,20 @@
 
 package com.googlesource.gerrit.plugins.imagare;
 
+import com.google.gerrit.common.ChangeHooks;
 import com.google.gerrit.extensions.restapi.AuthException;
 import com.google.gerrit.extensions.restapi.BadRequestException;
 import com.google.gerrit.extensions.restapi.IdString;
 import com.google.gerrit.extensions.restapi.MethodNotAllowedException;
 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.server.FileTypeRegistry;
 import com.google.gerrit.server.GerritPersonIdent;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.config.CanonicalWebUrl;
+import com.google.gerrit.server.extensions.events.GitReferenceUpdated;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.project.ProjectControl;
 import com.google.gerrit.server.project.ProjectResource;
@@ -64,17 +67,22 @@
   private final Pattern imageDataPattern;
   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;
 
   @Inject
   public PostImage(FileTypeRegistry registry, Provider<IdentifiedUser> self,
-      GitRepositoryManager repoManager, @GerritPersonIdent PersonIdent myIdent,
+      GitRepositoryManager repoManager, GitReferenceUpdated referenceUpdated,
+      ChangeHooks hooks, @GerritPersonIdent PersonIdent myIdent,
       @CanonicalWebUrl String canonicalWebUrl) {
     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;
   }
@@ -177,7 +185,11 @@
           ru.setExpectedOldObjectId(ObjectId.zeroId());
           ru.setNewObjectId(commitId);
           ru.disableRefLog();
-          if (ru.update(rw) != RefUpdate.Result.NEW) {
+          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()));
