diff --git a/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheck.java b/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheck.java
index d11767a..12d17fa 100644
--- a/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheck.java
+++ b/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheck.java
@@ -41,7 +41,6 @@
 import com.google.gerrit.plugins.codeowners.common.ChangedFile;
 import com.google.gerrit.plugins.codeowners.common.CodeOwnerStatus;
 import com.google.gerrit.plugins.codeowners.metrics.CodeOwnerMetrics;
-import com.google.gerrit.server.ChangeMessagesUtil;
 import com.google.gerrit.server.approval.ApprovalsUtil;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.git.PureRevertCache;
@@ -51,6 +50,7 @@
 import com.google.gerrit.server.permissions.PermissionBackend;
 import com.google.gerrit.server.permissions.PermissionBackendException;
 import com.google.gerrit.server.permissions.ProjectPermission;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.gerrit.server.util.LabelVote;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
@@ -299,7 +299,7 @@
             changeNotes.getCurrentPatchSet(),
             String.format(
                 "patch set uploader %s is exempted from requiring code owner approvals",
-                ChangeMessagesUtil.getAccountTemplate(patchSetUploader)));
+                AccountTemplateUtil.getAccountTemplate(patchSetUploader)));
       }
 
       boolean arePureRevertsExempted = codeOwnersConfig.arePureRevertsExempted();
@@ -577,7 +577,7 @@
           String.format(
               "override approval %s by %s is present",
               override.get().label() + LabelValue.formatValue(override.get().value()),
-              ChangeMessagesUtil.getAccountTemplate(override.get().accountId())));
+              AccountTemplateUtil.getAccountTemplate(override.get().accountId())));
     }
 
     AtomicReference<CodeOwnerStatus> codeOwnerStatus =
@@ -745,7 +745,7 @@
           String.format(
               "implicitly approved by the patch set uploader %s who is a %s"
                   + " (all project owners are %ss)",
-              ChangeMessagesUtil.getAccountTemplate(implicitApprover),
+              AccountTemplateUtil.getAccountTemplate(implicitApprover),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName(),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName()));
       return true;
@@ -766,7 +766,7 @@
       reason.set(
           String.format(
               "approved by %s who is a %s (all project owners are %ss)",
-              ChangeMessagesUtil.getAccountTemplate(approver.get()),
+              AccountTemplateUtil.getAccountTemplate(approver.get()),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName(),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName()));
       return true;
@@ -787,7 +787,7 @@
       reason.set(
           String.format(
               "reviewer %s is a %s (all project owners are %ss)",
-              ChangeMessagesUtil.getAccountTemplate(reviewer.get()),
+              AccountTemplateUtil.getAccountTemplate(reviewer.get()),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName(),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName()));
       return true;
@@ -842,7 +842,7 @@
           String.format(
               "implicitly approved by the patch set uploader %s who is a %s"
                   + " (all users are %ss)",
-              ChangeMessagesUtil.getAccountTemplate(implicitApprover),
+              AccountTemplateUtil.getAccountTemplate(implicitApprover),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName(),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName()));
       return CodeOwnerStatus.APPROVED;
@@ -854,7 +854,7 @@
       reason.set(
           String.format(
               "approved by %s who is a %s (all users are %ss)",
-              ChangeMessagesUtil.getAccountTemplate(approver.get()),
+              AccountTemplateUtil.getAccountTemplate(approver.get()),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName(),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName()));
       return CodeOwnerStatus.APPROVED;
@@ -864,7 +864,7 @@
       reason.set(
           String.format(
               "reviewer %s is a %s (all users are %ss)",
-              ChangeMessagesUtil.getAccountTemplate(reviewer.get()),
+              AccountTemplateUtil.getAccountTemplate(reviewer.get()),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName(),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName()));
       return CodeOwnerStatus.PENDING;
