diff --git a/src/main/java/com/amd/gerrit/plugins/manifestsubscription/BranchManifestCommand.java b/src/main/java/com/amd/gerrit/plugins/manifestsubscription/BranchManifestCommand.java
index fd367a6..f8517d6 100644
--- a/src/main/java/com/amd/gerrit/plugins/manifestsubscription/BranchManifestCommand.java
+++ b/src/main/java/com/amd/gerrit/plugins/manifestsubscription/BranchManifestCommand.java
@@ -14,9 +14,9 @@
 
 package com.amd.gerrit.plugins.manifestsubscription;
 
-import com.google.gerrit.common.ChangeHooks;
 import com.google.gerrit.common.data.GlobalCapability;
 import com.google.gerrit.extensions.annotations.RequiresCapability;
+import com.google.gerrit.server.extensions.events.GitReferenceUpdated;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.git.MetaDataUpdate;
 import com.google.gerrit.sshd.CommandMetaData;
@@ -36,7 +36,7 @@
   private MetaDataUpdate.Server metaDataUpdateFactory;
 
   @Inject
-  private ChangeHooks changeHooks;
+  private GitReferenceUpdated gitRefUpdated;
 
   @Option(name = "-r", aliases = {"--manifest-repo"},
           usage = "", required = true)
@@ -90,7 +90,7 @@
     stdout.println(newManifestPath);
     stdout.println("Create snapshot branch: " + createSnapShotBranch);
 
