diff --git a/src/OpenFOAM/db/functionObjects/timeControl/timeControlFunctionObject.C b/src/OpenFOAM/db/functionObjects/timeControl/timeControlFunctionObject.C
index 1f179698d100fa4bab81c26e9705793aee40614b..8251159d02f7ad1bfaf1e04fc8f25ae350b76216 100644
--- a/src/OpenFOAM/db/functionObjects/timeControl/timeControlFunctionObject.C
+++ b/src/OpenFOAM/db/functionObjects/timeControl/timeControlFunctionObject.C
@@ -77,7 +77,8 @@ Foam::functionObjects::timeControl::timeControl
     ),
     executeControl_(t, dict, "execute"),
     writeControl_(t, dict, "write"),
-    foPtr_(functionObject::New(name, t, dict_))
+    foPtr_(functionObject::New(name, t, dict_)),
+    executeTimeIndex_(-1)
 {
     readControls();
 }
@@ -89,6 +90,7 @@ bool Foam::functionObjects::timeControl::execute()
 {
     if (active() && (postProcess || executeControl_.execute()))
     {
+        executeTimeIndex_ = time_.timeIndex();
         foPtr_->execute();
     }
 
@@ -100,6 +102,13 @@ bool Foam::functionObjects::timeControl::write()
 {
     if (active() && (postProcess || writeControl_.execute()))
     {
+        // Ensure written results reflect the current state
+        if (executeTimeIndex_ != time_.timeIndex())
+        {
+            executeTimeIndex_ = time_.timeIndex();
+            foPtr_->execute();
+        }
+
         foPtr_->write();
     }
 
diff --git a/src/OpenFOAM/db/functionObjects/timeControl/timeControlFunctionObject.H b/src/OpenFOAM/db/functionObjects/timeControl/timeControlFunctionObject.H
index e256144f6b21a8e3f99e5fdbde4322c924e48cba..d019a7e8b64bb36808d841c6449bf5a2986c9bd9 100644
--- a/src/OpenFOAM/db/functionObjects/timeControl/timeControlFunctionObject.H
+++ b/src/OpenFOAM/db/functionObjects/timeControl/timeControlFunctionObject.H
@@ -99,6 +99,9 @@ class timeControl
         //- The functionObject to execute
         autoPtr<functionObject> foPtr_;
 
+        //- Time index of the last execute call
+        label executeTimeIndex_;
+
 
     // Private Member Functions
 
diff --git a/src/functionObjects/field/ddt2/ddt2.C b/src/functionObjects/field/ddt2/ddt2.C
index 7aeecd01e90d76ac011206c2bf7c38c42c36716d..a3876716585aa57bcea8897ca5cf0e57e0ee2029 100644
--- a/src/functionObjects/field/ddt2/ddt2.C
+++ b/src/functionObjects/field/ddt2/ddt2.C
@@ -112,7 +112,6 @@ Foam::functionObjects::ddt2::ddt2
 )
 :
     fvMeshFunctionObject(name, runTime, dict),
-    prevTimeIndex_(-1),
     selectFields_(),
     resultName_(word::null),
     blacklist_(),
@@ -218,20 +217,12 @@ 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 bba1492e3e4fb870671465597e812a2df74ff035..21607ce2a34c98f72c87742e8f94b84dd1340119 100644
--- a/src/functionObjects/field/ddt2/ddt2.H
+++ b/src/functionObjects/field/ddt2/ddt2.H
@@ -101,9 +101,6 @@ 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 53d41c23f89e0c08f18be6a57f44d2470788a8c8..ff07607652bf19fa5f3dab52c6dc2d5841998d8b 100644
--- a/src/functionObjects/field/zeroGradient/zeroGradient.C
+++ b/src/functionObjects/field/zeroGradient/zeroGradient.C
@@ -100,7 +100,6 @@ Foam::functionObjects::zeroGradient::zeroGradient
 )
 :
     fvMeshFunctionObject(name, runTime, dict),
-    prevTimeIndex_(-1),
     selectFields_(),
     resultName_(string::null),
     results_()
@@ -175,20 +174,12 @@ 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 e4eb1c75b3dcaf2cf3381d9c8bb2f2678007e6ec..84243608243737ecb27b8735d2be2e19e84f1d43 100644
--- a/src/functionObjects/field/zeroGradient/zeroGradient.H
+++ b/src/functionObjects/field/zeroGradient/zeroGradient.H
@@ -95,9 +95,6 @@ class zeroGradient
 {
     // Private data
 
-        //- Time at last execute, ensures write uses up-to-date values
-        label prevTimeIndex_;
-
         //- Name of fields to process
         wordReList selectFields_;