diff --git a/src/regionModels/regionModel/regionModel1D/regionModel1D.C b/src/regionModels/regionModel/regionModel1D/regionModel1D.C
index e310d2d8a46ecbf6c46ae96a6b3f0dae6c88b112..efcd412133dd9e95ebfc8ea72cf0939421f4fae6 100644
--- a/src/regionModels/regionModel/regionModel1D/regionModel1D.C
+++ b/src/regionModels/regionModel/regionModel1D/regionModel1D.C
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
-    Copyright (C) 2016-2019 OpenCFD Ltd.
+    Copyright (C) 2016-2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -249,27 +249,41 @@ Foam::tmp<Foam::labelField> Foam::regionModels::regionModel1D::moveMesh
             vectorField newDelta(cells.size() + 1, Zero);
 
             label j = 0;
-            forAllReverse(cells, i)
+            forAll(cells, i)
             {
                 const label celli = cells[i];
                 newDelta[j+1] = (deltaV[celli]/mag(sf))*n + newDelta[j];
                 j++;
             }
 
-            forAll(faces, i)
+            // Move the back face first
+            const face of = regionMesh().faces()[oFace];
+            {
+                scalar omagV = mag(newDelta[newDelta.size()-1]);
+
+                if (!frozen[cells.size()-1] && (omagV > ROOTVSMALL))
+                {
+                    forAll(of, pti)
+                    {
+                        const label pointi = of[pti];
+                        newPoints[pointi] =
+                            oldPoints[pointi] - newDelta[newDelta.size()-1];
+                    }
+                }
+            }
+            // Do internal faces
+            for (label i=0; i < faces.size(); i++)
             {
                 const label facei = faces[i];
                 const face f = regionMesh().faces()[facei];
 
-                if (!frozen[i])
+                scalar magV = mag(newDelta[i]);
+                if (!frozen[i] && magV > 0)
                 {
                     forAll(f, pti)
                     {
                         const label pointi = f[pti];
-
-                        newPoints[pointi] =
-                            oldPoints[pointi]
-                          + newDelta[newDelta.size() - 1 - i];
+                        newPoints[pointi] = oldPoints[pointi] - newDelta[i];
                     }
                 }
             }