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 73dcddc..db8eaf9 100644
--- a/src/main/java/com/amd/gerrit/plugins/manifestsubscription/Utilities.java
+++ b/src/main/java/com/amd/gerrit/plugins/manifestsubscription/Utilities.java
@@ -14,7 +14,6 @@
 
 package com.amd.gerrit.plugins.manifestsubscription;
 
-import com.google.common.base.Strings;
 import com.google.common.base.Throwables;
 import com.google.common.collect.Maps;
 import com.google.gerrit.common.ChangeHooks;
@@ -29,13 +28,11 @@
 import com.amd.gerrit.plugins.manifestsubscription.manifest.Default;
 import com.amd.gerrit.plugins.manifestsubscription.manifest.Manifest;
 
-import org.eclipse.jgit.api.Git;
 import org.eclipse.jgit.api.errors.GitAPIException;
 import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.revwalk.RevCommit;
-import org.eclipse.jgit.revwalk.RevWalk;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -128,9 +125,14 @@
     // May be related:
     // https://code.google.com/p/gerrit/issues/detail?id=2564
     // https://gerrit-review.googlesource.com/55540
-    if (commit != null && commit.getParents().length > 0) {
+    if (commit != null) {
+      ObjectId parent = ObjectId.zeroId();
+
+      if (commit.getParents().length > 0) {
+        parent = commit.getParent(0).getId();
+      }
       changeHooks.doRefUpdatedHook(new Branch.NameKey(p, refName),
-                                    commit.getParent(0).getId(),
+                                    parent,
                                     commit.getId(), null);
       return commit.getId();
     } else {
@@ -323,7 +325,8 @@
     try {
       manifest = getManifest(gitRepoManager, manifestRepo,
                               manifestCommitish, manifestPath);
-      VersionedManifests.branchManifest(gitRepoManager, manifest, newBranch);
+      VersionedManifests.branchManifest(gitRepoManager, manifest,
+                                        newBranch, changeHooks);
 
       if (newManifestBranch != null &&
           newManifestPath != null &&
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 bdffd8c..44b5889 100644
--- a/src/main/java/com/amd/gerrit/plugins/manifestsubscription/VersionedManifests.java
+++ b/src/main/java/com/amd/gerrit/plugins/manifestsubscription/VersionedManifests.java
@@ -17,6 +17,8 @@
 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.git.GitRepositoryManager;
 import com.google.gerrit.server.git.VersionedMetaData;
@@ -29,6 +31,7 @@
 import org.eclipse.jgit.lib.CommitBuilder;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.PersonIdent;
+import org.eclipse.jgit.lib.Ref;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.eclipse.jgit.revwalk.RevWalk;
@@ -249,7 +252,8 @@
 
   static void branchManifest(GitRepositoryManager gitRepoManager,
                              Manifest manifest,
-                             final String branch)
+                             final String branch,
+                             final ChangeHooks changeHooks)
                                           throws GitAPIException, IOException {
     Table<String, String, String> lookup = HashBasedTable.create();
     String defaultRef = null;
@@ -267,7 +271,14 @@
         Project.NameKey p = new Project.NameKey(project.getName());
         try (Repository db = gitRepoManager.openRepository(p);
              Git git = new Git(db)) {
-          git.branchCreate().setName(branch).setStartPoint(hash).call();
+          try {
+            Ref r = git.branchCreate().setName(branch).setStartPoint(hash).call();
+            changeHooks.doRefUpdatedHook(new Branch.NameKey(p, branch),
+                ObjectId.zeroId(),
+                r.getObjectId(), null);
+          } catch (Exception e) {
+
+          }
         }
         return true;
       }
