diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/CreateReviewNotes.java b/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/CreateReviewNotes.java
index 300baa4..4f6866b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/CreateReviewNotes.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/CreateReviewNotes.java
@@ -26,6 +26,7 @@
 import com.google.gerrit.server.GerritPersonIdent;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.account.AccountCache;
+import com.google.gerrit.server.account.AccountState;
 import com.google.gerrit.server.config.AnonymousCowardName;
 import com.google.gerrit.server.config.CanonicalWebUrl;
 import com.google.gerrit.server.git.LockFailureException;
@@ -275,12 +276,18 @@
       } else {
         LabelType type = labelTypes.byLabel(a.getLabelId());
         if (type != null) {
-          fmt.appendApproval(type, a.getValue(), accountCache.get(a.getAccountId()).getAccount());
+          fmt.appendApproval(
+              type,
+              a.getValue(),
+              a.getAccountId(),
+              accountCache.get(a.getAccountId()).map(AccountState::getAccount));
         }
       }
     }
     if (submit != null) {
-      fmt.appendSubmittedBy(accountCache.get(submit.getAccountId()).getAccount());
+      fmt.appendSubmittedBy(
+          submit.getAccountId(),
+          accountCache.get(submit.getAccountId()).map(AccountState::getAccount));
       fmt.appendSubmittedAt(submit.getGranted());
     }
     if (canonicalWebUrl != null) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/HeaderFormatter.java b/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/HeaderFormatter.java
index 8633d5c..2572309 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/HeaderFormatter.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/HeaderFormatter.java
@@ -14,6 +14,9 @@
 
 package com.googlesource.gerrit.plugins.reviewnotes;
 
+import static com.google.common.base.Preconditions.checkState;
+
+import com.google.common.base.Strings;
 import com.google.gerrit.common.data.LabelType;
 import com.google.gerrit.common.data.LabelValue;
 import com.google.gerrit.reviewdb.client.Account;
@@ -23,6 +26,7 @@
 import java.util.Calendar;
 import java.util.Date;
 import java.util.Locale;
+import java.util.Optional;
 import java.util.TimeZone;
 
 /**
@@ -44,38 +48,57 @@
     this.anonymousCowardName = anonymousCowardName;
   }
 
-  void appendChangeId(Change.Key changeKey) {
-    sb.append("Change-Id: ").append(changeKey.get()).append("\n");
-  }
-
-  void appendApproval(LabelType label, short value, Account user) {
+  /**
+   * Appends a header for an approval.
+   *
+   * @param label the label on which the approval was done
+   * @param value the voting value
+   * @param accountId the account ID of the approver
+   * @param account the account of the approver, can be {@link Optional#empty} if the account is
+   *     missing
+   */
+  void appendApproval(
+      LabelType label, short value, Account.Id accountId, Optional<Account> account) {
     sb.append(label.getName());
     sb.append(LabelValue.formatValue(value));
     sb.append(": ");
-    appendUserData(user);
+    appendUserData(accountId, account);
     sb.append("\n");
   }
 
-  private void appendUserData(Account user) {
+  /**
+   * Appends user data.
+   *
+   * @param accountId the ID of the account
+   * @param account the account, can be {link Optional#empty} if the account is missing
+   */
+  private void appendUserData(Account.Id accountId, Optional<Account> account) {
+    checkState(
+        !account.isPresent() || accountId.equals(account.get().getId()), "mismatching account IDs");
+
     boolean needSpace = false;
     boolean wroteData = false;
 
-    if (user.getFullName() != null && !user.getFullName().isEmpty()) {
-      sb.append(user.getFullName());
-      needSpace = true;
-      wroteData = true;
-    }
-
-    if (user.getPreferredEmail() != null && !user.getPreferredEmail().isEmpty()) {
-      if (needSpace) {
-        sb.append(" ");
+    if (account.isPresent()) {
+      String fullName = account.get().getFullName();
+      if (!Strings.isNullOrEmpty(fullName)) {
+        sb.append(fullName);
+        needSpace = true;
+        wroteData = true;
       }
-      sb.append("<").append(user.getPreferredEmail()).append(">");
-      wroteData = true;
+
+      String preferredEmail = account.get().getPreferredEmail();
+      if (!Strings.isNullOrEmpty(preferredEmail)) {
+        if (needSpace) {
+          sb.append(" ");
+        }
+        sb.append("<").append(preferredEmail).append(">");
+        wroteData = true;
+      }
     }
 
     if (!wroteData) {
-      sb.append(anonymousCowardName).append(" #").append(user.getId());
+      sb.append(anonymousCowardName).append(" #").append(accountId);
     }
   }
 
@@ -87,9 +110,16 @@
     sb.append("Branch: ").append(branch).append("\n");
   }
 
-  void appendSubmittedBy(Account user) {
+  /**
+   * Appends a header with the submitter information.
+   *
+   * @param accountId the account ID of the submitter
+   * @param account the account of the submitter, can be {@link Optional#empty()} if the account is
+   *     missing
+   */
+  void appendSubmittedBy(Account.Id accountId, Optional<Account> account) {
     sb.append("Submitted-by: ");
-    appendUserData(user);
+    appendUserData(accountId, account);
     sb.append("\n");
   }
 
