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 6b5769e..dad77dc 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/automerger/AutomergeChangeAction.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/automerger/AutomergeChangeAction.java
@@ -77,7 +77,7 @@
     mdsMergeInput.changeNumber = change.getId().get();
     mdsMergeInput.patchsetNumber = rev.getPatchSet().number();
     mdsMergeInput.project = change.getProject().get();
-    mdsMergeInput.topic = dsCreator.getOrSetTopic(change.getId().get(), change.getTopic(), user.get().getAccountId());
+    mdsMergeInput.topic = dsCreator.getOrSetTopic(change.getId().get(), change.getTopic(), config.getContextUserId());
     mdsMergeInput.subject = change.getSubject();
     mdsMergeInput.obsoleteRevision = revision;
     mdsMergeInput.currentRevision = revision;
@@ -85,7 +85,7 @@
     logger.atFine().log("Multiple downstream merge input: %s", mdsMergeInput.dsBranchMap);
 
     try {
-      dsCreator.createMergesAndHandleConflicts(mdsMergeInput, user.get().getAccountId());
+      dsCreator.createMergesAndHandleConflicts(mdsMergeInput, config.getContextUserId());
     } catch (ConfigInvalidException e) {
       throw new ResourceConflictException(
           "Automerger configuration file is invalid: " + e.getMessage());
diff --git a/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java b/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java
index 4d6dd8b..5845f59 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java
@@ -298,12 +298,20 @@
     return getConfig().getBoolean("global", "disableMinAutomergeVote", false);
   }
 
-  public Account.Id getContextUserId() throws ConfigInvalidException {
+  public Account.Id getContextUserId(CurrentUser currentUser) throws ConfigInvalidException {
     int contextUserId = getConfig().getInt("global", "contextUserId", -1);
     if (contextUserId > 0) {
       return Account.id(contextUserId);
     }
-    return user.get().getAccountId();
+    // Use the Guice injected user if one isn't provided.
+    if(currentUser == null)
+      return user.get().getAccountId();
+
+    return currentUser.getAccountId();
+  }
+
+  public Account.Id getContextUserId() throws ConfigInvalidException {
+    return getContextUserId(null);
   }
 
   /**
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 8d56664..d46f242 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreator.java
@@ -115,7 +115,14 @@
     CurrentUser user = this.user.get();
     @SuppressWarnings("unused")
     Future<?> ignored =
-        executorService.submit(() -> onChangeAbandonedImpl(change, event.getRevision()._number, user.getAccountId()));
+        executorService.submit(() -> {
+          try {
+            onChangeAbandonedImpl(change, event.getRevision()._number, config.getContextUserId(user));
+          } catch (ConfigInvalidException | UnsupportedOperationException e) {
+            logger.atSevere().withCause(e).log(
+                "Automerger plugin failed onChangeAbandoned for %s", change.id);
+          }
+        });
   }
 
   private void onChangeAbandonedImpl(ChangeInfo change, int revisionNumber, Account.Id accountId) {
@@ -141,7 +148,14 @@
     String oldTopic = event.getOldTopic();
     CurrentUser user = this.user.get();
     @SuppressWarnings("unused")
-    Future<?> ignored = executorService.submit(() -> onTopicEditedImpl(change, oldTopic, user.getAccountId()));
+    Future<?> ignored = executorService.submit(() -> {
+      try {
+        onTopicEditedImpl(change, oldTopic, config.getContextUserId(user));
+      } catch (ConfigInvalidException | UnsupportedOperationException e) {
+        logger.atSevere().withCause(e).log(
+            "Automerger plugin failed onTopicEdited for %s", change.id);
+      }
+    });
   }
 
   private void onTopicEditedImpl(ChangeInfo eventChange, String oldTopic, Account.Id accountId) {
@@ -225,7 +239,14 @@
     RevisionInfo eventRevision = deepCopy(event.getRevision());
     CurrentUser user = this.user.get();
     @SuppressWarnings("unused")
-    Future<?> ignored = executorService.submit(() -> onCommentAddedImpl(change, eventRevision, user.getAccountId()));
+    Future<?> ignored = executorService.submit(() -> {
+      try {
+        onCommentAddedImpl(change, eventRevision, config.getContextUserId(user));
+      } catch (ConfigInvalidException | UnsupportedOperationException e) {
+        logger.atSevere().withCause(e).log(
+            "Automerger plugin failed onCommentAdded for %s", change.id);
+      }
+    });
   }
 
   private void onCommentAddedImpl(ChangeInfo change, RevisionInfo eventRevision, Account.Id accountId) {
@@ -289,7 +310,14 @@
     RevisionInfo revision = deepCopy(event.getRevision());
     CurrentUser user = this.user.get();
     @SuppressWarnings("unused")
-    Future<?> ignored = executorService.submit(() -> onChangeRestoredImpl(change, revision, user.getAccountId()));
+    Future<?> ignored = executorService.submit(() -> {
+      try {
+        onChangeRestoredImpl(change, revision, config.getContextUserId(user));
+      } catch (ConfigInvalidException | UnsupportedOperationException e) {
+        logger.atSevere().withCause(e).log(
+            "Automerger plugin failed onChangeRestored for %s", change.id);
+      }
+    });
   }
 
   private void onChangeRestoredImpl(ChangeInfo change, RevisionInfo revision, Account.Id accountId) {
@@ -315,8 +343,16 @@
     ChangeInfo change = deepCopy(event.getChange());
     RevisionInfo revision = deepCopy(event.getRevision());
     CurrentUser user = this.user.get();
+
     @SuppressWarnings("unused")
-    Future<?> ignored = executorService.submit(() -> onRevisionCreatedImpl(change, revision, user.getAccountId()));
+    Future<?> ignored = executorService.submit(() -> {
+      try {
+        onRevisionCreatedImpl(change, revision, config.getContextUserId(user));
+      } catch (ConfigInvalidException | UnsupportedOperationException e) {
+        logger.atSevere().withCause(e).log(
+            "Automerger plugin failed onRevisionCreated for %s", change.id);
+      }
+    });
   }
 
   public void onRevisionCreatedImpl(ChangeInfo change, RevisionInfo revision, Account.Id accountId) {
