diff --git a/src/finiteVolume/fvMesh/fvMesh.C b/src/finiteVolume/fvMesh/fvMesh.C
index e90919877d74510879cc58993e31c2e3fa3097a8..98346e4c777b4acf0510d202dc092624845245d0 100644
--- a/src/finiteVolume/fvMesh/fvMesh.C
+++ b/src/finiteVolume/fvMesh/fvMesh.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -82,6 +82,40 @@ void Foam::fvMesh::clearGeomNotOldVol()
 }
 
 
+void Foam::fvMesh::updateGeomNotOldVol()
+{
+    bool haveV = (VPtr_ != NULL);
+    bool haveSf = (SfPtr_ != NULL);
+    bool haveMagSf = (magSfPtr_ != NULL);
+    bool haveCP = (CPtr_ != NULL);
+    bool haveCf = (CfPtr_ != NULL);
+
+    clearGeomNotOldVol();
+
+    // Now recreate the fields
+    if (haveV)
+    {
+        (void)V();
+    }
+    if (haveSf)
+    {
+        (void)Sf();
+    }
+    if (haveMagSf)
+    {
+        (void)magSf();
+    }
+    if (haveCP)
+    {
+        (void)C();
+    }
+    if (haveCf)
+    {
+        (void)Cf();
+    }
+}
+
+
 void Foam::fvMesh::clearGeom()
 {
     clearGeomNotOldVol();
@@ -562,10 +596,6 @@ Foam::tmp<Foam::scalarField> Foam::fvMesh::movePoints(const pointField& p)
     }
 
 
-    // delete out of date geometrical information
-    clearGeomNotOldVol();
-
-
     if (!phiPtr_)
     {
         // Create mesh motion flux
@@ -612,6 +642,16 @@ Foam::tmp<Foam::scalarField> Foam::fvMesh::movePoints(const pointField& p)
         phi.boundaryField()[patchI] *= rDeltaT;
     }
 
+    // Update or delete the local geometric properties as early as possible so
+    // they can be used if necessary. These get recreated here instead of
+    // demand driven since they might do parallel transfers which can conflict
+    // with when they're actually being used.
+    // Note that between above "polyMesh::movePoints(p)" and here nothing
+    // should use the local geometric properties.
+    updateGeomNotOldVol();
+
+
+    // Update other local data
     boundary_.movePoints();
     surfaceInterpolation::movePoints();
 
diff --git a/src/finiteVolume/fvMesh/fvMesh.H b/src/finiteVolume/fvMesh/fvMesh.H
index c2d414dceaac2c0efaa276dfda595d51ce0da8f5..907cc418fde3b90c644b5ae3064a68e5cffb68ac 100644
--- a/src/finiteVolume/fvMesh/fvMesh.H
+++ b/src/finiteVolume/fvMesh/fvMesh.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -133,6 +133,10 @@ class fvMesh
             //- Clear geometry but not the old-time cell volumes
             void clearGeomNotOldVol();
 
+            //- Clear geometry like clearGeomNotOldVol but recreate any
+            //  geometric demand-driven data that was set
+            void updateGeomNotOldVol();
+
             //- Clear geometry
             void clearGeom();