-    Utilities.branchManifest(gitRepoManager, metaDataUpdateFactory, changeHooks,
+    Utilities.branchManifest(gitRepoManager, metaDataUpdateFactory, gitRefUpdated,
         manifestRepo, manifestCommitish, manifestPath,
         newBranch,
         newManifestRepo, newManifestBranch, newManifestPath,
diff --git a/src/main/java/com/amd/gerrit/plugins/manifestsubscription/BranchManifestServlet.java b/src/main/java/com/amd/gerrit/plugins/manifestsubscription/BranchManifestServlet.java
index aeb97f2..c03106b 100644
--- a/src/main/java/com/amd/gerrit/plugins/manifestsubscription/BranchManifestServlet.java
+++ b/src/main/java/com/amd/gerrit/plugins/manifestsubscription/BranchManifestServlet.java
@@ -14,8 +14,8 @@
 
 package com.amd.gerrit.plugins.manifestsubscription;
 
-import com.google.gerrit.common.ChangeHooks;
 import com.google.gerrit.extensions.annotations.Export;
+import com.google.gerrit.server.extensions.events.GitReferenceUpdated;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.git.MetaDataUpdate;
 import com.google.inject.Inject;
@@ -39,7 +39,7 @@
   private MetaDataUpdate.Server metaDataUpdateFactory;
 
   @Inject
-  private ChangeHooks changeHooks;
+  private GitReferenceUpdated gitRefUpdated;
 
   protected void doPost(HttpServletRequest req, HttpServletResponse res)
                                                             throws IOException {
@@ -67,7 +67,7 @@
       }
 
       Utilities.branchManifest(
-          gitRepoManager, metaDataUpdateFactory, changeHooks,
+          gitRepoManager, metaDataUpdateFactory, gitRefUpdated,
           input.get("manifest-repo")[0],
           input.get("manifest-commit-ish")[0],
           input.get("manifest-path")[0],
diff --git a/src/main/java/com/amd/gerrit/plugins/manifestsubscription/ManifestSubscription.java b/src/main/java/com/amd/gerrit/plugins/manifestsubscription/ManifestSubscription.java
index 29699e3..7e82ff2 100644
--- a/src/main/java/com/amd/gerrit/plugins/manifestsubscription/ManifestSubscription.java
+++ b/src/main/java/com/amd/gerrit/plugins/manifestsubscription/ManifestSubscription.java
@@ -18,11 +18,11 @@
 
 import com.amd.gerrit.plugins.manifestsubscription.manifest.Manifest;
 import com.google.common.collect.*;
-import com.google.gerrit.common.ChangeHooks;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.events.GitReferenceUpdatedListener;
 import com.google.gerrit.extensions.events.LifecycleListener;
 import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.server.extensions.events.GitReferenceUpdated;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.git.MetaDataUpdate;
 import com.google.gerrit.server.git.ProjectConfig;
@@ -56,7 +56,8 @@
   private final MetaDataUpdate.Server metaDataUpdateFactory;
   private final GitRepositoryManager gitRepoManager;
   private final ProjectCache projectCache;
-  private final ChangeHooks changeHooks;
+  private final GitReferenceUpdated gitRefUpdated;
+
 
 
   /**
@@ -124,12 +125,12 @@
                        GitRepositoryManager gitRepoManager,
                        @PluginName String pluginName,
                        ProjectCache projectCache,
-                       ChangeHooks changeHooks) {
+                       GitReferenceUpdated gitRefUpdated) {
     this.metaDataUpdateFactory = metaDataUpdateFactory;
     this.gitRepoManager = gitRepoManager;
     this.pluginName = pluginName;
     this.projectCache = projectCache;
-    this.changeHooks = changeHooks;
+    this.gitRefUpdated = gitRefUpdated;
   }
 
   @Override
@@ -199,7 +200,7 @@
 
         try {
           Utilities.updateManifest(gitRepoManager, metaDataUpdateFactory,
-              changeHooks, store, STORE_BRANCH_PREFIX + storeBranch,
+                  gitRefUpdated, store, STORE_BRANCH_PREFIX + storeBranch,
               manifest, manifestSrc, extraCommitMsg.toString(), null);
         } catch (JAXBException | IOException e) {
           e.printStackTrace();
@@ -465,7 +466,7 @@
   private void updateManifest(String projectName, String refName,
                               Manifest manifest, String manifestSrc)
       throws JAXBException, IOException {
-    Utilities.updateManifest(gitRepoManager, metaDataUpdateFactory, changeHooks,
+    Utilities.updateManifest(gitRepoManager, metaDataUpdateFactory, gitRefUpdated,
         projectName, refName, manifest, manifestSrc, "", null);
   }
 
diff --git a/src/main/java/com/amd/gerrit/plugins/manifestsubscription/Utilities.java b/src/main/java/com/amd/gerrit/plugins/manifestsubscription/Utilities.java
index 92a1a82..3ff0ee5 100644
--- a/src/main/java/com/amd/gerrit/plugins/manifestsubscription/Utilities.java
+++ b/src/main/java/com/amd/gerrit/plugins/manifestsubscription/Utilities.java
@@ -14,22 +14,19 @@
 
 package com.amd.gerrit.plugins.manifestsubscription;
 
+import com.amd.gerrit.plugins.manifestsubscription.manifest.Default;
+import com.amd.gerrit.plugins.manifestsubscription.manifest.Manifest;
 import com.google.common.base.Throwables;
 import com.google.common.collect.ImmutableCollection;
 import com.google.common.collect.ImmutableTable;
 import com.google.common.collect.Maps;
-import com.google.gerrit.common.ChangeHooks;
-import com.google.gerrit.reviewdb.client.Branch;
 import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.server.extensions.events.GitReferenceUpdated;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.git.MetaDataUpdate;
 import com.google.gson.FieldNamingPolicy;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
-
-import com.amd.gerrit.plugins.manifestsubscription.manifest.Default;
-import com.amd.gerrit.plugins.manifestsubscription.manifest.Manifest;
-
 import org.eclipse.jgit.api.errors.GitAPIException;
 import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.eclipse.jgit.lib.ObjectId;
@@ -38,15 +35,14 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.xml.bind.JAXBException;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.Writer;
 import java.util.Map;
 import java.util.Set;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.xml.bind.JAXBException;
-
 public class Utilities {
   private static final Logger log =
       LoggerFactory.getLogger(Utilities.class);
@@ -80,7 +76,7 @@
 
   static ObjectId updateManifest(GitRepositoryManager gitRepoManager,
                              MetaDataUpdate.Server metaDataUpdateFactory,
-                             ChangeHooks changeHooks,
+                             GitReferenceUpdated gitRefUpdated,
                              String projectName, String refName,
                              Manifest manifest, String manifestSrc,
                              String extraCommitMsg,
@@ -134,10 +130,7 @@
         if (commit.getParents().length > 0) {
           parent = commit.getParent(0).getId();
         }
-        changeHooks.doRefUpdatedHook(new Branch.NameKey(p, refName),
-            parent,
-            commit.getId(), null);
-
+        gitRefUpdated.fire(p, refName, parent, commit.getId() );
       }
       return commit.getId();
     } else {
@@ -171,14 +164,14 @@
   }
 
   static Manifest createNewManifestFromBase(
-      GitRepositoryManager gitRepoManager,
-       MetaDataUpdate.Server metaDataUpdateFactory,
-       ChangeHooks changeHooks,
-       String srcManifestRepo, String srcManifestCommitish,
-       String manifestRepo, String manifestBranch, String manifestPath,
-       String newRef,
-       boolean createSnapShotBranch,
-       Manifest base)
+          GitRepositoryManager gitRepoManager,
+          MetaDataUpdate.Server metaDataUpdateFactory,
+          GitReferenceUpdated gitRefUpdated,
+          String srcManifestRepo, String srcManifestCommitish,
+          String manifestRepo, String manifestBranch, String manifestPath,
+          String newRef,
+          boolean createSnapShotBranch,
+          Manifest base)
       throws JAXBException, IOException, ConfigInvalidException, GitAPIException {
 
     // Replace default ref with newly created branch or tag
@@ -226,7 +219,7 @@
       String shortBranch = manifestBranch.replaceFirst("^refs/heads/(.*)", "$1");
 
       ObjectId oid = Utilities.updateManifest(
-          gitRepoManager, metaDataUpdateFactory, changeHooks,
+          gitRepoManager, metaDataUpdateFactory, gitRefUpdated,
           srcManifestRepo,
           ManifestSubscription.STORE_BRANCH_PREFIX + shortBranch + "/" + manifestPath,
           manifest, manifestRepo, "Manifest branched", srcManifestCommitish);
@@ -317,7 +310,7 @@
 
   static void branchManifest(GitRepositoryManager gitRepoManager,
                              MetaDataUpdate.Server metaDataUpdateFactory,
-                             ChangeHooks changeHooks,
+                             GitReferenceUpdated gitRefUpdated,
                              String manifestRepo, String manifestCommitish,
                              String manifestPath, String newBranch,
                              String newManifestRepo,
@@ -331,13 +324,13 @@
       manifest = getManifest(gitRepoManager, manifestRepo,
                               manifestCommitish, manifestPath);
       VersionedManifests.branchManifest(gitRepoManager, manifest,
-                                        newBranch, changeHooks);
+                                        newBranch, gitRefUpdated);
 
       if (newManifestBranch != null &&
           newManifestPath != null &&
           newManifestRepo != null) {
         createNewManifestFromBase(
-            gitRepoManager, metaDataUpdateFactory, changeHooks,
+            gitRepoManager, metaDataUpdateFactory, gitRefUpdated,
             manifestRepo, manifestCommitish,
             newManifestRepo, newManifestBranch, newManifestPath,
             newBranch, createSnapShotBranch, manifest);
diff --git a/src/main/java/com/amd/gerrit/plugins/manifestsubscription/VersionedManifests.java b/src/main/java/com/amd/gerrit/plugins/manifestsubscription/VersionedManifests.java
index 3c779d1..196a945 100644
--- a/src/main/java/com/amd/gerrit/plugins/manifestsubscription/VersionedManifests.java
+++ b/src/main/java/com/amd/gerrit/plugins/manifestsubscription/VersionedManifests.java
@@ -17,9 +17,9 @@
 import com.google.common.collect.HashBasedTable;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Table;
-import com.google.gerrit.common.ChangeHooks;
 import com.google.gerrit.reviewdb.client.Branch;
 import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.server.extensions.events.GitReferenceUpdated;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.git.VersionedMetaData;
 
@@ -259,7 +259,7 @@
   static void branchManifest(GitRepositoryManager gitRepoManager,
                              Manifest manifest,
                              final String branch,
-                             final ChangeHooks changeHooks)
+                             final GitReferenceUpdated gitReferenceUpdated)
                                           throws GitAPIException, IOException {
     Table<String, String, String> lookup = HashBasedTable.create();
     String defaultRef = null;
@@ -279,9 +279,7 @@
              Git git = new Git(db)) {
           try {
             Ref r = git.branchCreate().setName(branch).setStartPoint(hash).call();
-            changeHooks.doRefUpdatedHook(new Branch.NameKey(p, branch),
-                ObjectId.zeroId(),
-                r.getObjectId(), null);
+            gitReferenceUpdated.fire(p, branch, ObjectId.zeroId(), r.getObjectId());
           } catch (Exception e) {
 
           }
