diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/ReplicationQueue.java b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/ReplicationQueue.java
index 495915d..453cbf7 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/ReplicationQueue.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/ReplicationQueue.java
@@ -381,7 +381,8 @@
     try {
       Optional<RevisionData> maybeRevisionData =
           revReaderProvider.get().read(project, event.objectId(), event.refName(), 0);
-      return BatchApplyObjectData.create(event.refName(), maybeRevisionData);
+      return BatchApplyObjectData.create(
+          event.refName(), maybeRevisionData, event.isDelete(), event.isCreate());
     } catch (IOException e) {
       stateLog.error(
           String.format(
@@ -820,9 +821,10 @@
         String refName,
         ObjectId objectId,
         long eventCreatedOn,
-        boolean isDelete) {
+        boolean isDelete,
+        boolean isCreate) {
       return new AutoValue_ReplicationQueue_ReferenceUpdatedEvent(
-          projectName, refName, objectId, eventCreatedOn, isDelete);
+          projectName, refName, objectId, eventCreatedOn, isDelete, isCreate);
     }
 
     static ReferenceUpdatedEvent from(RefUpdateAttribute refUpdateAttribute, long eventCreatedOn) {
@@ -831,7 +833,8 @@
           refUpdateAttribute.refName,
           ObjectId.fromString(refUpdateAttribute.newRev),
           eventCreatedOn,
-          ZEROS_OBJECTID.equals(refUpdateAttribute.newRev));
+          ZEROS_OBJECTID.equals(refUpdateAttribute.newRev),
+          ZEROS_OBJECTID.equals(refUpdateAttribute.oldRev));
     }
 
     public abstract String projectName();
@@ -843,6 +846,8 @@
     public abstract long eventCreatedOn();
 
     public abstract boolean isDelete();
+
+    public abstract boolean isCreate();
   }
 
   @FunctionalInterface
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/data/BatchApplyObjectData.java b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/data/BatchApplyObjectData.java
index 5b17002..95ba9a9 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/data/BatchApplyObjectData.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/data/BatchApplyObjectData.java
@@ -20,9 +20,24 @@
 @AutoValue
 public abstract class BatchApplyObjectData {
 
-  public static BatchApplyObjectData create(String refName, Optional<RevisionData> revisionData)
+  public static BatchApplyObjectData create(
+      String refName, Optional<RevisionData> revisionData, boolean isDelete, boolean isCreate)
       throws IllegalArgumentException {
-    return new AutoValue_BatchApplyObjectData(refName, revisionData, false);
+    return new AutoValue_BatchApplyObjectData(refName, revisionData, isDelete, isCreate);
+  }
+
+  public static BatchApplyObjectData newDeleteRef(String refName) throws IllegalArgumentException {
+    return create(refName, Optional.empty(), true, false);
+  }
+
+  public static BatchApplyObjectData newUpdateRef(
+      String refName, Optional<RevisionData> revisionData) throws IllegalArgumentException {
+    return create(refName, revisionData, false, false);
+  }
+
+  public static BatchApplyObjectData newCreateRef(
+      String refName, Optional<RevisionData> revisionData) throws IllegalArgumentException {
+    return create(refName, revisionData, false, true);
   }
 
   public abstract String refName();
@@ -31,6 +46,8 @@
 
   public abstract boolean isDelete();
 
+  public abstract boolean isCreate();
+
   @Override
   public String toString() {
     return String.format(
diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/pull/client/FetchRestApiClientBase.java b/src/test/java/com/googlesource/gerrit/plugins/replication/pull/client/FetchRestApiClientBase.java
index 7f0df41..cfff177 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/replication/pull/client/FetchRestApiClientBase.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/replication/pull/client/FetchRestApiClientBase.java
@@ -624,7 +624,7 @@
 
     List<BatchApplyObjectData> batchApplyObjects = new ArrayList<>();
     batchApplyObjects.add(
-        BatchApplyObjectData.create(refName, Optional.of(createSampleRevisionData("a"))));
+        BatchApplyObjectData.newUpdateRef(refName, Optional.of(createSampleRevisionData("a"))));
 
     objectUnderTest.callBatchSendObject(
         Project.nameKey("test_repo"), batchApplyObjects, eventCreatedOn, new URIish(api));
@@ -647,8 +647,8 @@
     RevisionData revisionA = createSampleRevisionData("a");
     RevisionData revisionB = createSampleRevisionData("b");
     String refNameB = "refs/heads/b";
-    batchApplyObjects.add(BatchApplyObjectData.create(refName, Optional.of(revisionA)));
-    batchApplyObjects.add(BatchApplyObjectData.create(refNameB, Optional.of(revisionB)));
+    batchApplyObjects.add(BatchApplyObjectData.newUpdateRef(refName, Optional.of(revisionA)));
+    batchApplyObjects.add(BatchApplyObjectData.newUpdateRef(refNameB, Optional.of(revisionB)));
 
     objectUnderTest.callBatchSendObject(
         Project.nameKey("test_repo"), batchApplyObjects, eventCreatedOn, new URIish(api));
