diff --git a/src/sampling/surface/isoSurface/isoSurfaceCell.C b/src/sampling/surface/isoSurface/isoSurfaceCell.C
index 05d2eb00f2cc95f56cc545927d1087120cd9d9e2..47b539f2509c4e0a9a12d83f017f90cdd4a2567f 100644
--- a/src/sampling/surface/isoSurface/isoSurfaceCell.C
+++ b/src/sampling/surface/isoSurface/isoSurfaceCell.C
@@ -284,16 +284,18 @@ Foam::pointIndexHit Foam::isoSurfaceCell::collapseSurface
 
         if (shared[0] != -1)
         {
-            vector n0 = tri0.normal(localPoints);
-            n0 /= mag(n0);
-            vector n1 = tri1.normal(localPoints);
-            n1 /= mag(n1);
+            const vector n0 = tri0.normal(localPoints);
+            const vector n1 = tri1.normal(localPoints);
 
-            if ((n0 & n1) < 0)
-            {
-                // Too big an angle. Do not simplify.
-            }
-            else
+            // Merge any zero-sized triangles,
+            // or if they point in the same direction.
+
+            if
+            (
+                mag(n0) <= ROOTVSMALL
+             || mag(n1) <= ROOTVSMALL
+             || (n0 & n1) >= 0
+            )
             {
                 info.setPoint
                 (