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 33915e1..633cb5f 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;
@@ -272,12 +273,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.maybeGet(a.getAccountId()).map(AccountState::getAccount));
         }
       }
     }
     if (submit != null) {
-      fmt.appendSubmittedBy(accountCache.get(submit.getAccountId()).getAccount());
+      fmt.appendSubmittedBy(
+          submit.getAccountId(),
+          accountCache.maybeGet(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..3f7d406 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,8 @@
 
 package com.googlesource.gerrit.plugins.reviewnotes;
 
+import static com.google.common.base.Preconditions.checkState;
+
 import com.google.gerrit.common.data.LabelType;
 import com.google.gerrit.common.data.LabelValue;
 import com.google.gerrit.reviewdb.client.Account;
@@ -23,6 +25,7 @@
 import java.util.Calendar;
 import java.util.Date;
 import java.util.Locale;
+import java.util.Optional;
 import java.util.TimeZone;
 
 /**
@@ -48,34 +51,57 @@
     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 (fullName != null && !fullName.isEmpty()) {
+        sb.append(fullName);
+        needSpace = true;
+        wroteData = true;
       }
-      sb.append("<").append(user.getPreferredEmail()).append(">");
-      wroteData = true;
+
+      String preferredEmail = account.get().getPreferredEmail();
+      if (preferredEmail != null && !preferredEmail.isEmpty()) {
+        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 +113,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");
   }
 