@@ -899,7 +899,7 @@
         reason.set(
             String.format(
                 "implicitly approved by the patch set uploader %s who is a %s%s",
-                ChangeMessagesUtil.getAccountTemplate(implicitApprover),
+                AccountTemplateUtil.getAccountTemplate(implicitApprover),
                 codeOwnerKind.getDisplayName(),
                 codeOwners.ownedByAllUsers()
                     ? String.format(" (all users are %ss)", codeOwnerKind.getDisplayName())
@@ -921,7 +921,7 @@
       reason.set(
           String.format(
               "approved by %s who is a %s%s",
-              ChangeMessagesUtil.getAccountTemplate(approver.get()),
+              AccountTemplateUtil.getAccountTemplate(approver.get()),
               codeOwnerKind.getDisplayName(),
               codeOwners.ownedByAllUsers()
                   ? String.format(" (all users are %ss)", codeOwnerKind.getDisplayName())
@@ -959,7 +959,7 @@
       reason.set(
           String.format(
               "reviewer %s is a %s%s",
-              ChangeMessagesUtil.getAccountTemplate(reviewer.get()),
+              AccountTemplateUtil.getAccountTemplate(reviewer.get()),
               codeOwnerKind.getDisplayName(),
               codeOwners.ownedByAllUsers()
                   ? String.format(" (all users are %ss)", codeOwnerKind.getDisplayName())
diff --git a/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnersOnAddReviewer.java b/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnersOnAddReviewer.java
index 58ad10e..b772b91 100644
--- a/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnersOnAddReviewer.java
+++ b/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnersOnAddReviewer.java
@@ -36,6 +36,7 @@
 import com.google.gerrit.server.update.BatchUpdateOp;
 import com.google.gerrit.server.update.ChangeContext;
 import com.google.gerrit.server.update.RetryHelper;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.gerrit.server.util.time.TimeUtil;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
@@ -178,7 +179,7 @@
       message.append(
           String.format(
               "%s, who was added as reviewer owns the following files:\n",
-              ChangeMessagesUtil.getAccountTemplate(reviewerAccountId)));
+              AccountTemplateUtil.getAccountTemplate(reviewerAccountId)));
 
       if (ownedPaths.size() <= limit) {
         appendPaths(message, ownedPaths.stream());
diff --git a/java/com/google/gerrit/plugins/codeowners/backend/OnCodeOwnerApproval.java b/java/com/google/gerrit/plugins/codeowners/backend/OnCodeOwnerApproval.java
index 4fbc365..2383de2 100644
--- a/java/com/google/gerrit/plugins/codeowners/backend/OnCodeOwnerApproval.java
+++ b/java/com/google/gerrit/plugins/codeowners/backend/OnCodeOwnerApproval.java
@@ -26,10 +26,10 @@
 import com.google.gerrit.plugins.codeowners.backend.config.RequiredApproval;
 import com.google.gerrit.plugins.codeowners.metrics.CodeOwnerMetrics;
 import com.google.gerrit.plugins.codeowners.util.JgitPath;
-import com.google.gerrit.server.ChangeMessagesUtil;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.notedb.ChangeNotes;
 import com.google.gerrit.server.restapi.change.OnPostReview;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.gerrit.server.util.LabelVote;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
@@ -167,12 +167,12 @@
         message.append(
             String.format(
                 "By voting %s the following files are now explicitly code-owner approved by %s:\n",
-                newVote, ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+                newVote, AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
       } else {
         message.append(
             String.format(
                 "By voting %s the following files are now code-owner approved by %s:\n",
-                newVote, ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+                newVote, AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
       }
     } else if (isCodeOwnerApprovalRemoved(requiredApproval, oldApprovals, newVote)) {
       if (newVote.value() == 0) {
@@ -182,13 +182,13 @@
               String.format(
                   "By removing the %s vote the following files are no longer explicitly code-owner"
                       + " approved by %s:\n",
-                  newVote.label(), ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+                  newVote.label(), AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
         } else {
           message.append(
               String.format(
                   "By removing the %s vote the following files are no longer code-owner approved"
                       + " by %s:\n",
-                  newVote.label(), ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+                  newVote.label(), AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
         }
       } else {
         if (hasImplicitApprovalByUser) {
@@ -197,12 +197,12 @@
               String.format(
                   "By voting %s the following files are no longer explicitly code-owner approved by"
                       + " %s:\n",
-                  newVote, ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+                  newVote, AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
         } else {
           message.append(
               String.format(
                   "By voting %s the following files are no longer code-owner approved by %s:\n",
-                  newVote, ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+                  newVote, AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
         }
       }
     } else if (isCodeOwnerApprovalUpOrDowngraded(requiredApproval, oldApprovals, newVote)) {
@@ -211,12 +211,12 @@
             String.format(
                 "By voting %s the following files are still explicitly code-owner approved by"
                     + " %s:\n",
-                newVote, ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+                newVote, AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
       } else {
         message.append(
             String.format(
                 "By voting %s the following files are still code-owner approved by %s:\n",
-                newVote, ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+                newVote, AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
       }
     } else {
       // non-approval was downgraded (e.g. -1 to -2)
@@ -234,7 +234,7 @@
       message.append(
           String.format(
               "\nThe listed files are still implicitly approved by %s.\n",
-              ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+              AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
     }
 
     return Optional.of(message.toString());
diff --git a/java/com/google/gerrit/plugins/codeowners/backend/OnCodeOwnerOverride.java b/java/com/google/gerrit/plugins/codeowners/backend/OnCodeOwnerOverride.java
index d936fea..ea9fa59 100644
--- a/java/com/google/gerrit/plugins/codeowners/backend/OnCodeOwnerOverride.java
+++ b/java/com/google/gerrit/plugins/codeowners/backend/OnCodeOwnerOverride.java
@@ -26,10 +26,10 @@
 import com.google.gerrit.plugins.codeowners.backend.config.CodeOwnersPluginProjectConfigSnapshot;
 import com.google.gerrit.plugins.codeowners.backend.config.RequiredApproval;
 import com.google.gerrit.plugins.codeowners.metrics.CodeOwnerMetrics;
-import com.google.gerrit.server.ChangeMessagesUtil;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.notedb.ChangeNotes;
 import com.google.gerrit.server.restapi.change.OnPostReview;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.gerrit.server.util.LabelVote;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
@@ -128,24 +128,24 @@
       return Optional.of(
           String.format(
               "By voting %s the code-owners submit requirement is overridden by %s",
-              newVote, ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+              newVote, AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
     } else if (isCodeOwnerOverrideRemoved(overrideApproval, oldApprovals, newVote)) {
       if (newVote.value() == 0) {
         return Optional.of(
             String.format(
                 "By removing the %s vote the code-owners submit requirement is no longer overridden"
                     + " by %s",
-                newVote.label(), ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+                newVote.label(), AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
       }
       return Optional.of(
           String.format(
               "By voting %s the code-owners submit requirement is no longer overridden by %s",
-              newVote, ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+              newVote, AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
     } else if (isCodeOwnerOverrideUpOrDowngraded(overrideApproval, oldApprovals, newVote)) {
       return Optional.of(
           String.format(
               "By voting %s the code-owners submit requirement is still overridden by %s",
-              newVote, ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+              newVote, AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
     }
     // non-approval was downgraded (e.g. -1 to -2)
     return Optional.empty();
diff --git a/java/com/google/gerrit/plugins/codeowners/restapi/CodeOwnerStatusInfoJson.java b/java/com/google/gerrit/plugins/codeowners/restapi/CodeOwnerStatusInfoJson.java
index 1c32869..6872371 100644
--- a/java/com/google/gerrit/plugins/codeowners/restapi/CodeOwnerStatusInfoJson.java
+++ b/java/com/google/gerrit/plugins/codeowners/restapi/CodeOwnerStatusInfoJson.java
@@ -26,7 +26,6 @@
 import com.google.common.collect.Streams;
 import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.entities.Account;
-import com.google.gerrit.entities.ChangeMessage;
 import com.google.gerrit.entities.PatchSet;
 import com.google.gerrit.extensions.common.ChangeType;
 import com.google.gerrit.plugins.codeowners.api.CodeOwnerStatusInfo;
@@ -37,6 +36,7 @@
 import com.google.gerrit.plugins.codeowners.util.JgitPath;
 import com.google.gerrit.server.account.AccountLoader;
 import com.google.gerrit.server.permissions.PermissionBackendException;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import java.util.Comparator;
@@ -136,7 +136,7 @@
                         : Stream.empty()))
         .forEach(
             reason -> {
-              Matcher matcher = ChangeMessage.ACCOUNT_TEMPLATE_PATTERN.matcher(reason);
+              Matcher matcher = AccountTemplateUtil.ACCOUNT_TEMPLATE_PATTERN.matcher(reason);
               while (matcher.find()) {
                 String accountIdString = matcher.group(1);
                 Optional<Account.Id> accountId = Account.Id.tryParse(accountIdString);
diff --git a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/CodeOwnersOnAddReviewerIT.java b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/CodeOwnersOnAddReviewerIT.java
index b0890c1..595001f 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/CodeOwnersOnAddReviewerIT.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/CodeOwnersOnAddReviewerIT.java
@@ -25,7 +25,7 @@
 import com.google.gerrit.extensions.api.projects.DeleteBranchesInput;
 import com.google.gerrit.extensions.common.ChangeMessageInfo;
 import com.google.gerrit.plugins.codeowners.acceptance.AbstractCodeOwnersIT;
-import com.google.gerrit.server.ChangeMessagesUtil;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import java.util.Collection;
 import org.junit.Test;
 
@@ -90,7 +90,7 @@
         .isEqualTo(
             String.format(
                 "%s, who was added as reviewer owns the following files:\n* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(user.id()), path));
+                AccountTemplateUtil.getAccountTemplate(user.id()), path));
   }
 
   @Test
@@ -126,7 +126,7 @@
         .isEqualTo(
             String.format(
                 "%s, who was added as reviewer owns the following files:\n* %s\n* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(user.id()), path1, path2));
+                AccountTemplateUtil.getAccountTemplate(user.id()), path1, path2));
   }
 
   @Test
@@ -193,7 +193,7 @@
                     + "* %s\n"
                     + "* %s\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(user.id()), path4, path3, path1, path2));
+                AccountTemplateUtil.getAccountTemplate(user.id()), path4, path3, path1, path2));
   }
 
   @Test
@@ -239,7 +239,7 @@
                     + "* %s\n"
                     + "* %s\n"
                     + "(more files)\n",
-                ChangeMessagesUtil.getAccountTemplate(user.id()), path4, path3, path5));
+                AccountTemplateUtil.getAccountTemplate(user.id()), path4, path3, path5));
   }
 
   @Test
@@ -322,7 +322,7 @@
         .isEqualTo(
             String.format(
                 "%s, who was added as reviewer owns the following files:\n* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(user.id()), path));
+                AccountTemplateUtil.getAccountTemplate(user.id()), path));
   }
 
   @Test
@@ -353,11 +353,11 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
     assertThat(Iterables.getLast(messages).message)
         .isEqualTo(
             String.format(
                 "%s, who was added as reviewer owns the following files:\n* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(user.id()), path));
+                AccountTemplateUtil.getAccountTemplate(user.id()), path));
   }
 }
diff --git a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/GetCodeOwnerStatusIT.java b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/GetCodeOwnerStatusIT.java
index 75192fa..56ba30d 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/GetCodeOwnerStatusIT.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/GetCodeOwnerStatusIT.java
@@ -31,7 +31,7 @@
 import com.google.gerrit.plugins.codeowners.backend.FileCodeOwnerStatus;
 import com.google.gerrit.plugins.codeowners.common.CodeOwnerStatus;
 import com.google.gerrit.plugins.codeowners.util.JgitPath;
-import com.google.gerrit.server.ChangeMessagesUtil;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.inject.Inject;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -80,7 +80,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
     assertThat(codeOwnerStatus).hasMoreThat().isNull();
     assertThat(codeOwnerStatus).hasAccounts(user);
   }
@@ -139,13 +139,13 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))),
+                    AccountTemplateUtil.getAccountTemplate(user.id()))),
             FileCodeOwnerStatus.addition(
                 path2,
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))))
+                    AccountTemplateUtil.getAccountTemplate(user.id()))))
         .inOrder();
     assertThat(codeOwnerStatus).hasAccounts(user);
 
