diff --git a/src/functionObjects/field/ddt2/ddt2.C b/src/functionObjects/field/ddt2/ddt2.C
index a3876716585aa57bcea8897ca5cf0e57e0ee2029..7aeecd01e90d76ac011206c2bf7c38c42c36716d 100644
--- a/src/functionObjects/field/ddt2/ddt2.C
+++ b/src/functionObjects/field/ddt2/ddt2.C
@@ -112,6 +112,7 @@ Foam::functionObjects::ddt2::ddt2
 )
 :
     fvMeshFunctionObject(name, runTime, dict),
+    prevTimeIndex_(-1),
     selectFields_(),
     resultName_(word::null),
     blacklist_(),
@@ -217,12 +218,20 @@ bool Foam::functionObjects::ddt2::execute()
             << "Unprocessed field " << ignored << endl;
     }
 
+    // Update time index
+    prevTimeIndex_ = obr_.time().timeIndex();
+
     return true;
 }
 
 
 bool Foam::functionObjects::ddt2::write()
 {
+    if (prevTimeIndex_ < obr_.time().timeIndex())
+    {
+        // Ensure written results reflect the current state
+        execute();
+    }
     if (results_.size())
     {
         Log << type() << ' ' << name() << " write:" << endl;
diff --git a/src/functionObjects/field/ddt2/ddt2.H b/src/functionObjects/field/ddt2/ddt2.H
index 21607ce2a34c98f72c87742e8f94b84dd1340119..bba1492e3e4fb870671465597e812a2df74ff035 100644
--- a/src/functionObjects/field/ddt2/ddt2.H
+++ b/src/functionObjects/field/ddt2/ddt2.H
@@ -101,6 +101,9 @@ class ddt2
 {
     // Private data
 
+        //- Time at last execute, ensures write uses up-to-date values
+        label prevTimeIndex_;
+
         //- Name of fields to process
         wordReList selectFields_;
 
diff --git a/src/functionObjects/field/zeroGradient/zeroGradient.C b/src/functionObjects/field/zeroGradient/zeroGradient.C
index ff07607652bf19fa5f3dab52c6dc2d5841998d8b..53d41c23f89e0c08f18be6a57f44d2470788a8c8 100644
--- a/src/functionObjects/field/zeroGradient/zeroGradient.C
+++ b/src/functionObjects/field/zeroGradient/zeroGradient.C
@@ -100,6 +100,7 @@ Foam::functionObjects::zeroGradient::zeroGradient
 )
 :
     fvMeshFunctionObject(name, runTime, dict),
+    prevTimeIndex_(-1),
     selectFields_(),
     resultName_(string::null),
     results_()
@@ -174,12 +175,20 @@ bool Foam::functionObjects::zeroGradient::execute()
             << "Unprocessed field " << ignored << endl;
     }
 
+    // Update time index
+    prevTimeIndex_ = obr_.time().timeIndex();
+
     return true;
 }
 
 
 bool Foam::functionObjects::zeroGradient::write()
 {
+    if (prevTimeIndex_ < obr_.time().timeIndex())
+    {
+        // Ensure written results reflect the current state
+        execute();
+    }
     if (results_.size())
     {
         Log << type() << ' ' << name() << " write:" << endl;
diff --git a/src/functionObjects/field/zeroGradient/zeroGradient.H b/src/functionObjects/field/zeroGradient/zeroGradient.H
index 84243608243737ecb27b8735d2be2e19e84f1d43..e4eb1c75b3dcaf2cf3381d9c8bb2f2678007e6ec 100644
--- a/src/functionObjects/field/zeroGradient/zeroGradient.H
+++ b/src/functionObjects/field/zeroGradient/zeroGradient.H
@@ -95,6 +95,9 @@ class zeroGradient
 {
     // Private data
 
+        //- Time at last execute, ensures write uses up-to-date values
+        label prevTimeIndex_;
+
         //- Name of fields to process
         wordReList selectFields_;