diff --git a/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.C b/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.C
index 1e785b8479c3d9127d97f271e13652ed20544ac9..434f8dea4f81df87188a725492c4931d0e3b8eba 100644
--- a/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.C
+++ b/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.C
@@ -24,7 +24,6 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "surfaceInterpolateFields.H"
-//#include "dictionary.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
@@ -89,20 +88,21 @@ void Foam::surfaceInterpolateFields::read(const dictionary& dict)
 
 void Foam::surfaceInterpolateFields::execute()
 {
-    //Info<< type() << " " << name_ << ":" << nl;
-
-    // Clear out any previously loaded fields 
-    ssf_.clear();
-    svf_.clear();
-    sSpheretf_.clear();
-    sSymmtf_.clear();
-    stf_.clear();
-
-    interpolateFields<scalar>(ssf_);
-    interpolateFields<vector>(svf_);
-    interpolateFields<sphericalTensor>(sSpheretf_);
-    interpolateFields<symmTensor>(sSymmtf_);
-    interpolateFields<tensor>(stf_);
+    if (active_)
+    {
+        // Clear out any previously loaded fields 
+        ssf_.clear();
+        svf_.clear();
+        sSpheretf_.clear();
+        sSymmtf_.clear();
+        stf_.clear();
+
+        interpolateFields<scalar>(ssf_);
+        interpolateFields<vector>(svf_);
+        interpolateFields<sphericalTensor>(sSpheretf_);
+        interpolateFields<symmTensor>(sSymmtf_);
+        interpolateFields<tensor>(stf_);
+    }
 }
 
 
@@ -114,7 +114,32 @@ void Foam::surfaceInterpolateFields::end()
 
 void Foam::surfaceInterpolateFields::write()
 {
-    // Do nothing
+    if (active_)
+    {
+        Info<< "Writing interpolated surface fields to "
+            << obr_.time().timeName() << endl;
+
+        forAll(ssf_, i)
+        {
+            ssf_[i].write();
+        }
+        forAll(svf_, i)
+        {
+            svf_[i].write();
+        }
+        forAll(sSpheretf_, i)
+        {
+            sSpheretf_[i].write();
+        }
+        forAll(sSymmtf_, i)
+        {
+            sSymmtf_[i].write();
+        }
+        forAll(stf_, i)
+        {
+            stf_[i].write();
+        }
+    }
 }
 
 
diff --git a/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.H b/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.H
index d8da89b440af9e9b8b80a0f75df14438d2ec2538..215ff685ee3faf0e474c1257da1dfe26f09f2f45 100644
--- a/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.H
+++ b/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.H
@@ -27,9 +27,24 @@ Class
 Description
     Linear interpolates volFields to surfaceFields
 
-    Note: gets executed every time step. Could move it to write() but then
-    you'd have problems if you have different write frequencies for different
-    function objects.
+    - at write it writes the fields
+    - it executes every time step
+
+    so it can either be used to calculate and write the interpolate or
+    (since the interpolates are registered) use some other functionObject
+    to work on them.
+
+    sampleSomeFields
+    {
+        type            surfaceInterpolateFields;
+        ..
+        enabled         true;
+        outputControl   outputTime;
+        ..
+        // Name of volField and corresponding surfaceField
+        fields          ((p pInterpolate)(U UInterpolate));
+    }
+
 
 SourceFiles
     surfaceInterpolateFields.C