@@ -164,13 +164,13 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))),
+                    AccountTemplateUtil.getAccountTemplate(user.id()))),
             FileCodeOwnerStatus.addition(
                 path2,
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))))
+                    AccountTemplateUtil.getAccountTemplate(user.id()))))
         .inOrder();
     assertThat(codeOwnerStatus).hasAccounts(user);
 
@@ -188,13 +188,13 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))),
+                    AccountTemplateUtil.getAccountTemplate(user.id()))),
             FileCodeOwnerStatus.addition(
                 path2,
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))))
+                    AccountTemplateUtil.getAccountTemplate(user.id()))))
         .inOrder();
     assertThat(codeOwnerStatus).hasAccounts(user);
 
@@ -212,7 +212,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
     assertThat(codeOwnerStatus).hasAccounts(user);
 
     codeOwnerStatus =
@@ -306,7 +306,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))))
+                    AccountTemplateUtil.getAccountTemplate(user.id()))))
         .inOrder();
     assertThat(codeOwnerStatus).hasAccounts(user);
     assertThat(codeOwnerStatus).hasMoreThat().isTrue();
@@ -327,13 +327,13 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))),
+                    AccountTemplateUtil.getAccountTemplate(user.id()))),
             FileCodeOwnerStatus.addition(
                 path2,
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))))
+                    AccountTemplateUtil.getAccountTemplate(user.id()))))
         .inOrder();
     assertThat(codeOwnerStatus).hasAccounts(user);
     assertThat(codeOwnerStatus).hasMoreThat().isNull();
