diff --git a/reviewboard/diffviewer/opcode_generator.py b/reviewboard/diffviewer/opcode_generator.py
index bf3b6c91745010bb2a6aeeee5a3448f1ae3a7282..d7a0f5c6d741ea1d89caba6951807760962037d6 100644
--- a/reviewboard/diffviewer/opcode_generator.py
+++ b/reviewboard/diffviewer/opcode_generator.py
@@ -7,7 +7,8 @@ from djblets.util.compat import six
 from djblets.util.compat.six.moves import range
 
 from reviewboard.diffviewer.processors import (filter_interdiff_opcodes,
-                                               merge_adjacent_chunks)
+                                               merge_adjacent_chunks,
+                                               post_process_interdiff_chunks)
 
 
 class DiffOpcodeGenerator(object):
@@ -42,6 +43,7 @@ class DiffOpcodeGenerator(object):
         opcodes = self.differ.get_opcodes()
         opcodes = self._apply_processors(opcodes)
         opcodes = self._generate_opcode_meta(opcodes)
+        opcodes = self._apply_meta_processors(opcodes)
 
         self._group_opcodes(opcodes)
         self._compute_moves()
@@ -100,12 +102,23 @@ class DiffOpcodeGenerator(object):
                     else:
                         new_meta = meta
 
-                    yield 'equal', ii1, ii2, ij1, ij2, new_meta
+                    yield tag, ii1, ii2, ij1, ij2, new_meta
 
                 continue
 
             yield tag, i1, i2, j1, j2, meta
 
+    def _apply_meta_processors(self, opcodes):
+        if self.interfilediff:
+            # When filtering out opcodes, we may have converted chunks into
+            # "filtered-equal" chunks. This allowed us to skip any additional
+            # processing, particularly the indentation highlighting. It's
+            # now time to turn those back into "equal" chunks.
+            opcodes = post_process_interdiff_chunks(opcodes)
+
+        for opcode in opcodes:
+            yield opcode
+
     def _group_opcodes(self, opcodes):
         for tag, i1, i2, j1, j2, meta in opcodes:
             group = (tag, i1, i2, j1, j2, meta)
diff --git a/reviewboard/diffviewer/processors.py b/reviewboard/diffviewer/processors.py
index a0f9133754626e941b334035fe53e70a44089351..8a6bc2885c72b8cc45b727cb07452a7cefe1ba1a 100644
--- a/reviewboard/diffviewer/processors.py
+++ b/reviewboard/diffviewer/processors.py
@@ -102,11 +102,14 @@ def filter_interdiff_opcodes(opcodes, filediff_data, interfilediff_data):
         )
 
         if not valid_chunk:
-            # Turn this into an "equal" chunk. The left-hand and right-hand
-            # side of the diffs will look different, which may be noticeable,
-            # but it will still help the user pay attention to what's actually
-            # changed that they care about.
-            tag = 'equal'
+            # Turn this into an "filtered-equal" chunk. The left-hand and
+            # right-hand side of the diffs will look different, which may be
+            # noticeable, but it will still help the user pay attention to
+            # what's actually changed that they care about.
+            #
+            # These will get turned back into "equal" chunks in the
+            # post-processing step.
+            tag = 'filtered-equal'
 
         yield tag, i1, i2, j1, j2
 
@@ -130,3 +133,16 @@ def merge_adjacent_chunks(opcodes):
 
     if cur_chunk:
         yield cur_chunk
+
+
+def post_process_interdiff_chunks(opcodes):
+    """Post-processes interdiff chunks.
+
+    Any filtered-out "filtered-equal" chunks will get turned back into "equal"
+    chunks.
+    """
+    for tag, i1, i2, j1, j2, meta in opcodes:
+        if tag == 'filtered-equal':
+            tag = 'equal'
+
+        yield tag, i1, i2, j1, j2, meta
diff --git a/reviewboard/diffviewer/tests.py b/reviewboard/diffviewer/tests.py
index 1771784f6322e3b0b44e4363eb58f6529ef2a3a9..7013f64e75932e0e4a00339c52b4bab8765b3900 100644
--- a/reviewboard/diffviewer/tests.py
+++ b/reviewboard/diffviewer/tests.py
@@ -920,13 +920,13 @@ class ProcessorsTests(TestCase):
                                                     new_diff))
 
         self.assertEqual(new_opcodes, [
-            ('equal', 0, 0, 0, 1),
-            ('equal', 0, 5, 1, 5),
+            ('filtered-equal', 0, 0, 0, 1),
+            ('filtered-equal', 0, 5, 1, 5),
             ('delete', 5, 10, 5, 5),
-            ('equal', 10, 25, 5, 20),
+            ('filtered-equal', 10, 25, 5, 20),
             ('replace', 25, 26, 20, 26),
-            ('equal', 26, 40, 26, 40),
-            ('equal', 40, 40, 40, 45),
+            ('filtered-equal', 26, 40, 26, 40),
+            ('filtered-equal', 40, 40, 40, 45),
         ])
 
     def test_filter_interdiff_opcodes_with_inserts_right(self):
@@ -954,7 +954,7 @@ class ProcessorsTests(TestCase):
                                                     new_diff))
 
         self.assertEqual(new_opcodes, [
-            ('equal', 0, 141, 0, 141),
+            ('filtered-equal', 0, 141, 0, 141),
             ('replace', 141, 142, 141, 142),
             ('insert', 142, 142, 142, 144),
             ('equal', 142, 165, 144, 167),
@@ -999,10 +999,10 @@ class ProcessorsTests(TestCase):
                                                     new_diff))
 
         self.assertEqual(new_opcodes, [
-            ('equal', 0, 631, 0, 631),
+            ('filtered-equal', 0, 631, 0, 631),
             ('replace', 631, 632, 631, 632),
             ('insert', 632, 632, 632, 633),
-            ('equal', 632, 882, 633, 883),
+            ('filtered-equal', 632, 882, 633, 883),
         ])
 
     def test_merge_adjacent_chunks(self):
