diff --git a/java/com/google/gerrit/plugins/checks/ChecksUpdate.java b/java/com/google/gerrit/plugins/checks/ChecksUpdate.java
index 7ca7999..6d67a9d 100644
--- a/java/com/google/gerrit/plugins/checks/ChecksUpdate.java
+++ b/java/com/google/gerrit/plugins/checks/ChecksUpdate.java
@@ -35,9 +35,9 @@
 import com.google.gerrit.server.UserInitiated;
 import com.google.gerrit.server.change.NotifyResolver;
 import com.google.gerrit.server.index.change.ChangeIndexer;
-import com.google.gerrit.server.mail.send.ChangeEmailNew;
+import com.google.gerrit.server.mail.send.ChangeEmail;
 import com.google.gerrit.server.mail.send.MessageIdGenerator;
-import com.google.gerrit.server.mail.send.OutgoingEmailNew;
+import com.google.gerrit.server.mail.send.OutgoingEmail;
 import com.google.gerrit.server.notedb.ChangeNotes;
 import com.google.inject.assistedinject.Assisted;
 import com.google.inject.assistedinject.AssistedInject;
@@ -223,12 +223,12 @@
                               checkKey.checkerUuid(), checkKey))),
           updatedCheck);
       checksEmailDecorator.setChecksByChecker(getAllChecksByChecker(checkKey));
-      ChangeEmailNew changeEmail =
+      ChangeEmail changeEmail =
           checksEmailFactories.createChangeEmail(
               checkKey.repository(), checkKey.patchSet().changeId(), checksEmailDecorator);
       PatchSet patchSet = psUtil.get(changeNotes, checkKey.patchSet());
       changeEmail.setPatchSet(patchSet);
-      OutgoingEmailNew outgoingEmail = checksEmailFactories.createEmail(changeEmail);
+      OutgoingEmail outgoingEmail = checksEmailFactories.createEmail(changeEmail);
       if (currentUser.isPresent()) {
         outgoingEmail.setFrom(currentUser.get().getAccountId());
       }
diff --git a/java/com/google/gerrit/plugins/checks/email/ChecksEmailModule.java b/java/com/google/gerrit/plugins/checks/email/ChecksEmailModule.java
index 48b1df0..3ba6513 100644
--- a/java/com/google/gerrit/plugins/checks/email/ChecksEmailModule.java
+++ b/java/com/google/gerrit/plugins/checks/email/ChecksEmailModule.java
@@ -20,12 +20,12 @@
 import com.google.gerrit.entities.Project;
 import com.google.gerrit.extensions.config.FactoryModule;
 import com.google.gerrit.extensions.registration.DynamicSet;
-import com.google.gerrit.server.mail.send.ChangeEmailNew;
-import com.google.gerrit.server.mail.send.ChangeEmailNewFactory;
+import com.google.gerrit.server.mail.send.ChangeEmail;
+import com.google.gerrit.server.mail.send.ChangeEmailFactory;
 import com.google.gerrit.server.mail.send.EmailArguments;
 import com.google.gerrit.server.mail.send.MailSoyTemplateProvider;
-import com.google.gerrit.server.mail.send.OutgoingEmailNew;
-import com.google.gerrit.server.mail.send.OutgoingEmailNewFactory;
+import com.google.gerrit.server.mail.send.OutgoingEmail;
+import com.google.gerrit.server.mail.send.OutgoingEmailFactory;
 import com.google.inject.Inject;
 
 public class ChecksEmailModule extends FactoryModule {
@@ -38,14 +38,14 @@
 
   public static class ChecksEmailFactories {
     private final EmailArguments args;
-    private final ChangeEmailNewFactory changeEmailFactory;
-    private final OutgoingEmailNewFactory outgoingEmailFactory;
+    private final ChangeEmailFactory changeEmailFactory;
+    private final OutgoingEmailFactory outgoingEmailFactory;
 
     @Inject
     ChecksEmailFactories(
         EmailArguments args,
-        ChangeEmailNewFactory changeEmailFactory,
-        OutgoingEmailNewFactory outgoingEmailFactory) {
+        ChangeEmailFactory changeEmailFactory,
+        OutgoingEmailFactory outgoingEmailFactory) {
       this.args = args;
       this.changeEmailFactory = changeEmailFactory;
       this.outgoingEmailFactory = outgoingEmailFactory;
@@ -55,14 +55,14 @@
       return new CombinedCheckStateUpdatedChangeEmailDecorator();
     }
 
-    public ChangeEmailNew createChangeEmail(
+    public ChangeEmail createChangeEmail(
         Project.NameKey project,
         Change.Id changeId,
         CombinedCheckStateUpdatedChangeEmailDecorator checksEmailDecorator) {
       return changeEmailFactory.create(args.newChangeData(project, changeId), checksEmailDecorator);
     }
 
-    public OutgoingEmailNew createEmail(ChangeEmailNew changeEmail) {
+    public OutgoingEmail createEmail(ChangeEmail changeEmail) {
       return outgoingEmailFactory.create("combinedCheckStateUpdate", changeEmail);
     }
   }
diff --git a/java/com/google/gerrit/plugins/checks/email/CombinedCheckStateUpdatedChangeEmailDecorator.java b/java/com/google/gerrit/plugins/checks/email/CombinedCheckStateUpdatedChangeEmailDecorator.java
index 5855fdb..2ace773 100644
--- a/java/com/google/gerrit/plugins/checks/email/CombinedCheckStateUpdatedChangeEmailDecorator.java
+++ b/java/com/google/gerrit/plugins/checks/email/CombinedCheckStateUpdatedChangeEmailDecorator.java
@@ -29,16 +29,16 @@
 import com.google.gerrit.plugins.checks.Checker;
 import com.google.gerrit.plugins.checks.api.CheckState;
 import com.google.gerrit.plugins.checks.api.CombinedCheckState;
-import com.google.gerrit.server.mail.send.ChangeEmailNew;
-import com.google.gerrit.server.mail.send.ChangeEmailNew.ChangeEmailDecorator;
-import com.google.gerrit.server.mail.send.OutgoingEmailNew;
+import com.google.gerrit.server.mail.send.ChangeEmail;
+import com.google.gerrit.server.mail.send.ChangeEmail.ChangeEmailDecorator;
+import com.google.gerrit.server.mail.send.OutgoingEmail;
 import java.util.HashMap;
 import java.util.Map;
 
 /** Send notice about an update of the combined check state of a change. */
 public class CombinedCheckStateUpdatedChangeEmailDecorator implements ChangeEmailDecorator {
-  private OutgoingEmailNew email;
-  private ChangeEmailNew changeEmail;
+  private OutgoingEmail email;
+  private ChangeEmail changeEmail;
   private CombinedCheckState oldCombinedCheckState;
   private CombinedCheckState newCombinedCheckState;
   private Checker checker;
@@ -69,7 +69,7 @@
   }
 
   @Override
-  public void init(OutgoingEmailNew email, ChangeEmailNew changeEmail) {
+  public void init(OutgoingEmail email, ChangeEmail changeEmail) {
     this.email = email;
     this.changeEmail = changeEmail;
     changeEmail.markAsReply();