@@ -380,7 +380,7 @@
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id())),
+                      AccountTemplateUtil.getAccountTemplate(user.id())),
                   newPath,
                   CodeOwnerStatus.INSUFFICIENT_REVIEWERS,
                   /* reasonNewPath= */ null));
@@ -404,7 +404,7 @@
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                      AccountTemplateUtil.getAccountTemplate(user.id()))));
     }
     assertThat(codeOwnerStatus).hasMoreThat().isNull();
     assertThat(codeOwnerStatus).hasAccounts(user);
@@ -468,7 +468,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))))
+                    AccountTemplateUtil.getAccountTemplate(user.id()))))
         .inOrder();
     assertThat(codeOwnerStatus).hasAccounts(user);
     assertThat(codeOwnerStatus).hasMoreThat().isTrue();
@@ -571,7 +571,7 @@
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id())),
+                      AccountTemplateUtil.getAccountTemplate(user.id())),
                   newPath,
                   CodeOwnerStatus.INSUFFICIENT_REVIEWERS,
                   /* reasonNewPath= */ null));
@@ -585,7 +585,7 @@
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id()))),
+                      AccountTemplateUtil.getAccountTemplate(user.id()))),
               FileCodeOwnerStatus.addition(newPath, CodeOwnerStatus.INSUFFICIENT_REVIEWERS));
     }
     assertThat(codeOwnerStatus).hasAccounts(user);
@@ -604,12 +604,12 @@
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id())),
+                      AccountTemplateUtil.getAccountTemplate(user.id())),
                   newPath,
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user2.id()))));
+                      AccountTemplateUtil.getAccountTemplate(user2.id()))));
     } else {
       assertThat(codeOwnerStatus)
           .hasFileCodeOwnerStatusesThat()
@@ -620,13 +620,13 @@
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id()))),
+                      AccountTemplateUtil.getAccountTemplate(user.id()))),
               FileCodeOwnerStatus.addition(
                   newPath,
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user2.id()))));
+                      AccountTemplateUtil.getAccountTemplate(user2.id()))));
     }
     assertThat(codeOwnerStatus).hasAccounts(user, user2);
   }
diff --git a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/OnCodeOwnerApprovalIT.java b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/OnCodeOwnerApprovalIT.java
index 48aeafb..efd2166 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/OnCodeOwnerApprovalIT.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/OnCodeOwnerApprovalIT.java
@@ -31,7 +31,7 @@
 import com.google.gerrit.extensions.common.ChangeMessageInfo;
 import com.google.gerrit.extensions.common.LabelDefinitionInput;
 import com.google.gerrit.plugins.codeowners.acceptance.AbstractCodeOwnersIT;
-import com.google.gerrit.server.ChangeMessagesUtil;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.gerrit.testing.FakeEmailSender.Message;
 import com.google.inject.Inject;
 import java.util.Collection;
@@ -87,7 +87,7 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -121,7 +121,7 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -163,7 +163,7 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
 
     // Apply the Code-Review+1 approval again and add an unrelated vote (Code-Review+1 is ignored).
     ReviewInput reviewInput = ReviewInput.recommend();
@@ -213,7 +213,7 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
 
     // Apply the Code-Review+1 approval again and add a comment (Code-Review +1 is ignored)
     ReviewInput.CommentInput commentInput = new ReviewInput.CommentInput();
@@ -254,7 +254,7 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
 
     // Apply the Code-Review+1 by another code owner
     requestScopeOperations.setApiUser(user.id());
@@ -268,7 +268,7 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(user.id()), path));
+                AccountTemplateUtil.getAccountTemplate(user.id()), path));
   }
 
   @Test
@@ -297,7 +297,7 @@
                     + "By voting Code-Review+2 the following files are still code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -329,7 +329,7 @@
                     + "By voting Code-Review+1 the following files are still explicitly code-owner"
                     + " approved by %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -361,7 +361,7 @@
                     + "By voting Code-Review+2 the following files are still explicitly code-owner"
                     + " approved by %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -390,7 +390,7 @@
                     + "By voting Code-Review+1 the following files are still code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -419,7 +419,7 @@
                     + "By removing the Code-Review vote the following files are no longer"
                     + " code-owner approved by %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -449,7 +449,7 @@
                     + "By voting Code-Review-1 the following files are no longer code-owner"
                     + " approved by %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -489,7 +489,7 @@
                     + " %s:\n"
                     + "* %s\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path1, path2));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path1, path2));
   }
 
   @Test
@@ -517,7 +517,7 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), oldPath));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), oldPath));
   }
 
   @Test
@@ -590,7 +590,7 @@
                     + "By voting Code-Review+1 the following files are now explicitly code-owner"
                     + " approved by %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -623,9 +623,9 @@
                     + "* %s\n"
                     + "\n"
                     + "The listed files are still implicitly approved by %s.\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()),
+                AccountTemplateUtil.getAccountTemplate(admin.id()),
                 path,
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
   }
 
   @Test
@@ -658,9 +658,9 @@
                     + "* %s\n"
                     + "\n"
                     + "The listed files are still implicitly approved by %s.\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()),
+                AccountTemplateUtil.getAccountTemplate(admin.id()),
                 path,
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
   }
 
   @Test
