diff --git a/src/lagrangian/DSMC/parcels/Templates/DSMCParcel/DSMCParcel.C b/src/lagrangian/DSMC/parcels/Templates/DSMCParcel/DSMCParcel.C
index c5c4e5623..177149cd4 100644
--- a/src/lagrangian/DSMC/parcels/Templates/DSMCParcel/DSMCParcel.C
+++ b/src/lagrangian/DSMC/parcels/Templates/DSMCParcel/DSMCParcel.C
@@ -53,8 +53,11 @@ bool Foam::DSMCParcel<ParcelType>::move
 
     while (td.keepParticle && !td.switchProcessor && p.stepFraction() < 1)
     {
-        // Apply correction to position for reduced-D cases
-        p.constrainToMeshCentre();
+        // Calculate the correction to the position for reduced-D cases
+        const vector pos0 = p.position();
+        vector pos1 = pos0;
+        meshTools::constrainToMeshCentre(p.mesh(), pos1);
+        const vector dPos = pos1 - pos0;
 
         Utracking = U_;
 
@@ -63,7 +66,7 @@ bool Foam::DSMCParcel<ParcelType>::move
         meshTools::constrainDirection(mesh, mesh.solutionD(), Utracking);
 
         const scalar f = 1 - p.stepFraction();
-        p.trackToAndHitFace(f*trackTime*Utracking, f, cloud, td);
+        p.trackToAndHitFace(f*trackTime*Utracking + dPos, f, cloud, td);
     }
 
     return td.keepParticle;
