diff --git a/src/main/java/com/googlesource/gerrit/plugins/automerger/AutomergeChangeAction.java b/src/main/java/com/googlesource/gerrit/plugins/automerger/AutomergeChangeAction.java
index c51cd1a..cec8427 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/automerger/AutomergeChangeAction.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/automerger/AutomergeChangeAction.java
@@ -73,7 +73,7 @@
     mdsMergeInput.dsBranchMap = branchMap;
     mdsMergeInput.sourceId = change.getId().get();
     mdsMergeInput.project = change.getProject().get();
-    mdsMergeInput.topic = change.getTopic();
+    mdsMergeInput.topic = dsCreator.getOrSetTopic(change.getId().get(), change.getTopic());
     mdsMergeInput.subject = change.getSubject();
     mdsMergeInput.obsoleteRevision = revision;
     mdsMergeInput.currentRevision = revision;
@@ -87,7 +87,7 @@
           "Automerger configuration file is invalid: " + e.getMessage());
     } catch (InvalidQueryParameterException e) {
       throw new ResourceConflictException(
-          "Topic or branch cannot have both braces and quotes: " + e.getMessage());      
+          "Topic or branch cannot have both braces and quotes: " + e.getMessage());
     }
     return Response.none();
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreator.java b/src/main/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreator.java
index 4a4aba0..8de671f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreator.java
@@ -390,7 +390,7 @@
   public void createSingleDownstreamMerge(SingleDownstreamMergeInput sdsMergeInput)
       throws RestApiException, ConfigInvalidException {
 
-    String currentTopic = setTopic(sdsMergeInput.sourceId, sdsMergeInput.topic);
+    String currentTopic = getOrSetTopic(sdsMergeInput.sourceId, sdsMergeInput.topic);
 
     MergeInput mergeInput = new MergeInput();
     mergeInput.source = sdsMergeInput.currentRevision;
@@ -422,6 +422,15 @@
     updateVote(downstreamChange.get(), config.getAutomergeLabel(), config.getMaxAutomergeVote());
   }
 
+  public String getOrSetTopic(int sourceId, String topic) throws RestApiException {
+    if (topic == null || topic.isEmpty()) {
+      topic = "am-" + UUID.randomUUID().toString();
+      log.debug("Setting original change {} topic to {}", sourceId, topic);
+      gApi.changes().id(sourceId).topic(topic);
+    }
+    return topic;
+  }
+
   private void automergeChanges(ChangeInfo change, RevisionInfo revisionInfo)
       throws RestApiException, IOException, ConfigInvalidException, InvalidQueryParameterException {
     if (revisionInfo.draft != null && revisionInfo.draft) {
@@ -550,13 +559,4 @@
     abandonInput.message = "Merge parent updated; abandoning due to upstream conflict.";
     gApi.changes().id(changeNumber).abandon(abandonInput);
   }
-
-  private String setTopic(int sourceId, String topic) throws RestApiException {
-    if (topic == null || topic.isEmpty()) {
-      topic = "am-" + UUID.randomUUID().toString();
-      log.debug("Setting original change {} topic to {}", sourceId, topic);
-      gApi.changes().id(sourceId).topic(topic);
-    }
-    return topic;
-  }
 }