@@ -688,7 +688,7 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -720,7 +720,7 @@
                     + "By removing the Code-Review vote the following files are no longer"
                     + " code-owner approved by %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -752,7 +752,7 @@
                     + "By voting Code-Review-1 the following files are no longer code-owner"
                     + " approved by %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -797,7 +797,7 @@
                     + "* %s\n"
                     + "* %s\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path4, path3, path1, path2));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path4, path3, path1, path2));
   }
 
   @Test
@@ -845,7 +845,7 @@
                     + "* %s\n"
                     + "* %s\n"
                     + "(more files)\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path4, path3, path5));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path4, path3, path5));
   }
 
   @Test
@@ -911,7 +911,7 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -1070,7 +1070,7 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(user.id()), path));
+                AccountTemplateUtil.getAccountTemplate(user.id()), path));
   }
 
   @Test
diff --git a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/OnCodeOwnerOverrrideIT.java b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/OnCodeOwnerOverrrideIT.java
index b03ef96..eaf507e 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/OnCodeOwnerOverrrideIT.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/OnCodeOwnerOverrrideIT.java
@@ -31,7 +31,7 @@
 import com.google.gerrit.extensions.common.ChangeMessageInfo;
 import com.google.gerrit.extensions.common.LabelDefinitionInput;
 import com.google.gerrit.plugins.codeowners.acceptance.AbstractCodeOwnersIT;
-import com.google.gerrit.server.ChangeMessagesUtil;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.gerrit.testing.FakeEmailSender.Message;
 import com.google.inject.Inject;
 import java.util.Collection;
@@ -74,7 +74,7 @@
             String.format(
                 "Patch Set 1: Owners-Override+1\n\n"
                     + "By voting Owners-Override+1 the code-owners submit requirement is overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
   }
 
   @Test
@@ -111,7 +111,7 @@
             String.format(
                 "Patch Set 1: Owners-Override+1\n\n"
                     + "By voting Owners-Override+1 the code-owners submit requirement is overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
 
     // Apply the Owners-Override+1 approval by another user
     requestScopeOperations.setApiUser(user.id());
@@ -123,7 +123,7 @@
             String.format(
                 "Patch Set 1: Owners-Override+1\n\n"
                     + "By voting Owners-Override+1 the code-owners submit requirement is overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(user.id())));
+                AccountTemplateUtil.getAccountTemplate(user.id())));
   }
 
   @Test
@@ -159,7 +159,7 @@
                 "Patch Set 1: Owners-Override+2\n\n"
                     + "By voting Owners-Override+2 the code-owners submit requirement is still"
                     + " overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
   }
 
   @Test
@@ -195,7 +195,7 @@
                 "Patch Set 1: Owners-Override+1\n\n"
                     + "By voting Owners-Override+1 the code-owners submit requirement is still"
                     + " overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
   }
 
   @Test
@@ -217,7 +217,7 @@
                 "Patch Set 1: -Owners-Override\n\n"
                     + "By removing the Owners-Override vote the code-owners submit requirement is"
                     + " no longer overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
   }
 
   @Test
@@ -253,7 +253,7 @@
                 "Patch Set 1: Owners-Override-1\n\n"
                     + "By voting Owners-Override-1 the code-owners submit requirement is no longer"
                     + " overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
   }
 
   @Test
@@ -311,7 +311,7 @@
                     + "(1 comment)\n\n"
                     + "By voting Owners-Override+1 the code-owners submit requirement is"
                     + " overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
   }
 
   @Test
@@ -354,7 +354,7 @@
             String.format(
                 "Patch Set 1: Owners-Override+1\n\n"
                     + "By voting Owners-Override+1 the code-owners submit requirement is overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
   }
 
   @Test
@@ -389,8 +389,8 @@
                             + " overridden by %s\n\n"
                             + "By voting Owners-Override+1 the code-owners submit requirement is"
                             + " overridden by %s\n",
-                        ChangeMessagesUtil.getAccountTemplate(admin.id()),
-                        ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                        AccountTemplateUtil.getAccountTemplate(admin.id()),
+                        AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
@@ -424,14 +424,14 @@
             String.format(
                 "By voting Owners-Override+1 the code-owners submit requirement is"
                     + " overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
     assertThat(Iterables.getLast(messages).message)
         .contains(
             String.format(
                 "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -601,7 +601,7 @@
             String.format(
                 "Patch Set 1: Owners-Override+1\n\n"
                     + "By voting Owners-Override+1 the code-owners submit requirement is overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(user.id())));
+                AccountTemplateUtil.getAccountTemplate(user.id())));
   }
 
   @Test
diff --git a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckTest.java b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckTest.java
index 41bbc77..786f737 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckTest.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckTest.java
@@ -47,8 +47,8 @@
 import com.google.gerrit.plugins.codeowners.acceptance.testsuite.CodeOwnerConfigOperations;
 import com.google.gerrit.plugins.codeowners.common.CodeOwnerStatus;
 import com.google.gerrit.plugins.codeowners.util.JgitPath;
-import com.google.gerrit.server.ChangeMessagesUtil;
 import com.google.gerrit.server.notedb.ChangeNotes;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.inject.Inject;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -224,7 +224,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -254,7 +254,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -281,7 +281,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -322,7 +322,7 @@
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id())),
+                      AccountTemplateUtil.getAccountTemplate(user.id())),
                   newPath,
                   CodeOwnerStatus.INSUFFICIENT_REVIEWERS,
                   /* reasonNewPath= */ null));
@@ -334,7 +334,7 @@
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id()))),
+                      AccountTemplateUtil.getAccountTemplate(user.id()))),
               FileCodeOwnerStatus.addition(newPath, CodeOwnerStatus.INSUFFICIENT_REVIEWERS));
     }
   }
