diff --git a/java/com/google/gerrit/plugins/checks/email/CombinedCheckStateUpdatedSender.java b/java/com/google/gerrit/plugins/checks/email/CombinedCheckStateUpdatedSender.java
index b4adcfd..9ab5e3a 100644
--- a/java/com/google/gerrit/plugins/checks/email/CombinedCheckStateUpdatedSender.java
+++ b/java/com/google/gerrit/plugins/checks/email/CombinedCheckStateUpdatedSender.java
@@ -91,29 +91,41 @@
       soyContext.put("newCombinedCheckState", newCombinedCheckState.name());
     }
 
-    if (checker != null) {
-      Map<String, String> checkerData = new HashMap<>();
-      checkerData.put("uuid", checker.getUuid().get());
-      checkerData.put("name", checker.getName());
-      checkerData.put("repository", checker.getRepository().get());
-      checker
-          .getDescription()
-          .ifPresent(description -> checkerData.put("description", description));
-      checker.getUrl().ifPresent(url -> checkerData.put("url", url));
-      soyContext.put("checker", checkerData);
+    if (checker != null && check != null) {
+      soyContext.put("checker", getCheckerData(checker, check));
     }
+  }
 
-    if (check != null) {
-      Map<String, Object> checkData = new HashMap<>();
-      checkData.put("checkerUuid", check.key().checkerUuid().get());
-      checkData.put("change", check.key().patchSet().changeId().get());
-      checkData.put("patchSet", check.key().patchSet().get());
-      checkData.put("repository", check.key().repository().get());
-      checkData.put("state", check.state().name());
-      check.message().ifPresent(message -> checkData.put("message", message));
-      check.url().ifPresent(url -> checkData.put("url", url));
-      soyContext.put("check", checkData);
-    }
+  /**
+   * Creates a map with the checker data that can be fed into the soy template.
+   *
+   * <p>The map keys are the names of the checker properties and the map values are the checker
+   * property values as types that are compatible with soy templates. The value of the {@code check}
+   * field is a map with the check data. The map with the check data maps the names of the check
+   * properties to the check property values as types that are compatible with soy.
+   *
+   * @param checker the checker
+   * @param check the check
+   * @return the checker data as a map that can be fed into a soy template
+   */
+  private static Map<String, Object> getCheckerData(Checker checker, Check check) {
+    Map<String, Object> checkData = new HashMap<>();
+    checkData.put("change", check.key().patchSet().changeId().get());
+    checkData.put("patchSet", check.key().patchSet().get());
+    checkData.put("repository", check.key().repository().get());
+    checkData.put("state", check.state().name());
+    check.message().ifPresent(message -> checkData.put("message", message));
+    check.url().ifPresent(url -> checkData.put("url", url));
+
+    Map<String, Object> checkerData = new HashMap<>();
+    checkerData.put("check", checkData);
+    checkerData.put("uuid", checker.getUuid().get());
+    checkerData.put("name", checker.getName());
+    checkerData.put("repository", checker.getRepository().get());
+    checker.getDescription().ifPresent(description -> checkerData.put("description", description));
+    checker.getUrl().ifPresent(url -> checkerData.put("url", url));
+
+    return checkerData;
   }
 
   @Override
diff --git a/resources/com/google/gerrit/plugins/checks/email/CombinedCheckStateUpdated.soy b/resources/com/google/gerrit/plugins/checks/email/CombinedCheckStateUpdated.soy
index 978146c..3e3c565 100644
--- a/resources/com/google/gerrit/plugins/checks/email/CombinedCheckStateUpdated.soy
+++ b/resources/com/google/gerrit/plugins/checks/email/CombinedCheckStateUpdated.soy
@@ -25,24 +25,23 @@
   {@param change: ?}
   {@param patchSet: ?}
   {@param checker: ?}
-  {@param check: ?}
   {@param oldCombinedCheckState: ?}
   {@param newCombinedCheckState: ?}
   The combined check state has been updated to {$newCombinedCheckState} for patch set{sp}
   {$patchSet.patchSetId} of this change
   {if $email.changeUrl}{sp}( {$email.changeUrl} ){/if}
   .{\n}
-  {if $check and $checker and $check.state == 'FAILED'
+  {if $checker and $checker.check.state == 'FAILED'
     and ($newCombinedCheckState == 'FAILED'
       or ($newCombinedCheckState == 'WARNING' and $oldCombinedCheckState != 'FAILED'))}
     {\n}
     Checker {$checker.name}
     {if $checker.url}{sp}( {$checker.url} ){/if}
-    {sp}updated the check state to {$check.state}
-    {if $check.url}{sp}( {$check.url} ){/if}
-    {if $check.message}
+    {sp}updated the check state to {$checker.check.state}
+    {if $checker.check.url}{sp}( {$checker.check.url} ){/if}
+    {if $checker.check.message}
       :{\n}
-      {$check.message}{\n}
+      {$checker.check.message}{\n}
     {else}
       .{\n}
     {/if}
diff --git a/resources/com/google/gerrit/plugins/checks/email/CombinedCheckStateUpdatedHtml.soy b/resources/com/google/gerrit/plugins/checks/email/CombinedCheckStateUpdatedHtml.soy
index 692b074..441b21e 100644
--- a/resources/com/google/gerrit/plugins/checks/email/CombinedCheckStateUpdatedHtml.soy
+++ b/resources/com/google/gerrit/plugins/checks/email/CombinedCheckStateUpdatedHtml.soy
@@ -24,7 +24,6 @@
   {@param email: ?}
   {@param patchSet: ?}
   {@param checker: ?}
-  {@param check: ?}
   {@param oldCombinedCheckState: ?}
   {@param newCombinedCheckState: ?}
   <p>
@@ -36,7 +35,7 @@
       change
     {/if}.
   </p>
-    {if $check and $checker and $check.state == 'FAILED'
+    {if $checker and $checker.check.state == 'FAILED'
     and ($newCombinedCheckState == 'FAILED'
       or ($newCombinedCheckState == 'WARNING' and $oldCombinedCheckState != 'FAILED'))}
     <p>
@@ -47,13 +46,13 @@
         <strong>{$checker.name}</strong>
       {/if}
       {sp}updated the check state to{sp}
-      {if $check.url}
-        <a href="{$check.url}">{$check.state}</a>
+      {if $checker.check.url}
+        <a href="{$checker.check.url}">{$checker.check.state}</a>
       {else}
-        {$check.state}
+        {$checker.check.state}
       {/if}
-      {if $check.message}
-        :<br>{$check.message}
+      {if $checker.check.message}
+        :<br>{$checker.check.message}
       {else}
         .
       {/if}
