diff --git a/src/Plugin/search_api/processor/Highlight.php b/src/Plugin/search_api/processor/Highlight.php
index 195b7d57..f8f9896a 100644
--- a/src/Plugin/search_api/processor/Highlight.php
+++ b/src/Plugin/search_api/processor/Highlight.php
@@ -257,9 +257,6 @@ class Highlight extends ProcessorPluginBase implements PluginFormInterface {
       $highlighted_fields = $this->highlightFields($result_items, $keys);
       foreach ($highlighted_fields as $item_id => $item_fields) {
         $item = $result_items[$item_id];
-        // Maybe the backend or some other processor has already set highlighted
-        // field values.
-        $item_fields += $item->getExtraData('highlighted_fields', []);
         $item->setExtraData('highlighted_fields', $item_fields);
       }
     }
@@ -303,19 +300,29 @@ class Highlight extends ProcessorPluginBase implements PluginFormInterface {
    *   highlighted versions of the values for that field.
    */
   protected function highlightFields(array $results, array $keys) {
-    $item_fields = $this->getFulltextFields($results, NULL, $this->configuration['highlight'] == 'always');
     $highlighted_fields = [];
+    foreach ($results as $item) {
+      // Maybe the backend or some other processor has already set highlighted
+      // field values.
+      if ($backend_highlighted_fields = $item->getExtraData('highlighted_fields', [])) {
+        $highlighted_fields[$item->getId()] = $backend_highlighted_fields;
+      }
+    }
+
+    $item_fields = $this->getFulltextFields($results, NULL, $this->configuration['highlight'] == 'always');
     foreach ($item_fields as $item_id => $fields) {
       foreach ($fields as $field_id => $values) {
-        $change = FALSE;
-        foreach ($values as $i => $value) {
-          $values[$i] = $this->highlightField($value, $keys);
-          if ($values[$i] !== $value) {
-            $change = TRUE;
+        if (!isset($highlighted_fields[$item_id]) || empty($highlighted_fields[$item_id][$field_id])) {
+          $change = FALSE;
+          foreach ($values as $i => $value) {
+            $values[$i] = $this->highlightField($value, $keys);
+            if ($values[$i] !== $value) {
+              $change = TRUE;
+            }
+          }
+          if ($change) {
+            $highlighted_fields[$item_id][$field_id] = $values;
           }
-        }
-        if ($change) {
-          $highlighted_fields[$item_id][$field_id] = $values;
         }
       }
     }