@@ -380,7 +380,7 @@
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                      AccountTemplateUtil.getAccountTemplate(user.id()))));
     } else {
       assertThatCollection(fileCodeOwnerStatuses)
           .containsExactly(
@@ -390,7 +390,7 @@
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                      AccountTemplateUtil.getAccountTemplate(user.id()))));
     }
   }
 
@@ -414,7 +414,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -439,7 +439,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -461,7 +461,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -498,7 +498,7 @@
                   CodeOwnerStatus.APPROVED,
                   String.format(
                       "approved by %s who is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id())),
+                      AccountTemplateUtil.getAccountTemplate(user.id())),
                   newPath,
                   CodeOwnerStatus.INSUFFICIENT_REVIEWERS,
                   /* reasonNewPath= */ null));
@@ -510,7 +510,7 @@
                   CodeOwnerStatus.APPROVED,
                   String.format(
                       "approved by %s who is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id()))),
+                      AccountTemplateUtil.getAccountTemplate(user.id()))),
               FileCodeOwnerStatus.addition(newPath, CodeOwnerStatus.INSUFFICIENT_REVIEWERS));
     }
   }
@@ -552,7 +552,7 @@
                   CodeOwnerStatus.APPROVED,
                   String.format(
                       "approved by %s who is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                      AccountTemplateUtil.getAccountTemplate(user.id()))));
     } else {
       assertThatCollection(fileCodeOwnerStatuses)
           .containsExactly(
@@ -562,7 +562,7 @@
                   CodeOwnerStatus.APPROVED,
                   String.format(
                       "approved by %s who is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                      AccountTemplateUtil.getAccountTemplate(user.id()))));
     }
   }
 
@@ -614,7 +614,7 @@
               CodeOwnerStatus.APPROVED,
               String.format(
                   "implicitly approved by the patch set uploader %s who is a code owner",
-                  ChangeMessagesUtil.getAccountTemplate(changeOwner.id())));
+                  AccountTemplateUtil.getAccountTemplate(changeOwner.id())));
     } else {
       expectedFileCodeOwnerStatus =
           FileCodeOwnerStatus.addition(path, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -674,7 +674,7 @@
               CodeOwnerStatus.APPROVED,
               String.format(
                   "implicitly approved by the patch set uploader %s who is a code owner",
-                  ChangeMessagesUtil.getAccountTemplate(changeOwner.id())));
+                  AccountTemplateUtil.getAccountTemplate(changeOwner.id())));
     } else {
       expectedFileCodeOwnerStatus =
           FileCodeOwnerStatus.modification(path, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -731,7 +731,7 @@
               CodeOwnerStatus.APPROVED,
               String.format(
                   "implicitly approved by the patch set uploader %s who is a code owner",
-                  ChangeMessagesUtil.getAccountTemplate(changeOwner.id())));
+                  AccountTemplateUtil.getAccountTemplate(changeOwner.id())));
     } else {
       expectedFileCodeOwnerStatus =
           FileCodeOwnerStatus.deletion(path, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -835,7 +835,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "implicitly approved by the patch set uploader %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(changeOwner.id())),
+                    AccountTemplateUtil.getAccountTemplate(changeOwner.id())),
                 newPath,
                 CodeOwnerStatus.INSUFFICIENT_REVIEWERS,
                 /* reasonNewPath= */ null);
@@ -858,7 +858,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "implicitly approved by the patch set uploader %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(changeOwner.id())));
+                    AccountTemplateUtil.getAccountTemplate(changeOwner.id())));
       } else {
         expectedFileDeletionCodeOwnerStatus =
             FileCodeOwnerStatus.deletion(oldPath, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -969,7 +969,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "implicitly approved by the patch set uploader %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(changeOwner.id())));
+                    AccountTemplateUtil.getAccountTemplate(changeOwner.id())));
       } else {
         expectedFileCodeOwnerStatus =
             FileCodeOwnerStatus.rename(
@@ -989,7 +989,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "implicitly approved by the patch set uploader %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(changeOwner.id())));
+                    AccountTemplateUtil.getAccountTemplate(changeOwner.id())));
       } else {
         expectedAddtitionFileCodeOwnerStatus =
             FileCodeOwnerStatus.addition(newPath, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -1057,7 +1057,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a code owner (all users are code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
@@ -1115,7 +1115,7 @@
               String.format(
                   "implicitly approved by the patch set uploader %s who is a code owner"
                       + " (all users are code owners)",
-                  ChangeMessagesUtil.getAccountTemplate(changeOwner.id())));
+                  AccountTemplateUtil.getAccountTemplate(changeOwner.id())));
     } else {
       expectedFileCodeOwnerStatus =
           FileCodeOwnerStatus.addition(path, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -1160,7 +1160,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner (all users are code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -1201,7 +1201,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a global code owner",
-                    ChangeMessagesUtil.getAccountTemplate(bot.id()))));
+                    AccountTemplateUtil.getAccountTemplate(bot.id()))));
   }
 
   @Test
@@ -1261,7 +1261,7 @@
               String.format(
                   "implicitly approved by the patch set uploader %s who is a global code"
                       + " owner",
-                  ChangeMessagesUtil.getAccountTemplate(bot.id())));
+                  AccountTemplateUtil.getAccountTemplate(bot.id())));
     } else {
       expectedFileCodeOwnerStatus =
           FileCodeOwnerStatus.addition(path, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -1303,7 +1303,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a global code owner",
-                    ChangeMessagesUtil.getAccountTemplate(bot.id()))));
+                    AccountTemplateUtil.getAccountTemplate(bot.id()))));
 
     // Let the bot approve the change.
     projectOperations
@@ -1324,7 +1324,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a global code owner",
-                    ChangeMessagesUtil.getAccountTemplate(bot.id()))));
+                    AccountTemplateUtil.getAccountTemplate(bot.id()))));
   }
 
   @Test
@@ -1357,7 +1357,7 @@
                 String.format(
                     "approved by %s who is a global code owner"
                         + " (all users are global code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
@@ -1408,7 +1408,7 @@
               String.format(
                   "implicitly approved by the patch set uploader %s who is a global code owner"
                       + " (all users are global code owners)",
-                  ChangeMessagesUtil.getAccountTemplate(changeOwner.id())));
+                  AccountTemplateUtil.getAccountTemplate(changeOwner.id())));
     } else {
       expectedFileCodeOwnerStatus =
           FileCodeOwnerStatus.addition(path, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -1445,7 +1445,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a global code owner (all users are global code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -1480,7 +1480,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -1523,13 +1523,13 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))),
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))),
             FileCodeOwnerStatus.addition(
                 path2,
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
@@ -1575,13 +1575,13 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))),
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))),
             FileCodeOwnerStatus.addition(
                 path2,
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
 
     // Delete the override approval.
     gApi.changes().id(changeId).current().review(new ReviewInput().label("Owners-Override", 0));
@@ -1605,13 +1605,13 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Another-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))),
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))),
             FileCodeOwnerStatus.addition(
                 path2,
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Another-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
@@ -1782,7 +1782,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
 
     // Change some other file ('user' who uploads the change is a code owner and hence owner
     // approvals are implicit for this change)
@@ -1808,7 +1808,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -1846,7 +1846,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
 
     // Change some other file and submit the change with an override.
     String changeId2 =
@@ -1871,7 +1871,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
@@ -1912,7 +1912,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -1964,7 +1964,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+2 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(user2.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user2.id()))));
   }
 
   @Test
@@ -2004,7 +2004,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a default code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -2055,7 +2055,7 @@
               CodeOwnerStatus.APPROVED,
               String.format(
                   "implicitly approved by the patch set uploader %s who is a default code owner",
-                  ChangeMessagesUtil.getAccountTemplate(changeOwner.id())));
+                  AccountTemplateUtil.getAccountTemplate(changeOwner.id())));
     } else {
       expectedFileCodeOwnerStatus =
           FileCodeOwnerStatus.addition(path, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -2096,7 +2096,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a default code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
 
     // Let the default code owner approve the change.
     projectOperations
@@ -2117,7 +2117,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a default code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -2225,7 +2225,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "patch set uploader %s is exempted from requiring code owner approvals",
-                    ChangeMessagesUtil.getAccountTemplate(exemptedUser.id()))));
+                    AccountTemplateUtil.getAccountTemplate(exemptedUser.id()))));
 
     // Amend the change by another user, so that the other non-exempted user becomes the last
     // uploader.
@@ -2259,7 +2259,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "implicitly approved by the patch set uploader %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(changeOwner.id()))));
+                    AccountTemplateUtil.getAccountTemplate(changeOwner.id()))));
 
     // Allow all users to approve and submit changes.
     projectOperations
diff --git a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithAllUsersAsFallbackCodeOwnersTest.java b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithAllUsersAsFallbackCodeOwnersTest.java
index b2340db..c91d897 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithAllUsersAsFallbackCodeOwnersTest.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithAllUsersAsFallbackCodeOwnersTest.java
@@ -26,8 +26,8 @@
 import com.google.gerrit.plugins.codeowners.backend.config.GeneralConfig;
 import com.google.gerrit.plugins.codeowners.common.CodeOwnerStatus;
 import com.google.gerrit.plugins.codeowners.util.JgitPath;
-import com.google.gerrit.server.ChangeMessagesUtil;
 import com.google.gerrit.server.notedb.ChangeNotes;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.gerrit.testing.ConfigSuite;
 import com.google.inject.Inject;
 import java.nio.file.Path;
@@ -212,7 +212,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a fallback code owner (all users are fallback code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
 
     // Add a Code-Review+1 (= code owner approval) from a fallback code owner.
     requestScopeOperations.setApiUser(user.id());
@@ -228,7 +228,7 @@
                 String.format(
                     "approved by %s who is a fallback code owner"
                         + " (all users are fallback code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -249,7 +249,7 @@
                 String.format(
                     "implicitly approved by the patch set uploader %s who is a fallback code"
                         + " owner (all users are fallback code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
diff --git a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithProjectOwnersAsFallbackCodeOwnersTest.java b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithProjectOwnersAsFallbackCodeOwnersTest.java
index ef3f830..dfb0144 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithProjectOwnersAsFallbackCodeOwnersTest.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithProjectOwnersAsFallbackCodeOwnersTest.java
@@ -30,8 +30,8 @@
 import com.google.gerrit.plugins.codeowners.backend.config.GeneralConfig;
 import com.google.gerrit.plugins.codeowners.common.CodeOwnerStatus;
 import com.google.gerrit.plugins.codeowners.util.JgitPath;
-import com.google.gerrit.server.ChangeMessagesUtil;
 import com.google.gerrit.server.notedb.ChangeNotes;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.gerrit.testing.ConfigSuite;
 import com.google.inject.Inject;
 import java.nio.file.Path;
@@ -106,7 +106,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a global code owner",
-                    ChangeMessagesUtil.getAccountTemplate(bot.id()))));
+                    AccountTemplateUtil.getAccountTemplate(bot.id()))));
   }
 
   @Test
@@ -158,7 +158,7 @@
               String.format(
                   "implicitly approved by the patch set uploader %s who is a global code"
                       + " owner",
-                  ChangeMessagesUtil.getAccountTemplate(bot.id())));
+                  AccountTemplateUtil.getAccountTemplate(bot.id())));
     } else {
       expectedFileCodeOwnerStatus =
           FileCodeOwnerStatus.addition(path, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -200,7 +200,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a global code owner",
-                    ChangeMessagesUtil.getAccountTemplate(bot.id()))));
+                    AccountTemplateUtil.getAccountTemplate(bot.id()))));
 
     // Let the bot approve the change.
     projectOperations
@@ -221,7 +221,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a global code owner",
-                    ChangeMessagesUtil.getAccountTemplate(bot.id()))));
+                    AccountTemplateUtil.getAccountTemplate(bot.id()))));
   }
 
   @Test
@@ -254,7 +254,7 @@
                 String.format(
                     "approved by %s who is a global code owner"
                         + " (all users are global code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
@@ -306,7 +306,7 @@
               String.format(
                   "implicitly approved by the patch set uploader %s who is a global code owner"
                       + " (all users are global code owners)",
-                  ChangeMessagesUtil.getAccountTemplate(projectOwner.id())));
+                  AccountTemplateUtil.getAccountTemplate(projectOwner.id())));
     } else {
       expectedFileCodeOwnerStatus =
           FileCodeOwnerStatus.addition(path, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -343,7 +343,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a global code owner (all users are global code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -397,7 +397,7 @@
                 String.format(
                     "reviewer %s is a fallback code owner"
                         + " (all project owners are fallback code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
@@ -421,7 +421,7 @@
                 String.format(
                     "approved by %s who is a fallback code owner"
                         + " (all project owners are fallback code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
@@ -468,7 +468,7 @@
               String.format(
                   "implicitly approved by the patch set uploader %s who is a fallback code"
                       + " owner (all project owners are fallback code owners)",
-                  ChangeMessagesUtil.getAccountTemplate(projectOwner.id())));
+                  AccountTemplateUtil.getAccountTemplate(projectOwner.id())));
     } else {
       expectedFileCodeOwnerStatus =
           FileCodeOwnerStatus.addition(path, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -538,13 +538,13 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))),
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))),
             FileCodeOwnerStatus.addition(
                 path2,
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
@@ -591,13 +591,13 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))),
+                    AccountTemplateUtil.getAccountTemplate(user.id()))),
             FileCodeOwnerStatus.addition(
                 path2,
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
 
     // Delete the override approval.
     gApi.changes().id(changeId).current().review(new ReviewInput().label("Owners-Override", 0));
@@ -621,13 +621,13 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Another-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))),
+                    AccountTemplateUtil.getAccountTemplate(user.id()))),
             FileCodeOwnerStatus.addition(
                 path2,
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Another-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -677,7 +677,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a default code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   private ImmutableSet<FileCodeOwnerStatus> getFileCodeOwnerStatuses(String changeId)
diff --git a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithSelfApprovalsIgnoredTest.java b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithSelfApprovalsIgnoredTest.java
index 1dd01d2..a665ad4 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithSelfApprovalsIgnoredTest.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithSelfApprovalsIgnoredTest.java
@@ -27,8 +27,8 @@
 import com.google.gerrit.plugins.codeowners.backend.config.OverrideApprovalConfig;
 import com.google.gerrit.plugins.codeowners.common.CodeOwnerStatus;
 import com.google.gerrit.plugins.codeowners.util.JgitPath;
-import com.google.gerrit.server.ChangeMessagesUtil;
 import com.google.gerrit.server.notedb.ChangeNotes;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.gerrit.testing.ConfigSuite;
 import com.google.inject.Inject;
 import java.nio.file.Path;
@@ -134,7 +134,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(changeOwner.id()))));
+                    AccountTemplateUtil.getAccountTemplate(changeOwner.id()))));
   }
 
   @Test
@@ -253,7 +253,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "implicitly approved by the patch set uploader %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(codeOwner.id()))));
+                    AccountTemplateUtil.getAccountTemplate(codeOwner.id()))));
   }
 
   @Test
@@ -346,7 +346,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(changeOwner.id()))));
+                    AccountTemplateUtil.getAccountTemplate(changeOwner.id()))));
   }
 
   @Test
diff --git a/javatests/com/google/gerrit/plugins/codeowners/restapi/CodeOwnerStatusInfoJsonTest.java b/javatests/com/google/gerrit/plugins/codeowners/restapi/CodeOwnerStatusInfoJsonTest.java
index db40070..17fbdb1 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/restapi/CodeOwnerStatusInfoJsonTest.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/restapi/CodeOwnerStatusInfoJsonTest.java
@@ -36,7 +36,7 @@
 import com.google.gerrit.plugins.codeowners.common.ChangedFile;
 import com.google.gerrit.plugins.codeowners.common.CodeOwnerStatus;
 import com.google.gerrit.plugins.codeowners.testing.FileCodeOwnerStatusInfoSubject;
-import com.google.gerrit.server.ChangeMessagesUtil;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.gerrit.truth.ListSubject;
 import java.nio.file.Paths;
 import java.util.Optional;
@@ -301,13 +301,14 @@
   public void formatCodeOwnerStatusInfoWithReasonsThatReferenceAccounts() throws Exception {
     TestAccount user2 = accountCreator.user2();
     String reason1 =
-        String.format("because %s did something", ChangeMessagesUtil.getAccountTemplate(user.id()));
+        String.format(
+            "because %s did something", AccountTemplateUtil.getAccountTemplate(user.id()));
     String reason2 =
         String.format(
             "because %s, %s and %s did something else",
-            ChangeMessagesUtil.getAccountTemplate(admin.id()),
-            ChangeMessagesUtil.getAccountTemplate(user.id()),
-            ChangeMessagesUtil.getAccountTemplate(user2.id()));
+            AccountTemplateUtil.getAccountTemplate(admin.id()),
+            AccountTemplateUtil.getAccountTemplate(user.id()),
+            AccountTemplateUtil.getAccountTemplate(user2.id()));
     ChangedFile changedFile = mock(ChangedFile.class);
     when(changedFile.changeType()).thenReturn(DiffEntry.ChangeType.ADD);
     PathCodeOwnerStatus pathCodeOwnerStatus =
