From 0534a225fd9d8e3aa8e1c0fa7bdb30471ad3c0a4 Mon Sep 17 00:00:00 2001
From: Henry Weller <http://cfd.direct>
Date: Mon, 2 May 2016 16:28:24 +0100
Subject: [PATCH] functionObjects: Moved into the functionObjects namespace and
 rationalized and simplified failable construction

Rather than requiring each functionObject to handle failed construction
internally (using the active_ flag) the static member function "viable"
is provided which returns true if construction of the functionObject is
likely to be successful.  Failed construction is then handled by the
wrapper-class which constructs the functionObject,
e.g. "OutputFilterFunctionObject".
---
 .../dsmcFieldsCalc/dsmcFieldsCalc.C           |   2 +-
 .../dynamicCode/functionObjectTemplate.C      |  14 +-
 .../dynamicCode/functionObjectTemplate.H      |  12 +-
 .../functionObject/FUNCTIONOBJECT.C           |  12 +-
 .../IOOutputFilter/IOOutputFilter.C           |  51 +-
 .../IOOutputFilter/IOOutputFilter.H           |  27 +-
 .../OutputFilterFunctionObject.C              |  64 +-
 .../OutputFilterFunctionObject.H              |   2 +-
 .../derived/rotorDiskSource/rotorDiskSource.C |   1 -
 .../IO/partialWrite/partialWrite.C            |  16 +-
 .../IO/partialWrite/partialWrite.H            |   8 +-
 .../removeRegisteredObject.C                  |   8 +-
 .../removeRegisteredObject.H                  |   8 +-
 .../IO/writeDictionary/writeDictionary.C      |   8 +-
 .../IO/writeDictionary/writeDictionary.H      |   8 +-
 .../writeRegisteredObject.C                   |   8 +-
 .../writeRegisteredObject.H                   |   8 +-
 .../cloud/cloudInfo/cloudInfo.C               |  75 +-
 .../cloud/cloudInfo/cloudInfo.H               |  11 +-
 .../fieldAverage/IOFieldAverage.H             |   4 +-
 .../fieldAverage/fieldAverage/fieldAverage.C  | 139 ++-
 .../fieldAverage/fieldAverage/fieldAverage.H  |  23 +-
 .../fieldAverage/fieldAverageTemplates.C      |  41 +-
 .../fieldAverageFunctionObject.H              |   4 +-
 .../fieldAverageItem/fieldAverageItem.C       |  57 +-
 .../fieldAverageItem/fieldAverageItem.H       |  24 +-
 .../fieldAverageItem/fieldAverageItemIO.C     |  30 +-
 .../fieldCoordinateSystemTransform.C          | 117 ++-
 .../fieldCoordinateSystemTransform.H          |  19 +-
 ...dCoordinateSystemTransformFunctionObject.H |   8 +-
 .../fieldCoordinateSystemTransformTemplates.C |   6 +-
 .../field/fieldMinMax/fieldMinMax.C           | 118 ++-
 .../field/fieldMinMax/fieldMinMax.H           |  19 +-
 .../fieldMinMax/fieldMinMaxFunctionObject.H   |   4 +-
 .../field/fieldMinMax/fieldMinMaxTemplates.C  |   4 +-
 .../field/fieldValues/cellSource/cellSource.C | 200 +++--
 .../field/fieldValues/cellSource/cellSource.H |  33 +-
 .../cellSource/cellSourceFunctionObject.H     |   8 +-
 .../fieldValues/cellSource/cellSourceI.H      |   9 +-
 .../cellSource/cellSourceTemplates.C          |  24 +-
 .../field/fieldValues/faceSource/faceSource.C | 264 +++---
 .../field/fieldValues/faceSource/faceSource.H |  33 +-
 .../faceSource/faceSourceFunctionObject.H     |   8 +-
 .../fieldValues/faceSource/faceSourceI.H      |  13 +-
 .../faceSource/faceSourceTemplates.C          |  30 +-
 .../field/fieldValues/fieldValue/fieldValue.C |  54 +-
 .../field/fieldValues/fieldValue/fieldValue.H |   6 -
 .../fieldValues/fieldValue/fieldValueI.H      |   8 +-
 .../fieldValueDelta/fieldValueDelta.C         | 150 ++--
 .../fieldValueDelta/fieldValueDelta.H         |  34 +-
 .../fieldValueDeltaFunctionObject.H           |   8 +-
 .../fieldValueDeltaTemplates.C                |   7 +-
 .../field/histogram/histogram.C               | 174 ++--
 .../field/histogram/histogram.H               |   9 +-
 .../field/nearWallFields/nearWallFields.C     | 218 +++--
 .../field/nearWallFields/nearWallFields.H     |  19 +-
 .../nearWallFieldsFunctionObject.H            |   4 +-
 .../nearWallFields/nearWallFieldsTemplates.C  |   6 +-
 .../field/processorField/processorField.C     | 116 ++-
 .../field/processorField/processorField.H     |  19 +-
 .../processorFieldFunctionObject.H            |   4 +-
 .../field/readFields/readFields.C             | 113 ++-
 .../field/readFields/readFields.H             |  19 +-
 .../readFields/readFieldsFunctionObject.H     |   4 +-
 .../field/readFields/readFieldsTemplates.C    |   2 +-
 .../regionSizeDistribution.C                  | 810 +++++++++---------
 .../regionSizeDistribution.H                  |  19 +-
 .../regionSizeDistributionFunctionObject.H    |   4 +-
 .../regionSizeDistributionTemplates.C         |   5 +-
 .../field/streamLine/streamLine.C             | 599 ++++++-------
 .../field/streamLine/streamLine.H             |  23 +-
 .../streamLine/streamLineFunctionObject.H     |   4 +-
 .../surfaceInterpolateFields.C                | 147 ++--
 .../surfaceInterpolateFields.H                |  17 +-
 .../surfaceInterpolateFieldsFunctionObject.H  |   8 +-
 .../surfaceInterpolateFieldsTemplates.C       |   2 +-
 .../wallBoundedStreamLine.C                   | 630 +++++++-------
 .../wallBoundedStreamLine.H                   |  23 +-
 .../wallBoundedStreamLineFunctionObject.H     |   4 +-
 .../forces/forceCoeffs/forceCoeffs.C          |  45 +-
 .../forces/forceCoeffs/forceCoeffs.H          |   8 +-
 .../functionObjects/forces/forces/forces.C    | 260 +++---
 .../functionObjects/forces/forces/forces.H    |  11 +-
 .../fvTools/calcFvcDiv/calcFvcDiv.C           | 100 +--
 .../fvTools/calcFvcDiv/calcFvcDiv.H           |  21 +-
 .../calcFvcDiv/calcFvcDivFunctionObject.H     |   5 +-
 .../fvTools/calcFvcDiv/calcFvcDivTemplates.C  |   4 +-
 .../fvTools/calcFvcGrad/calcFvcGrad.C         |  98 +--
 .../fvTools/calcFvcGrad/calcFvcGrad.H         |  21 +-
 .../calcFvcGrad/calcFvcGradFunctionObject.H   |   5 +-
 .../calcFvcGrad/calcFvcGradTemplates.C        |   8 +-
 .../functionObjects/fvTools/calcMag/calcMag.C | 106 ++-
 .../functionObjects/fvTools/calcMag/calcMag.H |  21 +-
 .../fvTools/calcMag/calcMagFunctionObject.H   |   5 +-
 .../fvTools/calcMag/calcMagTemplates.C        |   6 +-
 .../abortCalculation/abortCalculation.C       |  78 +-
 .../abortCalculation/abortCalculation.H       |  18 +-
 .../abortCalculationFunctionObject.H          |   4 +-
 .../functionObjects/systemCall/systemCall.C   |  37 +-
 .../functionObjects/systemCall/systemCall.H   |  16 +-
 .../systemCall/systemCallFunctionObject.H     |   4 +-
 .../utilities/CourantNo/CourantNo.C           | 142 ++-
 .../utilities/CourantNo/CourantNo.H           |  19 +-
 .../CourantNo/CourantNoFunctionObject.H       |   5 +-
 .../utilities/CourantNo/IOCourantNo.H         |   4 +-
 .../utilities/Lambda2/IOLambda2.H             |   4 +-
 .../utilities/Lambda2/Lambda2.C               | 135 ++-
 .../utilities/Lambda2/Lambda2.H               |  21 +-
 .../utilities/Lambda2/Lambda2FunctionObject.H |   5 +-
 .../utilities/Peclet/IOPeclet.H               |   4 +-
 .../functionObjects/utilities/Peclet/Peclet.C | 241 +++---
 .../functionObjects/utilities/Peclet/Peclet.H |  21 +-
 .../utilities/Peclet/PecletFunctionObject.H   |   5 +-
 .../functionObjects/utilities/Q/Q.C           | 129 ++-
 .../functionObjects/utilities/Q/Q.H           |  21 +-
 .../utilities/Q/QFunctionObject.H             |   5 +-
 .../blendingFactor/IOblendingFactor.H         |   4 +-
 .../utilities/blendingFactor/blendingFactor.C |  82 +-
 .../utilities/blendingFactor/blendingFactor.H |  22 +-
 .../blendingFactorFunctionObject.H            |   4 +-
 .../blendingFactor/blendingFactorTemplates.C  |   4 +-
 .../utilities/dsmcFields/dsmcFields.C         | 338 ++++----
 .../utilities/dsmcFields/dsmcFields.H         |  22 +-
 .../dsmcFields/dsmcFieldsFunctionObject.H     |   4 +-
 .../utilities/pressureTools/IOpressureTools.H |   4 +-
 .../utilities/pressureTools/pressureTools.C   | 191 ++---
 .../utilities/pressureTools/pressureTools.H   |  21 +-
 .../pressureToolsFunctionObject.H             |   4 +-
 .../utilities/residuals/IOresiduals.H         |   4 +-
 .../utilities/residuals/residuals.C           |  76 +-
 .../utilities/residuals/residuals.H           |  19 +-
 .../residuals/residualsFunctionObject.H       |   4 +-
 .../utilities/residuals/residualsTemplates.C  |   4 +-
 .../scalarTransport/IOscalarTransport.H       |   5 +-
 .../scalarTransport/scalarTransport.C         |  34 +-
 .../scalarTransport/scalarTransport.H         |  16 +-
 .../scalarTransportFunctionObject.H           |   4 +-
 .../IOtimeActivatedFileUpdate.H               |   5 +-
 .../timeActivatedFileUpdate.C                 |  92 +-
 .../timeActivatedFileUpdate.H                 |  19 +-
 .../timeActivatedFileUpdateFunctionObject.H   |   4 +-
 .../turbulenceFields/IOturbulenceFields.H     |   5 +-
 .../turbulenceFields/turbulenceFields.C       | 176 ++--
 .../turbulenceFields/turbulenceFields.H       |  19 +-
 .../turbulenceFieldsFunctionObject.H          |   4 +-
 .../turbulenceFieldsTemplates.C               |   2 +-
 .../utilities/vorticity/IOvorticity.H         |   4 +-
 .../utilities/vorticity/vorticity.C           | 122 ++-
 .../utilities/vorticity/vorticity.H           |  21 +-
 .../vorticity/vorticityFunctionObject.H       |   5 +-
 .../wallShearStress/IOwallShearStress.H       |   4 +-
 .../wallShearStress/wallShearStress.C         | 243 +++---
 .../wallShearStress/wallShearStress.H         |  19 +-
 .../wallShearStressFunctionObject.H           |   4 +-
 .../functionObjects/utilities/yPlus/IOyPlus.H |   4 +-
 .../functionObjects/utilities/yPlus/yPlus.C   | 165 ++--
 .../functionObjects/utilities/yPlus/yPlus.H   |  19 +-
 .../utilities/yPlus/yPlusFunctionObject.H     |   5 +-
 .../utilities/yPlus/yPlusTemplates.C          |   2 +-
 .../pyrolysisModels/noPyrolysis/noPyrolysis.C |  10 +-
 .../meshToMesh0/meshToMesh0Templates.C        |   1 -
 src/sampling/probes/patchProbes.C             |  12 +
 src/sampling/probes/patchProbes.H             |  10 +
 src/sampling/probes/probes.C                  |  24 +-
 src/sampling/probes/probes.H                  |  10 +
 .../sampledSet/sampledSets/sampledSets.C      |  24 +-
 .../sampledSet/sampledSets/sampledSets.H      |  10 +
 .../sampledSurfaces/sampledSurfaces.C         |  27 +-
 .../sampledSurfaces/sampledSurfaces.H         |  10 +
 ...veViewFactorFixedValueFvPatchScalarField.C |   2 -
 .../radiationModels/noRadiation/noRadiation.C |   4 +-
 .../radiationModels/opaqueSolid/opaqueSolid.C |   4 +-
 .../submodels/sootModel/noSoot/noSoot.C       |   6 +-
 .../moleFractions/moleFractions.C             |  14 +
 .../moleFractions/moleFractions.H             |  10 +
 175 files changed, 4397 insertions(+), 4083 deletions(-)

diff --git a/applications/utilities/postProcessing/miscellaneous/dsmcFieldsCalc/dsmcFieldsCalc.C b/applications/utilities/postProcessing/miscellaneous/dsmcFieldsCalc/dsmcFieldsCalc.C
index 6059ebf5aa5..ecd4b4f1ede 100644
--- a/applications/utilities/postProcessing/miscellaneous/dsmcFieldsCalc/dsmcFieldsCalc.C
+++ b/applications/utilities/postProcessing/miscellaneous/dsmcFieldsCalc/dsmcFieldsCalc.C
@@ -138,7 +138,7 @@ void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh)
         return;
     }
 
-    dsmcFields dF
+    functionObjects::dsmcFields dF
     (
         "dsmcFieldsUtility",
         mesh,
diff --git a/etc/codeTemplates/dynamicCode/functionObjectTemplate.C b/etc/codeTemplates/dynamicCode/functionObjectTemplate.C
index 91b31dda2b3..cb256b9b93e 100644
--- a/etc/codeTemplates/dynamicCode/functionObjectTemplate.C
+++ b/etc/codeTemplates/dynamicCode/functionObjectTemplate.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -76,6 +76,18 @@ ${typeName}FunctionObject::${typeName}FunctionObject
 }
 
 
+bool ${typeName}FunctionObject::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool
+)
+{
+    return true;
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
 ${typeName}FunctionObject::~${typeName}FunctionObject()
diff --git a/etc/codeTemplates/dynamicCode/functionObjectTemplate.H b/etc/codeTemplates/dynamicCode/functionObjectTemplate.H
index a139f25a8b4..b1f7e7af8e7 100644
--- a/etc/codeTemplates/dynamicCode/functionObjectTemplate.H
+++ b/etc/codeTemplates/dynamicCode/functionObjectTemplate.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -102,6 +102,16 @@ public:
             const bool loadFromFilesUnused = false
         );
 
+        //- Construct for given objectRegistry and dictionary.
+        //  Allow the possibility to load fields from files
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry& unused,
+            const dictionary&,
+            const bool loadFromFilesUnused = false
+        );
+
 
     //- Destructor
     virtual ~${typeName}FunctionObject();
diff --git a/etc/codeTemplates/functionObject/FUNCTIONOBJECT.C b/etc/codeTemplates/functionObject/FUNCTIONOBJECT.C
index 68189c6d43f..5c480baee4b 100644
--- a/etc/codeTemplates/functionObject/FUNCTIONOBJECT.C
+++ b/etc/codeTemplates/functionObject/FUNCTIONOBJECT.C
@@ -71,21 +71,15 @@ void Foam::FUNCTIONOBJECT::read(const dictionary& dict)
 
 
 void Foam::FUNCTIONOBJECT::execute()
-{
-    // Do nothing - only valid on write
-}
+{}
 
 
 void Foam::FUNCTIONOBJECT::end()
-{
-    // Do nothing - only valid on write
-}
+{}
 
 
 void Foam::FUNCTIONOBJECT::timeSet()
-{
-    // Do nothing - only valid on write
-}
+{}
 
 
 void Foam::FUNCTIONOBJECT::write()
diff --git a/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.C b/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.C
index 18b46f29af8..e70e55a1bc8 100644
--- a/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.C
+++ b/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -66,6 +66,32 @@ Foam::IOOutputFilter<OutputFilter>::IOOutputFilter
 {}
 
 
+template<class OutputFilter>
+bool Foam::IOOutputFilter<OutputFilter>::viable
+(
+    const word& outputFilterName,
+    const objectRegistry& obr,
+    const word& dictName,
+    const IOobject::readOption rOpt,
+    const bool readFromFiles
+)
+{
+    IOdictionary dict
+    (
+        IOobject
+        (
+            dictName,
+            obr.time().system(),
+            obr,
+            rOpt,
+            IOobject::NO_WRITE
+        )
+    );
+
+    return OutputFilter::viable(outputFilterName, obr, dict, readFromFiles);
+}
+
+
 template<class OutputFilter>
 Foam::IOOutputFilter<OutputFilter>::IOOutputFilter
 (
@@ -99,6 +125,13 @@ Foam::IOOutputFilter<OutputFilter>::~IOOutputFilter()
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
+template<class OutputFilter>
+const Foam::word& Foam::IOOutputFilter<OutputFilter>::name() const
+{
+    return IOdictionary::name();
+}
+
+
 template<class OutputFilter>
 bool Foam::IOOutputFilter<OutputFilter>::read()
 {
@@ -121,4 +154,20 @@ void Foam::IOOutputFilter<OutputFilter>::write()
 }
 
 
+template<class OutputFilter>
+void Foam::IOOutputFilter<OutputFilter>::updateMesh(const mapPolyMesh& mpm)
+{
+    read();
+    OutputFilter::updateMesh(mpm);
+}
+
+
+template<class OutputFilter>
+void Foam::IOOutputFilter<OutputFilter>::movePoints(const polyMesh& mesh)
+{
+    read();
+    OutputFilter::movePoints(mesh);
+}
+
+
 // ************************************************************************* //
diff --git a/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.H b/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.H
index 77b248f7e86..6950b523f8f 100644
--- a/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.H
+++ b/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.H
@@ -94,6 +94,16 @@ public:
             const bool loadFromFile = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        static bool viable
+        (
+            const word& outputFilterName,
+            const objectRegistry&,
+            const word& dictName = OutputFilter::typeName() + "Dict",
+            const IOobject::readOption rOpt = IOobject::MUST_READ_IF_MODIFIED,
+            const bool loadFromFiles = false
+        );
+
         //- Construct for given objectRegistry and dictionary
         //  Dictionary read from full path.
         //  Allow the possibility to load fields from files
@@ -114,10 +124,7 @@ public:
     // Member Functions
 
         //- Return name
-        virtual const word& name() const
-        {
-            return IOdictionary::name();
-        }
+        virtual const word& name() const;
 
         //- Inherit read from OutputFilter
         using OutputFilter::read;
@@ -132,18 +139,10 @@ public:
         virtual void write();
 
         //- Update for changes of mesh
-        virtual void updateMesh(const mapPolyMesh& mpm)
-        {
-            read();
-            OutputFilter::updateMesh(mpm);
-        }
+        virtual void updateMesh(const mapPolyMesh& mpm);
 
         //- Update for changes of mesh
-        virtual void movePoints(const polyMesh& mesh)
-        {
-            read();
-            OutputFilter::movePoints(mesh);
-        }
+        virtual void movePoints(const polyMesh& mesh);
 };
 
 
diff --git a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C
index 100e88f27f1..7c81faefc1e 100644
--- a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C
+++ b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -55,32 +55,64 @@ bool Foam::OutputFilterFunctionObject<OutputFilter>::active() const
 
 
 template<class OutputFilter>
-void Foam::OutputFilterFunctionObject<OutputFilter>::allocateFilter()
+bool Foam::OutputFilterFunctionObject<OutputFilter>::allocateFilter()
 {
     if (dictName_.size())
     {
-        ptr_.reset
+        if
         (
-            new IOOutputFilter<OutputFilter>
+            IOOutputFilter<OutputFilter>::viable
             (
                 name(),
                 time_.lookupObject<objectRegistry>(regionName_),
                 dictName_
             )
-        );
+        )
+        {
+            ptr_.reset
+            (
+                new IOOutputFilter<OutputFilter>
+                (
+                    name(),
+                    time_.lookupObject<objectRegistry>(regionName_),
+                    dictName_
+                )
+            );
+        }
+        else
+        {
+            enabled_ = false;
+        }
     }
     else
     {
-        ptr_.reset
+        if
         (
-            new OutputFilter
+            OutputFilter::viable
             (
                 name(),
                 time_.lookupObject<objectRegistry>(regionName_),
                 dict_
             )
-        );
+        )
+        {
+            ptr_.reset
+            (
+                new OutputFilter
+                (
+                    name(),
+                    time_.lookupObject<objectRegistry>(regionName_),
+                    dict_
+                )
+            );
+        }
+        else
+        {
+            enabled_ = false;
+        }
     }
+
+    return enabled_;
 }
 
 
@@ -144,10 +176,12 @@ bool Foam::OutputFilterFunctionObject<OutputFilter>::start()
 
     if (enabled_ && storeFilter_)
     {
-        allocateFilter();
+        return allocateFilter();
+    }
+    else
+    {
+        return true;
     }
-
-    return true;
 }
 
 
@@ -159,9 +193,9 @@ bool Foam::OutputFilterFunctionObject<OutputFilter>::execute
 {
     if (active())
     {
-        if (!storeFilter_)
+        if (!storeFilter_ && !allocateFilter())
         {
-            allocateFilter();
+            return false;
         }
 
         if (evaluateControl_.output())
@@ -189,9 +223,9 @@ bool Foam::OutputFilterFunctionObject<OutputFilter>::end()
 {
     if (enabled_)
     {
-        if (!storeFilter_)
+        if (!storeFilter_ && !allocateFilter())
         {
-            allocateFilter();
+            return false;
         }
 
         ptr_->end();
diff --git a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.H b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.H
index cf97dc56293..5cd592ee839 100644
--- a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.H
+++ b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.H
@@ -111,7 +111,7 @@ class OutputFilterFunctionObject
         void readDict();
 
         //- Creates most of the data associated with this object.
-        void allocateFilter();
+        bool allocateFilter();
 
         //- Destroys most of the data associated with this object.
         void destroyFilter();
diff --git a/src/fvOptions/sources/derived/rotorDiskSource/rotorDiskSource.C b/src/fvOptions/sources/derived/rotorDiskSource/rotorDiskSource.C
index 33757db4201..821a6cc0191 100644
--- a/src/fvOptions/sources/derived/rotorDiskSource/rotorDiskSource.C
+++ b/src/fvOptions/sources/derived/rotorDiskSource/rotorDiskSource.C
@@ -96,7 +96,6 @@ void Foam::fv::rotorDiskSource::checkData()
                 }
                 case ifLocal:
                 {
-                    // Do nothing
                     break;
                 }
                 default:
diff --git a/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.C b/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.C
index c04f6eca2d2..3d5faaf9647 100644
--- a/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.C
+++ b/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.C
@@ -58,8 +58,7 @@ Foam::functionObjects::partialWrite::partialWrite
 }
 
 
-Foam::autoPtr<Foam::functionObjects::partialWrite>
-Foam::functionObjects::partialWrite::New
+bool Foam::functionObjects::partialWrite::viable
 (
     const word& name,
     const objectRegistry& obr,
@@ -67,17 +66,8 @@ Foam::functionObjects::partialWrite::New
     const bool loadFromFiles
 )
 {
-    if (isA<fvMesh>(obr))
-    {
-        return autoPtr<partialWrite>
-        (
-            new partialWrite(name, obr, dict, loadFromFiles)
-        );
-    }
-    else
-    {
-        return autoPtr<partialWrite>();
-    }
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
 }
 
 
diff --git a/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.H b/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.H
index a49aabc1293..76a18f5fbce 100644
--- a/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.H
+++ b/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::partialWrite
+    Foam::functionObjects::partialWrite
 
 Group
     grpIOFunctionObjects
@@ -171,9 +171,9 @@ public:
             const bool loadFromFiles = false
         );
 
-        //- Construct on free-store and return pointer if successful
-        //  otherwise return a null-pointer
-        static autoPtr<partialWrite> New
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
         (
             const word& name,
             const objectRegistry&,
diff --git a/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.C b/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.C
index ea296544c3f..9bd09cd0b66 100644
--- a/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.C
+++ b/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.C
@@ -56,8 +56,7 @@ Foam::functionObjects::removeRegisteredObject::removeRegisteredObject
 }
 
 
-Foam::autoPtr<Foam::functionObjects::removeRegisteredObject>
-Foam::functionObjects::removeRegisteredObject::New
+bool Foam::functionObjects::removeRegisteredObject::viable
 (
     const word& name,
     const objectRegistry& obr,
@@ -65,10 +64,7 @@ Foam::functionObjects::removeRegisteredObject::New
     const bool loadFromFiles
 )
 {
-    return autoPtr<removeRegisteredObject>
-    (
-        new removeRegisteredObject(name, obr, dict, loadFromFiles)
-    );
+    return true;
 }
 
 
diff --git a/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.H b/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.H
index 860a2e98635..5bbb16d923c 100644
--- a/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.H
+++ b/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::removeRegisteredObject
+    Foam::functionObjects::removeRegisteredObject
 
 Group
     grpIOFunctionObjects
@@ -128,9 +128,9 @@ public:
             const bool loadFromFiles = false
         );
 
-        //- Construct on free-store and return pointer if successful
-        //  otherwise return a null-pointer
-        static autoPtr<removeRegisteredObject> New
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
         (
             const word& name,
             const objectRegistry&,
diff --git a/src/postProcessing/functionObjects/IO/writeDictionary/writeDictionary.C b/src/postProcessing/functionObjects/IO/writeDictionary/writeDictionary.C
index 7acd2abefbc..afe37cf4a34 100644
--- a/src/postProcessing/functionObjects/IO/writeDictionary/writeDictionary.C
+++ b/src/postProcessing/functionObjects/IO/writeDictionary/writeDictionary.C
@@ -107,8 +107,7 @@ Foam::functionObjects::writeDictionary::writeDictionary
 }
 
 
-Foam::autoPtr<Foam::functionObjects::writeDictionary>
-Foam::functionObjects::writeDictionary::New
+bool Foam::functionObjects::writeDictionary::viable
 (
     const word& name,
     const objectRegistry& obr,
@@ -116,10 +115,7 @@ Foam::functionObjects::writeDictionary::New
     const bool loadFromFiles
 )
 {
-    return autoPtr<writeDictionary>
-    (
-        new writeDictionary(name, obr, dict, loadFromFiles)
-    );
+    return true;
 }
 
 
diff --git a/src/postProcessing/functionObjects/IO/writeDictionary/writeDictionary.H b/src/postProcessing/functionObjects/IO/writeDictionary/writeDictionary.H
index 19d42766efc..3f822fa89ac 100644
--- a/src/postProcessing/functionObjects/IO/writeDictionary/writeDictionary.H
+++ b/src/postProcessing/functionObjects/IO/writeDictionary/writeDictionary.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::writeDictionary
+    Foam::functionObjects::writeDictionary
 
 Group
     grpUtilitiesFunctionObjects
@@ -120,9 +120,9 @@ public:
             const bool loadFromFiles = false
         );
 
-        //- Construct on free-store and return pointer if successful
-        //  otherwise return a null-pointer
-        static autoPtr<writeDictionary> New
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
         (
             const word& name,
             const objectRegistry&,
diff --git a/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObject.C b/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObject.C
index ad68d6b9aea..6385ad89b1f 100644
--- a/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObject.C
+++ b/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObject.C
@@ -57,8 +57,7 @@ Foam::functionObjects::writeRegisteredObject::writeRegisteredObject
 }
 
 
-Foam::autoPtr<Foam::functionObjects::writeRegisteredObject>
-Foam::functionObjects::writeRegisteredObject::New
+bool Foam::functionObjects::writeRegisteredObject::viable
 (
     const word& name,
     const objectRegistry& obr,
@@ -66,10 +65,7 @@ Foam::functionObjects::writeRegisteredObject::New
     const bool loadFromFiles
 )
 {
-    return autoPtr<writeRegisteredObject>
-    (
-        new writeRegisteredObject(name, obr, dict, loadFromFiles)
-    );
+    return true;
 }
 
 
diff --git a/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObject.H b/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObject.H
index 37bb625c4e8..8fb674a8831 100644
--- a/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObject.H
+++ b/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObject.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::writeRegisteredObject
+    Foam::functionObjects::writeRegisteredObject
 
 Group
     grpIOFunctionObjects
@@ -143,9 +143,9 @@ public:
             const bool loadFromFiles = false
         );
 
-        //- Construct on free-store and return pointer if successful
-        //  otherwise return a null-pointer
-        static autoPtr<writeRegisteredObject> New
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
         (
             const word& name,
             const objectRegistry&,
diff --git a/src/postProcessing/functionObjects/cloud/cloudInfo/cloudInfo.C b/src/postProcessing/functionObjects/cloud/cloudInfo/cloudInfo.C
index f17f3668455..7641bf5c01a 100644
--- a/src/postProcessing/functionObjects/cloud/cloudInfo/cloudInfo.C
+++ b/src/postProcessing/functionObjects/cloud/cloudInfo/cloudInfo.C
@@ -62,15 +62,13 @@ Foam::functionObjects::cloudInfo::cloudInfo
 :
     functionObjectFiles(obr, name),
     name_(name),
-    obr_(obr),
-    active_(true)
+    obr_(obr)
 {
     read(dict);
 }
 
 
-Foam::autoPtr<Foam::functionObjects::cloudInfo>
-Foam::functionObjects::cloudInfo::New
+bool Foam::functionObjects::cloudInfo::viable
 (
     const word& name,
     const objectRegistry& obr,
@@ -78,10 +76,7 @@ Foam::functionObjects::cloudInfo::New
     const bool loadFromFiles
 )
 {
-    return autoPtr<cloudInfo>
-    (
-        new cloudInfo(name, obr, dict, loadFromFiles)
-    );
+    return true;
 }
 
 
@@ -95,24 +90,21 @@ Foam::functionObjects::cloudInfo::~cloudInfo()
 
 void Foam::functionObjects::cloudInfo::read(const dictionary& dict)
 {
-    if (active_)
-    {
-        functionObjectFiles::resetNames(dict.lookup("clouds"));
+    functionObjectFiles::resetNames(dict.lookup("clouds"));
 
-        Info<< type() << " " << name_ << ": ";
-        if (names().size())
-        {
-            Info<< "applying to clouds:" << nl;
-            forAll(names(), i)
-            {
-                Info<< "    " << names()[i] << nl;
-            }
-            Info<< endl;
-        }
-        else
+    Info<< type() << " " << name_ << ": ";
+    if (names().size())
+    {
+        Info<< "applying to clouds:" << nl;
+        forAll(names(), i)
         {
-            Info<< "no clouds to be processed" << nl << endl;
+            Info<< "    " << names()[i] << nl;
         }
+        Info<< endl;
+    }
+    else
+    {
+        Info<< "no clouds to be processed" << nl << endl;
     }
 }
 
@@ -131,29 +123,26 @@ void Foam::functionObjects::cloudInfo::timeSet()
 
 void Foam::functionObjects::cloudInfo::write()
 {
-    if (active_)
+    functionObjectFiles::write();
+
+    forAll(names(), i)
     {
-        functionObjectFiles::write();
+        const word& cloudName = names()[i];
 
-        forAll(names(), i)
+        const kinematicCloud& cloud =
+            obr_.lookupObject<kinematicCloud>(cloudName);
+
+        label nParcels = returnReduce(cloud.nParcels(), sumOp<label>());
+        scalar massInSystem =
+            returnReduce(cloud.massInSystem(), sumOp<scalar>());
+
+        if (Pstream::master())
         {
-            const word& cloudName = names()[i];
-
-            const kinematicCloud& cloud =
-                obr_.lookupObject<kinematicCloud>(cloudName);
-
-            label nParcels = returnReduce(cloud.nParcels(), sumOp<label>());
-            scalar massInSystem =
-                returnReduce(cloud.massInSystem(), sumOp<scalar>());
-
-            if (Pstream::master())
-            {
-                writeTime(file(i));
-                file(i)
-                    << token::TAB
-                    << nParcels << token::TAB
-                    << massInSystem << endl;
-            }
+            writeTime(file(i));
+            file(i)
+                << token::TAB
+                << nParcels << token::TAB
+                << massInSystem << endl;
         }
     }
 }
diff --git a/src/postProcessing/functionObjects/cloud/cloudInfo/cloudInfo.H b/src/postProcessing/functionObjects/cloud/cloudInfo/cloudInfo.H
index 3af05b7d104..895dd4a2a8b 100644
--- a/src/postProcessing/functionObjects/cloud/cloudInfo/cloudInfo.H
+++ b/src/postProcessing/functionObjects/cloud/cloudInfo/cloudInfo.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::cloudInfo
+    Foam::functionObjects::cloudInfo
 
 Group
     grpCloudFunctionObjects
@@ -109,9 +109,6 @@ protected:
         //- Reference to the database
         const objectRegistry& obr_;
 
-        //- on/off switch
-        bool active_;
-
 
     // Protected Member Functions
 
@@ -148,9 +145,9 @@ public:
             const bool loadFromFiles = false
         );
 
-        //- Construct on free-store and return pointer if successful
-        //  otherwise return a null-pointer
-        static autoPtr<cloudInfo> New
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
         (
             const word& name,
             const objectRegistry&,
diff --git a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/IOFieldAverage.H b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/IOFieldAverage.H
index f4b9ddf996d..2fd0ea6b97a 100644
--- a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/IOFieldAverage.H
+++ b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/IOFieldAverage.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) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -39,7 +39,7 @@ Description
 
 namespace Foam
 {
-    typedef IOOutputFilter<fieldAverage> IOFieldAverage;
+    typedef IOOutputFilter<functionObjects::fieldAverage> IOFieldAverage;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.C b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.C
index 9ec9ee60fa4..0efc524823a 100644
--- a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.C
+++ b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.C
@@ -26,20 +26,22 @@ License
 #include "fieldAverage.H"
 #include "volFields.H"
 #include "Time.H"
-
 #include "fieldAverageItem.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
+{
+namespace functionObjects
 {
     defineTypeNameAndDebug(fieldAverage, 0);
 }
+}
 
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
-void Foam::fieldAverage::resetFields()
+void Foam::functionObjects::fieldAverage::resetFields()
 {
     forAll(faItems_, i)
     {
@@ -62,7 +64,7 @@ void Foam::fieldAverage::resetFields()
 }
 
 
-void Foam::fieldAverage::initialize()
+void Foam::functionObjects::fieldAverage::initialize()
 {
     resetFields();
 
@@ -85,16 +87,6 @@ void Foam::fieldAverage::initialize()
         addPrime2MeanField<vector, symmTensor>(fieldI);
     }
 
-    forAll(faItems_, fieldI)
-    {
-        if (!faItems_[fieldI].active())
-        {
-            WarningInFunction
-                << "Field " << faItems_[fieldI].fieldName()
-                << " not found in database for averaging";
-        }
-    }
-
     // ensure first averaging works unconditionally
     prevTimeIndex_ = -1;
 
@@ -104,7 +96,7 @@ void Foam::fieldAverage::initialize()
 }
 
 
-void Foam::fieldAverage::restart()
+void Foam::functionObjects::fieldAverage::restart()
 {
     Info<< "    Restarting averaging at time " << obr_.time().timeName()
         << nl << endl;
@@ -119,7 +111,7 @@ void Foam::fieldAverage::restart()
 }
 
 
-void Foam::fieldAverage::calcAverages()
+void Foam::functionObjects::fieldAverage::calcAverages()
 {
     if (!initialised_)
     {
@@ -168,7 +160,7 @@ void Foam::fieldAverage::calcAverages()
 }
 
 
-void Foam::fieldAverage::writeAverages() const
+void Foam::functionObjects::fieldAverage::writeAverages() const
 {
     Info<< "    Writing average fields" << endl;
 
@@ -180,7 +172,7 @@ void Foam::fieldAverage::writeAverages() const
 }
 
 
-void Foam::fieldAverage::writeAveragingProperties() const
+void Foam::functionObjects::fieldAverage::writeAveragingProperties() const
 {
     IOdictionary propsDict
     (
@@ -208,7 +200,7 @@ void Foam::fieldAverage::writeAveragingProperties() const
 }
 
 
-void Foam::fieldAverage::readAveragingProperties()
+void Foam::functionObjects::fieldAverage::readAveragingProperties()
 {
     totalIter_.clear();
     totalIter_.setSize(faItems_.size(), 1);
@@ -264,7 +256,7 @@ void Foam::fieldAverage::readAveragingProperties()
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::fieldAverage::fieldAverage
+Foam::functionObjects::fieldAverage::fieldAverage
 (
     const word& name,
     const objectRegistry& obr,
@@ -274,7 +266,6 @@ Foam::fieldAverage::fieldAverage
 :
     name_(name),
     obr_(obr),
-    active_(true),
     prevTimeIndex_(-1),
     restartOnRestart_(false),
     restartOnOutput_(false),
@@ -286,105 +277,91 @@ Foam::fieldAverage::fieldAverage
     totalTime_(),
     periodIndex_(1)
 {
-    // Only active if a fvMesh is available
-    if (isA<fvMesh>(obr_))
-    {
-        read(dict);
-    }
-    else
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_ << nl
-            << endl;
-    }
+    read(dict);
+}
+
+
+bool Foam::functionObjects::fieldAverage::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
 }
 
 
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::fieldAverage::~fieldAverage()
+Foam::functionObjects::fieldAverage::~fieldAverage()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::fieldAverage::read(const dictionary& dict)
+void Foam::functionObjects::fieldAverage::read(const dictionary& dict)
 {
-    if (active_)
-    {
-        initialised_ = false;
+    initialised_ = false;
 
-        Info<< type() << " " << name_ << ":" << nl;
+    Info<< type() << " " << name_ << ":" << nl;
 
-        dict.readIfPresent("restartOnRestart", restartOnRestart_);
-        dict.readIfPresent("restartOnOutput", restartOnOutput_);
-        dict.readIfPresent("periodicRestart", periodicRestart_);
-        dict.lookup("fields") >> faItems_;
+    dict.readIfPresent("restartOnRestart", restartOnRestart_);
+    dict.readIfPresent("restartOnOutput", restartOnOutput_);
+    dict.readIfPresent("periodicRestart", periodicRestart_);
+    dict.lookup("fields") >> faItems_;
 
-        if (periodicRestart_)
-        {
-            dict.lookup("restartPeriod") >> restartPeriod_;
-        }
+    if (periodicRestart_)
+    {
+        dict.lookup("restartPeriod") >> restartPeriod_;
+    }
 
-        readAveragingProperties();
+    readAveragingProperties();
 
-        Info<< endl;
-    }
+    Info<< endl;
 }
 
 
-void Foam::fieldAverage::execute()
+void Foam::functionObjects::fieldAverage::execute()
 {
-    if (active_)
-    {
-        calcAverages();
-        Info<< endl;
-    }
+    calcAverages();
+    Info<< endl;
 }
 
 
-void Foam::fieldAverage::end()
+void Foam::functionObjects::fieldAverage::end()
 {
-    if (active_)
-    {
-        calcAverages();
-        Info<< endl;
-    }
+    calcAverages();
+    Info<< endl;
 }
 
 
-void Foam::fieldAverage::timeSet()
+void Foam::functionObjects::fieldAverage::timeSet()
 {}
 
 
-void Foam::fieldAverage::write()
+void Foam::functionObjects::fieldAverage::write()
 {
-    if (active_)
-    {
-        writeAverages();
-        writeAveragingProperties();
+    writeAverages();
+    writeAveragingProperties();
 
-        if (restartOnOutput_)
-        {
-            restart();
-        }
-
-        Info<< endl;
+    if (restartOnOutput_)
+    {
+        restart();
     }
+
+    Info<< endl;
 }
 
 
-void Foam::fieldAverage::updateMesh(const mapPolyMesh&)
-{
-    // Do nothing
-}
+void Foam::functionObjects::fieldAverage::updateMesh(const mapPolyMesh&)
+{}
 
 
-void Foam::fieldAverage::movePoints(const polyMesh&)
-{
-    // Do nothing
-}
+void Foam::functionObjects::fieldAverage::movePoints(const polyMesh&)
+{}
 
 
 // ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.H b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.H
index b78b10ad102..ec0403c5333 100644
--- a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.H
+++ b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::fieldAverage
+    Foam::functionObjects::fieldAverage
 
 Group
     grpFieldFunctionObjects
@@ -133,12 +133,17 @@ namespace Foam
 // Forward declaration of classes
 class objectRegistry;
 class dictionary;
-class fieldAverageItem;
 template<class Type>
 class List;
 class polyMesh;
 class mapPolyMesh;
 
+namespace functionObjects
+{
+
+// Forward declaration of classes
+class fieldAverageItem;
+
 /*---------------------------------------------------------------------------*\
                         Class fieldAverage Declaration
 \*---------------------------------------------------------------------------*/
@@ -155,9 +160,6 @@ protected:
         //- Database this class is registered to
         const objectRegistry& obr_;
 
-        //- On/off switch
-        bool active_;
-
         //- Time at last call, prevents repeated averaging
         label prevTimeIndex_;
 
@@ -299,6 +301,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~fieldAverage();
@@ -337,6 +349,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverageTemplates.C b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverageTemplates.C
index 6078b95b72b..3995e81e834 100644
--- a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverageTemplates.C
+++ b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverageTemplates.C
@@ -31,10 +31,8 @@ License
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
 template<class Type>
-void Foam::fieldAverage::addMeanFieldType(const label fieldI)
+void Foam::functionObjects::fieldAverage::addMeanFieldType(const label fieldI)
 {
-    faItems_[fieldI].active() = true;
-
     const word& fieldName = faItems_[fieldI].fieldName();
     const word& meanFieldName = faItems_[fieldI].meanFieldName();
 
@@ -79,7 +77,7 @@ void Foam::fieldAverage::addMeanFieldType(const label fieldI)
 
 
 template<class Type>
-void Foam::fieldAverage::addMeanField(const label fieldI)
+void Foam::functionObjects::fieldAverage::addMeanField(const label fieldI)
 {
     if (faItems_[fieldI].mean())
     {
@@ -101,7 +99,10 @@ void Foam::fieldAverage::addMeanField(const label fieldI)
 
 
 template<class Type1, class Type2>
-void Foam::fieldAverage::addPrime2MeanFieldType(const label fieldI)
+void Foam::functionObjects::fieldAverage::addPrime2MeanFieldType
+(
+    const label fieldI
+)
 {
     const word& fieldName = faItems_[fieldI].fieldName();
     const word& meanFieldName = faItems_[fieldI].meanFieldName();
@@ -149,7 +150,7 @@ void Foam::fieldAverage::addPrime2MeanFieldType(const label fieldI)
 
 
 template<class Type1, class Type2>
-void Foam::fieldAverage::addPrime2MeanField(const label fieldI)
+void Foam::functionObjects::fieldAverage::addPrime2MeanField(const label fieldI)
 {
     typedef GeometricField<Type1, fvPatchField, volMesh> volFieldType1;
     typedef GeometricField<Type1, fvsPatchField, surfaceMesh> surfFieldType1;
@@ -182,7 +183,10 @@ void Foam::fieldAverage::addPrime2MeanField(const label fieldI)
 
 
 template<class Type>
-void Foam::fieldAverage::calculateMeanFieldType(const label fieldI) const
+void Foam::functionObjects::fieldAverage::calculateMeanFieldType
+(
+    const label fieldI
+) const
 {
     const word& fieldName = faItems_[fieldI].fieldName();
 
@@ -224,7 +228,7 @@ void Foam::fieldAverage::calculateMeanFieldType(const label fieldI) const
 
 
 template<class Type>
-void Foam::fieldAverage::calculateMeanFields() const
+void Foam::functionObjects::fieldAverage::calculateMeanFields() const
 {
     typedef GeometricField<Type, fvPatchField, volMesh> volFieldType;
     typedef GeometricField<Type, fvsPatchField, surfaceMesh> surfFieldType;
@@ -241,7 +245,10 @@ void Foam::fieldAverage::calculateMeanFields() const
 
 
 template<class Type1, class Type2>
-void Foam::fieldAverage::calculatePrime2MeanFieldType(const label fieldI) const
+void Foam::functionObjects::fieldAverage::calculatePrime2MeanFieldType
+(
+    const label fieldI
+) const
 {
     const word& fieldName = faItems_[fieldI].fieldName();
 
@@ -288,7 +295,7 @@ void Foam::fieldAverage::calculatePrime2MeanFieldType(const label fieldI) const
 
 
 template<class Type1, class Type2>
-void Foam::fieldAverage::calculatePrime2MeanFields() const
+void Foam::functionObjects::fieldAverage::calculatePrime2MeanFields() const
 {
     typedef GeometricField<Type1, fvPatchField, volMesh> volFieldType1;
     typedef GeometricField<Type1, fvsPatchField, surfaceMesh> surfFieldType1;
@@ -308,7 +315,10 @@ void Foam::fieldAverage::calculatePrime2MeanFields() const
 
 
 template<class Type1, class Type2>
-void Foam::fieldAverage::addMeanSqrToPrime2MeanType(const label fieldI) const
+void Foam::functionObjects::fieldAverage::addMeanSqrToPrime2MeanType
+(
+    const label fieldI
+) const
 {
     const word& fieldName = faItems_[fieldI].fieldName();
 
@@ -328,7 +338,7 @@ void Foam::fieldAverage::addMeanSqrToPrime2MeanType(const label fieldI) const
 
 
 template<class Type1, class Type2>
-void Foam::fieldAverage::addMeanSqrToPrime2Mean() const
+void Foam::functionObjects::fieldAverage::addMeanSqrToPrime2Mean() const
 {
     typedef GeometricField<Type1, fvPatchField, volMesh> volFieldType1;
     typedef GeometricField<Type1, fvsPatchField, surfaceMesh> surfFieldType1;
@@ -348,7 +358,10 @@ void Foam::fieldAverage::addMeanSqrToPrime2Mean() const
 
 
 template<class Type>
-void Foam::fieldAverage::writeFieldType(const word& fieldName) const
+void Foam::functionObjects::fieldAverage::writeFieldType
+(
+    const word& fieldName
+) const
 {
     if (obr_.foundObject<Type>(fieldName))
     {
@@ -359,7 +372,7 @@ void Foam::fieldAverage::writeFieldType(const word& fieldName) const
 
 
 template<class Type>
-void Foam::fieldAverage::writeFields() const
+void Foam::functionObjects::fieldAverage::writeFields() const
 {
     typedef GeometricField<Type, fvPatchField, volMesh> volFieldType;
     typedef GeometricField<Type, fvsPatchField, surfaceMesh> surfFieldType;
diff --git a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageFunctionObject/fieldAverageFunctionObject.H b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageFunctionObject/fieldAverageFunctionObject.H
index 897537013cb..13e14917538 100644
--- a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageFunctionObject/fieldAverageFunctionObject.H
+++ b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageFunctionObject/fieldAverageFunctionObject.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) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,7 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<fieldAverage>
+    typedef OutputFilterFunctionObject<functionObjects::fieldAverage>
         fieldAverageFunctionObject;
 }
 
diff --git a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItem.C b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItem.C
index da0d3f0021d..308bf1649de 100644
--- a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItem.C
+++ b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItem.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -27,33 +27,34 @@ License
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
-namespace Foam
-{
-    const word fieldAverageItem::EXT_MEAN = "Mean";
-    const word fieldAverageItem::EXT_PRIME2MEAN = "Prime2Mean";
-
-    template<>
-    const char* Foam::NamedEnum
-    <
-        Foam::fieldAverageItem::baseType,
-        2
-    >::names[] =
-    {
-        "iteration",
-        "time"
-    };
-}
+const Foam::word Foam::functionObjects::fieldAverageItem::EXT_MEAN
+(
+    "Mean"
+);
+
+const Foam::word Foam::functionObjects::fieldAverageItem::EXT_PRIME2MEAN
+(
+    "Prime2Mean"
+);
 
+template<>
+const char* Foam::NamedEnum
+<
+    Foam::functionObjects::fieldAverageItem::baseType,
+    2
+>::names[] = { "iteration", "time"};
 
-const Foam::NamedEnum<Foam::fieldAverageItem::baseType, 2>
-    Foam::fieldAverageItem::baseTypeNames_;
+const Foam::NamedEnum
+<
+    Foam::functionObjects::fieldAverageItem::baseType,
+    2
+> Foam::functionObjects::fieldAverageItem::baseTypeNames_;
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::fieldAverageItem::fieldAverageItem()
+Foam::functionObjects::fieldAverageItem::fieldAverageItem()
 :
-    active_(false),
     fieldName_("unknown"),
     mean_(0),
     meanFieldName_("unknown"),
@@ -65,9 +66,11 @@ Foam::fieldAverageItem::fieldAverageItem()
 {}
 
 
-Foam::fieldAverageItem::fieldAverageItem(const fieldAverageItem& faItem)
+Foam::functionObjects::fieldAverageItem::fieldAverageItem
+(
+    const fieldAverageItem& faItem
+)
 :
-    active_(faItem.active_),
     fieldName_(faItem.fieldName_),
     mean_(faItem.mean_),
     meanFieldName_(faItem.meanFieldName_),
@@ -81,13 +84,16 @@ Foam::fieldAverageItem::fieldAverageItem(const fieldAverageItem& faItem)
 
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::fieldAverageItem::~fieldAverageItem()
+Foam::functionObjects::fieldAverageItem::~fieldAverageItem()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * //
 
-void Foam::fieldAverageItem::operator=(const fieldAverageItem& rhs)
+void Foam::functionObjects::fieldAverageItem::operator=
+(
+    const fieldAverageItem& rhs
+)
 {
     // Check for assignment to self
     if (this == &rhs)
@@ -98,7 +104,6 @@ void Foam::fieldAverageItem::operator=(const fieldAverageItem& rhs)
     }
 
     // Set updated values
-    active_ = rhs.active_;
     fieldName_ = rhs.fieldName_;
     mean_ = rhs.mean_;
     meanFieldName_ = rhs.meanFieldName_;
diff --git a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItem.H b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItem.H
index 0c40bac95ad..63e2b02c1fa 100644
--- a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItem.H
+++ b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItem.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::fieldAverageItem
+    Foam::functionObjects::fieldAverageItem
 
 Description
     Helper class to describe what form of averaging to apply.  A set will be
@@ -62,12 +62,14 @@ namespace Foam
 class Istream;
 class Ostream;
 
+namespace functionObjects
+{
+
 // Forward declaration of friend functions and operators
 class fieldAverageItem;
 Istream& operator>>(Istream&, fieldAverageItem&);
 Ostream& operator<<(Ostream&, const fieldAverageItem&);
 
-
 /*---------------------------------------------------------------------------*\
                       Class fieldAverageItem Declaration
 \*---------------------------------------------------------------------------*/
@@ -98,9 +100,6 @@ private:
 
     // Private data
 
-        //- Active flag
-        Switch active_;
-
         //- Field name
         word fieldName_;
 
@@ -151,18 +150,6 @@ public:
 
         // Access
 
-            //- Return const access to the active flag
-            const Switch& active() const
-            {
-                return active_;
-            }
-
-            //- Return non-const access to the active flag
-            Switch& active()
-            {
-                return active_;
-            }
-
             //- Return const access to the field name
             const word& fieldName() const
             {
@@ -277,6 +264,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItemIO.C b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItemIO.C
index 7dfee8646d0..f5fe50137bf 100644
--- a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItemIO.C
+++ b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItemIO.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -29,9 +29,8 @@ License
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::fieldAverageItem::fieldAverageItem(Istream& is)
+Foam::functionObjects::fieldAverageItem::fieldAverageItem(Istream& is)
 :
-    active_(false),
     fieldName_("unknown"),
     mean_(0),
     meanFieldName_("unknown"),
@@ -40,7 +39,11 @@ Foam::fieldAverageItem::fieldAverageItem(Istream& is)
     base_(ITER),
     window_(-1.0)
 {
-    is.check("Foam::fieldAverageItem::fieldAverageItem(Foam::Istream&)");
+    is.check
+    (
+        "Foam::functionObjects::fieldAverageItem::fieldAverageItem"
+        "(Foam::Istream&)"
+    );
 
     const dictionaryEntry entry(dictionary::null, is);
 
@@ -63,17 +66,20 @@ Foam::fieldAverageItem::fieldAverageItem(Istream& is)
 
 // * * * * * * * * * * * * * * * IOstream Operators  * * * * * * * * * * * * //
 
-Foam::Istream& Foam::operator>>(Istream& is, fieldAverageItem& faItem)
+Foam::Istream& Foam::functionObjects::operator>>
+(
+    Istream& is,
+    fieldAverageItem& faItem
+)
 {
     is.check
     (
         "Foam::Istream& Foam::operator>>"
-        "(Foam::Istream&, Foam::fieldAverageItem&)"
+        "(Foam::Istream&, Foam::functionObjects::fieldAverageItem&)"
     );
 
     const dictionaryEntry entry(dictionary::null, is);
 
-    faItem.active_ = false;
     faItem.fieldName_ = entry.keyword();
     entry.lookup("mean") >> faItem.mean_;
     entry.lookup("prime2Mean") >> faItem.prime2Mean_;
@@ -97,12 +103,16 @@ Foam::Istream& Foam::operator>>(Istream& is, fieldAverageItem& faItem)
 }
 
 
-Foam::Ostream& Foam::operator<<(Ostream& os, const fieldAverageItem& faItem)
+Foam::Ostream& Foam::functionObjects::operator<<
+(
+    Ostream& os,
+    const fieldAverageItem& faItem
+)
 {
     os.check
     (
         "Foam::Ostream& Foam::operator<<"
-        "(Foam::Ostream&, const Foam::fieldAverageItem&)"
+        "(Foam::Ostream&, const Foam::functionObjects::fieldAverageItem&)"
     );
 
     os  << faItem.fieldName_ << nl << token::BEGIN_BLOCK << nl;
@@ -129,7 +139,7 @@ Foam::Ostream& Foam::operator<<(Ostream& os, const fieldAverageItem& faItem)
     os.check
     (
         "Foam::Ostream& Foam::operator<<"
-        "(Foam::Ostream&, const Foam::fieldAverageItem&)"
+        "(Foam::Ostream&, const Foam::functionObjects::fieldAverageItem&)"
     );
 
     return os;
diff --git a/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransform.C b/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransform.C
index 44788eada95..3198b91cc66 100644
--- a/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransform.C
+++ b/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransform.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -30,13 +30,17 @@ License
 
 namespace Foam
 {
-defineTypeNameAndDebug(fieldCoordinateSystemTransform, 0);
+namespace functionObjects
+{
+    defineTypeNameAndDebug(fieldCoordinateSystemTransform, 0);
+}
 }
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::fieldCoordinateSystemTransform::fieldCoordinateSystemTransform
+Foam::functionObjects::fieldCoordinateSystemTransform::
+fieldCoordinateSystemTransform
 (
     const word& name,
     const objectRegistry& obr,
@@ -46,100 +50,91 @@ Foam::fieldCoordinateSystemTransform::fieldCoordinateSystemTransform
 :
     name_(name),
     obr_(obr),
-    active_(true),
     fieldSet_(),
     coordSys_(obr, dict)
 {
-    // Check if the available mesh is an fvMesh otherise deactivate
-    if (isA<fvMesh>(obr_))
-    {
-        read(dict);
+    read(dict);
 
-        Info<< type() << " " << name_ << ":" << nl
-            << "   Applying transformation from global Cartesian to local "
-            << coordSys_ << nl << endl;
-    }
-    else
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_
-            << endl;
-    }
+    Info<< type() << " " << name_ << ":" << nl
+        << "   Applying transformation from global Cartesian to local "
+        << coordSys_ << nl << endl;
+}
+
+
+bool Foam::functionObjects::fieldCoordinateSystemTransform::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
 }
 
 
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::fieldCoordinateSystemTransform::~fieldCoordinateSystemTransform()
+Foam::functionObjects::fieldCoordinateSystemTransform::
+~fieldCoordinateSystemTransform()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::fieldCoordinateSystemTransform::read(const dictionary& dict)
+void Foam::functionObjects::fieldCoordinateSystemTransform::read
+(
+    const dictionary& dict
+)
 {
-    if (active_)
-    {
-        dict.lookup("fields") >> fieldSet_;
-    }
+    dict.lookup("fields") >> fieldSet_;
 }
 
 
-void Foam::fieldCoordinateSystemTransform::execute()
+void Foam::functionObjects::fieldCoordinateSystemTransform::execute()
 {
-    if (active_)
+    Info<< type() << " " << name_ << " output:" << nl;
+
+    forAll(fieldSet_, fieldI)
     {
-        Info<< type() << " " << name_ << " output:" << nl;
-
-        forAll(fieldSet_, fieldI)
-        {
-            // If necessary load field
-            transform<scalar>(fieldSet_[fieldI]);
-            transform<vector>(fieldSet_[fieldI]);
-            transform<sphericalTensor>(fieldSet_[fieldI]);
-            transform<symmTensor>(fieldSet_[fieldI]);
-            transform<tensor>(fieldSet_[fieldI]);
-        }
+        // If necessary load field
+        transform<scalar>(fieldSet_[fieldI]);
+        transform<vector>(fieldSet_[fieldI]);
+        transform<sphericalTensor>(fieldSet_[fieldI]);
+        transform<symmTensor>(fieldSet_[fieldI]);
+        transform<tensor>(fieldSet_[fieldI]);
     }
 }
 
 
-void Foam::fieldCoordinateSystemTransform::end()
+void Foam::functionObjects::fieldCoordinateSystemTransform::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    execute();
 }
 
 
-void Foam::fieldCoordinateSystemTransform::timeSet()
-{
-    // Do nothing
-}
+void Foam::functionObjects::fieldCoordinateSystemTransform::timeSet()
+{}
 
 
-void Foam::fieldCoordinateSystemTransform::write()
+void Foam::functionObjects::fieldCoordinateSystemTransform::write()
 {
-    if (active_)
-    {
-        Info<< type() << " " << name_ << " output:" << nl;
+    Info<< type() << " " << name_ << " output:" << nl;
 
-        forAll(fieldSet_, fieldI)
-        {
-            const word fieldName = fieldSet_[fieldI] + ":Transformed";
-
-            const regIOobject& field =
-                obr_.lookupObject<regIOobject>(fieldName);
+    forAll(fieldSet_, fieldI)
+    {
+        const word fieldName = fieldSet_[fieldI] + ":Transformed";
 
-            Info<< "    writing field " << field.name() << nl;
+        const regIOobject& field =
+            obr_.lookupObject<regIOobject>(fieldName);
 
-            field.write();
-        }
+        Info<< "    writing field " << field.name() << nl;
 
-        Info<< endl;
+        field.write();
     }
+
+    Info<< endl;
 }
 
 
diff --git a/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransform.H b/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransform.H
index c74aad72fb7..ceea83e7ee4 100644
--- a/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransform.H
+++ b/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransform.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::fieldCoordinateSystemTransform
+    Foam::functionObjects::fieldCoordinateSystemTransform
 
 Group
     grpFieldFunctionObjects
@@ -93,6 +93,9 @@ class dictionary;
 class polyMesh;
 class mapPolyMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                Class fieldCoordinateSystemTransform Declaration
 \*---------------------------------------------------------------------------*/
@@ -108,9 +111,6 @@ protected:
 
         const objectRegistry& obr_;
 
-        //- on/off switch
-        bool active_;
-
         //- Fields to transform
         wordList fieldSet_;
 
@@ -156,6 +156,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~fieldCoordinateSystemTransform();
@@ -196,6 +206,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransformFunctionObject.H b/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransformFunctionObject.H
index 20cf0fccbf9..aaa01873333 100644
--- a/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransformFunctionObject.H
+++ b/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransformFunctionObject.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) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,8 +43,10 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<fieldCoordinateSystemTransform>
-        fieldCoordinateSystemTransformFunctionObject;
+    typedef OutputFilterFunctionObject
+    <
+        functionObjects::fieldCoordinateSystemTransform
+    > fieldCoordinateSystemTransformFunctionObject;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransformTemplates.C b/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransformTemplates.C
index 627414b9e4e..334d9d6289d 100644
--- a/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransformTemplates.C
+++ b/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransformTemplates.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -32,7 +32,7 @@ License
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 template<class Type>
-void Foam::fieldCoordinateSystemTransform::transformField
+void Foam::functionObjects::fieldCoordinateSystemTransform::transformField
 (
     const Type& field
 ) const
@@ -74,7 +74,7 @@ void Foam::fieldCoordinateSystemTransform::transformField
 
 
 template<class Type>
-void Foam::fieldCoordinateSystemTransform::transform
+void Foam::functionObjects::fieldCoordinateSystemTransform::transform
 (
     const word& fieldName
 ) const
diff --git a/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMax.C b/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMax.C
index 6b0c43ef7b5..7b29a3cb20e 100644
--- a/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMax.C
+++ b/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMax.C
@@ -29,29 +29,30 @@ License
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
+{
+namespace functionObjects
 {
     defineTypeNameAndDebug(fieldMinMax, 0);
-
-    template<>
-    const char* NamedEnum
-    <
-        fieldMinMax::modeType,
-        2
-    >::names[] =
-    {
-        "magnitude",
-        "component"
-    };
+}
 }
 
+template<>
+const char* Foam::NamedEnum
+<
+    Foam::functionObjects::fieldMinMax::modeType,
+    2
+>::names[] = {"magnitude", "component"};
 
-const Foam::NamedEnum<Foam::fieldMinMax::modeType, 2>
-Foam::fieldMinMax::modeTypeNames_;
+const Foam::NamedEnum
+<
+    Foam::functionObjects::fieldMinMax::modeType,
+    2
+> Foam::functionObjects::fieldMinMax::modeTypeNames_;
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::fieldMinMax::fieldMinMax
+Foam::functionObjects::fieldMinMax::fieldMinMax
 (
     const word& name,
     const objectRegistry& obr,
@@ -62,47 +63,47 @@ Foam::fieldMinMax::fieldMinMax
     functionObjectFiles(obr, name, typeName),
     name_(name),
     obr_(obr),
-    active_(true),
     log_(true),
     location_(true),
     mode_(mdMag),
     fieldSet_()
 {
-    // Check if the available mesh is an fvMesh otherise deactivate
-    if (!isA<fvMesh>(obr_))
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_
-            << endl;
-    }
-
     read(dict);
 }
 
 
+bool Foam::functionObjects::fieldMinMax::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::fieldMinMax::~fieldMinMax()
+Foam::functionObjects::fieldMinMax::~fieldMinMax()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::fieldMinMax::read(const dictionary& dict)
+void Foam::functionObjects::fieldMinMax::read(const dictionary& dict)
 {
-    if (active_)
-    {
-        log_ = dict.lookupOrDefault<Switch>("log", true);
-        location_ = dict.lookupOrDefault<Switch>("location", true);
+    log_ = dict.lookupOrDefault<Switch>("log", true);
+    location_ = dict.lookupOrDefault<Switch>("location", true);
 
-        mode_ = modeTypeNames_[dict.lookupOrDefault<word>("mode", "magnitude")];
-        dict.lookup("fields") >> fieldSet_;
-    }
+    mode_ = modeTypeNames_[dict.lookupOrDefault<word>("mode", "magnitude")];
+    dict.lookup("fields") >> fieldSet_;
 }
 
 
-void Foam::fieldMinMax::writeFileHeader(const label i)
+void Foam::functionObjects::fieldMinMax::writeFileHeader(const label i)
 {
     OFstream& file = this->file();
 
@@ -142,45 +143,36 @@ void Foam::fieldMinMax::writeFileHeader(const label i)
 }
 
 
-void Foam::fieldMinMax::execute()
-{
-    // Do nothing - only valid on write
-}
+void Foam::functionObjects::fieldMinMax::execute()
+{}
 
 
-void Foam::fieldMinMax::end()
-{
-    // Do nothing - only valid on write
-}
+void Foam::functionObjects::fieldMinMax::end()
+{}
 
 
-void Foam::fieldMinMax::timeSet()
-{
-    // Do nothing - only valid on write
-}
+void Foam::functionObjects::fieldMinMax::timeSet()
+{}
 
 
-void Foam::fieldMinMax::write()
+void Foam::functionObjects::fieldMinMax::write()
 {
-    if (active_)
-    {
-        functionObjectFiles::write();
+    functionObjectFiles::write();
 
-        if (!location_) writeTime(file());
-        if (log_) Info<< type() << " " << name_ <<  " output:" << nl;
-
-        forAll(fieldSet_, fieldI)
-        {
-            calcMinMaxFields<scalar>(fieldSet_[fieldI], mdCmpt);
-            calcMinMaxFields<vector>(fieldSet_[fieldI], mode_);
-            calcMinMaxFields<sphericalTensor>(fieldSet_[fieldI], mode_);
-            calcMinMaxFields<symmTensor>(fieldSet_[fieldI], mode_);
-            calcMinMaxFields<tensor>(fieldSet_[fieldI], mode_);
-        }
+    if (!location_) writeTime(file());
+    if (log_) Info<< type() << " " << name_ <<  " output:" << nl;
 
-        if (!location_) file()<< endl;
-        if (log_) Info<< endl;
+    forAll(fieldSet_, fieldI)
+    {
+        calcMinMaxFields<scalar>(fieldSet_[fieldI], mdCmpt);
+        calcMinMaxFields<vector>(fieldSet_[fieldI], mode_);
+        calcMinMaxFields<sphericalTensor>(fieldSet_[fieldI], mode_);
+        calcMinMaxFields<symmTensor>(fieldSet_[fieldI], mode_);
+        calcMinMaxFields<tensor>(fieldSet_[fieldI], mode_);
     }
+
+    if (!location_) file()<< endl;
+    if (log_) Info<< endl;
 }
 
 
diff --git a/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMax.H b/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMax.H
index 22583932a5f..b28e9433d8c 100644
--- a/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMax.H
+++ b/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMax.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::fieldMinMax
+    Foam::functionObjects::fieldMinMax
 
 Group
     grpFieldFunctionObjects
@@ -93,6 +93,9 @@ class dictionary;
 class polyMesh;
 class mapPolyMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                        Class fieldMinMax Declaration
 \*---------------------------------------------------------------------------*/
@@ -122,9 +125,6 @@ protected:
 
         const objectRegistry& obr_;
 
-        //- on/off switch
-        bool active_;
-
         //- Switch to send output to Info as well
         Switch log_;
 
@@ -182,6 +182,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~fieldMinMax();
@@ -230,6 +240,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxFunctionObject.H b/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxFunctionObject.H
index 73cb571e9f3..dceaac3bde7 100644
--- a/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxFunctionObject.H
+++ b/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxFunctionObject.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) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,7 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<fieldMinMax>
+    typedef OutputFilterFunctionObject<functionObjects::fieldMinMax>
         fieldMinMaxFunctionObject;
 }
 
diff --git a/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxTemplates.C b/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxTemplates.C
index fb3b6eebc61..744f2061eab 100644
--- a/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxTemplates.C
+++ b/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxTemplates.C
@@ -29,7 +29,7 @@ License
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 template<class Type>
-void Foam::fieldMinMax::output
+void Foam::functionObjects::fieldMinMax::output
 (
     const word& fieldName,
     const word& outputName,
@@ -99,7 +99,7 @@ void Foam::fieldMinMax::output
 
 
 template<class Type>
-void Foam::fieldMinMax::calcMinMaxFields
+void Foam::functionObjects::fieldMinMax::calcMinMaxFields
 (
     const word& fieldName,
     const modeType& mode
diff --git a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C
index 3b1d86eaf66..8d9b291db29 100644
--- a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C
+++ b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -32,48 +32,61 @@ License
 
 namespace Foam
 {
-    template<>
-    const char* NamedEnum<fieldValues::cellSource::sourceType, 2>::names[] =
-    {
-        "cellZone",
-        "all"
-    };
-
-
-    template<>
-    const char* NamedEnum<fieldValues::cellSource::operationType, 11>::names[] =
-    {
-        "none",
-        "sum",
-        "sumMag",
-        "average",
-        "weightedAverage",
-        "volAverage",
-        "weightedVolAverage",
-        "volIntegrate",
-        "min",
-        "max",
-        "CoV"
-    };
-
-    namespace fieldValues
-    {
-        defineTypeNameAndDebug(cellSource, 0);
-        addToRunTimeSelectionTable(fieldValue, cellSource, dictionary);
-    }
+namespace functionObjects
+{
+namespace fieldValues
+{
+    defineTypeNameAndDebug(cellSource, 0);
+    addToRunTimeSelectionTable(fieldValue, cellSource, dictionary);
+}
+}
 }
 
-
-const Foam::NamedEnum<Foam::fieldValues::cellSource::sourceType, 2>
-    Foam::fieldValues::cellSource::sourceTypeNames_;
-
-const Foam::NamedEnum<Foam::fieldValues::cellSource::operationType, 11>
-    Foam::fieldValues::cellSource::operationTypeNames_;
+template<>
+const char*
+Foam::NamedEnum
+<
+    Foam::functionObjects::fieldValues::cellSource::sourceType,
+    2
+>::names[] = {"cellZone", "all"};
+
+template<>
+const char*
+Foam::NamedEnum
+<
+    Foam::functionObjects::fieldValues::cellSource::operationType,
+    11
+>::names[] =
+{
+    "none",
+    "sum",
+    "sumMag",
+    "average",
+    "weightedAverage",
+    "volAverage",
+    "weightedVolAverage",
+    "volIntegrate",
+    "min",
+    "max",
+    "CoV"
+};
+
+const Foam::NamedEnum
+<
+    Foam::functionObjects::fieldValues::cellSource::sourceType,
+    2
+> Foam::functionObjects::fieldValues::cellSource::sourceTypeNames_;
+
+const Foam::NamedEnum
+<
+    Foam::functionObjects::fieldValues::cellSource::operationType,
+    11
+> Foam::functionObjects::fieldValues::cellSource::operationTypeNames_;
 
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
-void Foam::fieldValues::cellSource::setCellZoneCells()
+void Foam::functionObjects::fieldValues::cellSource::setCellZoneCells()
 {
     switch (source_)
     {
@@ -118,7 +131,7 @@ void Foam::fieldValues::cellSource::setCellZoneCells()
 }
 
 
-Foam::scalar Foam::fieldValues::cellSource::volume() const
+Foam::scalar Foam::functionObjects::fieldValues::cellSource::volume() const
 {
     return gSum(filterField(mesh().V()));
 }
@@ -126,19 +139,19 @@ Foam::scalar Foam::fieldValues::cellSource::volume() const
 
 // * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * * //
 
-void Foam::fieldValues::cellSource::initialise(const dictionary& dict)
+void Foam::functionObjects::fieldValues::cellSource::initialise
+(
+    const dictionary& dict
+)
 {
     setCellZoneCells();
 
     if (nCells_ == 0)
     {
-        WarningInFunction
+        FatalErrorInFunction
             << type() << " " << name_ << ": "
             << sourceTypeNames_[source_] << "(" << sourceName_ << "):" << nl
-            << "    Source has no cells - deactivating" << endl;
-
-        active_ = false;
-        return;
+            << "    Source has no cells" << exit(FatalError);
     }
 
     volume_ = volume();
@@ -158,7 +171,10 @@ void Foam::fieldValues::cellSource::initialise(const dictionary& dict)
 }
 
 
-void Foam::fieldValues::cellSource::writeFileHeader(const label i)
+void Foam::functionObjects::fieldValues::cellSource::writeFileHeader
+(
+    const label i
+)
 {
     writeCommented(file(), "Source : ");
     file() << sourceTypeNames_[source_] << " " << sourceName_ << endl;
@@ -186,7 +202,7 @@ void Foam::fieldValues::cellSource::writeFileHeader(const label i)
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::fieldValues::cellSource::cellSource
+Foam::functionObjects::fieldValues::cellSource::cellSource
 (
     const word& name,
     const objectRegistry& obr,
@@ -206,74 +222,84 @@ Foam::fieldValues::cellSource::cellSource
 }
 
 
+bool Foam::functionObjects::fieldValues::cellSource::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::fieldValues::cellSource::~cellSource()
+Foam::functionObjects::fieldValues::cellSource::~cellSource()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::fieldValues::cellSource::read(const dictionary& dict)
+void Foam::functionObjects::fieldValues::cellSource::read
+(
+    const dictionary& dict
+)
 {
     fieldValue::read(dict);
 
-    if (active_)
-    {
-        // no additional info to read
-        initialise(dict);
-    }
+    // No additional info to read
+    initialise(dict);
 }
 
 
-void Foam::fieldValues::cellSource::write()
+void Foam::functionObjects::fieldValues::cellSource::write()
 {
     fieldValue::write();
 
-    if (active_)
+    if (Pstream::master())
     {
-        if (Pstream::master())
-        {
-            writeTime(file());
-        }
+        writeTime(file());
+    }
 
-        if (writeVolume_)
+    if (writeVolume_)
+    {
+        volume_ = volume();
+        if (Pstream::master())
         {
-            volume_ = volume();
-            if (Pstream::master())
-            {
-                file() << tab << volume_;
-            }
-            if (log_) Info<< "    total volume = " << volume_ << endl;
+            file() << tab << volume_;
         }
+        if (log_) Info<< "    total volume = " << volume_ << endl;
+    }
 
-        forAll(fields_, i)
-        {
-            const word& fieldName = fields_[i];
-            bool processed = false;
+    forAll(fields_, i)
+    {
+        const word& fieldName = fields_[i];
+        bool processed = false;
 
-            processed = processed || writeValues<scalar>(fieldName);
-            processed = processed || writeValues<vector>(fieldName);
-            processed = processed || writeValues<sphericalTensor>(fieldName);
-            processed = processed || writeValues<symmTensor>(fieldName);
-            processed = processed || writeValues<tensor>(fieldName);
+        processed = processed || writeValues<scalar>(fieldName);
+        processed = processed || writeValues<vector>(fieldName);
+        processed = processed || writeValues<sphericalTensor>(fieldName);
+        processed = processed || writeValues<symmTensor>(fieldName);
+        processed = processed || writeValues<tensor>(fieldName);
 
-            if (!processed)
-            {
-                WarningInFunction
-                    << "Requested field " << fieldName
-                    << " not found in database and not processed"
-                    << endl;
-            }
-        }
-
-        if (Pstream::master())
+        if (!processed)
         {
-            file()<< endl;
+            WarningInFunction
+                << "Requested field " << fieldName
+                << " not found in database and not processed"
+                << endl;
         }
+    }
 
-        if (log_) Info<< endl;
+    if (Pstream::master())
+    {
+        file()<< endl;
     }
+
+    if (log_) Info<< endl;
 }
 
 
diff --git a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H
index 169a816eee4..7de7069c7d6 100644
--- a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H
+++ b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::fieldValues::cellSource
+    Foam::functionObjects::fieldValues::cellSource
 
 Group
     grpFieldFunctionObjects
@@ -114,6 +114,8 @@ SourceFiles
 
 namespace Foam
 {
+namespace functionObjects
+{
 namespace fieldValues
 {
 
@@ -237,14 +239,26 @@ public:
     TypeName("cellSource");
 
 
-    //- Construct from components
-    cellSource
-    (
-        const word& name,
-        const objectRegistry& obr,
-        const dictionary& dict,
-        const bool loadFromFiles = false
-    );
+    // Constructors
+
+        //- Construct from components
+        cellSource
+        (
+            const word& name,
+            const objectRegistry& obr,
+            const dictionary& dict,
+            const bool loadFromFiles = false
+        );
+
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
 
 
     //- Destructor
@@ -283,6 +297,7 @@ public:
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 } // End namespace fieldValues
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceFunctionObject.H b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceFunctionObject.H
index f6e8045457a..a136d782bc7 100644
--- a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceFunctionObject.H
+++ b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceFunctionObject.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) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,8 +43,10 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<fieldValues::cellSource>
-        cellSourceFunctionObject;
+    typedef OutputFilterFunctionObject
+    <
+        functionObjects::fieldValues::cellSource
+    > cellSourceFunctionObject;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceI.H b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceI.H
index 3256881d846..c0a6bee40f9 100644
--- a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceI.H
+++ b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceI.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) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -27,19 +27,18 @@ License
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-inline const Foam::fieldValues::cellSource::sourceType&
-Foam::fieldValues::cellSource::source() const
+inline const Foam::functionObjects::fieldValues::cellSource::sourceType&
+Foam::functionObjects::fieldValues::cellSource::source() const
 {
     return source_;
 }
 
 
 inline const Foam::labelList&
-Foam::fieldValues::cellSource::cellId() const
+Foam::functionObjects::fieldValues::cellSource::cellId() const
 {
     return cellId_;
 }
 
 
 // ************************************************************************* //
-
diff --git a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceTemplates.C b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceTemplates.C
index d678ee53a82..4bb2dad28cf 100644
--- a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceTemplates.C
+++ b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceTemplates.C
@@ -29,7 +29,10 @@ License
 // * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * * //
 
 template<class Type>
-bool Foam::fieldValues::cellSource::validField(const word& fieldName) const
+bool Foam::functionObjects::fieldValues::cellSource::validField
+(
+    const word& fieldName
+) const
 {
     typedef GeometricField<Type, fvPatchField, volMesh> vf;
 
@@ -43,7 +46,8 @@ bool Foam::fieldValues::cellSource::validField(const word& fieldName) const
 
 
 template<class Type>
-Foam::tmp<Foam::Field<Type>> Foam::fieldValues::cellSource::setFieldValues
+Foam::tmp<Foam::Field<Type>>
+Foam::functionObjects::fieldValues::cellSource::setFieldValues
 (
     const word& fieldName,
     const bool mustGet
@@ -68,7 +72,7 @@ Foam::tmp<Foam::Field<Type>> Foam::fieldValues::cellSource::setFieldValues
 
 
 template<class Type>
-Type Foam::fieldValues::cellSource::processValues
+Type Foam::functionObjects::fieldValues::cellSource::processValues
 (
     const Field<Type>& values,
     const scalarField& V,
@@ -140,10 +144,8 @@ Type Foam::fieldValues::cellSource::processValues
 
             break;
         }
-        default:
-        {
-            // Do nothing
-        }
+        case opNone:
+        {}
     }
 
     return result;
@@ -153,7 +155,10 @@ Type Foam::fieldValues::cellSource::processValues
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class Type>
-bool Foam::fieldValues::cellSource::writeValues(const word& fieldName)
+bool Foam::functionObjects::fieldValues::cellSource::writeValues
+(
+    const word& fieldName
+)
 {
     const bool ok = validField<Type>(fieldName);
 
@@ -211,7 +216,8 @@ bool Foam::fieldValues::cellSource::writeValues(const word& fieldName)
 
 
 template<class Type>
-Foam::tmp<Foam::Field<Type>> Foam::fieldValues::cellSource::filterField
+Foam::tmp<Foam::Field<Type>>
+Foam::functionObjects::fieldValues::cellSource::filterField
 (
     const Field<Type>& field
 ) const
diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C
index f37d0b48463..6cf89971d00 100644
--- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C
+++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C
@@ -38,53 +38,68 @@ License
 
 namespace Foam
 {
-    template<>
-    const char* NamedEnum<fieldValues::faceSource::sourceType, 3>::names[] =
-    {
-        "faceZone",
-        "patch",
-        "sampledSurface"
-    };
-
-
-    template<>
-    const char* NamedEnum<fieldValues::faceSource::operationType, 15>::names[] =
-    {
-        "none",
-        "sum",
-        "sumMag",
-        "sumDirection",
-        "sumDirectionBalance",
-        "average",
-        "weightedAverage",
-        "areaAverage",
-        "weightedAreaAverage",
-        "areaIntegrate",
-        "min",
-        "max",
-        "CoV",
-        "areaNormalAverage",
-        "areaNormalIntegrate"
-    };
-
-    namespace fieldValues
-    {
-        defineTypeNameAndDebug(faceSource, 0);
-        addToRunTimeSelectionTable(fieldValue, faceSource, dictionary);
-    }
+namespace functionObjects
+{
+namespace fieldValues
+{
+    defineTypeNameAndDebug(faceSource, 0);
+    addToRunTimeSelectionTable(fieldValue, faceSource, dictionary);
+}
+}
 }
 
+template<>
+const char* Foam::NamedEnum
+<
+    Foam::functionObjects::fieldValues::faceSource::sourceType,
+    3
+>::names[] =
+{
+    "faceZone",
+    "patch",
+    "sampledSurface"
+};
 
-const Foam::NamedEnum<Foam::fieldValues::faceSource::sourceType, 3>
-    Foam::fieldValues::faceSource::sourceTypeNames_;
-
-const Foam::NamedEnum<Foam::fieldValues::faceSource::operationType, 15>
-    Foam::fieldValues::faceSource::operationTypeNames_;
+template<>
+const char* Foam::NamedEnum
+<
+    Foam::functionObjects::fieldValues::faceSource::operationType,
+    15
+>::names[] =
+{
+    "none",
+    "sum",
+    "sumMag",
+    "sumDirection",
+    "sumDirectionBalance",
+    "average",
+    "weightedAverage",
+    "areaAverage",
+    "weightedAreaAverage",
+    "areaIntegrate",
+    "min",
+    "max",
+    "CoV",
+    "areaNormalAverage",
+    "areaNormalIntegrate"
+};
+
+const Foam::NamedEnum
+<
+    Foam::functionObjects::fieldValues::faceSource::sourceType,
+    3
+> Foam::functionObjects::fieldValues::faceSource::sourceTypeNames_;
+
+const Foam::NamedEnum
+<
+    Foam::functionObjects::fieldValues::faceSource::operationType,
+    15
+> Foam::functionObjects::fieldValues::faceSource::operationTypeNames_;
 
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
-void Foam::fieldValues::faceSource::setFaceZoneFaces()
+void Foam::functionObjects::fieldValues::faceSource::setFaceZoneFaces()
 {
     label zoneId = mesh().faceZones().findZoneID(sourceName_);
 
@@ -169,7 +184,7 @@ void Foam::fieldValues::faceSource::setFaceZoneFaces()
 }
 
 
-void Foam::fieldValues::faceSource::setPatchFaces()
+void Foam::functionObjects::fieldValues::faceSource::setPatchFaces()
 {
     const label patchid = mesh().boundaryMesh().findPatchID(sourceName_);
 
@@ -206,7 +221,10 @@ void Foam::fieldValues::faceSource::setPatchFaces()
 }
 
 
-void Foam::fieldValues::faceSource::sampledSurfaceFaces(const dictionary& dict)
+void Foam::functionObjects::fieldValues::faceSource::sampledSurfaceFaces
+(
+    const dictionary& dict
+)
 {
     surfacePtr_ = sampledSurface::New
     (
@@ -219,7 +237,7 @@ void Foam::fieldValues::faceSource::sampledSurfaceFaces(const dictionary& dict)
 }
 
 
-void Foam::fieldValues::faceSource::combineMeshGeometry
+void Foam::functionObjects::fieldValues::faceSource::combineMeshGeometry
 (
     faceList& faces,
     pointField& points
@@ -340,7 +358,7 @@ void Foam::fieldValues::faceSource::combineMeshGeometry
 }
 
 
-void Foam::fieldValues::faceSource::combineSurfaceGeometry
+void Foam::functionObjects::fieldValues::faceSource::combineSurfaceGeometry
 (
     faceList& faces,
     pointField& points
@@ -379,7 +397,7 @@ void Foam::fieldValues::faceSource::combineSurfaceGeometry
 }
 
 
-Foam::scalar Foam::fieldValues::faceSource::totalArea() const
+Foam::scalar Foam::functionObjects::fieldValues::faceSource::totalArea() const
 {
     scalar totalArea;
 
@@ -398,7 +416,10 @@ Foam::scalar Foam::fieldValues::faceSource::totalArea() const
 
 // * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * * //
 
-void Foam::fieldValues::faceSource::initialise(const dictionary& dict)
+void Foam::functionObjects::fieldValues::faceSource::initialise
+(
+    const dictionary& dict
+)
 {
     dict.lookup("sourceName") >> sourceName_;
 
@@ -431,13 +452,10 @@ void Foam::fieldValues::faceSource::initialise(const dictionary& dict)
 
     if (nFaces_ == 0)
     {
-        WarningInFunction
+        FatalErrorInFunction
             << type() << " " << name_ << ": "
             << sourceTypeNames_[source_] << "(" << sourceName_ << "):" << nl
-            << "    Source has no faces - deactivating" << endl;
-
-        active_ = false;
-        return;
+            << "    Source has no faces" << exit(FatalError);
     }
 
     if (surfacePtr_.valid())
@@ -513,7 +531,10 @@ void Foam::fieldValues::faceSource::initialise(const dictionary& dict)
 }
 
 
-void Foam::fieldValues::faceSource::writeFileHeader(const label i)
+void Foam::functionObjects::fieldValues::faceSource::writeFileHeader
+(
+    const label i
+)
 {
     writeCommented(file(), "Source : ");
     file() << sourceTypeNames_[source_] << " " << sourceName_ << endl;
@@ -540,7 +561,7 @@ void Foam::fieldValues::faceSource::writeFileHeader(const label i)
 
 
 template<>
-Foam::scalar Foam::fieldValues::faceSource::processValues
+Foam::scalar Foam::functionObjects::fieldValues::faceSource::processValues
 (
     const Field<scalar>& values,
     const vectorField& Sf,
@@ -571,7 +592,7 @@ Foam::scalar Foam::fieldValues::faceSource::processValues
 
 
 template<>
-Foam::vector Foam::fieldValues::faceSource::processValues
+Foam::vector Foam::functionObjects::fieldValues::faceSource::processValues
 (
     const Field<vector>& values,
     const vectorField& Sf,
@@ -617,7 +638,7 @@ Foam::vector Foam::fieldValues::faceSource::processValues
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::fieldValues::faceSource::faceSource
+Foam::functionObjects::fieldValues::faceSource::faceSource
 (
     const word& name,
     const objectRegistry& obr,
@@ -643,97 +664,106 @@ Foam::fieldValues::faceSource::faceSource
 }
 
 
+bool Foam::functionObjects::fieldValues::faceSource::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::fieldValues::faceSource::~faceSource()
+Foam::functionObjects::fieldValues::faceSource::~faceSource()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::fieldValues::faceSource::read(const dictionary& dict)
+void Foam::functionObjects::fieldValues::faceSource::read
+(
+    const dictionary& dict
+)
 {
     fieldValue::read(dict);
-
-    if (active_)
-    {
-        initialise(dict);
-    }
+    initialise(dict);
 }
 
 
-void Foam::fieldValues::faceSource::write()
+void Foam::functionObjects::fieldValues::faceSource::write()
 {
     fieldValue::write();
 
-    if (active_)
+    if (surfacePtr_.valid())
     {
-        if (surfacePtr_.valid())
-        {
-            surfacePtr_().update();
-        }
+        surfacePtr_().update();
+    }
+
+    if (Pstream::master())
+    {
+        writeTime(file());
+    }
 
+    if (writeArea_)
+    {
+        totalArea_ = totalArea();
         if (Pstream::master())
         {
-            writeTime(file());
+            file() << tab << totalArea_;
         }
+        if (log_) Info<< "    total area = " << totalArea_ << endl;
+    }
 
-        if (writeArea_)
-        {
-            totalArea_ = totalArea();
-            if (Pstream::master())
-            {
-                file() << tab << totalArea_;
-            }
-            if (log_) Info<< "    total area = " << totalArea_ << endl;
-        }
+    // construct weight field. Note: zero size means weight = 1
+    scalarField weightField;
+    if (weightFieldName_ != "none")
+    {
+        weightField =
+            getFieldValues<scalar>
+            (
+                weightFieldName_,
+                true,
+                orientWeightField_
+            );
+    }
 
-        // construct weight field. Note: zero size means weight = 1
-        scalarField weightField;
-        if (weightFieldName_ != "none")
-        {
-            weightField =
-                getFieldValues<scalar>
-                (
-                    weightFieldName_,
-                    true,
-                    orientWeightField_
-                );
-        }
+    // Combine onto master
+    combineFields(weightField);
 
-        // Combine onto master
-        combineFields(weightField);
+    // process the fields
+    forAll(fields_, i)
+    {
+        const word& fieldName = fields_[i];
+        bool ok = false;
 
-        // process the fields
-        forAll(fields_, i)
-        {
-            const word& fieldName = fields_[i];
-            bool ok = false;
-
-            bool orient = i >= orientedFieldsStart_;
-            ok = ok || writeValues<scalar>(fieldName, weightField, orient);
-            ok = ok || writeValues<vector>(fieldName, weightField, orient);
-            ok = ok
-              || writeValues<sphericalTensor>(fieldName, weightField, orient);
-            ok = ok || writeValues<symmTensor>(fieldName, weightField, orient);
-            ok = ok || writeValues<tensor>(fieldName, weightField, orient);
-
-            if (!ok)
-            {
-                WarningInFunction
-                    << "Requested field " << fieldName
-                    << " not found in database and not processed"
-                    << endl;
-            }
-        }
+        bool orient = i >= orientedFieldsStart_;
+        ok = ok || writeValues<scalar>(fieldName, weightField, orient);
+        ok = ok || writeValues<vector>(fieldName, weightField, orient);
+        ok = ok
+          || writeValues<sphericalTensor>(fieldName, weightField, orient);
+        ok = ok || writeValues<symmTensor>(fieldName, weightField, orient);
+        ok = ok || writeValues<tensor>(fieldName, weightField, orient);
 
-        if (Pstream::master())
+        if (!ok)
         {
-            file()<< endl;
+            WarningInFunction
+                << "Requested field " << fieldName
+                << " not found in database and not processed"
+                << endl;
         }
+    }
 
-        if (log_) Info<< endl;
+    if (Pstream::master())
+    {
+        file()<< endl;
     }
+
+    if (log_) Info<< endl;
 }
 
 
diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H
index 8389711a900..ec72bd868ff 100644
--- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H
+++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::fieldValues::faceSource
+    Foam::functionObjects::fieldValues::faceSource
 
 Group
     grpFieldFunctionObjects
@@ -152,6 +152,8 @@ namespace Foam
 
 class sampledSurface;
 
+namespace functionObjects
+{
 namespace fieldValues
 {
 
@@ -337,14 +339,26 @@ public:
     TypeName("faceSource");
 
 
-    //- Construct from components
-    faceSource
-    (
-        const word& name,
-        const objectRegistry& obr,
-        const dictionary& dict,
-        const bool loadFromFiles = false
-    );
+    // Constructors
+
+        //- Construct from components
+        faceSource
+        (
+            const word& name,
+            const objectRegistry& obr,
+            const dictionary& dict,
+            const bool loadFromFiles = false
+        );
+
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
 
 
     //- Destructor
@@ -426,6 +440,7 @@ vector faceSource::processValues
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 } // End namespace fieldValues
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceFunctionObject.H b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceFunctionObject.H
index b25c1042fd6..e368ea942f8 100644
--- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceFunctionObject.H
+++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceFunctionObject.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) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,8 +43,10 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<fieldValues::faceSource>
-        faceSourceFunctionObject;
+    typedef OutputFilterFunctionObject
+    <
+        functionObjects::fieldValues::faceSource
+    > faceSourceFunctionObject;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceI.H b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceI.H
index 5f5a76d165e..8808c1a5b51 100644
--- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceI.H
+++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceI.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) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -27,33 +27,32 @@ License
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-inline const Foam::fieldValues::faceSource::sourceType&
-Foam::fieldValues::faceSource::source() const
+inline const Foam::functionObjects::fieldValues::faceSource::sourceType&
+Foam::functionObjects::fieldValues::faceSource::source() const
 {
     return source_;
 }
 
 
 inline const Foam::labelList&
-Foam::fieldValues::faceSource::faceId() const
+Foam::functionObjects::fieldValues::faceSource::faceId() const
 {
     return faceId_;
 }
 
 
 inline const Foam::labelList&
-Foam::fieldValues::faceSource::facePatch() const
+Foam::functionObjects::fieldValues::faceSource::facePatch() const
 {
     return facePatchId_;
 }
 
 
 inline const Foam::labelList&
-Foam::fieldValues::faceSource::faceSign() const
+Foam::functionObjects::fieldValues::faceSource::faceSign() const
 {
     return faceSign_;
 }
 
 
 // ************************************************************************* //
-
diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C
index eb860ffc068..e11317f5710 100644
--- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C
+++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C
@@ -32,7 +32,10 @@ License
 // * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * * //
 
 template<class Type>
-bool Foam::fieldValues::faceSource::validField(const word& fieldName) const
+bool Foam::functionObjects::fieldValues::faceSource::validField
+(
+    const word& fieldName
+) const
 {
     typedef GeometricField<Type, fvsPatchField, surfaceMesh> sf;
     typedef GeometricField<Type, fvPatchField, volMesh> vf;
@@ -51,7 +54,8 @@ bool Foam::fieldValues::faceSource::validField(const word& fieldName) const
 
 
 template<class Type>
-Foam::tmp<Foam::Field<Type>> Foam::fieldValues::faceSource::getFieldValues
+Foam::tmp<Foam::Field<Type>>
+Foam::functionObjects::fieldValues::faceSource::getFieldValues
 (
     const word& fieldName,
     const bool mustGet,
@@ -120,7 +124,7 @@ Foam::tmp<Foam::Field<Type>> Foam::fieldValues::faceSource::getFieldValues
 
 
 template<class Type>
-Type Foam::fieldValues::faceSource::processSameTypeValues
+Type Foam::functionObjects::fieldValues::faceSource::processSameTypeValues
 (
     const Field<Type>& values,
     const vectorField& Sf,
@@ -236,10 +240,12 @@ Type Foam::fieldValues::faceSource::processSameTypeValues
 
             break;
         }
-        default:
-        {
-            // Do nothing
-        }
+        case opAreaNormalAverage:
+        {}
+        case opAreaNormalIntegrate:
+        {}
+        case opNone:
+        {}
     }
 
     return result;
@@ -247,7 +253,7 @@ Type Foam::fieldValues::faceSource::processSameTypeValues
 
 
 template<class Type>
-Type Foam::fieldValues::faceSource::processValues
+Type Foam::functionObjects::fieldValues::faceSource::processValues
 (
     const Field<Type>& values,
     const vectorField& Sf,
@@ -262,7 +268,7 @@ Type Foam::fieldValues::faceSource::processValues
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class Type>
-bool Foam::fieldValues::faceSource::writeValues
+bool Foam::functionObjects::fieldValues::faceSource::writeValues
 (
     const word& fieldName,
     const scalarField& weightField,
@@ -348,7 +354,8 @@ bool Foam::fieldValues::faceSource::writeValues
 
 
 template<class Type>
-Foam::tmp<Foam::Field<Type>> Foam::fieldValues::faceSource::filterField
+Foam::tmp<Foam::Field<Type>>
+Foam::functionObjects::fieldValues::faceSource::filterField
 (
     const GeometricField<Type, fvPatchField, volMesh>& field,
     const bool applyOrientation
@@ -389,7 +396,8 @@ Foam::tmp<Foam::Field<Type>> Foam::fieldValues::faceSource::filterField
 
 
 template<class Type>
-Foam::tmp<Foam::Field<Type>> Foam::fieldValues::faceSource::filterField
+Foam::tmp<Foam::Field<Type>>
+Foam::functionObjects::fieldValues::faceSource::filterField
 (
     const GeometricField<Type, fvsPatchField, surfaceMesh>& field,
     const bool applyOrientation
diff --git a/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.C b/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.C
index f726a201099..cc01217794a 100644
--- a/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.C
+++ b/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.C
@@ -41,25 +41,19 @@ namespace Foam
 
 void Foam::fieldValue::read(const dictionary& dict)
 {
-    if (active_)
-    {
-        dict_ = dict;
-
-        log_ = dict.lookupOrDefault<Switch>("log", true);
-        dict.lookup("fields") >> fields_;
-        dict.lookup("valueOutput") >> valueOutput_;
-    }
+    dict_ = dict;
+
+    log_ = dict.lookupOrDefault<Switch>("log", true);
+    dict.lookup("fields") >> fields_;
+    dict.lookup("valueOutput") >> valueOutput_;
 }
 
 
 void Foam::fieldValue::write()
 {
-    if (active_)
-    {
-        functionObjectFiles::write();
+    functionObjectFiles::write();
 
-        if (log_) Info<< type() << " " << name_ << " output:" << nl;
-    }
+    if (log_) Info<< type() << " " << name_ << " output:" << nl;
 }
 
 
@@ -78,25 +72,13 @@ Foam::fieldValue::fieldValue
     name_(name),
     obr_(obr),
     dict_(dict),
-    active_(true),
     log_(true),
     sourceName_(word::null),
     fields_(dict.lookup("fields")),
     valueOutput_(dict.lookup("valueOutput")),
     resultDict_(fileName("name"), dictionary::null)
 {
-    // Only active if obr is an fvMesh
-    if (isA<fvMesh>(obr_))
-    {
-        read(dict);
-    }
-    else
-    {
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name << nl
-            << endl;
-        active_ = false;
-    }
+    read(dict);
 }
 
 
@@ -109,33 +91,23 @@ Foam::fieldValue::~fieldValue()
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 void Foam::fieldValue::execute()
-{
-    // Do nothing
-}
+{}
 
 
 void Foam::fieldValue::end()
-{
-    // Do nothing
-}
+{}
 
 
 void Foam::fieldValue::timeSet()
-{
-    // Do nothing
-}
+{}
 
 
 void Foam::fieldValue::updateMesh(const mapPolyMesh&)
-{
-    // Do nothing
-}
+{}
 
 
 void Foam::fieldValue::movePoints(const polyMesh&)
-{
-    // Do nothing
-}
+{}
 
 
 // ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.H b/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.H
index 3abda7336a1..5446f003f72 100644
--- a/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.H
+++ b/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.H
@@ -78,9 +78,6 @@ protected:
         //- Construction dictionary
         dictionary dict_;
 
-        //- Active flag
-        bool active_;
-
         //- Switch to send output to Info as well as to file
         Switch log_;
 
@@ -155,9 +152,6 @@ public:
             //- Return the reference to the construction dictionary
             inline const dictionary& dict() const;
 
-            //- Return the active flag
-            inline bool active() const;
-
             //- Return the switch to send output to Info as well as to file
             inline const Switch& log() const;
 
diff --git a/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValueI.H b/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValueI.H
index 55651a3539e..aac9ba419fb 100644
--- a/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValueI.H
+++ b/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValueI.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -46,12 +46,6 @@ inline const Foam::dictionary& Foam::fieldValue::dict() const
 }
 
 
-inline bool Foam::fieldValue::active() const
-{
-    return active_;
-}
-
-
 inline const Foam::Switch& Foam::fieldValue::log() const
 {
     return log_;
diff --git a/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.C b/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.C
index 32fd6ff41db..c8c81862791 100644
--- a/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.C
+++ b/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.C
@@ -33,51 +33,42 @@ License
 
 namespace Foam
 {
-    namespace fieldValues
-    {
-        defineTypeNameAndDebug(fieldValueDelta, 0);
-    }
-
-    template<>
-    const char*
-    NamedEnum<fieldValues::fieldValueDelta::operationType, 5>::names[] =
-    {
-        "add",
-        "subtract",
-        "min",
-        "max",
-        "average"
-    };
-
-    const NamedEnum<fieldValues::fieldValueDelta::operationType, 5>
-        fieldValues::fieldValueDelta::operationTypeNames_;
+namespace functionObjects
+{
+namespace fieldValues
+{
+    defineTypeNameAndDebug(fieldValueDelta, 0);
+}
+}
 }
 
+template<>
+const char* Foam::NamedEnum
+<
+    Foam::functionObjects::fieldValues::fieldValueDelta::operationType,
+    5
+>::names[] =
+{
+    "add",
+    "subtract",
+    "min",
+    "max",
+    "average"
+};
 
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+const Foam::NamedEnum
+<
+    Foam::functionObjects::fieldValues::fieldValueDelta::operationType,
+    5
+> Foam::functionObjects::fieldValues::fieldValueDelta::operationTypeNames_;
 
-Foam::fieldValues::fieldValueDelta::fieldValueDelta
-(
-    const word& name,
-    const objectRegistry& obr,
-    const dictionary& dict,
-    const bool loadFromFiles
-)
-:
-    functionObjectFiles(obr, name, typeName),
-    name_(name),
-    obr_(obr),
-    loadFromFiles_(loadFromFiles),
-    log_(true),
-    operation_(opSubtract),
-    source1Ptr_(NULL),
-    source2Ptr_(NULL)
-{
-    read(dict);
-}
 
+// * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * * //
 
-void Foam::fieldValues::fieldValueDelta::writeFileHeader(const label i)
+void Foam::functionObjects::fieldValues::fieldValueDelta::writeFileHeader
+(
+    const label i
+)
 {
     const wordList& fields1 = source1Ptr_->fields();
     const wordList& fields2 = source2Ptr_->fields();
@@ -108,15 +99,54 @@ void Foam::fieldValues::fieldValueDelta::writeFileHeader(const label i)
 }
 
 
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::functionObjects::fieldValues::fieldValueDelta::fieldValueDelta
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+:
+    functionObjectFiles(obr, name, typeName),
+    name_(name),
+    obr_(obr),
+    loadFromFiles_(loadFromFiles),
+    log_(true),
+    operation_(opSubtract),
+    source1Ptr_(NULL),
+    source2Ptr_(NULL)
+{
+    read(dict);
+}
+
+
+bool Foam::functionObjects::fieldValues::fieldValueDelta::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::fieldValues::fieldValueDelta::~fieldValueDelta()
+Foam::functionObjects::fieldValues::fieldValueDelta::~fieldValueDelta()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::fieldValues::fieldValueDelta::read(const dictionary& dict)
+void Foam::functionObjects::fieldValues::fieldValueDelta::read
+(
+    const dictionary& dict
+)
 {
     log_ = dict.lookupOrDefault<Switch>("log", true);
     source1Ptr_.reset
@@ -146,7 +176,7 @@ void Foam::fieldValues::fieldValueDelta::read(const dictionary& dict)
 }
 
 
-void Foam::fieldValues::fieldValueDelta::write()
+void Foam::functionObjects::fieldValues::fieldValueDelta::write()
 {
     functionObjectFiles::write();
 
@@ -186,34 +216,30 @@ void Foam::fieldValues::fieldValueDelta::write()
 }
 
 
-void Foam::fieldValues::fieldValueDelta::execute()
-{
-    // Do nothing
-}
+void Foam::functionObjects::fieldValues::fieldValueDelta::execute()
+{}
 
 
-void Foam::fieldValues::fieldValueDelta::end()
-{
-    // Do nothing
-}
+void Foam::functionObjects::fieldValues::fieldValueDelta::end()
+{}
 
 
-void Foam::fieldValues::fieldValueDelta::timeSet()
-{
-    // Do nothing
-}
+void Foam::functionObjects::fieldValues::fieldValueDelta::timeSet()
+{}
 
 
-void Foam::fieldValues::fieldValueDelta::updateMesh(const mapPolyMesh&)
-{
-    // Do nothing
-}
+void Foam::functionObjects::fieldValues::fieldValueDelta::updateMesh
+(
+    const mapPolyMesh&
+)
+{}
 
 
-void Foam::fieldValues::fieldValueDelta::movePoints(const polyMesh&)
-{
-    // Do nothing
-}
+void Foam::functionObjects::fieldValues::fieldValueDelta::movePoints
+(
+    const polyMesh&
+)
+{}
 
 
 // ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.H b/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.H
index 17c68eab75c..cd68f477466 100644
--- a/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.H
+++ b/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::fieldValues::fieldValueDelta
+    Foam::functionObjects::fieldValues::fieldValueDelta
 
 Group
     grpFieldFunctionObjects
@@ -84,7 +84,8 @@ SourceFiles
 
 namespace Foam
 {
-
+namespace functionObjects
+{
 namespace fieldValues
 {
 
@@ -162,14 +163,26 @@ public:
     TypeName("fieldValueDelta");
 
 
-    //- Construct from components
-    fieldValueDelta
-    (
-        const word& name,
-        const objectRegistry& obr,
-        const dictionary& dict,
-        const bool loadFromFiles = false
-    );
+    // Constructors
+
+        //- Construct from components
+        fieldValueDelta
+        (
+            const word& name,
+            const objectRegistry& obr,
+            const dictionary& dict,
+            const bool loadFromFiles = false
+        );
+
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
 
 
     //- Destructor
@@ -206,6 +219,7 @@ public:
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 } // End namespace fieldValues
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDeltaFunctionObject.H b/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDeltaFunctionObject.H
index 120d5991bcb..3a54e034adc 100644
--- a/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDeltaFunctionObject.H
+++ b/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDeltaFunctionObject.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,8 +43,10 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<fieldValues::fieldValueDelta>
-        fieldValueDeltaFunctionObject;
+    typedef OutputFilterFunctionObject
+    <
+        functionObjects::fieldValues::fieldValueDelta
+    > fieldValueDeltaFunctionObject;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDeltaTemplates.C b/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDeltaTemplates.C
index 4cc4c9aea54..075e26f52ab 100644
--- a/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDeltaTemplates.C
+++ b/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDeltaTemplates.C
@@ -30,7 +30,7 @@ License
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class Type>
-Type Foam::fieldValues::fieldValueDelta::applyOperation
+Type Foam::functionObjects::fieldValues::fieldValueDelta::applyOperation
 (
     const Type& value1,
     const Type& value2
@@ -79,7 +79,10 @@ Type Foam::fieldValues::fieldValueDelta::applyOperation
 
 
 template<class Type>
-void Foam::fieldValues::fieldValueDelta::processFields(bool& found)
+void Foam::functionObjects::fieldValues::fieldValueDelta::processFields
+(
+    bool& found
+)
 {
     typedef GeometricField<Type, fvPatchField, volMesh> vf;
     typedef GeometricField<Type, fvsPatchField, surfaceMesh> sf;
diff --git a/src/postProcessing/functionObjects/field/histogram/histogram.C b/src/postProcessing/functionObjects/field/histogram/histogram.C
index 38c0f59c151..68fef256388 100644
--- a/src/postProcessing/functionObjects/field/histogram/histogram.C
+++ b/src/postProcessing/functionObjects/field/histogram/histogram.C
@@ -75,26 +75,13 @@ Foam::functionObjects::histogram::histogram
 )
 :
     functionObjectFile(obr, typeName),
-    name_(name),
-    active_(true)
+    name_(name)
 {
-    // Check if the available mesh is an fvMesh, otherwise deactivate
-    if (isA<fvMesh>(obr_))
-    {
-        read(dict);
-    }
-    else
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_ << nl
-            << endl;
-    }
+    read(dict);
 }
 
 
-Foam::autoPtr<Foam::functionObjects::histogram>
-Foam::functionObjects::histogram::New
+bool Foam::functionObjects::histogram::viable
 (
     const word& name,
     const objectRegistry& obr,
@@ -102,17 +89,8 @@ Foam::functionObjects::histogram::New
     const bool loadFromFiles
 )
 {
-    if (isA<fvMesh>(obr))
-    {
-        return autoPtr<histogram>
-        (
-            new histogram(name, obr, dict, loadFromFiles)
-        );
-    }
-    else
-    {
-        return autoPtr<histogram>();
-    }
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
 }
 
 
@@ -126,16 +104,13 @@ Foam::functionObjects::histogram::~histogram()
 
 void Foam::functionObjects::histogram::read(const dictionary& dict)
 {
-    if (active_)
-    {
-        dict.lookup("field") >> fieldName_;
-        dict.lookup("max") >> max_;
-        min_ = dict.lookupOrDefault<scalar>("min", 0);
-        dict.lookup("nBins") >> nBins_;
+    dict.lookup("field") >> fieldName_;
+    dict.lookup("max") >> max_;
+    min_ = dict.lookupOrDefault<scalar>("min", 0);
+    dict.lookup("nBins") >> nBins_;
 
-        word format(dict.lookup("setFormat"));
-        formatterPtr_ = writer<scalar>::New(format);
-    }
+    word format(dict.lookup("setFormat"));
+    formatterPtr_ = writer<scalar>::New(format);
 }
 
 
@@ -153,87 +128,84 @@ void Foam::functionObjects::histogram::timeSet()
 
 void Foam::functionObjects::histogram::write()
 {
-    if (active_)
-    {
-        Info<< type() << " " << name_ << " output:" << nl;
+    Info<< type() << " " << name_ << " output:" << nl;
 
-        const fvMesh& mesh = refCast<const fvMesh>(obr_);
+    const fvMesh& mesh = refCast<const fvMesh>(obr_);
 
-        autoPtr<volScalarField> fieldPtr;
-        if (obr_.foundObject<volScalarField>(fieldName_))
-        {
-            Info<< "    Looking up field " << fieldName_ << endl;
-        }
-        else
-        {
-            Info<< "    Reading field " << fieldName_ << endl;
-            fieldPtr.reset
+    autoPtr<volScalarField> fieldPtr;
+    if (obr_.foundObject<volScalarField>(fieldName_))
+    {
+        Info<< "    Looking up field " << fieldName_ << endl;
+    }
+    else
+    {
+        Info<< "    Reading field " << fieldName_ << endl;
+        fieldPtr.reset
+        (
+            new volScalarField
             (
-                new volScalarField
+                IOobject
                 (
-                    IOobject
-                    (
-                        fieldName_,
-                        mesh.time().timeName(),
-                        mesh,
-                        IOobject::MUST_READ,
-                        IOobject::NO_WRITE
-                    ),
-                    mesh
-                )
-            );
-        }
-
-        const volScalarField& field =
-        (
-             fieldPtr.valid()
-           ? fieldPtr()
-           : obr_.lookupObject<volScalarField>(fieldName_)
+                    fieldName_,
+                    mesh.time().timeName(),
+                    mesh,
+                    IOobject::MUST_READ,
+                    IOobject::NO_WRITE
+                ),
+                mesh
+            )
         );
+    }
 
-        // Calculate the mid-points of bins for the graph axis
-        pointField xBin(nBins_);
-        const scalar delta = (max_- min_)/nBins_;
+    const volScalarField& field =
+    (
+         fieldPtr.valid()
+       ? fieldPtr()
+       : obr_.lookupObject<volScalarField>(fieldName_)
+    );
 
-        scalar x = min_ + 0.5*delta;
-        forAll(xBin, i)
-        {
-            xBin[i] = point(x, 0, 0);
-            x += delta;
-        }
+    // Calculate the mid-points of bins for the graph axis
+    pointField xBin(nBins_);
+    const scalar delta = (max_- min_)/nBins_;
 
-        scalarField volFrac(nBins_, 0);
-        const scalarField& V = mesh.V();
+    scalar x = min_ + 0.5*delta;
+    forAll(xBin, i)
+    {
+        xBin[i] = point(x, 0, 0);
+        x += delta;
+    }
+
+    scalarField volFrac(nBins_, 0);
+    const scalarField& V = mesh.V();
 
-        forAll(field, celli)
+    forAll(field, celli)
+    {
+        const label bini = (field[celli] - min_)/delta;
+        if (bini >= 0 && bini < nBins_)
         {
-            const label bini = (field[celli] - min_)/delta;
-            if (bini >= 0 && bini < nBins_)
-            {
-                volFrac[bini] += V[celli];
-            }
+            volFrac[bini] += V[celli];
         }
+    }
 
-        Pstream::listCombineGather(volFrac, plusEqOp<scalar>());
+    Pstream::listCombineGather(volFrac, plusEqOp<scalar>());
 
-        if (Pstream::master())
+    if (Pstream::master())
+    {
+        const scalar sumVol = sum(volFrac);
+
+        if (sumVol > SMALL)
         {
-            const scalar sumVol = sum(volFrac);
+            volFrac /= sumVol;
 
-            if (sumVol > SMALL)
-            {
-                volFrac /= sumVol;
+            const coordSet coords
+            (
+                "Volume_Fraction",
+                "x",
+                xBin,
+                mag(xBin)
+            );
 
-                const coordSet coords
-                (
-                    "Volume_Fraction",
-                    "x",
-                    xBin,
-                    mag(xBin)
-                );
-
-                writeGraph(coords, field.name(), volFrac);
-            }
+            writeGraph(coords, field.name(), volFrac);
         }
     }
 }
diff --git a/src/postProcessing/functionObjects/field/histogram/histogram.H b/src/postProcessing/functionObjects/field/histogram/histogram.H
index c39552d8f66..db23fc1bce9 100644
--- a/src/postProcessing/functionObjects/field/histogram/histogram.H
+++ b/src/postProcessing/functionObjects/field/histogram/histogram.H
@@ -99,9 +99,6 @@ class histogram
         //- Name of this histogram
         word name_;
 
-        //- on/off switch
-        bool active_;
-
         //- Name of field
         word fieldName_;
 
@@ -152,9 +149,9 @@ public:
             const bool loadFromFiles = false
         );
 
-        //- Construct on free-store and return pointer if successful
-        //  otherwise return a null-pointer
-        static autoPtr<histogram> New
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
         (
             const word& name,
             const objectRegistry&,
diff --git a/src/postProcessing/functionObjects/field/nearWallFields/nearWallFields.C b/src/postProcessing/functionObjects/field/nearWallFields/nearWallFields.C
index d3cea457093..e9d78673111 100644
--- a/src/postProcessing/functionObjects/field/nearWallFields/nearWallFields.C
+++ b/src/postProcessing/functionObjects/field/nearWallFields/nearWallFields.C
@@ -32,14 +32,17 @@ License
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
+{
+namespace functionObjects
 {
     defineTypeNameAndDebug(nearWallFields, 0);
 }
+}
 
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
-void Foam::nearWallFields::calcAddressing()
+void Foam::functionObjects::nearWallFields::calcAddressing()
 {
     const fvMesh& mesh = refCast<const fvMesh>(obr_);
 
@@ -218,7 +221,7 @@ void Foam::nearWallFields::calcAddressing()
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::nearWallFields::nearWallFields
+Foam::functionObjects::nearWallFields::nearWallFields
 (
     const word& name,
     const objectRegistry& obr,
@@ -228,28 +231,28 @@ Foam::nearWallFields::nearWallFields
 :
     name_(name),
     obr_(obr),
-    active_(true),
     fieldSet_()
 {
-    // Check if the available mesh is an fvMesh otherise deactivate
-    if (isA<fvMesh>(obr_))
-    {
-        read(dict);
-    }
-    else
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_
-            << endl;
-    }
+    read(dict);
+}
+
 
+bool Foam::functionObjects::nearWallFields::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
 }
 
 
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::nearWallFields::~nearWallFields()
+Foam::functionObjects::nearWallFields::~nearWallFields()
 {
     if (debug)
     {
@@ -260,157 +263,142 @@ Foam::nearWallFields::~nearWallFields()
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::nearWallFields::read(const dictionary& dict)
+void Foam::functionObjects::nearWallFields::read(const dictionary& dict)
 {
     if (debug)
     {
         InfoInFunction << endl;
     }
 
-    if (active_)
-    {
-        const fvMesh& mesh = refCast<const fvMesh>(obr_);
+    const fvMesh& mesh = refCast<const fvMesh>(obr_);
 
-        dict.lookup("fields") >> fieldSet_;
-        patchSet_ =
-            mesh.boundaryMesh().patchSet(wordReList(dict.lookup("patches")));
-        distance_ = readScalar(dict.lookup("distance"));
+    dict.lookup("fields") >> fieldSet_;
+    patchSet_ =
+        mesh.boundaryMesh().patchSet(wordReList(dict.lookup("patches")));
+    distance_ = readScalar(dict.lookup("distance"));
 
 
-        // Clear out any previously loaded fields
-        vsf_.clear();
-        vvf_.clear();
-        vSpheretf_.clear();
-        vSymmtf_.clear();
-        vtf_.clear();
-        fieldMap_.clear();
-        reverseFieldMap_.clear();
+    // Clear out any previously loaded fields
+    vsf_.clear();
+    vvf_.clear();
+    vSpheretf_.clear();
+    vSymmtf_.clear();
+    vtf_.clear();
+    fieldMap_.clear();
+    reverseFieldMap_.clear();
 
 
-        // Generate fields with mappedField boundary condition
+    // Generate fields with mappedField boundary condition
 
-        // Convert field to map
-        fieldMap_.resize(2*fieldSet_.size());
-        reverseFieldMap_.resize(2*fieldSet_.size());
-        forAll(fieldSet_, setI)
-        {
-            const word& fldName = fieldSet_[setI].first();
-            const word& sampleFldName = fieldSet_[setI].second();
+    // Convert field to map
+    fieldMap_.resize(2*fieldSet_.size());
+    reverseFieldMap_.resize(2*fieldSet_.size());
+    forAll(fieldSet_, setI)
+    {
+        const word& fldName = fieldSet_[setI].first();
+        const word& sampleFldName = fieldSet_[setI].second();
 
-            fieldMap_.insert(fldName, sampleFldName);
-            reverseFieldMap_.insert(sampleFldName, fldName);
-        }
+        fieldMap_.insert(fldName, sampleFldName);
+        reverseFieldMap_.insert(sampleFldName, fldName);
+    }
 
-        Info<< type() << " " << name_ << ": Sampling " << fieldMap_.size()
-            << " fields" << endl;
+    Info<< type() << " " << name_ << ": Sampling " << fieldMap_.size()
+        << " fields" << endl;
 
-        // Do analysis
-        calcAddressing();
-    }
+    // Do analysis
+    calcAddressing();
 }
 
 
-void Foam::nearWallFields::execute()
+void Foam::functionObjects::nearWallFields::execute()
 {
     if (debug)
     {
         InfoInFunction << endl;
     }
 
-
-    if (active_)
+    if
+    (
+        fieldMap_.size()
+     && vsf_.empty()
+     && vvf_.empty()
+     && vSpheretf_.empty()
+     && vSymmtf_.empty()
+     && vtf_.empty()
+    )
     {
-        if
-        (
-            fieldMap_.size()
-         && vsf_.empty()
-         && vvf_.empty()
-         && vSpheretf_.empty()
-         && vSymmtf_.empty()
-         && vtf_.empty()
-        )
-        {
-            Info<< type() << " " << name_ << ": Creating " << fieldMap_.size()
-                << " fields" << endl;
+        Info<< type() << " " << name_ << ": Creating " << fieldMap_.size()
+            << " fields" << endl;
 
-            createFields(vsf_);
-            createFields(vvf_);
-            createFields(vSpheretf_);
-            createFields(vSymmtf_);
-            createFields(vtf_);
+        createFields(vsf_);
+        createFields(vvf_);
+        createFields(vSpheretf_);
+        createFields(vSymmtf_);
+        createFields(vtf_);
 
-            Info<< endl;
-        }
+        Info<< endl;
+    }
 
-        Info<< type() << " " << name_ << " output:" << nl;
+    Info<< type() << " " << name_ << " output:" << nl;
 
-        Info<< "    Sampling fields to " << obr_.time().timeName()
-            << endl;
+    Info<< "    Sampling fields to " << obr_.time().timeName()
+        << endl;
 
-        sampleFields(vsf_);
-        sampleFields(vvf_);
-        sampleFields(vSpheretf_);
-        sampleFields(vSymmtf_);
-        sampleFields(vtf_);
-    }
+    sampleFields(vsf_);
+    sampleFields(vvf_);
+    sampleFields(vSpheretf_);
+    sampleFields(vSymmtf_);
+    sampleFields(vtf_);
 }
 
 
-void Foam::nearWallFields::end()
+void Foam::functionObjects::nearWallFields::end()
 {
     if (debug)
     {
         InfoInFunction << endl;
     }
 
-    if (active_)
-    {
-        execute();
-    }
+    execute();
 }
 
 
-void Foam::nearWallFields::timeSet()
-{
-    // Do nothing
-}
+void Foam::functionObjects::nearWallFields::timeSet()
+{}
 
 
-void Foam::nearWallFields::write()
+void Foam::functionObjects::nearWallFields::write()
 {
     if (debug)
     {
         InfoInFunction << endl;
     }
 
-    if (active_)
-    {
-        Info<< "    Writing sampled fields to " << obr_.time().timeName()
-            << endl;
-
-        forAll(vsf_, i)
-        {
-            vsf_[i].write();
-        }
-        forAll(vvf_, i)
-        {
-            vvf_[i].write();
-        }
-        forAll(vSpheretf_, i)
-        {
-            vSpheretf_[i].write();
-        }
-        forAll(vSymmtf_, i)
-        {
-            vSymmtf_[i].write();
-        }
-        forAll(vtf_, i)
-        {
-            vtf_[i].write();
-        }
+    Info<< "    Writing sampled fields to " << obr_.time().timeName()
+        << endl;
 
-        Info<< endl;
+    forAll(vsf_, i)
+    {
+        vsf_[i].write();
+    }
+    forAll(vvf_, i)
+    {
+        vvf_[i].write();
     }
+    forAll(vSpheretf_, i)
+    {
+        vSpheretf_[i].write();
+    }
+    forAll(vSymmtf_, i)
+    {
+        vSymmtf_[i].write();
+    }
+    forAll(vtf_, i)
+    {
+        vtf_[i].write();
+    }
+
+    Info<< endl;
 }
 
 
diff --git a/src/postProcessing/functionObjects/field/nearWallFields/nearWallFields.H b/src/postProcessing/functionObjects/field/nearWallFields/nearWallFields.H
index 3862c6426ab..a063ebf15b8 100644
--- a/src/postProcessing/functionObjects/field/nearWallFields/nearWallFields.H
+++ b/src/postProcessing/functionObjects/field/nearWallFields/nearWallFields.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::nearWallFields
+    Foam::functionObjects::nearWallFields
 
 Group
     grpFieldFunctionObjects
@@ -88,6 +88,9 @@ class objectRegistry;
 class dictionary;
 class mapPolyMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                        Class nearWallFields Declaration
 \*---------------------------------------------------------------------------*/
@@ -103,9 +106,6 @@ protected:
 
         const objectRegistry& obr_;
 
-        //- on/off switch
-        bool active_;
-
         // Read from dictionary
 
             //- Fields to process
@@ -197,6 +197,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~nearWallFields();
@@ -237,6 +247,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/field/nearWallFields/nearWallFieldsFunctionObject.H b/src/postProcessing/functionObjects/field/nearWallFields/nearWallFieldsFunctionObject.H
index b2754007274..16146c153cf 100644
--- a/src/postProcessing/functionObjects/field/nearWallFields/nearWallFieldsFunctionObject.H
+++ b/src/postProcessing/functionObjects/field/nearWallFields/nearWallFieldsFunctionObject.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) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,7 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<nearWallFields>
+    typedef OutputFilterFunctionObject<functionObjects::nearWallFields>
         nearWallFieldsFunctionObject;
 }
 
diff --git a/src/postProcessing/functionObjects/field/nearWallFields/nearWallFieldsTemplates.C b/src/postProcessing/functionObjects/field/nearWallFields/nearWallFieldsTemplates.C
index 8045391e3f9..dcb9b325eb9 100644
--- a/src/postProcessing/functionObjects/field/nearWallFields/nearWallFieldsTemplates.C
+++ b/src/postProcessing/functionObjects/field/nearWallFields/nearWallFieldsTemplates.C
@@ -28,7 +28,7 @@ License
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 template<class Type>
-void Foam::nearWallFields::createFields
+void Foam::functionObjects::nearWallFields::createFields
 (
     PtrList<GeometricField<Type, fvPatchField, volMesh>>& sflds
 ) const
@@ -72,7 +72,7 @@ void Foam::nearWallFields::createFields
 
 
 template<class Type>
-void Foam::nearWallFields::sampleBoundaryField
+void Foam::functionObjects::nearWallFields::sampleBoundaryField
 (
     const interpolationCellPoint<Type>& interpolator,
     GeometricField<Type, fvPatchField, volMesh>& fld
@@ -122,7 +122,7 @@ void Foam::nearWallFields::sampleBoundaryField
 
 
 template<class Type>
-void Foam::nearWallFields::sampleFields
+void Foam::functionObjects::nearWallFields::sampleFields
 (
     PtrList<GeometricField<Type, fvPatchField, volMesh>>& sflds
 ) const
diff --git a/src/postProcessing/functionObjects/field/processorField/processorField.C b/src/postProcessing/functionObjects/field/processorField/processorField.C
index f15f3b6a8fb..aef6d4ba8e6 100644
--- a/src/postProcessing/functionObjects/field/processorField/processorField.C
+++ b/src/postProcessing/functionObjects/field/processorField/processorField.C
@@ -31,13 +31,16 @@ License
 
 namespace Foam
 {
-defineTypeNameAndDebug(processorField, 0);
+namespace functionObjects
+{
+    defineTypeNameAndDebug(processorField, 0);
+}
 }
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::processorField::processorField
+Foam::functionObjects::processorField::processorField
 (
     const word& name,
     const objectRegistry& obr,
@@ -46,96 +49,85 @@ Foam::processorField::processorField
 )
 :
     name_(name),
-    obr_(obr),
-    active_(true)
+    obr_(obr)
 {
-    // Check if the available mesh is an fvMesh otherise deactivate
-    if (isA<fvMesh>(obr_))
-    {
-        read(dict);
+    read(dict);
 
-        const fvMesh& mesh = refCast<const fvMesh>(obr_);
+    const fvMesh& mesh = refCast<const fvMesh>(obr_);
 
-        volScalarField* procFieldPtr
+    volScalarField* procFieldPtr
+    (
+        new volScalarField
         (
-            new volScalarField
+            IOobject
             (
-                IOobject
-                (
-                    "processorID",
-                    mesh.time().timeName(),
-                    mesh,
-                    IOobject::NO_READ,
-                    IOobject::NO_WRITE
-                ),
+                "processorID",
+                mesh.time().timeName(),
                 mesh,
-                dimensionedScalar("0", dimless, 0.0)
-            )
-        );
-
-        mesh.objectRegistry::store(procFieldPtr);
-    }
-    else
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_
-            << endl;
-    }
+                IOobject::NO_READ,
+                IOobject::NO_WRITE
+            ),
+            mesh,
+            dimensionedScalar("0", dimless, 0.0)
+        )
+    );
+
+    mesh.objectRegistry::store(procFieldPtr);
+}
+
+
+bool Foam::functionObjects::processorField::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
 }
 
 
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::processorField::~processorField()
+Foam::functionObjects::processorField::~processorField()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::processorField::read(const dictionary& dict)
-{
-    // do nothing
-}
+void Foam::functionObjects::processorField::read(const dictionary& dict)
+{}
 
 
-void Foam::processorField::execute()
+void Foam::functionObjects::processorField::execute()
 {
-    if (active_)
-    {
-        const volScalarField& procField =
-            obr_.lookupObject<volScalarField>("processorID");
-
-        const_cast<volScalarField&>(procField) ==
-            dimensionedScalar("proci", dimless, Pstream::myProcNo());
-    }
+    const volScalarField& procField =
+        obr_.lookupObject<volScalarField>("processorID");
+
+    const_cast<volScalarField&>(procField) ==
+        dimensionedScalar("proci", dimless, Pstream::myProcNo());
 }
 
 
-void Foam::processorField::end()
+void Foam::functionObjects::processorField::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    execute();
 }
 
 
-void Foam::processorField::timeSet()
-{
-    // Do nothing
-}
+void Foam::functionObjects::processorField::timeSet()
+{}
 
 
-void Foam::processorField::write()
+void Foam::functionObjects::processorField::write()
 {
-    if (active_)
-    {
-        const volScalarField& procField =
-            obr_.lookupObject<volScalarField>("processorID");
+    const volScalarField& procField =
+        obr_.lookupObject<volScalarField>("processorID");
 
-        procField.write();
-    }
+    procField.write();
 }
 
 
diff --git a/src/postProcessing/functionObjects/field/processorField/processorField.H b/src/postProcessing/functionObjects/field/processorField/processorField.H
index 88e7ff383d0..aeec8f81172 100644
--- a/src/postProcessing/functionObjects/field/processorField/processorField.H
+++ b/src/postProcessing/functionObjects/field/processorField/processorField.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::processorField
+    Foam::functionObjects::processorField
 
 Group
     grpFieldFunctionObjects
@@ -76,6 +76,9 @@ class objectRegistry;
 class dictionary;
 class mapPolyMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                        Class processorField Declaration
 \*---------------------------------------------------------------------------*/
@@ -92,9 +95,6 @@ protected:
         //- Reference to the database
         const objectRegistry& obr_;
 
-        //- on/off switch
-        bool active_;
-
 
 private:
 
@@ -125,6 +125,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~processorField();
@@ -165,6 +175,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/field/processorField/processorFieldFunctionObject.H b/src/postProcessing/functionObjects/field/processorField/processorFieldFunctionObject.H
index 29b9b29c5b7..98d6b5f0904 100644
--- a/src/postProcessing/functionObjects/field/processorField/processorFieldFunctionObject.H
+++ b/src/postProcessing/functionObjects/field/processorField/processorFieldFunctionObject.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) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,7 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<processorField>
+    typedef OutputFilterFunctionObject<functionObjects::processorField>
         processorFieldFunctionObject;
 }
 
diff --git a/src/postProcessing/functionObjects/field/readFields/readFields.C b/src/postProcessing/functionObjects/field/readFields/readFields.C
index 8af1146dce7..0f792c72654 100644
--- a/src/postProcessing/functionObjects/field/readFields/readFields.C
+++ b/src/postProcessing/functionObjects/field/readFields/readFields.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -30,13 +30,16 @@ License
 
 namespace Foam
 {
-defineTypeNameAndDebug(readFields, 0);
+namespace functionObjects
+{
+    defineTypeNameAndDebug(readFields, 0);
+}
 }
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::readFields::readFields
+Foam::functionObjects::readFields::readFields
 (
     const word& name,
     const objectRegistry& obr,
@@ -46,92 +49,80 @@ Foam::readFields::readFields
 :
     name_(name),
     obr_(obr),
-    active_(true),
     fieldSet_()
 {
-    // Check if the available mesh is an fvMesh otherise deactivate
-    if (isA<fvMesh>(obr_))
-    {
-        read(dict);
-    }
-    else
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_
-            << endl;
-    }
+    read(dict);
+}
+
+
+bool Foam::functionObjects::readFields::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
 }
 
 
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::readFields::~readFields()
+Foam::functionObjects::readFields::~readFields()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::readFields::read(const dictionary& dict)
+void Foam::functionObjects::readFields::read(const dictionary& dict)
 {
-    if (active_)
-    {
-        dict.lookup("fields") >> fieldSet_;
-    }
+    dict.lookup("fields") >> fieldSet_;
 }
 
 
-void Foam::readFields::execute()
+void Foam::functionObjects::readFields::execute()
 {
-    if (active_)
+    // Clear out any previously loaded fields
+    vsf_.clear();
+    vvf_.clear();
+    vSpheretf_.clear();
+    vSymmtf_.clear();
+    vtf_.clear();
+
+    ssf_.clear();
+    svf_.clear();
+    sSpheretf_.clear();
+    sSymmtf_.clear();
+    stf_.clear();
+
+    forAll(fieldSet_, fieldI)
     {
-        // Clear out any previously loaded fields
-        vsf_.clear();
-        vvf_.clear();
-        vSpheretf_.clear();
-        vSymmtf_.clear();
-        vtf_.clear();
-
-        ssf_.clear();
-        svf_.clear();
-        sSpheretf_.clear();
-        sSymmtf_.clear();
-        stf_.clear();
-
-        forAll(fieldSet_, fieldI)
-        {
-            const word& fieldName = fieldSet_[fieldI];
-
-            // If necessary load field
-            loadField<scalar>(fieldName, vsf_, ssf_);
-            loadField<vector>(fieldName, vvf_, svf_);
-            loadField<sphericalTensor>(fieldName, vSpheretf_, sSpheretf_);
-            loadField<symmTensor>(fieldName, vSymmtf_, sSymmtf_);
-            loadField<tensor>(fieldName, vtf_, stf_);
-        }
+        const word& fieldName = fieldSet_[fieldI];
+
+        // If necessary load field
+        loadField<scalar>(fieldName, vsf_, ssf_);
+        loadField<vector>(fieldName, vvf_, svf_);
+        loadField<sphericalTensor>(fieldName, vSpheretf_, sSpheretf_);
+        loadField<symmTensor>(fieldName, vSymmtf_, sSymmtf_);
+        loadField<tensor>(fieldName, vtf_, stf_);
     }
 }
 
 
-void Foam::readFields::end()
+void Foam::functionObjects::readFields::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    execute();
 }
 
 
-void Foam::readFields::timeSet()
-{
-    // Do nothing
-}
+void Foam::functionObjects::readFields::timeSet()
+{}
 
 
-void Foam::readFields::write()
-{
-    // Do nothing
-}
+void Foam::functionObjects::readFields::write()
+{}
 
 
 // ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/field/readFields/readFields.H b/src/postProcessing/functionObjects/field/readFields/readFields.H
index 7706d327bd0..c4500f4f4ab 100644
--- a/src/postProcessing/functionObjects/field/readFields/readFields.H
+++ b/src/postProcessing/functionObjects/field/readFields/readFields.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::readFields
+    Foam::functionObjects::readFields
 
 Group
     grpFieldFunctionObjects
@@ -81,6 +81,9 @@ class objectRegistry;
 class dictionary;
 class mapPolyMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                          Class readFields Declaration
 \*---------------------------------------------------------------------------*/
@@ -96,9 +99,6 @@ protected:
 
         const objectRegistry& obr_;
 
-        //- on/off switch
-        bool active_;
-
         //- Fields to load
         wordList fieldSet_;
 
@@ -156,6 +156,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~readFields();
@@ -196,6 +206,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/field/readFields/readFieldsFunctionObject.H b/src/postProcessing/functionObjects/field/readFields/readFieldsFunctionObject.H
index 82f141fdfa3..0256ca3d50b 100644
--- a/src/postProcessing/functionObjects/field/readFields/readFieldsFunctionObject.H
+++ b/src/postProcessing/functionObjects/field/readFields/readFieldsFunctionObject.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) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,7 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<readFields>
+    typedef OutputFilterFunctionObject<functionObjects::readFields>
         readFieldsFunctionObject;
 }
 
diff --git a/src/postProcessing/functionObjects/field/readFields/readFieldsTemplates.C b/src/postProcessing/functionObjects/field/readFields/readFieldsTemplates.C
index be8ab7a6d2b..37631001c9b 100644
--- a/src/postProcessing/functionObjects/field/readFields/readFieldsTemplates.C
+++ b/src/postProcessing/functionObjects/field/readFields/readFieldsTemplates.C
@@ -31,7 +31,7 @@ License
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 template<class Type>
-void Foam::readFields::loadField
+void Foam::functionObjects::readFields::loadField
 (
     const word& fieldName,
     PtrList<GeometricField<Type, fvPatchField, volMesh>>& vflds,
diff --git a/src/postProcessing/functionObjects/field/regionSizeDistribution/regionSizeDistribution.C b/src/postProcessing/functionObjects/field/regionSizeDistribution/regionSizeDistribution.C
index 523135ee691..418afc3ecf7 100644
--- a/src/postProcessing/functionObjects/field/regionSizeDistribution/regionSizeDistribution.C
+++ b/src/postProcessing/functionObjects/field/regionSizeDistribution/regionSizeDistribution.C
@@ -34,7 +34,10 @@ License
 
 namespace Foam
 {
-    defineTypeNameAndDebug(regionSizeDistribution, 0);
+    namespace functionObjects
+    {
+        defineTypeNameAndDebug(regionSizeDistribution, 0);
+    }
 
     //- Plus op for FixedList<scalar>
     template<class T, unsigned Size>
@@ -58,7 +61,7 @@ namespace Foam
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
-void Foam::regionSizeDistribution::writeGraph
+void Foam::functionObjects::regionSizeDistribution::writeGraph
 (
     const coordSet& coords,
     const word& valueName,
@@ -81,7 +84,7 @@ void Foam::regionSizeDistribution::writeGraph
 }
 
 
-void Foam::regionSizeDistribution::writeAlphaFields
+void Foam::functionObjects::regionSizeDistribution::writeAlphaFields
 (
     const regionSplit& regions,
     const Map<label>& patchRegions,
@@ -163,7 +166,8 @@ void Foam::regionSizeDistribution::writeAlphaFields
 }
 
 
-Foam::Map<Foam::label> Foam::regionSizeDistribution::findPatchRegions
+Foam::Map<Foam::label>
+Foam::functionObjects::regionSizeDistribution::findPatchRegions
 (
     const polyMesh& mesh,
     const regionSplit& regions
@@ -209,7 +213,8 @@ Foam::Map<Foam::label> Foam::regionSizeDistribution::findPatchRegions
 }
 
 
-Foam::tmp<Foam::scalarField> Foam::regionSizeDistribution::divide
+Foam::tmp<Foam::scalarField>
+Foam::functionObjects::regionSizeDistribution::divide
 (
     const scalarField& num,
     const scalarField& denom
@@ -233,7 +238,7 @@ Foam::tmp<Foam::scalarField> Foam::regionSizeDistribution::divide
 }
 
 
-void Foam::regionSizeDistribution::writeGraphs
+void Foam::functionObjects::regionSizeDistribution::writeGraphs
 (
     const word& fieldName,              // name of field
     const labelList& indices,           // index of bin for each region
@@ -274,7 +279,7 @@ void Foam::regionSizeDistribution::writeGraphs
 }
 
 
-void Foam::regionSizeDistribution::writeGraphs
+void Foam::functionObjects::regionSizeDistribution::writeGraphs
 (
     const word& fieldName,              // name of field
     const scalarField& cellField,       // per cell field data
@@ -314,7 +319,7 @@ void Foam::regionSizeDistribution::writeGraphs
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::regionSizeDistribution::regionSizeDistribution
+Foam::functionObjects::regionSizeDistribution::regionSizeDistribution
 (
     const word& name,
     const objectRegistry& obr,
@@ -325,537 +330,526 @@ Foam::regionSizeDistribution::regionSizeDistribution
     functionObjectFiles(obr, name, typeName),
     name_(name),
     obr_(obr),
-    active_(true),
     alphaName_(dict.lookup("field")),
     patchNames_(dict.lookup("patches"))
 {
-    // Check if the available mesh is an fvMesh, otherwise deactivate
-    if (isA<fvMesh>(obr_))
-    {
-        read(dict);
-    }
-    else
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_ << nl
-            << endl;
-    }
+    read(dict);
+}
+
+
+bool Foam::functionObjects::regionSizeDistribution::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
 }
 
 
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::regionSizeDistribution::~regionSizeDistribution()
+Foam::functionObjects::regionSizeDistribution::~regionSizeDistribution()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::regionSizeDistribution::read(const dictionary& dict)
+void Foam::functionObjects::regionSizeDistribution::read(const dictionary& dict)
 {
-    if (active_)
+    dict.lookup("field") >> alphaName_;
+    dict.lookup("patches") >> patchNames_;
+    dict.lookup("threshold") >> threshold_;
+    dict.lookup("maxDiameter") >> maxDiam_;
+    minDiam_ = 0.0;
+    dict.readIfPresent("minDiameter", minDiam_);
+    dict.lookup("nBins") >> nBins_;
+    dict.lookup("fields") >> fields_;
+
+    word format(dict.lookup("setFormat"));
+    formatterPtr_ = writer<scalar>::New(format);
+
+    if (dict.found("coordinateSystem"))
     {
-        dict.lookup("field") >> alphaName_;
-        dict.lookup("patches") >> patchNames_;
-        dict.lookup("threshold") >> threshold_;
-        dict.lookup("maxDiameter") >> maxDiam_;
-        minDiam_ = 0.0;
-        dict.readIfPresent("minDiameter", minDiam_);
-        dict.lookup("nBins") >> nBins_;
-        dict.lookup("fields") >> fields_;
-
-        word format(dict.lookup("setFormat"));
-        formatterPtr_ = writer<scalar>::New(format);
-
-        if (dict.found("coordinateSystem"))
-        {
-            coordSysPtr_.reset(new coordinateSystem(obr_, dict));
+        coordSysPtr_.reset(new coordinateSystem(obr_, dict));
 
-            Info<< "Transforming all vectorFields with coordinate system "
-                << coordSysPtr_().name() << endl;
-        }
+        Info<< "Transforming all vectorFields with coordinate system "
+            << coordSysPtr_().name() << endl;
     }
 }
 
 
-void Foam::regionSizeDistribution::execute()
-{
-    // Do nothing - only valid on write
-}
+void Foam::functionObjects::regionSizeDistribution::execute()
+{}
 
 
-void Foam::regionSizeDistribution::end()
-{
-    // Do nothing - only valid on write
-}
+void Foam::functionObjects::regionSizeDistribution::end()
+{}
 
 
-void Foam::regionSizeDistribution::timeSet()
-{
-    // Do nothing - only valid on write
-}
+void Foam::functionObjects::regionSizeDistribution::timeSet()
+{}
 
 
-void Foam::regionSizeDistribution::write()
+void Foam::functionObjects::regionSizeDistribution::write()
 {
-    if (active_)
-    {
-        Info<< type() << " " << name_ << " output:" << nl;
+    Info<< type() << " " << name_ << " output:" << nl;
 
-        const fvMesh& mesh = refCast<const fvMesh>(obr_);
+    const fvMesh& mesh = refCast<const fvMesh>(obr_);
 
-        autoPtr<volScalarField> alphaPtr;
-        if (obr_.foundObject<volScalarField>(alphaName_))
-        {
-            Info<< "    Looking up field " << alphaName_ << endl;
-        }
-        else
-        {
-            Info<< "    Reading field " << alphaName_ << endl;
-            alphaPtr.reset
+    autoPtr<volScalarField> alphaPtr;
+    if (obr_.foundObject<volScalarField>(alphaName_))
+    {
+        Info<< "    Looking up field " << alphaName_ << endl;
+    }
+    else
+    {
+        Info<< "    Reading field " << alphaName_ << endl;
+        alphaPtr.reset
+        (
+            new volScalarField
             (
-                new volScalarField
+                IOobject
                 (
-                    IOobject
-                    (
-                        alphaName_,
-                        mesh.time().timeName(),
-                        mesh,
-                        IOobject::MUST_READ,
-                        IOobject::NO_WRITE
-                    ),
-                    mesh
-                )
-            );
-        }
+                    alphaName_,
+                    mesh.time().timeName(),
+                    mesh,
+                    IOobject::MUST_READ,
+                    IOobject::NO_WRITE
+                ),
+                mesh
+            )
+        );
+    }
 
 
-        const volScalarField& alpha =
-        (
-             alphaPtr.valid()
-           ? alphaPtr()
-           : obr_.lookupObject<volScalarField>(alphaName_)
-        );
+    const volScalarField& alpha =
+    (
+         alphaPtr.valid()
+       ? alphaPtr()
+       : obr_.lookupObject<volScalarField>(alphaName_)
+    );
 
-        Info<< "    Volume of alpha          = "
-            << fvc::domainIntegrate(alpha).value()
-            << endl;
+    Info<< "    Volume of alpha          = "
+        << fvc::domainIntegrate(alpha).value()
+        << endl;
 
-        const scalar meshVol = gSum(mesh.V());
-        const scalar maxDropletVol = 1.0/6.0*pow(maxDiam_, 3);
-        const scalar delta = (maxDiam_-minDiam_)/nBins_;
+    const scalar meshVol = gSum(mesh.V());
+    const scalar maxDropletVol = 1.0/6.0*pow(maxDiam_, 3);
+    const scalar delta = (maxDiam_-minDiam_)/nBins_;
 
-        Info<< "    Mesh volume              = " << meshVol << endl;
-        Info<< "    Maximum droplet diameter = " << maxDiam_ << endl;
-        Info<< "    Maximum droplet volume   = " << maxDropletVol << endl;
+    Info<< "    Mesh volume              = " << meshVol << endl;
+    Info<< "    Maximum droplet diameter = " << maxDiam_ << endl;
+    Info<< "    Maximum droplet volume   = " << maxDropletVol << endl;
 
 
-        // Determine blocked faces
-        boolList blockedFace(mesh.nFaces(), false);
-        label nBlocked = 0;
+    // Determine blocked faces
+    boolList blockedFace(mesh.nFaces(), false);
+    label nBlocked = 0;
 
+    {
+        for (label facei = 0; facei < mesh.nInternalFaces(); facei++)
         {
-            for (label facei = 0; facei < mesh.nInternalFaces(); facei++)
-            {
-                scalar ownVal = alpha[mesh.faceOwner()[facei]];
-                scalar neiVal = alpha[mesh.faceNeighbour()[facei]];
+            scalar ownVal = alpha[mesh.faceOwner()[facei]];
+            scalar neiVal = alpha[mesh.faceNeighbour()[facei]];
 
-                if
-                (
-                    (ownVal < threshold_ && neiVal > threshold_)
-                 || (ownVal > threshold_ && neiVal < threshold_)
-                )
-                {
-                    blockedFace[facei] = true;
-                    nBlocked++;
-                }
+            if
+            (
+                (ownVal < threshold_ && neiVal > threshold_)
+             || (ownVal > threshold_ && neiVal < threshold_)
+            )
+            {
+                blockedFace[facei] = true;
+                nBlocked++;
             }
+        }
 
-            // Block coupled faces
-            forAll(alpha.boundaryField(), patchi)
+        // Block coupled faces
+        forAll(alpha.boundaryField(), patchi)
+        {
+            const fvPatchScalarField& fvp = alpha.boundaryField()[patchi];
+            if (fvp.coupled())
             {
-                const fvPatchScalarField& fvp = alpha.boundaryField()[patchi];
-                if (fvp.coupled())
-                {
-                    tmp<scalarField> townFld(fvp.patchInternalField());
-                    const scalarField& ownFld = townFld();
-                    tmp<scalarField> tnbrFld(fvp.patchNeighbourField());
-                    const scalarField& nbrFld = tnbrFld();
+                tmp<scalarField> townFld(fvp.patchInternalField());
+                const scalarField& ownFld = townFld();
+                tmp<scalarField> tnbrFld(fvp.patchNeighbourField());
+                const scalarField& nbrFld = tnbrFld();
+
+                label start = fvp.patch().patch().start();
 
-                    label start = fvp.patch().patch().start();
+                forAll(ownFld, i)
+                {
+                    scalar ownVal = ownFld[i];
+                    scalar neiVal = nbrFld[i];
 
-                    forAll(ownFld, i)
+                    if
+                    (
+                        (ownVal < threshold_ && neiVal > threshold_)
+                     || (ownVal > threshold_ && neiVal < threshold_)
+                    )
                     {
-                        scalar ownVal = ownFld[i];
-                        scalar neiVal = nbrFld[i];
-
-                        if
-                        (
-                            (ownVal < threshold_ && neiVal > threshold_)
-                         || (ownVal > threshold_ && neiVal < threshold_)
-                        )
-                        {
-                            blockedFace[start+i] = true;
-                            nBlocked++;
-                        }
+                        blockedFace[start+i] = true;
+                        nBlocked++;
                     }
                 }
             }
         }
+    }
 
 
-        regionSplit regions(mesh, blockedFace);
+    regionSplit regions(mesh, blockedFace);
 
-        Info<< "    Determined " << regions.nRegions()
-            << " disconnected regions" << endl;
+    Info<< "    Determined " << regions.nRegions()
+        << " disconnected regions" << endl;
 
 
-        if (debug)
-        {
-            volScalarField region
+    if (debug)
+    {
+        volScalarField region
+        (
+            IOobject
             (
-                IOobject
-                (
-                    "region",
-                    mesh.time().timeName(),
-                    mesh,
-                    IOobject::NO_READ,
-                    IOobject::NO_WRITE
-                ),
+                "region",
+                mesh.time().timeName(),
                 mesh,
-                dimensionedScalar("zero", dimless, 0)
-            );
-            Info<< "    Dumping region as volScalarField to " << region.name()
-                << endl;
+                IOobject::NO_READ,
+                IOobject::NO_WRITE
+            ),
+            mesh,
+            dimensionedScalar("zero", dimless, 0)
+        );
+        Info<< "    Dumping region as volScalarField to " << region.name()
+            << endl;
 
-            forAll(regions, celli)
-            {
-                region[celli] = regions[celli];
-            }
-            region.correctBoundaryConditions();
-            region.write();
+        forAll(regions, celli)
+        {
+            region[celli] = regions[celli];
         }
+        region.correctBoundaryConditions();
+        region.write();
+    }
 
 
-        // Determine regions connected to supplied patches
-        Map<label> patchRegions(findPatchRegions(mesh, regions));
+    // Determine regions connected to supplied patches
+    Map<label> patchRegions(findPatchRegions(mesh, regions));
 
 
 
-        // Sum all regions
-        const scalarField alphaVol(alpha.primitiveField()*mesh.V());
-        Map<scalar> allRegionVolume(regionSum(regions, mesh.V()));
-        Map<scalar> allRegionAlphaVolume(regionSum(regions, alphaVol));
-        Map<label> allRegionNumCells
+    // Sum all regions
+    const scalarField alphaVol(alpha.primitiveField()*mesh.V());
+    Map<scalar> allRegionVolume(regionSum(regions, mesh.V()));
+    Map<scalar> allRegionAlphaVolume(regionSum(regions, alphaVol));
+    Map<label> allRegionNumCells
+    (
+        regionSum
         (
-            regionSum
-            (
-                regions,
-                labelField(mesh.nCells(), 1.0)
-            )
-        );
+            regions,
+            labelField(mesh.nCells(), 1.0)
+        )
+    );
 
-        if (debug)
+    if (debug)
+    {
+        Info<< "    " << token::TAB << "Region"
+            << token::TAB << "Volume(mesh)"
+            << token::TAB << "Volume(" << alpha.name() << "):"
+            << token::TAB << "nCells"
+            << endl;
+        scalar meshSumVol = 0.0;
+        scalar alphaSumVol = 0.0;
+        label nCells = 0;
+
+        Map<scalar>::const_iterator vIter = allRegionVolume.begin();
+        Map<scalar>::const_iterator aIter = allRegionAlphaVolume.begin();
+        Map<label>::const_iterator numIter = allRegionNumCells.begin();
+        for
+        (
+            ;
+            vIter != allRegionVolume.end()
+         && aIter != allRegionAlphaVolume.end();
+            ++vIter, ++aIter, ++numIter
+        )
         {
-            Info<< "    " << token::TAB << "Region"
-                << token::TAB << "Volume(mesh)"
-                << token::TAB << "Volume(" << alpha.name() << "):"
-                << token::TAB << "nCells"
+            Info<< "    " << token::TAB << vIter.key()
+                << token::TAB << vIter()
+                << token::TAB << aIter()
+                << token::TAB << numIter()
                 << endl;
-            scalar meshSumVol = 0.0;
-            scalar alphaSumVol = 0.0;
-            label nCells = 0;
-
-            Map<scalar>::const_iterator vIter = allRegionVolume.begin();
-            Map<scalar>::const_iterator aIter = allRegionAlphaVolume.begin();
-            Map<label>::const_iterator numIter = allRegionNumCells.begin();
-            for
-            (
-                ;
-                vIter != allRegionVolume.end()
-             && aIter != allRegionAlphaVolume.end();
-                ++vIter, ++aIter, ++numIter
-            )
-            {
-                Info<< "    " << token::TAB << vIter.key()
-                    << token::TAB << vIter()
-                    << token::TAB << aIter()
-                    << token::TAB << numIter()
-                    << endl;
 
-                meshSumVol += vIter();
-                alphaSumVol += aIter();
-                nCells += numIter();
-            }
-            Info<< "    " << token::TAB << "Total:"
-                << token::TAB << meshSumVol
-                << token::TAB << alphaSumVol
-                << token::TAB << nCells
-                << endl;
-            Info<< endl;
+            meshSumVol += vIter();
+            alphaSumVol += aIter();
+            nCells += numIter();
         }
+        Info<< "    " << token::TAB << "Total:"
+            << token::TAB << meshSumVol
+            << token::TAB << alphaSumVol
+            << token::TAB << nCells
+            << endl;
+        Info<< endl;
+    }
 
 
 
 
+    {
+        Info<< "    Patch connected regions (liquid core):" << endl;
+        Info<< token::TAB << "    Region"
+            << token::TAB << "Volume(mesh)"
+            << token::TAB << "Volume(" << alpha.name() << "):"
+            << endl;
+        forAllConstIter(Map<label>, patchRegions, iter)
         {
-            Info<< "    Patch connected regions (liquid core):" << endl;
-            Info<< token::TAB << "    Region"
-                << token::TAB << "Volume(mesh)"
-                << token::TAB << "Volume(" << alpha.name() << "):"
-                << endl;
-            forAllConstIter(Map<label>, patchRegions, iter)
-            {
-                label regionI = iter.key();
-                Info<< "    " << token::TAB << iter.key()
-                    << token::TAB << allRegionVolume[regionI]
-                    << token::TAB << allRegionAlphaVolume[regionI] << endl;
+            label regionI = iter.key();
+            Info<< "    " << token::TAB << iter.key()
+                << token::TAB << allRegionVolume[regionI]
+                << token::TAB << allRegionAlphaVolume[regionI] << endl;
 
-            }
-            Info<< endl;
         }
+        Info<< endl;
+    }
 
-        {
-            Info<< "    Background regions:" << endl;
-            Info<< "    " << token::TAB << "Region"
-                << token::TAB << "Volume(mesh)"
-                << token::TAB << "Volume(" << alpha.name() << "):"
-                << endl;
-            Map<scalar>::const_iterator vIter = allRegionVolume.begin();
-            Map<scalar>::const_iterator aIter = allRegionAlphaVolume.begin();
+    {
+        Info<< "    Background regions:" << endl;
+        Info<< "    " << token::TAB << "Region"
+            << token::TAB << "Volume(mesh)"
+            << token::TAB << "Volume(" << alpha.name() << "):"
+            << endl;
+        Map<scalar>::const_iterator vIter = allRegionVolume.begin();
+        Map<scalar>::const_iterator aIter = allRegionAlphaVolume.begin();
 
-            for
+        for
+        (
+            ;
+            vIter != allRegionVolume.end()
+         && aIter != allRegionAlphaVolume.end();
+            ++vIter, ++aIter
+        )
+        {
+            if
             (
-                ;
-                vIter != allRegionVolume.end()
-             && aIter != allRegionAlphaVolume.end();
-                ++vIter, ++aIter
+               !patchRegions.found(vIter.key())
+             && vIter() >= maxDropletVol
             )
             {
-                if
-                (
-                   !patchRegions.found(vIter.key())
-                 && vIter() >= maxDropletVol
-                )
-                {
-                    Info<< "    " << token::TAB << vIter.key()
-                        << token::TAB << vIter()
-                        << token::TAB << aIter() << endl;
-                }
+                Info<< "    " << token::TAB << vIter.key()
+                    << token::TAB << vIter()
+                    << token::TAB << aIter() << endl;
             }
-            Info<< endl;
         }
+        Info<< endl;
+    }
 
 
 
-        // Split alpha field
-        // ~~~~~~~~~~~~~~~~~
-        // Split into
-        //  - liquidCore            : region connected to inlet patches
-        //  - per region a volume   : for all other regions
-        //  - backgroundAlpha       : remaining alpha
-        writeAlphaFields(regions, patchRegions, allRegionVolume, alpha);
+    // Split alpha field
+    // ~~~~~~~~~~~~~~~~~
+    // Split into
+    //  - liquidCore            : region connected to inlet patches
+    //  - per region a volume   : for all other regions
+    //  - backgroundAlpha       : remaining alpha
+    writeAlphaFields(regions, patchRegions, allRegionVolume, alpha);
 
 
-        // Extract droplet-only allRegionVolume, i.e. delete liquid core
-        // (patchRegions) and background regions from maps.
-        // Note that we have to use mesh volume (allRegionVolume) and not
-        // allRegionAlphaVolume since background might not have alpha in it.
-        forAllIter(Map<scalar>, allRegionVolume, vIter)
+    // Extract droplet-only allRegionVolume, i.e. delete liquid core
+    // (patchRegions) and background regions from maps.
+    // Note that we have to use mesh volume (allRegionVolume) and not
+    // allRegionAlphaVolume since background might not have alpha in it.
+    forAllIter(Map<scalar>, allRegionVolume, vIter)
+    {
+        label regionI = vIter.key();
+        if
+        (
+            patchRegions.found(regionI)
+         || vIter() >= maxDropletVol
+        )
         {
-            label regionI = vIter.key();
-            if
-            (
-                patchRegions.found(regionI)
-             || vIter() >= maxDropletVol
-            )
-            {
-                allRegionVolume.erase(vIter);
-                allRegionAlphaVolume.erase(regionI);
-                allRegionNumCells.erase(regionI);
-            }
+            allRegionVolume.erase(vIter);
+            allRegionAlphaVolume.erase(regionI);
+            allRegionNumCells.erase(regionI);
         }
+    }
 
-        if (allRegionVolume.size())
+    if (allRegionVolume.size())
+    {
+        // Construct mids of bins for plotting
+        pointField xBin(nBins_);
+
+        scalar x = 0.5*delta;
+        forAll(xBin, i)
         {
-            // Construct mids of bins for plotting
-            pointField xBin(nBins_);
+            xBin[i] = point(x, 0, 0);
+            x += delta;
+        }
 
-            scalar x = 0.5*delta;
-            forAll(xBin, i)
-            {
-                xBin[i] = point(x, 0, 0);
-                x += delta;
-            }
+        const coordSet coords("diameter", "x", xBin, mag(xBin));
 
-            const coordSet coords("diameter", "x", xBin, mag(xBin));
 
+        // Get in region order the alpha*volume and diameter
+        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-            // Get in region order the alpha*volume and diameter
-            // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+        const labelList sortedRegions = allRegionAlphaVolume.sortedToc();
 
-            const labelList sortedRegions = allRegionAlphaVolume.sortedToc();
+        scalarField sortedVols
+        (
+            extractData
+            (
+                sortedRegions,
+                allRegionAlphaVolume
+            )
+        );
 
-            scalarField sortedVols
+        // Calculate the diameters
+        scalarField sortedDiameters(sortedVols.size());
+        forAll(sortedDiameters, i)
+        {
+            sortedDiameters[i] = Foam::cbrt
             (
-                extractData
-                (
-                    sortedRegions,
-                    allRegionAlphaVolume
-                )
+                sortedVols[i]
+               *6/constant::mathematical::pi
             );
+        }
 
-            // Calculate the diameters
-            scalarField sortedDiameters(sortedVols.size());
-            forAll(sortedDiameters, i)
-            {
-                sortedDiameters[i] = Foam::cbrt
-                (
-                    sortedVols[i]
-                   *6/constant::mathematical::pi
-                );
-            }
+        // Determine the bin index for all the diameters
+        labelList indices(sortedDiameters.size());
+        forAll(sortedDiameters, i)
+        {
+            indices[i] = (sortedDiameters[i]-minDiam_)/delta;
+        }
 
-            // Determine the bin index for all the diameters
-            labelList indices(sortedDiameters.size());
-            forAll(sortedDiameters, i)
-            {
-                indices[i] = (sortedDiameters[i]-minDiam_)/delta;
-            }
+        // Calculate the counts per diameter bin
+        scalarField binCount(nBins_, 0.0);
+        forAll(sortedDiameters, i)
+        {
+            binCount[indices[i]] += 1.0;
+        }
 
-            // Calculate the counts per diameter bin
-            scalarField binCount(nBins_, 0.0);
-            forAll(sortedDiameters, i)
-            {
-                binCount[indices[i]] += 1.0;
-            }
+        // Write counts
+        if (Pstream::master())
+        {
+            writeGraph(coords, "count", binCount);
+        }
 
-            // Write counts
-            if (Pstream::master())
-            {
-                writeGraph(coords, "count", binCount);
-            }
+        // Write to screen
+        {
+            Info<< "    Bins:" << endl;
+            Info<< "    " << token::TAB << "Bin"
+                << token::TAB << "Min diameter"
+                << token::TAB << "Count:"
+                << endl;
 
-            // Write to screen
+            scalar diam = 0.0;
+            forAll(binCount, binI)
             {
-                Info<< "    Bins:" << endl;
-                Info<< "    " << token::TAB << "Bin"
-                    << token::TAB << "Min diameter"
-                    << token::TAB << "Count:"
-                    << endl;
-
-                scalar diam = 0.0;
-                forAll(binCount, binI)
-                {
-                    Info<< "    " << token::TAB << binI
-                        << token::TAB << diam
-                        << token::TAB << binCount[binI] << endl;
-                    diam += delta;
-                }
-                Info<< endl;
+                Info<< "    " << token::TAB << binI
+                    << token::TAB << diam
+                    << token::TAB << binCount[binI] << endl;
+                diam += delta;
             }
+            Info<< endl;
+        }
 
 
-            // Write average and deviation of droplet volume.
-            writeGraphs
-            (
-                "volume",           // name of field
-                indices,            // per region the bin index
-                sortedVols,         // per region field data
-                binCount,           // per bin number of regions
-                coords              // graph data for bins
-            );
+        // Write average and deviation of droplet volume.
+        writeGraphs
+        (
+            "volume",           // name of field
+            indices,            // per region the bin index
+            sortedVols,         // per region field data
+            binCount,           // per bin number of regions
+            coords              // graph data for bins
+        );
 
-            // Collect some more field
-            {
-                wordList scalarNames(obr_.names(volScalarField::typeName));
-                labelList selected = findStrings(fields_, scalarNames);
+        // Collect some more field
+        {
+            wordList scalarNames(obr_.names(volScalarField::typeName));
+            labelList selected = findStrings(fields_, scalarNames);
 
-                forAll(selected, i)
-                {
-                    const word& fldName = scalarNames[selected[i]];
-                    Info<< "    Scalar field " << fldName << endl;
+            forAll(selected, i)
+            {
+                const word& fldName = scalarNames[selected[i]];
+                Info<< "    Scalar field " << fldName << endl;
 
-                    const scalarField& fld = obr_.lookupObject
-                    <
-                        volScalarField
-                    >(fldName).primitiveField();
+                const scalarField& fld = obr_.lookupObject
+                <
+                    volScalarField
+                >(fldName).primitiveField();
 
-                    writeGraphs
-                    (
-                        fldName,            // name of field
-                        alphaVol*fld,       // per cell field data
+                writeGraphs
+                (
+                    fldName,            // name of field
+                    alphaVol*fld,       // per cell field data
 
-                        regions,            // per cell the region(=droplet)
-                        sortedRegions,      // valid regions in sorted order
-                        1.0/sortedVols,     // per region normalisation
+                    regions,            // per cell the region(=droplet)
+                    sortedRegions,      // valid regions in sorted order
+                    1.0/sortedVols,     // per region normalisation
 
-                        indices,            // index of bin for each region
-                        binCount,           // per bin number of regions
-                        coords              // graph data for bins
-                    );
-                }
+                    indices,            // index of bin for each region
+                    binCount,           // per bin number of regions
+                    coords              // graph data for bins
+                );
             }
-            {
-                wordList vectorNames(obr_.names(volVectorField::typeName));
-                labelList selected = findStrings(fields_, vectorNames);
-
-                forAll(selected, i)
-                {
-                    const word& fldName = vectorNames[selected[i]];
-                    Info<< "    Vector field " << fldName << endl;
+        }
+        {
+            wordList vectorNames(obr_.names(volVectorField::typeName));
+            labelList selected = findStrings(fields_, vectorNames);
 
-                    vectorField fld = obr_.lookupObject
-                    <
-                        volVectorField
-                    >(fldName).primitiveField();
+            forAll(selected, i)
+            {
+                const word& fldName = vectorNames[selected[i]];
+                Info<< "    Vector field " << fldName << endl;
 
-                    if (coordSysPtr_.valid())
-                    {
-                        Info<< "Transforming vector field " << fldName
-                            << " with coordinate system "
-                            << coordSysPtr_().name()
-                            << endl;
+                vectorField fld = obr_.lookupObject
+                <
+                    volVectorField
+                >(fldName).primitiveField();
 
-                        fld = coordSysPtr_().localVector(fld);
-                    }
+                if (coordSysPtr_.valid())
+                {
+                    Info<< "Transforming vector field " << fldName
+                        << " with coordinate system "
+                        << coordSysPtr_().name()
+                        << endl;
 
+                    fld = coordSysPtr_().localVector(fld);
+                }
 
-                    // Components
 
-                    for (direction cmp = 0; cmp < vector::nComponents; cmp++)
-                    {
-                        writeGraphs
-                        (
-                            fldName + vector::componentNames[cmp],
-                            alphaVol*fld.component(cmp),// per cell field data
-
-                            regions,        // per cell the region(=droplet)
-                            sortedRegions,  // valid regions in sorted order
-                            1.0/sortedVols, // per region normalisation
-
-                            indices,        // index of bin for each region
-                            binCount,       // per bin number of regions
-                            coords          // graph data for bins
-                        );
-                    }
+                // Components
 
-                    // Magnitude
+                for (direction cmp = 0; cmp < vector::nComponents; cmp++)
+                {
                     writeGraphs
                     (
-                        fldName + "mag",    // name of field
-                        alphaVol*mag(fld),  // per cell field data
+                        fldName + vector::componentNames[cmp],
+                        alphaVol*fld.component(cmp),// per cell field data
 
-                        regions,            // per cell the region(=droplet)
-                        sortedRegions,      // valid regions in sorted order
-                        1.0/sortedVols,     // per region normalisation
+                        regions,        // per cell the region(=droplet)
+                        sortedRegions,  // valid regions in sorted order
+                        1.0/sortedVols, // per region normalisation
 
-                        indices,            // index of bin for each region
-                        binCount,           // per bin number of regions
-                        coords              // graph data for bins
+                        indices,        // index of bin for each region
+                        binCount,       // per bin number of regions
+                        coords          // graph data for bins
                     );
                 }
+
+                // Magnitude
+                writeGraphs
+                (
+                    fldName + "mag",    // name of field
+                    alphaVol*mag(fld),  // per cell field data
+
+                    regions,            // per cell the region(=droplet)
+                    sortedRegions,      // valid regions in sorted order
+                    1.0/sortedVols,     // per region normalisation
+
+                    indices,            // index of bin for each region
+                    binCount,           // per bin number of regions
+                    coords              // graph data for bins
+                );
             }
         }
     }
diff --git a/src/postProcessing/functionObjects/field/regionSizeDistribution/regionSizeDistribution.H b/src/postProcessing/functionObjects/field/regionSizeDistribution/regionSizeDistribution.H
index e994e5667aa..108c17ad8bb 100644
--- a/src/postProcessing/functionObjects/field/regionSizeDistribution/regionSizeDistribution.H
+++ b/src/postProcessing/functionObjects/field/regionSizeDistribution/regionSizeDistribution.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::regionSizeDistribution
+    Foam::functionObjects::regionSizeDistribution
 
 Group
     grpFieldFunctionObjects
@@ -126,6 +126,9 @@ class mapPolyMesh;
 class regionSplit;
 class polyMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                    Class regionSizeDistribution Declaration
 \*---------------------------------------------------------------------------*/
@@ -141,9 +144,6 @@ class regionSizeDistribution
 
         const objectRegistry& obr_;
 
-        //- on/off switch
-        bool active_;
-
         //- Name of field
         word alphaName_;
 
@@ -255,6 +255,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     // Destructor
 
@@ -296,6 +306,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/field/regionSizeDistribution/regionSizeDistributionFunctionObject.H b/src/postProcessing/functionObjects/field/regionSizeDistribution/regionSizeDistributionFunctionObject.H
index 97526d0c3ab..adb23034ab9 100644
--- a/src/postProcessing/functionObjects/field/regionSizeDistribution/regionSizeDistributionFunctionObject.H
+++ b/src/postProcessing/functionObjects/field/regionSizeDistribution/regionSizeDistributionFunctionObject.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,7 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<regionSizeDistribution>
+    typedef OutputFilterFunctionObject<functionObjects::regionSizeDistribution>
         regionSizeDistributionFunctionObject;
 }
 
diff --git a/src/postProcessing/functionObjects/field/regionSizeDistribution/regionSizeDistributionTemplates.C b/src/postProcessing/functionObjects/field/regionSizeDistribution/regionSizeDistributionTemplates.C
index 8f707f4e055..a74e76afd0e 100644
--- a/src/postProcessing/functionObjects/field/regionSizeDistribution/regionSizeDistributionTemplates.C
+++ b/src/postProcessing/functionObjects/field/regionSizeDistribution/regionSizeDistributionTemplates.C
@@ -30,7 +30,7 @@ License
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class Type>
-Foam::Map<Type> Foam::regionSizeDistribution::regionSum
+Foam::Map<Type> Foam::functionObjects::regionSizeDistribution::regionSum
 (
     const regionSplit& regions,
     const Field<Type>& fld
@@ -60,9 +60,8 @@ Foam::Map<Type> Foam::regionSizeDistribution::regionSum
 }
 
 
-// Get data in sortedToc order
 template<class Type>
-Foam::List<Type> Foam::regionSizeDistribution::extractData
+Foam::List<Type> Foam::functionObjects::regionSizeDistribution::extractData
 (
     const UList<label>& keys,
     const Map<Type>& regionData
diff --git a/src/postProcessing/functionObjects/field/streamLine/streamLine.C b/src/postProcessing/functionObjects/field/streamLine/streamLine.C
index 94e490630e4..a5015e79500 100644
--- a/src/postProcessing/functionObjects/field/streamLine/streamLine.C
+++ b/src/postProcessing/functionObjects/field/streamLine/streamLine.C
@@ -40,14 +40,17 @@ License
 
 namespace Foam
 {
-defineTypeNameAndDebug(streamLine, 0);
+namespace functionObjects
+{
+    defineTypeNameAndDebug(streamLine, 0);
+}
 }
 
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
 Foam::autoPtr<Foam::indirectPrimitivePatch>
-Foam::streamLine::wallPatch() const
+Foam::functionObjects::streamLine::wallPatch() const
 {
     const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
 
@@ -57,7 +60,6 @@ Foam::streamLine::wallPatch() const
 
     forAll(patches, patchi)
     {
-        //if (!polyPatch::constraintType(patches[patchi].type()))
         if (isA<wallPolyPatch>(patches[patchi]))
         {
             nFaces += patches[patchi].size();
@@ -70,7 +72,6 @@ Foam::streamLine::wallPatch() const
 
     forAll(patches, patchi)
     {
-        //if (!polyPatch::constraintType(patches[patchi].type()))
         if (isA<wallPolyPatch>(patches[patchi]))
         {
             const polyPatch& pp = patches[patchi];
@@ -97,7 +98,7 @@ Foam::streamLine::wallPatch() const
 }
 
 
-void Foam::streamLine::track()
+void Foam::functionObjects::streamLine::track()
 {
     const Time& runTime = obr_.time();
     const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
@@ -121,7 +122,7 @@ void Foam::streamLine::track()
                 mesh,
                 seedPoints[i],
                 seedPoints.cells()[i],
-                lifeTime_               // lifetime
+                lifeTime_
             )
         );
     }
@@ -294,7 +295,7 @@ void Foam::streamLine::track()
     }
 
 
-    // additional particle info
+    // Additional particle info
     streamLineParticle::trackingData td
     (
         particles,
@@ -322,7 +323,7 @@ void Foam::streamLine::track()
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::streamLine::streamLine
+Foam::functionObjects::streamLine::streamLine
 (
     const word& name,
     const objectRegistry& obr,
@@ -334,244 +335,217 @@ Foam::streamLine::streamLine
     name_(name),
     obr_(obr),
     loadFromFiles_(loadFromFiles),
-    active_(true),
     nSubCycle_(0)
 {
-    // Only active if a fvMesh is available
-    if (isA<fvMesh>(obr_))
-    {
-        read(dict_);
-    }
-    else
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating."
-            << nl << endl;
-    }
+    read(dict_);
+}
+
+
+bool Foam::functionObjects::streamLine::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
 }
 
 
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::streamLine::~streamLine()
+Foam::functionObjects::streamLine::~streamLine()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::streamLine::read(const dictionary& dict)
+void Foam::functionObjects::streamLine::read(const dictionary& dict)
 {
-    if (active_)
-    {
-        Info<< type() << " " << name_ << ":" << nl;
+    Info<< type() << " " << name_ << ":" << nl;
 
-        //dict_ = dict;
-        dict.lookup("fields") >> fields_;
-        if (dict.found("UName"))
-        {
-            dict.lookup("UName") >> UName_;
-        }
-        else
+    dict.lookup("fields") >> fields_;
+    if (dict.found("UName"))
+    {
+        dict.lookup("UName") >> UName_;
+    }
+    else
+    {
+        UName_ = "U";
+        if (dict.found("U"))
         {
-            UName_ = "U";
-            if (dict.found("U"))
-            {
-                IOWarningInFunction(dict)
-                    << "Using deprecated entry \"U\"."
-                    << " Please use \"UName\" instead."
-                    << endl;
-                dict.lookup("U") >> UName_;
-            }
+            IOWarningInFunction(dict)
+                << "Using deprecated entry \"U\"."
+                << " Please use \"UName\" instead."
+                << endl;
+            dict.lookup("U") >> UName_;
         }
+    }
 
-        if (findIndex(fields_, UName_) == -1)
-        {
-            FatalIOErrorInFunction(dict)
-                << "Velocity field for tracking " << UName_
-                << " should be present in the list of fields " << fields_
-                << exit(FatalIOError);
-        }
+    if (findIndex(fields_, UName_) == -1)
+    {
+        FatalIOErrorInFunction(dict)
+            << "Velocity field for tracking " << UName_
+            << " should be present in the list of fields " << fields_
+            << exit(FatalIOError);
+    }
 
 
-        dict.lookup("trackForward") >> trackForward_;
-        dict.lookup("lifeTime") >> lifeTime_;
-        if (lifeTime_ < 1)
-        {
-            FatalErrorInFunction
-                << "Illegal value " << lifeTime_ << " for lifeTime"
-                << exit(FatalError);
-        }
+    dict.lookup("trackForward") >> trackForward_;
+    dict.lookup("lifeTime") >> lifeTime_;
+    if (lifeTime_ < 1)
+    {
+        FatalErrorInFunction
+            << "Illegal value " << lifeTime_ << " for lifeTime"
+            << exit(FatalError);
+    }
 
 
-        bool subCycling = dict.found("nSubCycle");
-        bool fixedLength = dict.found("trackLength");
+    bool subCycling = dict.found("nSubCycle");
+    bool fixedLength = dict.found("trackLength");
 
-        if (subCycling && fixedLength)
-        {
-            FatalIOErrorInFunction(dict)
-                << "Cannot both specify automatic time stepping (through '"
-                << "nSubCycle' specification) and fixed track length (through '"
-                << "trackLength')"
-                << exit(FatalIOError);
-        }
+    if (subCycling && fixedLength)
+    {
+        FatalIOErrorInFunction(dict)
+            << "Cannot both specify automatic time stepping (through '"
+            << "nSubCycle' specification) and fixed track length (through '"
+            << "trackLength')"
+            << exit(FatalIOError);
+    }
 
 
-        nSubCycle_ = 1;
-        if (dict.readIfPresent("nSubCycle", nSubCycle_))
-        {
-            trackLength_ = VGREAT;
-            if (nSubCycle_ < 1)
-            {
-                nSubCycle_ = 1;
-            }
-            Info<< "    automatic track length specified through"
-                << " number of sub cycles : " << nSubCycle_ << nl << endl;
-        }
-        else
+    nSubCycle_ = 1;
+    if (dict.readIfPresent("nSubCycle", nSubCycle_))
+    {
+        trackLength_ = VGREAT;
+        if (nSubCycle_ < 1)
         {
-            dict.lookup("trackLength") >> trackLength_;
-
-            Info<< "    fixed track length specified : "
-                << trackLength_ << nl << endl;
+            nSubCycle_ = 1;
         }
+        Info<< "    automatic track length specified through"
+            << " number of sub cycles : " << nSubCycle_ << nl << endl;
+    }
+    else
+    {
+        dict.lookup("trackLength") >> trackLength_;
 
+        Info<< "    fixed track length specified : "
+            << trackLength_ << nl << endl;
+    }
 
-        interpolationScheme_ = dict.lookupOrDefault
-        (
-            "interpolationScheme",
-            interpolationCellPoint<scalar>::typeName
-        );
 
-        //Info<< "    using interpolation " << interpolationScheme_
-        //    << endl;
+    interpolationScheme_ = dict.lookupOrDefault
+    (
+        "interpolationScheme",
+        interpolationCellPoint<scalar>::typeName
+    );
 
-        cloudName_ = dict.lookupOrDefault<word>("cloudName", "streamLine");
-        dict.lookup("seedSampleSet") >> seedSet_;
+    cloudName_ = dict.lookupOrDefault<word>("cloudName", "streamLine");
+    dict.lookup("seedSampleSet") >> seedSet_;
 
-        const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
+    const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
 
-        meshSearchPtr_.reset(new meshSearch(mesh));
+    meshSearchPtr_.reset(new meshSearch(mesh));
 
-        const dictionary& coeffsDict = dict.subDict(seedSet_ + "Coeffs");
-        sampledSetPtr_ = sampledSet::New
-        (
-            seedSet_,
-            mesh,
-            meshSearchPtr_(),
-            coeffsDict
-        );
-        coeffsDict.lookup("axis") >> sampledSetAxis_;
+    const dictionary& coeffsDict = dict.subDict(seedSet_ + "Coeffs");
+    sampledSetPtr_ = sampledSet::New
+    (
+        seedSet_,
+        mesh,
+        meshSearchPtr_(),
+        coeffsDict
+    );
+    coeffsDict.lookup("axis") >> sampledSetAxis_;
 
-        scalarFormatterPtr_ = writer<scalar>::New(dict.lookup("setFormat"));
-        vectorFormatterPtr_ = writer<vector>::New(dict.lookup("setFormat"));
-    }
+    scalarFormatterPtr_ = writer<scalar>::New(dict.lookup("setFormat"));
+    vectorFormatterPtr_ = writer<vector>::New(dict.lookup("setFormat"));
 }
 
 
-void Foam::streamLine::execute()
-{
-//    const Time& runTime = obr_.time();
-//    Pout<< "**streamLine::execute : time:" << runTime.timeName() << endl;
-//
-//    bool isOutputTime = false;
-//
-//    const functionObjectList& fobs = runTime.functionObjects();
-//
-//    forAll(fobs, i)
-//    {
-//        if (isA<streamLineFunctionObject>(fobs[i]))
-//        {
-//            const streamLineFunctionObject& fo =
-//                dynamic_cast<const streamLineFunctionObject&>(fobs[i]);
-//
-//            if (fo.name() == name_)
-//            {
-//                Pout<< "found me:" << i << endl;
-//                if (fo.outputControl().output())
-//                {
-//                    isOutputTime = true;
-//                    break;
-//                }
-//            }
-//        }
-//    }
-//
-//
-//    if (active_ && isOutputTime)
-//    {
-//        track();
-//    }
-}
+void Foam::functionObjects::streamLine::execute()
+{}
 
 
-void Foam::streamLine::end()
+void Foam::functionObjects::streamLine::end()
 {}
 
 
-void Foam::streamLine::timeSet()
+void Foam::functionObjects::streamLine::timeSet()
 {}
 
 
-void Foam::streamLine::write()
+void Foam::functionObjects::streamLine::write()
 {
-    if (active_)
-    {
-        Info<< type() << " " << name_ << " output:" << nl;
+    Info<< type() << " " << name_ << " output:" << nl;
 
-        const Time& runTime = obr_.time();
-        const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
+    const Time& runTime = obr_.time();
+    const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
 
 
-        // Do all injection and tracking
-        track();
+    // Do all injection and tracking
+    track();
 
 
-        if (Pstream::parRun())
-        {
-            // Append slave tracks to master ones
-            // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    if (Pstream::parRun())
+    {
+        // Append slave tracks to master ones
+        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-            globalIndex globalTrackIDs(allTracks_.size());
+        globalIndex globalTrackIDs(allTracks_.size());
 
-            // Construct a distribution map to pull all to the master.
-            labelListList sendMap(Pstream::nProcs());
-            labelListList recvMap(Pstream::nProcs());
+        // Construct a distribution map to pull all to the master.
+        labelListList sendMap(Pstream::nProcs());
+        labelListList recvMap(Pstream::nProcs());
 
-            if (Pstream::master())
-            {
-                // Master: receive all. My own first, then consecutive
-                // processors.
-                label trackI = 0;
+        if (Pstream::master())
+        {
+            // Master: receive all. My own first, then consecutive
+            // processors.
+            label trackI = 0;
 
-                forAll(recvMap, proci)
+            forAll(recvMap, proci)
+            {
+                labelList& fromProc = recvMap[proci];
+                fromProc.setSize(globalTrackIDs.localSize(proci));
+                forAll(fromProc, i)
                 {
-                    labelList& fromProc = recvMap[proci];
-                    fromProc.setSize(globalTrackIDs.localSize(proci));
-                    forAll(fromProc, i)
-                    {
-                        fromProc[i] = trackI++;
-                    }
+                    fromProc[i] = trackI++;
                 }
             }
+        }
 
-            labelList& toMaster = sendMap[0];
-            toMaster.setSize(globalTrackIDs.localSize());
-            forAll(toMaster, i)
-            {
-                toMaster[i] = i;
-            }
+        labelList& toMaster = sendMap[0];
+        toMaster.setSize(globalTrackIDs.localSize());
+        forAll(toMaster, i)
+        {
+            toMaster[i] = i;
+        }
 
-            const mapDistribute distMap
-            (
-                globalTrackIDs.size(),
-                sendMap.xfer(),
-                recvMap.xfer()
-            );
+        const mapDistribute distMap
+        (
+            globalTrackIDs.size(),
+            sendMap.xfer(),
+            recvMap.xfer()
+        );
 
 
-            // Distribute the track positions. Note: use scheduled comms
-            // to prevent buffering.
+        // Distribute the track positions. Note: use scheduled comms
+        // to prevent buffering.
+        mapDistribute::distribute
+        (
+            Pstream::scheduled,
+            distMap.schedule(),
+            distMap.constructSize(),
+            distMap.subMap(),
+            distMap.constructMap(),
+            allTracks_
+        );
+
+        // Distribute the scalars
+        forAll(allScalars_, scalarI)
+        {
             mapDistribute::distribute
             (
                 Pstream::scheduled,
@@ -579,193 +553,168 @@ void Foam::streamLine::write()
                 distMap.constructSize(),
                 distMap.subMap(),
                 distMap.constructMap(),
-                allTracks_
+                allScalars_[scalarI]
             );
-
-            // Distribute the scalars
-            forAll(allScalars_, scalarI)
-            {
-                mapDistribute::distribute
-                (
-                    Pstream::scheduled,
-                    distMap.schedule(),
-                    distMap.constructSize(),
-                    distMap.subMap(),
-                    distMap.constructMap(),
-                    allScalars_[scalarI]
-                );
-            }
-            // Distribute the vectors
-            forAll(allVectors_, vectorI)
-            {
-                mapDistribute::distribute
-                (
-                    Pstream::scheduled,
-                    distMap.schedule(),
-                    distMap.constructSize(),
-                    distMap.subMap(),
-                    distMap.constructMap(),
-                    allVectors_[vectorI]
-                );
-            }
         }
-
-
-        label n = 0;
-        forAll(allTracks_, trackI)
+        // Distribute the vectors
+        forAll(allVectors_, vectorI)
         {
-            n += allTracks_[trackI].size();
+            mapDistribute::distribute
+            (
+                Pstream::scheduled,
+                distMap.schedule(),
+                distMap.constructSize(),
+                distMap.subMap(),
+                distMap.constructMap(),
+                allVectors_[vectorI]
+            );
         }
+    }
 
-        Info<< "    Tracks:" << allTracks_.size() << nl
-            << "    Total samples:" << n
-            << endl;
 
+    label n = 0;
+    forAll(allTracks_, trackI)
+    {
+        n += allTracks_[trackI].size();
+    }
 
-        // Massage into form suitable for writers
-        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    Info<< "    Tracks:" << allTracks_.size() << nl
+        << "    Total samples:" << n
+        << endl;
 
-        if (Pstream::master() && allTracks_.size())
-        {
-            // Make output directory
 
-            fileName vtkPath
-            (
-                Pstream::parRun()
-              ? runTime.path()/".."/"postProcessing"/"sets"/name()
-              : runTime.path()/"postProcessing"/"sets"/name()
-            );
-            if (mesh.name() != fvMesh::defaultRegion)
-            {
-                vtkPath = vtkPath/mesh.name();
-            }
-            vtkPath = vtkPath/mesh.time().timeName();
+    // Massage into form suitable for writers
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-            mkDir(vtkPath);
+    if (Pstream::master() && allTracks_.size())
+    {
+        // Make output directory
+
+        fileName vtkPath
+        (
+            Pstream::parRun()
+          ? runTime.path()/".."/"postProcessing"/"sets"/name()
+          : runTime.path()/"postProcessing"/"sets"/name()
+        );
+        if (mesh.name() != fvMesh::defaultRegion)
+        {
+            vtkPath = vtkPath/mesh.name();
+        }
+        vtkPath = vtkPath/mesh.time().timeName();
 
-            // Convert track positions
+        mkDir(vtkPath);
 
-            PtrList<coordSet> tracks(allTracks_.size());
-            forAll(allTracks_, trackI)
-            {
-                tracks.set
+        // Convert track positions
+
+        PtrList<coordSet> tracks(allTracks_.size());
+        forAll(allTracks_, trackI)
+        {
+            tracks.set
+            (
+                trackI,
+                new coordSet
                 (
-                    trackI,
-                    new coordSet
-                    (
-                        "track" + Foam::name(trackI),
-                        sampledSetAxis_                 //"xyz"
-                    )
-                );
-                tracks[trackI].transfer(allTracks_[trackI]);
-            }
+                    "track" + Foam::name(trackI),
+                    sampledSetAxis_                 //"xyz"
+                )
+            );
+            tracks[trackI].transfer(allTracks_[trackI]);
+        }
 
-            // Convert scalar values
+        // Convert scalar values
 
-            if (allScalars_.size() > 0)
+        if (allScalars_.size() > 0)
+        {
+            List<List<scalarField>> scalarValues(allScalars_.size());
+
+            forAll(allScalars_, scalarI)
             {
-                List<List<scalarField>> scalarValues(allScalars_.size());
+                DynamicList<scalarList>& allTrackVals =
+                    allScalars_[scalarI];
+                scalarValues[scalarI].setSize(allTrackVals.size());
 
-                forAll(allScalars_, scalarI)
+                forAll(allTrackVals, trackI)
                 {
-                    DynamicList<scalarList>& allTrackVals =
-                        allScalars_[scalarI];
-                    scalarValues[scalarI].setSize(allTrackVals.size());
-
-                    forAll(allTrackVals, trackI)
-                    {
-                        scalarList& trackVals = allTrackVals[trackI];
-                        scalarValues[scalarI][trackI].transfer(trackVals);
-                    }
+                    scalarList& trackVals = allTrackVals[trackI];
+                    scalarValues[scalarI][trackI].transfer(trackVals);
                 }
+            }
 
-                fileName vtkFile
+            fileName vtkFile
+            (
+                vtkPath
+              / scalarFormatterPtr_().getFileName
                 (
-                    vtkPath
-                  / scalarFormatterPtr_().getFileName
-                    (
-                        tracks[0],
-                        scalarNames_
-                    )
-                );
+                    tracks[0],
+                    scalarNames_
+                )
+            );
 
-                Info<< "    Writing data to " << vtkFile.path() << endl;
+            Info<< "    Writing data to " << vtkFile.path() << endl;
 
-                scalarFormatterPtr_().write
-                (
-                    true,           // writeTracks
-                    tracks,
-                    scalarNames_,
-                    scalarValues,
-                    OFstream(vtkFile)()
-                );
-            }
+            scalarFormatterPtr_().write
+            (
+                true,           // writeTracks
+                tracks,
+                scalarNames_,
+                scalarValues,
+                OFstream(vtkFile)()
+            );
+        }
 
-            // Convert vector values
+        // Convert vector values
 
-            if (allVectors_.size() > 0)
+        if (allVectors_.size() > 0)
+        {
+            List<List<vectorField>> vectorValues(allVectors_.size());
+
+            forAll(allVectors_, vectorI)
             {
-                List<List<vectorField>> vectorValues(allVectors_.size());
+                DynamicList<vectorList>& allTrackVals =
+                    allVectors_[vectorI];
+                vectorValues[vectorI].setSize(allTrackVals.size());
 
-                forAll(allVectors_, vectorI)
+                forAll(allTrackVals, trackI)
                 {
-                    DynamicList<vectorList>& allTrackVals =
-                        allVectors_[vectorI];
-                    vectorValues[vectorI].setSize(allTrackVals.size());
-
-                    forAll(allTrackVals, trackI)
-                    {
-                        vectorList& trackVals = allTrackVals[trackI];
-                        vectorValues[vectorI][trackI].transfer(trackVals);
-                    }
+                    vectorList& trackVals = allTrackVals[trackI];
+                    vectorValues[vectorI][trackI].transfer(trackVals);
                 }
+            }
 
-                fileName vtkFile
+            fileName vtkFile
+            (
+                vtkPath
+              / vectorFormatterPtr_().getFileName
                 (
-                    vtkPath
-                  / vectorFormatterPtr_().getFileName
-                    (
-                        tracks[0],
-                        vectorNames_
-                    )
-                );
-
-                //Info<< "    Writing vector data to " << vtkFile << endl;
+                    tracks[0],
+                    vectorNames_
+                )
+            );
 
-                vectorFormatterPtr_().write
-                (
-                    true,           // writeTracks
-                    tracks,
-                    vectorNames_,
-                    vectorValues,
-                    OFstream(vtkFile)()
-                );
-            }
+            vectorFormatterPtr_().write
+            (
+                true,           // writeTracks
+                tracks,
+                vectorNames_,
+                vectorValues,
+                OFstream(vtkFile)()
+            );
         }
     }
 }
 
 
-void Foam::streamLine::updateMesh(const mapPolyMesh&)
+void Foam::functionObjects::streamLine::updateMesh(const mapPolyMesh&)
 {
     read(dict_);
 }
 
 
-void Foam::streamLine::movePoints(const polyMesh&)
+void Foam::functionObjects::streamLine::movePoints(const polyMesh&)
 {
     // Moving mesh affects the search tree
     read(dict_);
 }
 
 
-//void Foam::streamLine::readUpdate(const polyMesh::readUpdateState state)
-//{
-//    if (state != UNCHANGED)
-//    {
-//        read(dict_);
-//    }
-//}
-
-
 // ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/field/streamLine/streamLine.H b/src/postProcessing/functionObjects/field/streamLine/streamLine.H
index 16ae0ca96b0..c0f280544d3 100644
--- a/src/postProcessing/functionObjects/field/streamLine/streamLine.H
+++ b/src/postProcessing/functionObjects/field/streamLine/streamLine.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::streamLine
+    Foam::functionObjects::streamLine
 
 Group
     grpFieldFunctionObjects
@@ -125,6 +125,9 @@ class mapPolyMesh;
 class meshSearch;
 class sampledSet;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                          Class streamLine Declaration
 \*---------------------------------------------------------------------------*/
@@ -145,9 +148,6 @@ class streamLine
         //- Load fields from files (not from objectRegistry)
         bool loadFromFiles_;
 
-        //- On/off switch
-        bool active_;
-
         //- List of fields to sample
         wordList fields_;
 
@@ -182,7 +182,6 @@ class streamLine
         wordList vectorNames_;
 
 
-
         // Demand driven
 
             //- Mesh searching enigne
@@ -244,6 +243,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~streamLine();
@@ -277,14 +286,12 @@ public:
 
         //- Update for mesh point-motion
         virtual void movePoints(const polyMesh&);
-
-        ////- Update for changes of mesh due to readUpdate
-        //virtual void readUpdate(const polyMesh::readUpdateState state);
 };
 
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/field/streamLine/streamLineFunctionObject.H b/src/postProcessing/functionObjects/field/streamLine/streamLineFunctionObject.H
index 8bfe856ee06..b40fe13c3f9 100644
--- a/src/postProcessing/functionObjects/field/streamLine/streamLineFunctionObject.H
+++ b/src/postProcessing/functionObjects/field/streamLine/streamLineFunctionObject.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) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,7 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<streamLine>
+    typedef OutputFilterFunctionObject<functionObjects::streamLine>
         streamLineFunctionObject;
 }
 
diff --git a/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.C b/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.C
index ad1c7d81b86..d5ba3878794 100644
--- a/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.C
+++ b/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -28,14 +28,17 @@ License
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
+{
+namespace functionObjects
 {
     defineTypeNameAndDebug(surfaceInterpolateFields, 0);
 }
+}
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::surfaceInterpolateFields::surfaceInterpolateFields
+Foam::functionObjects::surfaceInterpolateFields::surfaceInterpolateFields
 (
     const word& name,
     const objectRegistry& obr,
@@ -45,109 +48,99 @@ Foam::surfaceInterpolateFields::surfaceInterpolateFields
 :
     name_(name),
     obr_(obr),
-    active_(true),
     fieldSet_()
 {
-    // Check if the available mesh is an fvMesh otherise deactivate
-    if (isA<fvMesh>(obr_))
-    {
-        read(dict);
-    }
-    else
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_
-            << endl;
-    }
+    read(dict);
+}
+
+
+bool Foam::functionObjects::surfaceInterpolateFields::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
 }
 
 
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::surfaceInterpolateFields::~surfaceInterpolateFields()
+Foam::functionObjects::surfaceInterpolateFields::~surfaceInterpolateFields()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::surfaceInterpolateFields::read(const dictionary& dict)
+void Foam::functionObjects::surfaceInterpolateFields::read
+(
+    const dictionary& dict
+)
 {
-    if (active_)
-    {
-        dict.lookup("fields") >> fieldSet_;
-    }
+    dict.lookup("fields") >> fieldSet_;
 }
 
 
-void Foam::surfaceInterpolateFields::execute()
+void Foam::functionObjects::surfaceInterpolateFields::execute()
 {
-    if (active_)
-    {
-        Info<< type() << " " << name_ << " output:" << 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_);
-
-        Info<< endl;
-    }
+    Info<< type() << " " << name_ << " output:" << 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_);
+
+    Info<< endl;
 }
 
 
-void Foam::surfaceInterpolateFields::end()
+void Foam::functionObjects::surfaceInterpolateFields::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    execute();
 }
 
 
-void Foam::surfaceInterpolateFields::timeSet()
-{
-    // Do nothing
-}
+void Foam::functionObjects::surfaceInterpolateFields::timeSet()
+{}
 
 
-void Foam::surfaceInterpolateFields::write()
+void Foam::functionObjects::surfaceInterpolateFields::write()
 {
-    if (active_)
+    Info<< type() << " " << name_ << " output:" << nl;
+
+    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)
     {
-        Info<< type() << " " << name_ << " output:" << nl;
-
-        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();
-        }
+        stf_[i].write();
     }
 }
 
diff --git a/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.H b/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.H
index f95995fe511..aed3e2aaa00 100644
--- a/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.H
+++ b/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.H
@@ -84,6 +84,9 @@ class objectRegistry;
 class dictionary;
 class mapPolyMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                   Class surfaceInterpolateFields Declaration
 \*---------------------------------------------------------------------------*/
@@ -99,9 +102,6 @@ protected:
 
         const objectRegistry& obr_;
 
-        //- on/off switch
-        bool active_;
-
         //- Fields to process
         //wordList fieldSet_;
         List<Tuple2<word, word>> fieldSet_;
@@ -152,6 +152,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~surfaceInterpolateFields();
@@ -192,6 +202,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFieldsFunctionObject.H b/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFieldsFunctionObject.H
index 210eccdb229..fa10e067811 100644
--- a/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFieldsFunctionObject.H
+++ b/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFieldsFunctionObject.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) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,8 +43,10 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<surfaceInterpolateFields>
-        surfaceInterpolateFieldsFunctionObject;
+    typedef OutputFilterFunctionObject
+    <
+        functionObjects::surfaceInterpolateFields
+    > surfaceInterpolateFieldsFunctionObject;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFieldsTemplates.C b/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFieldsTemplates.C
index 9285ef28e90..689daea858e 100644
--- a/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFieldsTemplates.C
+++ b/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFieldsTemplates.C
@@ -30,7 +30,7 @@ License
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 template<class Type>
-void Foam::surfaceInterpolateFields::interpolateFields
+void Foam::functionObjects::surfaceInterpolateFields::interpolateFields
 (
     PtrList<GeometricField<Type, fvsPatchField, surfaceMesh>>& sflds
 ) const
diff --git a/src/postProcessing/functionObjects/field/wallBoundedStreamLine/wallBoundedStreamLine.C b/src/postProcessing/functionObjects/field/wallBoundedStreamLine/wallBoundedStreamLine.C
index 823c52b6a0e..f110a884551 100644
--- a/src/postProcessing/functionObjects/field/wallBoundedStreamLine/wallBoundedStreamLine.C
+++ b/src/postProcessing/functionObjects/field/wallBoundedStreamLine/wallBoundedStreamLine.C
@@ -42,14 +42,17 @@ License
 
 namespace Foam
 {
-defineTypeNameAndDebug(wallBoundedStreamLine, 0);
+namespace functionObjects
+{
+    defineTypeNameAndDebug(wallBoundedStreamLine, 0);
+}
 }
 
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
 Foam::autoPtr<Foam::indirectPrimitivePatch>
-Foam::wallBoundedStreamLine::wallPatch() const
+Foam::functionObjects::wallBoundedStreamLine::wallPatch() const
 {
     const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
 
@@ -99,7 +102,7 @@ Foam::wallBoundedStreamLine::wallPatch() const
 }
 
 
-Foam::tetIndices Foam::wallBoundedStreamLine::findNearestTet
+Foam::tetIndices Foam::functionObjects::wallBoundedStreamLine::findNearestTet
 (
     const PackedBoolList& isWallPatch,
     const point& seedPt,
@@ -156,7 +159,7 @@ Foam::tetIndices Foam::wallBoundedStreamLine::findNearestTet
 }
 
 
-void Foam::wallBoundedStreamLine::track()
+void Foam::functionObjects::wallBoundedStreamLine::track()
 {
     const Time& runTime = obr_.time();
     const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
@@ -432,7 +435,7 @@ void Foam::wallBoundedStreamLine::track()
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::wallBoundedStreamLine::wallBoundedStreamLine
+Foam::functionObjects::wallBoundedStreamLine::wallBoundedStreamLine
 (
     const word& name,
     const objectRegistry& obr,
@@ -443,180 +446,175 @@ Foam::wallBoundedStreamLine::wallBoundedStreamLine
     dict_(dict),
     name_(name),
     obr_(obr),
-    loadFromFiles_(loadFromFiles),
-    active_(true)
+    loadFromFiles_(loadFromFiles)
 {
-    // Only active if a fvMesh is available
-    if (isA<fvMesh>(obr_))
-    {
-        read(dict_);
-    }
-    else
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_
-            << nl << endl;
-    }
+    read(dict_);
+}
+
+
+bool Foam::functionObjects::wallBoundedStreamLine::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
 }
 
 
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::wallBoundedStreamLine::~wallBoundedStreamLine()
+Foam::functionObjects::wallBoundedStreamLine::~wallBoundedStreamLine()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::wallBoundedStreamLine::read(const dictionary& dict)
+void Foam::functionObjects::wallBoundedStreamLine::read(const dictionary& dict)
 {
-    if (active_)
+    //dict_ = dict;
+    dict.lookup("fields") >> fields_;
+    if (dict.found("UName"))
     {
-        //dict_ = dict;
-        dict.lookup("fields") >> fields_;
-        if (dict.found("UName"))
-        {
-            dict.lookup("UName") >> UName_;
-        }
-        else
-        {
-            UName_ = "U";
-            if (dict.found("U"))
-            {
-                IOWarningInFunction
-                (
-                    dict
-                )   << "Using deprecated entry \"U\"."
-                    << " Please use \"UName\" instead."
-                    << endl;
-                dict.lookup("U") >> UName_;
-            }
-        }
-
-        if (findIndex(fields_, UName_) == -1)
+        dict.lookup("UName") >> UName_;
+    }
+    else
+    {
+        UName_ = "U";
+        if (dict.found("U"))
         {
-            FatalIOErrorInFunction
+            IOWarningInFunction
             (
                 dict
-            )   << "Velocity field for tracking " << UName_
-                << " should be present in the list of fields " << fields_
-                << exit(FatalIOError);
+            )   << "Using deprecated entry \"U\"."
+                << " Please use \"UName\" instead."
+                << endl;
+            dict.lookup("U") >> UName_;
         }
+    }
 
+    if (findIndex(fields_, UName_) == -1)
+    {
+        FatalIOErrorInFunction
+        (
+            dict
+        )   << "Velocity field for tracking " << UName_
+            << " should be present in the list of fields " << fields_
+            << exit(FatalIOError);
+    }
 
-        dict.lookup("trackForward") >> trackForward_;
-        dict.lookup("lifeTime") >> lifeTime_;
-        if (lifeTime_ < 1)
-        {
-            FatalErrorInFunction
-                << "Illegal value " << lifeTime_ << " for lifeTime"
-                << exit(FatalError);
-        }
-        trackLength_ = VGREAT;
-        if (dict.found("trackLength"))
-        {
-            dict.lookup("trackLength") >> trackLength_;
 
-            Info<< type() << " : fixed track length specified : "
-                << trackLength_ << nl << endl;
-        }
+    dict.lookup("trackForward") >> trackForward_;
+    dict.lookup("lifeTime") >> lifeTime_;
+    if (lifeTime_ < 1)
+    {
+        FatalErrorInFunction
+            << "Illegal value " << lifeTime_ << " for lifeTime"
+            << exit(FatalError);
+    }
+    trackLength_ = VGREAT;
+    if (dict.found("trackLength"))
+    {
+        dict.lookup("trackLength") >> trackLength_;
 
+        Info<< type() << " : fixed track length specified : "
+            << trackLength_ << nl << endl;
+    }
 
-        interpolationScheme_ = dict.lookupOrDefault
-        (
-            "interpolationScheme",
-            interpolationCellPoint<scalar>::typeName
-        );
 
-        //Info<< typeName << " using interpolation " << interpolationScheme_
-        //    << endl;
+    interpolationScheme_ = dict.lookupOrDefault
+    (
+        "interpolationScheme",
+        interpolationCellPoint<scalar>::typeName
+    );
 
-        cloudName_ = dict.lookupOrDefault<word>
-        (
-            "cloudName",
-            "wallBoundedStreamLine"
-        );
-        dict.lookup("seedSampleSet") >> seedSet_;
+    cloudName_ = dict.lookupOrDefault<word>
+    (
+        "cloudName",
+        "wallBoundedStreamLine"
+    );
+    dict.lookup("seedSampleSet") >> seedSet_;
 
-        const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
+    const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
 
-        const dictionary& coeffsDict = dict.subDict(seedSet_ + "Coeffs");
+    const dictionary& coeffsDict = dict.subDict(seedSet_ + "Coeffs");
 
-        sampledSetPtr_ = sampledSet::New
-        (
-            seedSet_,
-            mesh,
-            meshSearchMeshObject::New(mesh),
-            coeffsDict
-        );
-        coeffsDict.lookup("axis") >> sampledSetAxis_;
+    sampledSetPtr_ = sampledSet::New
+    (
+        seedSet_,
+        mesh,
+        meshSearchMeshObject::New(mesh),
+        coeffsDict
+    );
+    coeffsDict.lookup("axis") >> sampledSetAxis_;
 
-        scalarFormatterPtr_ = writer<scalar>::New(dict.lookup("setFormat"));
-        vectorFormatterPtr_ = writer<vector>::New(dict.lookup("setFormat"));
+    scalarFormatterPtr_ = writer<scalar>::New(dict.lookup("setFormat"));
+    vectorFormatterPtr_ = writer<vector>::New(dict.lookup("setFormat"));
 
 
-        // Make sure that the mesh is trackable
-        if (debug)
-        {
-            // 1. positive volume decomposition tets
-            faceSet faces(mesh, "lowQualityTetFaces", mesh.nFaces()/100+1);
-            if
+    // Make sure that the mesh is trackable
+    if (debug)
+    {
+        // 1. positive volume decomposition tets
+        faceSet faces(mesh, "lowQualityTetFaces", mesh.nFaces()/100+1);
+        if
+        (
+            polyMeshTetDecomposition::checkFaceTets
             (
-                polyMeshTetDecomposition::checkFaceTets
-                (
-                    mesh,
-                    polyMeshTetDecomposition::minTetQuality,
-                    true,
-                    &faces
-                )
+                mesh,
+                polyMeshTetDecomposition::minTetQuality,
+                true,
+                &faces
             )
-            {
-                label nFaces = returnReduce(faces.size(), sumOp<label>());
+        )
+        {
+            label nFaces = returnReduce(faces.size(), sumOp<label>());
 
-                WarningInFunction
-                    << "Found " << nFaces
-                    <<" faces with low quality or negative volume "
-                    << "decomposition tets. Writing to faceSet " << faces.name()
-                    << endl;
-            }
+            WarningInFunction
+                << "Found " << nFaces
+                <<" faces with low quality or negative volume "
+                << "decomposition tets. Writing to faceSet " << faces.name()
+                << endl;
+        }
 
-            // 2. all edges on a cell having two faces
-            EdgeMap<label> numFacesPerEdge;
-            forAll(mesh.cells(), celli)
-            {
-                const cell& cFaces = mesh.cells()[celli];
+        // 2. all edges on a cell having two faces
+        EdgeMap<label> numFacesPerEdge;
+        forAll(mesh.cells(), celli)
+        {
+            const cell& cFaces = mesh.cells()[celli];
 
-                numFacesPerEdge.clear();
+            numFacesPerEdge.clear();
 
-                forAll(cFaces, cFacei)
+            forAll(cFaces, cFacei)
+            {
+                label facei = cFaces[cFacei];
+                const face& f = mesh.faces()[facei];
+                forAll(f, fp)
                 {
-                    label facei = cFaces[cFacei];
-                    const face& f = mesh.faces()[facei];
-                    forAll(f, fp)
+                    const edge e(f[fp], f.nextLabel(fp));
+                    EdgeMap<label>::iterator eFnd =
+                        numFacesPerEdge.find(e);
+                    if (eFnd != numFacesPerEdge.end())
+                    {
+                        eFnd()++;
+                    }
+                    else
                     {
-                        const edge e(f[fp], f.nextLabel(fp));
-                        EdgeMap<label>::iterator eFnd =
-                            numFacesPerEdge.find(e);
-                        if (eFnd != numFacesPerEdge.end())
-                        {
-                            eFnd()++;
-                        }
-                        else
-                        {
-                            numFacesPerEdge.insert(e, 1);
-                        }
+                        numFacesPerEdge.insert(e, 1);
                     }
                 }
+            }
 
-                forAllConstIter(EdgeMap<label>, numFacesPerEdge, iter)
+            forAllConstIter(EdgeMap<label>, numFacesPerEdge, iter)
+            {
+                if (iter() != 2)
                 {
-                    if (iter() != 2)
-                    {
-                        FatalErrorInFunction
-                            << "problem cell:" << celli
-                            << abort(FatalError);
-                    }
+                    FatalErrorInFunction
+                        << "problem cell:" << celli
+                        << abort(FatalError);
                 }
             }
         }
@@ -624,75 +622,86 @@ void Foam::wallBoundedStreamLine::read(const dictionary& dict)
 }
 
 
-void Foam::wallBoundedStreamLine::execute()
+void Foam::functionObjects::wallBoundedStreamLine::execute()
 {}
 
 
-void Foam::wallBoundedStreamLine::end()
+void Foam::functionObjects::wallBoundedStreamLine::end()
 {}
 
 
-void Foam::wallBoundedStreamLine::timeSet()
+void Foam::functionObjects::wallBoundedStreamLine::timeSet()
 {}
 
 
-void Foam::wallBoundedStreamLine::write()
+void Foam::functionObjects::wallBoundedStreamLine::write()
 {
-    if (active_)
-    {
-        const Time& runTime = obr_.time();
-        const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
+    const Time& runTime = obr_.time();
+    const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
 
 
-        // Do all injection and tracking
-        track();
+    // Do all injection and tracking
+    track();
 
 
-        if (Pstream::parRun())
-        {
-            // Append slave tracks to master ones
-            // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    if (Pstream::parRun())
+    {
+        // Append slave tracks to master ones
+        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-            globalIndex globalTrackIDs(allTracks_.size());
+        globalIndex globalTrackIDs(allTracks_.size());
 
-            // Construct a distribution map to pull all to the master.
-            labelListList sendMap(Pstream::nProcs());
-            labelListList recvMap(Pstream::nProcs());
+        // Construct a distribution map to pull all to the master.
+        labelListList sendMap(Pstream::nProcs());
+        labelListList recvMap(Pstream::nProcs());
 
-            if (Pstream::master())
-            {
-                // Master: receive all. My own first, then consecutive
-                // processors.
-                label trackI = 0;
+        if (Pstream::master())
+        {
+            // Master: receive all. My own first, then consecutive
+            // processors.
+            label trackI = 0;
 
-                forAll(recvMap, proci)
+            forAll(recvMap, proci)
+            {
+                labelList& fromProc = recvMap[proci];
+                fromProc.setSize(globalTrackIDs.localSize(proci));
+                forAll(fromProc, i)
                 {
-                    labelList& fromProc = recvMap[proci];
-                    fromProc.setSize(globalTrackIDs.localSize(proci));
-                    forAll(fromProc, i)
-                    {
-                        fromProc[i] = trackI++;
-                    }
+                    fromProc[i] = trackI++;
                 }
             }
+        }
 
-            labelList& toMaster = sendMap[0];
-            toMaster.setSize(globalTrackIDs.localSize());
-            forAll(toMaster, i)
-            {
-                toMaster[i] = i;
-            }
+        labelList& toMaster = sendMap[0];
+        toMaster.setSize(globalTrackIDs.localSize());
+        forAll(toMaster, i)
+        {
+            toMaster[i] = i;
+        }
 
-            const mapDistribute distMap
-            (
-                globalTrackIDs.size(),
-                sendMap.xfer(),
-                recvMap.xfer()
-            );
+        const mapDistribute distMap
+        (
+            globalTrackIDs.size(),
+            sendMap.xfer(),
+            recvMap.xfer()
+        );
 
 
-            // Distribute the track positions. Note: use scheduled comms
-            // to prevent buffering.
+        // Distribute the track positions. Note: use scheduled comms
+        // to prevent buffering.
+        mapDistribute::distribute
+        (
+            Pstream::scheduled,
+            distMap.schedule(),
+            distMap.constructSize(),
+            distMap.subMap(),
+            distMap.constructMap(),
+            allTracks_
+        );
+
+        // Distribute the scalars
+        forAll(allScalars_, scalarI)
+        {
             mapDistribute::distribute
             (
                 Pstream::scheduled,
@@ -700,193 +709,170 @@ void Foam::wallBoundedStreamLine::write()
                 distMap.constructSize(),
                 distMap.subMap(),
                 distMap.constructMap(),
-                allTracks_
+                allScalars_[scalarI]
             );
-
-            // Distribute the scalars
-            forAll(allScalars_, scalarI)
-            {
-                mapDistribute::distribute
-                (
-                    Pstream::scheduled,
-                    distMap.schedule(),
-                    distMap.constructSize(),
-                    distMap.subMap(),
-                    distMap.constructMap(),
-                    allScalars_[scalarI]
-                );
-            }
-            // Distribute the vectors
-            forAll(allVectors_, vectorI)
-            {
-                mapDistribute::distribute
-                (
-                    Pstream::scheduled,
-                    distMap.schedule(),
-                    distMap.constructSize(),
-                    distMap.subMap(),
-                    distMap.constructMap(),
-                    allVectors_[vectorI]
-                );
-            }
         }
-
-
-        label n = 0;
-        forAll(allTracks_, trackI)
+        // Distribute the vectors
+        forAll(allVectors_, vectorI)
         {
-            n += allTracks_[trackI].size();
+            mapDistribute::distribute
+            (
+                Pstream::scheduled,
+                distMap.schedule(),
+                distMap.constructSize(),
+                distMap.subMap(),
+                distMap.constructMap(),
+                allVectors_[vectorI]
+            );
         }
+    }
 
-        Info<< "    Tracks:" << allTracks_.size() << nl
-            << "    Total samples:" << n << endl;
 
+    label n = 0;
+    forAll(allTracks_, trackI)
+    {
+        n += allTracks_[trackI].size();
+    }
 
-        // Massage into form suitable for writers
-        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    Info<< "    Tracks:" << allTracks_.size() << nl
+        << "    Total samples:" << n << endl;
 
-        if (Pstream::master() && allTracks_.size())
-        {
-            // Make output directory
 
-            fileName vtkPath
-            (
-                Pstream::parRun()
-              ? runTime.path()/".."/"postProcessing"/"sets"/name()
-              : runTime.path()/"postProcessing"/"sets"/name()
-            );
-            if (mesh.name() != fvMesh::defaultRegion)
-            {
-                vtkPath = vtkPath/mesh.name();
-            }
-            vtkPath = vtkPath/mesh.time().timeName();
+    // Massage into form suitable for writers
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-            mkDir(vtkPath);
+    if (Pstream::master() && allTracks_.size())
+    {
+        // Make output directory
 
-            // Convert track positions
+        fileName vtkPath
+        (
+            Pstream::parRun()
+          ? runTime.path()/".."/"postProcessing"/"sets"/name()
+          : runTime.path()/"postProcessing"/"sets"/name()
+        );
+        if (mesh.name() != fvMesh::defaultRegion)
+        {
+            vtkPath = vtkPath/mesh.name();
+        }
+        vtkPath = vtkPath/mesh.time().timeName();
 
-            PtrList<coordSet> tracks(allTracks_.size());
-            forAll(allTracks_, trackI)
-            {
-                tracks.set
+        mkDir(vtkPath);
+
+        // Convert track positions
+
+        PtrList<coordSet> tracks(allTracks_.size());
+        forAll(allTracks_, trackI)
+        {
+            tracks.set
+            (
+                trackI,
+                new coordSet
                 (
-                    trackI,
-                    new coordSet
-                    (
-                        "track" + Foam::name(trackI),
-                        sampledSetAxis_                 //"xyz"
-                    )
-                );
-                tracks[trackI].transfer(allTracks_[trackI]);
-            }
+                    "track" + Foam::name(trackI),
+                    sampledSetAxis_                 //"xyz"
+                )
+            );
+            tracks[trackI].transfer(allTracks_[trackI]);
+        }
+
+        // Convert scalar values
 
-            // Convert scalar values
+        if (allScalars_.size() > 0)
+        {
+            List<List<scalarField>> scalarValues(allScalars_.size());
 
-            if (allScalars_.size() > 0)
+            forAll(allScalars_, scalarI)
             {
-                List<List<scalarField>> scalarValues(allScalars_.size());
+                DynamicList<scalarList>& allTrackVals =
+                    allScalars_[scalarI];
+                scalarValues[scalarI].setSize(allTrackVals.size());
 
-                forAll(allScalars_, scalarI)
+                forAll(allTrackVals, trackI)
                 {
-                    DynamicList<scalarList>& allTrackVals =
-                        allScalars_[scalarI];
-                    scalarValues[scalarI].setSize(allTrackVals.size());
-
-                    forAll(allTrackVals, trackI)
-                    {
-                        scalarList& trackVals = allTrackVals[trackI];
-                        scalarValues[scalarI][trackI].transfer(trackVals);
-                    }
+                    scalarList& trackVals = allTrackVals[trackI];
+                    scalarValues[scalarI][trackI].transfer(trackVals);
                 }
+            }
 
-                fileName vtkFile
+            fileName vtkFile
+            (
+                vtkPath
+              / scalarFormatterPtr_().getFileName
                 (
-                    vtkPath
-                  / scalarFormatterPtr_().getFileName
-                    (
-                        tracks[0],
-                        scalarNames_
-                    )
-                );
+                    tracks[0],
+                    scalarNames_
+                )
+            );
 
-                Info<< "Writing data to " << vtkFile.path() << endl;
+            Info<< "Writing data to " << vtkFile.path() << endl;
 
-                scalarFormatterPtr_().write
-                (
-                    true,           // writeTracks
-                    tracks,
-                    scalarNames_,
-                    scalarValues,
-                    OFstream(vtkFile)()
-                );
-            }
+            scalarFormatterPtr_().write
+            (
+                true,           // writeTracks
+                tracks,
+                scalarNames_,
+                scalarValues,
+                OFstream(vtkFile)()
+            );
+        }
 
-            // Convert vector values
+        // Convert vector values
 
-            if (allVectors_.size() > 0)
+        if (allVectors_.size() > 0)
+        {
+            List<List<vectorField>> vectorValues(allVectors_.size());
+
+            forAll(allVectors_, vectorI)
             {
-                List<List<vectorField>> vectorValues(allVectors_.size());
+                DynamicList<vectorList>& allTrackVals =
+                    allVectors_[vectorI];
+                vectorValues[vectorI].setSize(allTrackVals.size());
 
-                forAll(allVectors_, vectorI)
+                forAll(allTrackVals, trackI)
                 {
-                    DynamicList<vectorList>& allTrackVals =
-                        allVectors_[vectorI];
-                    vectorValues[vectorI].setSize(allTrackVals.size());
-
-                    forAll(allTrackVals, trackI)
-                    {
-                        vectorList& trackVals = allTrackVals[trackI];
-                        vectorValues[vectorI][trackI].transfer(trackVals);
-                    }
+                    vectorList& trackVals = allTrackVals[trackI];
+                    vectorValues[vectorI][trackI].transfer(trackVals);
                 }
+            }
 
-                fileName vtkFile
+            fileName vtkFile
+            (
+                vtkPath
+              / vectorFormatterPtr_().getFileName
                 (
-                    vtkPath
-                  / vectorFormatterPtr_().getFileName
-                    (
-                        tracks[0],
-                        vectorNames_
-                    )
-                );
-
-                //Info<< "Writing vector data to " << vtkFile << endl;
+                    tracks[0],
+                    vectorNames_
+                )
+            );
 
-                vectorFormatterPtr_().write
-                (
-                    true,           // writeTracks
-                    tracks,
-                    vectorNames_,
-                    vectorValues,
-                    OFstream(vtkFile)()
-                );
-            }
+            vectorFormatterPtr_().write
+            (
+                true,           // writeTracks
+                tracks,
+                vectorNames_,
+                vectorValues,
+                OFstream(vtkFile)()
+            );
         }
     }
 }
 
 
-void Foam::wallBoundedStreamLine::updateMesh(const mapPolyMesh&)
+void Foam::functionObjects::wallBoundedStreamLine::updateMesh
+(
+    const mapPolyMesh&
+)
 {
     read(dict_);
 }
 
 
-void Foam::wallBoundedStreamLine::movePoints(const polyMesh&)
+void Foam::functionObjects::wallBoundedStreamLine::movePoints(const polyMesh&)
 {
     // Moving mesh affects the search tree
     read(dict_);
 }
 
 
-//void Foam::wallBoundedStreamLine::readUpdate
-//(const polyMesh::readUpdateState state)
-//{
-//    if (state != UNCHANGED)
-//    {
-//        read(dict_);
-//    }
-//}
-
-
 // ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/field/wallBoundedStreamLine/wallBoundedStreamLine.H b/src/postProcessing/functionObjects/field/wallBoundedStreamLine/wallBoundedStreamLine.H
index dc920ef3956..84c566be835 100644
--- a/src/postProcessing/functionObjects/field/wallBoundedStreamLine/wallBoundedStreamLine.H
+++ b/src/postProcessing/functionObjects/field/wallBoundedStreamLine/wallBoundedStreamLine.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::wallBoundedStreamLine
+    Foam::functionObjects::wallBoundedStreamLine
 
 Group
     grpFieldFunctionObjects
@@ -127,6 +127,9 @@ class mapPolyMesh;
 class meshSearch;
 class sampledSet;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                     Class wallBoundedStreamLine Declaration
 \*---------------------------------------------------------------------------*/
@@ -147,10 +150,6 @@ class wallBoundedStreamLine
         //- Load fields from files (not from objectRegistry)
         bool loadFromFiles_;
 
-        //- On/off switch
-        bool active_;
-
-
         //- List of fields to sample
         wordList fields_;
 
@@ -250,6 +249,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~wallBoundedStreamLine();
@@ -283,14 +292,12 @@ public:
 
         //- Update for mesh point-motion
         virtual void movePoints(const polyMesh&);
-
-        ////- Update for changes of mesh due to readUpdate
-        //virtual void readUpdate(const polyMesh::readUpdateState state);
 };
 
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/field/wallBoundedStreamLine/wallBoundedStreamLineFunctionObject.H b/src/postProcessing/functionObjects/field/wallBoundedStreamLine/wallBoundedStreamLineFunctionObject.H
index 0ce95cc592a..5461d29e699 100644
--- a/src/postProcessing/functionObjects/field/wallBoundedStreamLine/wallBoundedStreamLineFunctionObject.H
+++ b/src/postProcessing/functionObjects/field/wallBoundedStreamLine/wallBoundedStreamLineFunctionObject.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -44,7 +44,7 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<wallBoundedStreamLine>
+    typedef OutputFilterFunctionObject<functionObjects::wallBoundedStreamLine>
         wallBoundedStreamLineFunctionObject;
 }
 
diff --git a/src/postProcessing/functionObjects/forces/forceCoeffs/forceCoeffs.C b/src/postProcessing/functionObjects/forces/forceCoeffs/forceCoeffs.C
index f54bc9bf2b1..ea0efdd4513 100644
--- a/src/postProcessing/functionObjects/forces/forceCoeffs/forceCoeffs.C
+++ b/src/postProcessing/functionObjects/forces/forceCoeffs/forceCoeffs.C
@@ -140,13 +140,11 @@ Foam::functionObjects::forceCoeffs::forceCoeffs
     Aref_(0.0)
 {
     read(dict);
-
     Info<< endl;
 }
 
 
-Foam::autoPtr<Foam::functionObjects::forceCoeffs>
-Foam::functionObjects::forceCoeffs::New
+bool Foam::functionObjects::forceCoeffs::viable
 (
     const word& name,
     const objectRegistry& obr,
@@ -154,17 +152,8 @@ Foam::functionObjects::forceCoeffs::New
     const bool loadFromFiles
 )
 {
-    if (isA<fvMesh>(obr))
-    {
-        return autoPtr<forceCoeffs>
-        (
-            new forceCoeffs(name, obr, dict, loadFromFiles)
-        );
-    }
-    else
-    {
-        return autoPtr<forceCoeffs>();
-    }
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
 }
 
 
@@ -178,22 +167,19 @@ Foam::functionObjects::forceCoeffs::~forceCoeffs()
 
 void Foam::functionObjects::forceCoeffs::read(const dictionary& dict)
 {
-    if (active_)
-    {
-        forces::read(dict);
+    forces::read(dict);
 
-        // Directions for lift and drag forces, and pitch moment
-        dict.lookup("liftDir") >> liftDir_;
-        dict.lookup("dragDir") >> dragDir_;
-        dict.lookup("pitchAxis") >> pitchAxis_;
+    // Directions for lift and drag forces, and pitch moment
+    dict.lookup("liftDir") >> liftDir_;
+    dict.lookup("dragDir") >> dragDir_;
+    dict.lookup("pitchAxis") >> pitchAxis_;
 
-        // Free stream velocity magnitude
-        dict.lookup("magUInf") >> magUInf_;
+    // Free stream velocity magnitude
+    dict.lookup("magUInf") >> magUInf_;
 
-        // Reference length and area scales
-        dict.lookup("lRef") >> lRef_;
-        dict.lookup("Aref") >> Aref_;
-    }
+    // Reference length and area scales
+    dict.lookup("lRef") >> lRef_;
+    dict.lookup("Aref") >> Aref_;
 }
 
 
@@ -213,11 +199,6 @@ void Foam::functionObjects::forceCoeffs::write()
 {
     forces::calcForcesMoment();
 
-    if (!active_)
-    {
-        return;
-    }
-
     if (Pstream::master())
     {
         functionObjectFiles::write();
diff --git a/src/postProcessing/functionObjects/forces/forceCoeffs/forceCoeffs.H b/src/postProcessing/functionObjects/forces/forceCoeffs/forceCoeffs.H
index c0618311359..cca8e312e1e 100644
--- a/src/postProcessing/functionObjects/forces/forceCoeffs/forceCoeffs.H
+++ b/src/postProcessing/functionObjects/forces/forceCoeffs/forceCoeffs.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::forceCoeffs
+    Foam::functionObjects::forceCoeffs
 
 Group
     grpForcesFunctionObjects
@@ -172,9 +172,9 @@ public:
             const bool loadFromFiles = false
         );
 
-        //- Construct on free-store and return pointer if successful
-        //  otherwise return a null-pointer
-        static autoPtr<forceCoeffs> New
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
         (
             const word& name,
             const objectRegistry&,
diff --git a/src/postProcessing/functionObjects/forces/forces/forces.C b/src/postProcessing/functionObjects/forces/forces/forces.C
index 4775d1caa0c..c8e63db2d63 100644
--- a/src/postProcessing/functionObjects/forces/forces/forces.C
+++ b/src/postProcessing/functionObjects/forces/forces/forces.C
@@ -161,7 +161,7 @@ void Foam::functionObjects::forces::writeFileHeader(const label i)
 
 void Foam::functionObjects::forces::initialise()
 {
-    if (initialised_ || !active_)
+    if (initialised_)
     {
         return;
     }
@@ -170,11 +170,9 @@ void Foam::functionObjects::forces::initialise()
     {
         if (!obr_.foundObject<volVectorField>(fDName_))
         {
-            active_ = false;
-            WarningInFunction
-                << "Could not find " << fDName_ << " in database." << nl
-                << "    De-activating forces."
-                << endl;
+            FatalErrorInFunction
+                << "Could not find " << fDName_ << " in database."
+                << exit(FatalError);
         }
     }
     else
@@ -189,10 +187,9 @@ void Foam::functionObjects::forces::initialise()
             )
         )
         {
-            active_ = false;
-
-            WarningInFunction
-                << "Could not find " << UName_ << ", " << pName_;
+            FatalErrorInFunction
+                << "Could not find " << UName_ << ", " << pName_
+                << exit(FatalError);
 
             if (rhoName_ != "rhoInf")
             {
@@ -534,7 +531,6 @@ Foam::functionObjects::forces::forces
     functionObjectFiles(obr, name, createFileNames(dict)),
     name_(name),
     obr_(obr),
-    active_(true),
     log_(true),
     force_(3),
     moment_(3),
@@ -557,28 +553,15 @@ Foam::functionObjects::forces::forces
     binCumulative_(true),
     initialised_(false)
 {
-    // Check if the available mesh is an fvMesh otherise deactivate
-    if (isA<fvMesh>(obr_))
-    {
-        if (readFields)
-        {
-            read(dict);
-            Info<< endl;
-        }
-    }
-    else
+    if (readFields)
     {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_
-            << endl;
+        read(dict);
+        Info<< endl;
     }
-
 }
 
 
-Foam::autoPtr<Foam::functionObjects::forces>
-Foam::functionObjects::forces::New
+bool Foam::functionObjects::forces::viable
 (
     const word& name,
     const objectRegistry& obr,
@@ -586,17 +569,8 @@ Foam::functionObjects::forces::New
     const bool loadFromFiles
 )
 {
-    if (isA<fvMesh>(obr))
-    {
-        return autoPtr<forces>
-        (
-            new forces(name, obr, dict, loadFromFiles)
-        );
-    }
-    else
-    {
-        return autoPtr<forces>();
-    }
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
 }
 
 
@@ -616,7 +590,6 @@ Foam::functionObjects::forces::forces
     functionObjectFiles(obr, name, typeName),
     name_(name),
     obr_(obr),
-    active_(true),
     log_(true),
     force_(3),
     moment_(3),
@@ -657,133 +630,130 @@ Foam::functionObjects::forces::~forces()
 
 void Foam::functionObjects::forces::read(const dictionary& dict)
 {
-    if (active_)
-    {
-        initialised_ = false;
+    initialised_ = false;
 
-        log_ = dict.lookupOrDefault<Switch>("log", false);
+    log_ = dict.lookupOrDefault<Switch>("log", false);
 
-        if (log_) Info<< type() << " " << name_ << ":" << nl;
+    if (log_) Info<< type() << " " << name_ << ":" << nl;
 
-        directForceDensity_ = dict.lookupOrDefault("directForceDensity", false);
+    directForceDensity_ = dict.lookupOrDefault("directForceDensity", false);
 
-        const fvMesh& mesh = refCast<const fvMesh>(obr_);
-        const polyBoundaryMesh& pbm = mesh.boundaryMesh();
+    const fvMesh& mesh = refCast<const fvMesh>(obr_);
+    const polyBoundaryMesh& pbm = mesh.boundaryMesh();
 
-        patchSet_ = pbm.patchSet(wordReList(dict.lookup("patches")));
+    patchSet_ = pbm.patchSet(wordReList(dict.lookup("patches")));
 
-        if (directForceDensity_)
-        {
-            // Optional entry for fDName
-            fDName_ = dict.lookupOrDefault<word>("fDName", "fD");
-        }
-        else
-        {
-            // Optional entries U and p
-            pName_ = dict.lookupOrDefault<word>("pName", "p");
-            UName_ = dict.lookupOrDefault<word>("UName", "U");
-            rhoName_ = dict.lookupOrDefault<word>("rhoName", "rho");
+    if (directForceDensity_)
+    {
+        // Optional entry for fDName
+        fDName_ = dict.lookupOrDefault<word>("fDName", "fD");
+    }
+    else
+    {
+        // Optional entries U and p
+        pName_ = dict.lookupOrDefault<word>("pName", "p");
+        UName_ = dict.lookupOrDefault<word>("UName", "U");
+        rhoName_ = dict.lookupOrDefault<word>("rhoName", "rho");
 
-            // Reference density needed for incompressible calculations
-            rhoRef_ = readScalar(dict.lookup("rhoInf"));
+        // Reference density needed for incompressible calculations
+        rhoRef_ = readScalar(dict.lookup("rhoInf"));
 
-            // Reference pressure, 0 by default
-            pRef_ = dict.lookupOrDefault<scalar>("pRef", 0.0);
-        }
+        // Reference pressure, 0 by default
+        pRef_ = dict.lookupOrDefault<scalar>("pRef", 0.0);
+    }
 
-        coordSys_.clear();
+    coordSys_.clear();
 
-        // Centre of rotation for moment calculations
-        // specified directly, from coordinate system, or implicitly (0 0 0)
-        if (!dict.readIfPresent<point>("CofR", coordSys_.origin()))
-        {
-            coordSys_ = coordinateSystem(obr_, dict);
-            localSystem_ = true;
-        }
+    // Centre of rotation for moment calculations
+    // specified directly, from coordinate system, or implicitly (0 0 0)
+    if (!dict.readIfPresent<point>("CofR", coordSys_.origin()))
+    {
+        coordSys_ = coordinateSystem(obr_, dict);
+        localSystem_ = true;
+    }
+
+    dict.readIfPresent("porosity", porosity_);
+    if (porosity_)
+    {
+        if (log_) Info<< "    Including porosity effects" << endl;
+    }
+    else
+    {
+        if (log_) Info<< "    Not including porosity effects" << endl;
+    }
+
+    if (dict.found("binData"))
+    {
+        const dictionary& binDict(dict.subDict("binData"));
+        binDict.lookup("nBin") >> nBin_;
 
-        dict.readIfPresent("porosity", porosity_);
-        if (porosity_)
+        if (nBin_ < 0)
         {
-            if (log_) Info<< "    Including porosity effects" << endl;
+            FatalIOErrorInFunction(dict)
+                << "Number of bins (nBin) must be zero or greater"
+                << exit(FatalIOError);
         }
-        else
+        else if ((nBin_ == 0) || (nBin_ == 1))
         {
-            if (log_) Info<< "    Not including porosity effects" << endl;
+            nBin_ = 1;
+            forAll(force_, i)
+            {
+                force_[i].setSize(1);
+                moment_[i].setSize(1);
+            }
         }
 
-        if (dict.found("binData"))
+        if (nBin_ > 1)
         {
-            const dictionary& binDict(dict.subDict("binData"));
-            binDict.lookup("nBin") >> nBin_;
+            binDict.lookup("direction") >> binDir_;
+            binDir_ /= mag(binDir_);
 
-            if (nBin_ < 0)
+            binMin_ = GREAT;
+            scalar binMax = -GREAT;
+            forAllConstIter(labelHashSet, patchSet_, iter)
             {
-                FatalIOErrorInFunction(dict)
-                    << "Number of bins (nBin) must be zero or greater"
-                    << exit(FatalIOError);
+                label patchi = iter.key();
+                const polyPatch& pp = pbm[patchi];
+                scalarField d(pp.faceCentres() & binDir_);
+                binMin_ = min(min(d), binMin_);
+                binMax = max(max(d), binMax);
             }
-            else if ((nBin_ == 0) || (nBin_ == 1))
+            reduce(binMin_, minOp<scalar>());
+            reduce(binMax, maxOp<scalar>());
+
+            // slightly boost binMax so that region of interest is fully
+            // within bounds
+            binMax = 1.0001*(binMax - binMin_) + binMin_;
+
+            binDx_ = (binMax - binMin_)/scalar(nBin_);
+
+            // create the bin points used for writing
+            binPoints_.setSize(nBin_);
+            forAll(binPoints_, i)
             {
-                nBin_ = 1;
-                forAll(force_, i)
-                {
-                    force_[i].setSize(1);
-                    moment_[i].setSize(1);
-                }
+                binPoints_[i] = (i + 0.5)*binDir_*binDx_;
             }
 
-            if (nBin_ > 1)
+            binDict.lookup("cumulative") >> binCumulative_;
+
+            // allocate storage for forces and moments
+            forAll(force_, i)
             {
-                binDict.lookup("direction") >> binDir_;
-                binDir_ /= mag(binDir_);
-
-                binMin_ = GREAT;
-                scalar binMax = -GREAT;
-                forAllConstIter(labelHashSet, patchSet_, iter)
-                {
-                    label patchi = iter.key();
-                    const polyPatch& pp = pbm[patchi];
-                    scalarField d(pp.faceCentres() & binDir_);
-                    binMin_ = min(min(d), binMin_);
-                    binMax = max(max(d), binMax);
-                }
-                reduce(binMin_, minOp<scalar>());
-                reduce(binMax, maxOp<scalar>());
-
-                // slightly boost binMax so that region of interest is fully
-                // within bounds
-                binMax = 1.0001*(binMax - binMin_) + binMin_;
-
-                binDx_ = (binMax - binMin_)/scalar(nBin_);
-
-                // create the bin points used for writing
-                binPoints_.setSize(nBin_);
-                forAll(binPoints_, i)
-                {
-                    binPoints_[i] = (i + 0.5)*binDir_*binDx_;
-                }
-
-                binDict.lookup("cumulative") >> binCumulative_;
-
-                // allocate storage for forces and moments
-                forAll(force_, i)
-                {
-                    force_[i].setSize(nBin_);
-                    moment_[i].setSize(nBin_);
-                }
+                force_[i].setSize(nBin_);
+                moment_[i].setSize(nBin_);
             }
         }
+    }
 
-        if (nBin_ == 1)
-        {
-            // allocate storage for forces and moments
-            force_[0].setSize(1);
-            force_[1].setSize(1);
-            force_[2].setSize(1);
-            moment_[0].setSize(1);
-            moment_[1].setSize(1);
-            moment_[2].setSize(1);
-        }
+    if (nBin_ == 1)
+    {
+        // allocate storage for forces and moments
+        force_[0].setSize(1);
+        force_[1].setSize(1);
+        force_[2].setSize(1);
+        moment_[0].setSize(1);
+        moment_[1].setSize(1);
+        moment_[2].setSize(1);
     }
 }
 
@@ -804,11 +774,6 @@ void Foam::functionObjects::forces::write()
 {
     calcForcesMoment();
 
-    if (!active_)
-    {
-        return;
-    }
-
     if (Pstream::master())
     {
         functionObjectFiles::write();
@@ -826,11 +791,6 @@ void Foam::functionObjects::forces::calcForcesMoment()
 {
     initialise();
 
-    if (!active_)
-    {
-        return;
-    }
-
     force_[0] = Zero;
     force_[1] = Zero;
     force_[2] = Zero;
diff --git a/src/postProcessing/functionObjects/forces/forces/forces.H b/src/postProcessing/functionObjects/forces/forces/forces.H
index 1c5c2befbbe..e6a85853c77 100644
--- a/src/postProcessing/functionObjects/forces/forces/forces.H
+++ b/src/postProcessing/functionObjects/forces/forces/forces.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::forces
+    Foam::functionObjects::forces
 
 Group
     grpForcesFunctionObjects
@@ -156,9 +156,6 @@ protected:
 
         const objectRegistry& obr_;
 
-        //- On/off switch
-        bool active_;
-
         //- Switch to send output to Info as well as to file
         Switch log_;
 
@@ -296,9 +293,9 @@ public:
             const bool readFields = true
         );
 
-        //- Construct on free-store and return pointer if successful
-        //  otherwise return a null-pointer
-        static autoPtr<forces> New
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
         (
             const word& name,
             const objectRegistry&,
diff --git a/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDiv.C b/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDiv.C
index 63b657a3e9f..9cb0229d4dd 100644
--- a/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDiv.C
+++ b/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDiv.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2013-2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2013-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -32,13 +32,16 @@ License
 
 namespace Foam
 {
-defineTypeNameAndDebug(calcFvcDiv, 0);
+namespace functionObjects
+{
+    defineTypeNameAndDebug(calcFvcDiv, 0);
+}
 }
 
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
-Foam::volScalarField& Foam::calcFvcDiv::divField
+Foam::volScalarField& Foam::functionObjects::calcFvcDiv::divField
 (
     const word& divName,
     const dimensionSet& dims
@@ -76,7 +79,7 @@ Foam::volScalarField& Foam::calcFvcDiv::divField
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::calcFvcDiv::calcFvcDiv
+Foam::functionObjects::calcFvcDiv::calcFvcDiv
 (
     const word& name,
     const objectRegistry& obr,
@@ -86,93 +89,82 @@ Foam::calcFvcDiv::calcFvcDiv
 :
     name_(name),
     obr_(obr),
-    active_(true),
     fieldName_("undefined-fieldName"),
     resultName_("undefined-resultName")
 {
-    // Check if the available mesh is an fvMesh, otherwise deactivate
-    if (!isA<fvMesh>(obr_))
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating." << nl
-            << endl;
-    }
-
     read(dict);
 }
 
 
+bool Foam::functionObjects::calcFvcDiv::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::calcFvcDiv::~calcFvcDiv()
+Foam::functionObjects::calcFvcDiv::~calcFvcDiv()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::calcFvcDiv::read(const dictionary& dict)
+void Foam::functionObjects::calcFvcDiv::read(const dictionary& dict)
 {
-    if (active_)
-    {
-        dict.lookup("fieldName") >> fieldName_;
-        dict.lookup("resultName") >> resultName_;
+    dict.lookup("fieldName") >> fieldName_;
+    dict.lookup("resultName") >> resultName_;
 
-        if (resultName_ == "none")
-        {
-            resultName_ = "fvc::div(" + fieldName_ + ")";
-        }
+    if (resultName_ == "none")
+    {
+        resultName_ = "fvc::div(" + fieldName_ + ")";
     }
 }
 
 
-void Foam::calcFvcDiv::execute()
+void Foam::functionObjects::calcFvcDiv::execute()
 {
-    if (active_)
-    {
-        bool processed = false;
+    bool processed = false;
 
-        calcDiv<surfaceScalarField>(fieldName_, resultName_, processed);
-        calcDiv<volVectorField>(fieldName_, resultName_, processed);
+    calcDiv<surfaceScalarField>(fieldName_, resultName_, processed);
+    calcDiv<volVectorField>(fieldName_, resultName_, processed);
 
-        if (!processed)
-        {
-            WarningInFunction
-                << "Unprocessed field " << fieldName_ << endl;
-        }
+    if (!processed)
+    {
+        WarningInFunction
+            << "Unprocessed field " << fieldName_ << endl;
     }
 }
 
 
-void Foam::calcFvcDiv::end()
+void Foam::functionObjects::calcFvcDiv::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    execute();
 }
 
 
-void Foam::calcFvcDiv::timeSet()
-{
-    // Do nothing
-}
+void Foam::functionObjects::calcFvcDiv::timeSet()
+{}
 
 
-void Foam::calcFvcDiv::write()
+void Foam::functionObjects::calcFvcDiv::write()
 {
-    if (active_)
+    if (obr_.foundObject<regIOobject>(resultName_))
     {
-        if (obr_.foundObject<regIOobject>(resultName_))
-        {
-            const regIOobject& field =
-                obr_.lookupObject<regIOobject>(resultName_);
+        const regIOobject& field =
+            obr_.lookupObject<regIOobject>(resultName_);
 
-            Info<< type() << " " << name_ << " output:" << nl
-                << "    writing field " << field.name() << nl << endl;
+        Info<< type() << " " << name_ << " output:" << nl
+            << "    writing field " << field.name() << nl << endl;
 
-            field.write();
-        }
+        field.write();
     }
 }
 
diff --git a/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDiv.H b/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDiv.H
index 447b00c92c8..bc96f8ffb09 100644
--- a/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDiv.H
+++ b/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDiv.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::calcFvcDiv
+    Foam::functionObjects::calcFvcDiv
 
 Group
     grpFVFunctionObjects
@@ -59,6 +59,9 @@ class polyMesh;
 class mapPolyMesh;
 class dimensionSet;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                          Class calcFvcDiv Declaration
 \*---------------------------------------------------------------------------*/
@@ -73,9 +76,6 @@ class calcFvcDiv
         //- Reference to the database
         const objectRegistry& obr_;
 
-        //- On/off switch
-        bool active_;
-
         //- Name of field to process
         word fieldName_;
 
@@ -126,6 +126,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~calcFvcDiv();
@@ -166,6 +176,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDivFunctionObject.H b/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDivFunctionObject.H
index 5cc8af7332b..5446371ec01 100644
--- a/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDivFunctionObject.H
+++ b/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDivFunctionObject.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,8 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<calcFvcDiv> calcFvcDivFunctionObject;
+    typedef OutputFilterFunctionObject<functionObjects::calcFvcDiv>
+        calcFvcDivFunctionObject;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDivTemplates.C b/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDivTemplates.C
index d7561744dc9..6659dccbfb7 100644
--- a/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDivTemplates.C
+++ b/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDivTemplates.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -29,7 +29,7 @@ License
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class FieldType>
-void Foam::calcFvcDiv::calcDiv
+void Foam::functionObjects::calcFvcDiv::calcDiv
 (
     const word& fieldName,
     const word& resultName,
diff --git a/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.C b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.C
index 96a62f3df86..31b17b9e0a8 100644
--- a/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.C
+++ b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2013-2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2013-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -32,13 +32,16 @@ License
 
 namespace Foam
 {
-defineTypeNameAndDebug(calcFvcGrad, 0);
+namespace functionObjects
+{
+    defineTypeNameAndDebug(calcFvcGrad, 0);
+}
 }
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::calcFvcGrad::calcFvcGrad
+Foam::functionObjects::calcFvcGrad::calcFvcGrad
 (
     const word& name,
     const objectRegistry& obr,
@@ -48,93 +51,82 @@ Foam::calcFvcGrad::calcFvcGrad
 :
     name_(name),
     obr_(obr),
-    active_(true),
     fieldName_("undefined-fieldName"),
     resultName_("undefined-resultName")
 {
-    // Check if the available mesh is an fvMesh, otherwise deactivate
-    if (!isA<fvMesh>(obr_))
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating." << nl
-            << endl;
-    }
-
     read(dict);
 }
 
 
+bool Foam::functionObjects::calcFvcGrad::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::calcFvcGrad::~calcFvcGrad()
+Foam::functionObjects::calcFvcGrad::~calcFvcGrad()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::calcFvcGrad::read(const dictionary& dict)
+void Foam::functionObjects::calcFvcGrad::read(const dictionary& dict)
 {
-    if (active_)
-    {
-        dict.lookup("fieldName") >> fieldName_;
-        dict.lookup("resultName") >> resultName_;
+    dict.lookup("fieldName") >> fieldName_;
+    dict.lookup("resultName") >> resultName_;
 
-        if (resultName_ == "none")
-        {
-            resultName_ = "fvc::grad(" + fieldName_ + ")";
-        }
+    if (resultName_ == "none")
+    {
+        resultName_ = "fvc::grad(" + fieldName_ + ")";
     }
 }
 
 
-void Foam::calcFvcGrad::execute()
+void Foam::functionObjects::calcFvcGrad::execute()
 {
-    if (active_)
-    {
-        bool processed = false;
+    bool processed = false;
 
-        calcGrad<scalar>(fieldName_, resultName_, processed);
-        calcGrad<vector>(fieldName_, resultName_, processed);
+    calcGrad<scalar>(fieldName_, resultName_, processed);
+    calcGrad<vector>(fieldName_, resultName_, processed);
 
-        if (!processed)
-        {
-            WarningInFunction
-                << "Unprocessed field " << fieldName_ << endl;
-        }
+    if (!processed)
+    {
+        WarningInFunction
+            << "Unprocessed field " << fieldName_ << endl;
     }
 }
 
 
-void Foam::calcFvcGrad::end()
+void Foam::functionObjects::calcFvcGrad::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    execute();
 }
 
 
-void Foam::calcFvcGrad::timeSet()
-{
-    // Do nothing
-}
+void Foam::functionObjects::calcFvcGrad::timeSet()
+{}
 
 
-void Foam::calcFvcGrad::write()
+void Foam::functionObjects::calcFvcGrad::write()
 {
-    if (active_)
+    if (obr_.foundObject<regIOobject>(resultName_))
     {
-        if (obr_.foundObject<regIOobject>(resultName_))
-        {
-            const regIOobject& field =
-                obr_.lookupObject<regIOobject>(resultName_);
+        const regIOobject& field =
+            obr_.lookupObject<regIOobject>(resultName_);
 
-            Info<< type() << " " << name_ << " output:" << nl
-                << "    writing field " << field.name() << nl << endl;
+        Info<< type() << " " << name_ << " output:" << nl
+            << "    writing field " << field.name() << nl << endl;
 
-            field.write();
-        }
+        field.write();
     }
 }
 
diff --git a/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.H b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.H
index bdaf5383ed5..f1b67ae08b5 100644
--- a/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.H
+++ b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::calcFvcGrad
+    Foam::functionObjects::calcFvcGrad
 
 Group
     grpFVFunctionObjects
@@ -59,6 +59,9 @@ class polyMesh;
 class mapPolyMesh;
 class dimensionSet;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                          Class calcFvcGrad Declaration
 \*---------------------------------------------------------------------------*/
@@ -73,9 +76,6 @@ class calcFvcGrad
         //- Reference to the database
         const objectRegistry& obr_;
 
-        //- On/off switch
-        bool active_;
-
         //- Name of field to process
         word fieldName_;
 
@@ -129,6 +129,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~calcFvcGrad();
@@ -169,6 +179,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGradFunctionObject.H b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGradFunctionObject.H
index 0c3f5806976..a36516740d2 100644
--- a/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGradFunctionObject.H
+++ b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGradFunctionObject.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,8 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<calcFvcGrad> calcFvcGradFunctionObject;
+    typedef OutputFilterFunctionObject<functionObjects::calcFvcGrad>
+        calcFvcGradFunctionObject;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGradTemplates.C b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGradTemplates.C
index 0a570b9872c..3f20974adff 100644
--- a/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGradTemplates.C
+++ b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGradTemplates.C
@@ -35,7 +35,11 @@ Foam::GeometricField
     Foam::fvPatchField,
     Foam::volMesh
 >&
-Foam::calcFvcGrad::gradField(const word& gradName, const dimensionSet& dims)
+Foam::functionObjects::calcFvcGrad::gradField
+(
+    const word& gradName,
+    const dimensionSet& dims
+)
 {
     Info<< "gradField" << endl;
 
@@ -78,7 +82,7 @@ Foam::calcFvcGrad::gradField(const word& gradName, const dimensionSet& dims)
 
 
 template<class Type>
-void Foam::calcFvcGrad::calcGrad
+void Foam::functionObjects::calcFvcGrad::calcGrad
 (
     const word& fieldName,
     const word& resultName,
diff --git a/src/postProcessing/functionObjects/fvTools/calcMag/calcMag.C b/src/postProcessing/functionObjects/fvTools/calcMag/calcMag.C
index f867746c3c8..73e0b8b2868 100644
--- a/src/postProcessing/functionObjects/fvTools/calcMag/calcMag.C
+++ b/src/postProcessing/functionObjects/fvTools/calcMag/calcMag.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2013-2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2013-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -32,13 +32,16 @@ License
 
 namespace Foam
 {
-defineTypeNameAndDebug(calcMag, 0);
+namespace functionObjects
+{
+    defineTypeNameAndDebug(calcMag, 0);
+}
 }
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::calcMag::calcMag
+Foam::functionObjects::calcMag::calcMag
 (
     const word& name,
     const objectRegistry& obr,
@@ -48,96 +51,85 @@ Foam::calcMag::calcMag
 :
     name_(name),
     obr_(obr),
-    active_(true),
     fieldName_("undefined-fieldName"),
     resultName_("undefined-resultName")
 {
-    // Check if the available mesh is an fvMesh, otherwise deactivate
-    if (!isA<fvMesh>(obr_))
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating." << nl
-            << endl;
-    }
-
     read(dict);
 }
 
 
+bool Foam::functionObjects::calcMag::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::calcMag::~calcMag()
+Foam::functionObjects::calcMag::~calcMag()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::calcMag::read(const dictionary& dict)
+void Foam::functionObjects::calcMag::read(const dictionary& dict)
 {
-    if (active_)
-    {
-        dict.lookup("fieldName") >> fieldName_;
-        dict.lookup("resultName") >> resultName_;
+    dict.lookup("fieldName") >> fieldName_;
+    dict.lookup("resultName") >> resultName_;
 
-        if (resultName_ == "none")
-        {
-            resultName_ = "mag(" + fieldName_ + ")";
-        }
+    if (resultName_ == "none")
+    {
+        resultName_ = "mag(" + fieldName_ + ")";
     }
 }
 
 
-void Foam::calcMag::execute()
+void Foam::functionObjects::calcMag::execute()
 {
-    if (active_)
-    {
-        bool processed = false;
-
-        calc<scalar>(fieldName_, resultName_, processed);
-        calc<vector>(fieldName_, resultName_, processed);
-        calc<sphericalTensor>(fieldName_, resultName_, processed);
-        calc<symmTensor>(fieldName_, resultName_, processed);
-        calc<tensor>(fieldName_, resultName_, processed);
-
-        if (!processed)
-        {
-            WarningInFunction
-                << "Unprocessed field " << fieldName_ << endl;
-        }
-    }
-}
+    bool processed = false;
 
+    calc<scalar>(fieldName_, resultName_, processed);
+    calc<vector>(fieldName_, resultName_, processed);
+    calc<sphericalTensor>(fieldName_, resultName_, processed);
+    calc<symmTensor>(fieldName_, resultName_, processed);
+    calc<tensor>(fieldName_, resultName_, processed);
 
-void Foam::calcMag::end()
-{
-    if (active_)
+    if (!processed)
     {
-        execute();
+        WarningInFunction
+            << "Unprocessed field " << fieldName_ << endl;
     }
 }
 
 
-void Foam::calcMag::timeSet()
+void Foam::functionObjects::calcMag::end()
 {
-    // Do nothing
+    execute();
 }
 
 
-void Foam::calcMag::write()
+void Foam::functionObjects::calcMag::timeSet()
+{}
+
+
+void Foam::functionObjects::calcMag::write()
 {
-    if (active_)
+    if (obr_.foundObject<regIOobject>(resultName_))
     {
-        if (obr_.foundObject<regIOobject>(resultName_))
-        {
-            const regIOobject& field =
-                obr_.lookupObject<regIOobject>(resultName_);
+        const regIOobject& field =
+            obr_.lookupObject<regIOobject>(resultName_);
 
-            Info<< type() << " " << name_ << " output:" << nl
-                << "    writing field " << field.name() << nl << endl;
+        Info<< type() << " " << name_ << " output:" << nl
+            << "    writing field " << field.name() << nl << endl;
 
-            field.write();
-        }
+        field.write();
     }
 }
 
diff --git a/src/postProcessing/functionObjects/fvTools/calcMag/calcMag.H b/src/postProcessing/functionObjects/fvTools/calcMag/calcMag.H
index 76f10721117..d8cb5ca3d50 100644
--- a/src/postProcessing/functionObjects/fvTools/calcMag/calcMag.H
+++ b/src/postProcessing/functionObjects/fvTools/calcMag/calcMag.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::calcMag
+    Foam::functionObjects::calcMag
 
 Group
     grpFVFunctionObjects
@@ -59,6 +59,9 @@ class polyMesh;
 class mapPolyMesh;
 class dimensionSet;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                            Class calcMag Declaration
 \*---------------------------------------------------------------------------*/
@@ -73,9 +76,6 @@ class calcMag
         //- Reference to the database
         const objectRegistry& obr_;
 
-        //- On/off switch
-        bool active_;
-
         //- Name of field to process
         word fieldName_;
 
@@ -123,6 +123,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~calcMag();
@@ -163,6 +173,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/fvTools/calcMag/calcMagFunctionObject.H b/src/postProcessing/functionObjects/fvTools/calcMag/calcMagFunctionObject.H
index ea143666e13..b83e6817a51 100644
--- a/src/postProcessing/functionObjects/fvTools/calcMag/calcMagFunctionObject.H
+++ b/src/postProcessing/functionObjects/fvTools/calcMag/calcMagFunctionObject.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,8 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<calcMag> calcMagFunctionObject;
+    typedef OutputFilterFunctionObject<functionObjects::calcMag>
+        calcMagFunctionObject;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/fvTools/calcMag/calcMagTemplates.C b/src/postProcessing/functionObjects/fvTools/calcMag/calcMagTemplates.C
index f9db9368f7d..8b942e95a6f 100644
--- a/src/postProcessing/functionObjects/fvTools/calcMag/calcMagTemplates.C
+++ b/src/postProcessing/functionObjects/fvTools/calcMag/calcMagTemplates.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -29,7 +29,7 @@ License
 #include "surfaceFields.H"
 
 template<class FieldType>
-FieldType& Foam::calcMag::magField
+FieldType& Foam::functionObjects::calcMag::magField
 (
     const word& magName,
     const dimensionSet& dims
@@ -68,7 +68,7 @@ FieldType& Foam::calcMag::magField
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class Type>
-void Foam::calcMag::calc
+void Foam::functionObjects::calcMag::calc
 (
     const word& fieldName,
     const word& resultName,
diff --git a/src/postProcessing/functionObjects/jobControl/abortCalculation/abortCalculation.C b/src/postProcessing/functionObjects/jobControl/abortCalculation/abortCalculation.C
index 34ba7d032fa..8706db08595 100644
--- a/src/postProcessing/functionObjects/jobControl/abortCalculation/abortCalculation.C
+++ b/src/postProcessing/functionObjects/jobControl/abortCalculation/abortCalculation.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -34,35 +34,34 @@ License
 
 namespace Foam
 {
-defineTypeNameAndDebug(abortCalculation, 0);
-}
-
-
-// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
-
-namespace Foam
+namespace functionObjects
 {
-    template<>
-    const char* Foam::NamedEnum
-    <
-        Foam::abortCalculation::actionType,
-        3
-    >::names[] =
-    {
-        "noWriteNow",
-        "writeNow",
-        "nextWrite"
-    };
+    defineTypeNameAndDebug(abortCalculation, 0);
+}
 }
 
+template<>
+const char* Foam::NamedEnum
+<
+    Foam::functionObjects::abortCalculation::actionType,
+    3
+>::names[] =
+{
+    "noWriteNow",
+    "writeNow",
+    "nextWrite"
+};
 
-const Foam::NamedEnum<Foam::abortCalculation::actionType, 3>
-    Foam::abortCalculation::actionTypeNames_;
+const Foam::NamedEnum
+<
+    Foam::functionObjects::abortCalculation::actionType,
+    3
+> Foam::functionObjects::abortCalculation::actionTypeNames_;
 
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
-void Foam::abortCalculation::removeFile() const
+void Foam::functionObjects::abortCalculation::removeFile() const
 {
     bool hasAbort = isFile(abortFile_);
     reduce(hasAbort, orOp<bool>());
@@ -77,7 +76,7 @@ void Foam::abortCalculation::removeFile() const
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::abortCalculation::abortCalculation
+Foam::functionObjects::abortCalculation::abortCalculation
 (
     const word& name,
     const objectRegistry& obr,
@@ -98,15 +97,28 @@ Foam::abortCalculation::abortCalculation
 }
 
 
+bool Foam::functionObjects::abortCalculation::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    return true;
+}
+
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::abortCalculation::~abortCalculation()
+Foam::functionObjects::abortCalculation::~abortCalculation()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::abortCalculation::read(const dictionary& dict)
+void Foam::functionObjects::abortCalculation::read(const dictionary& dict)
 {
     if (dict.found("action"))
     {
@@ -124,7 +136,7 @@ void Foam::abortCalculation::read(const dictionary& dict)
 }
 
 
-void Foam::abortCalculation::execute()
+void Foam::functionObjects::abortCalculation::execute()
 {
     bool hasAbort = isFile(abortFile_);
     reduce(hasAbort, orOp<bool>());
@@ -173,22 +185,18 @@ void Foam::abortCalculation::execute()
 }
 
 
-void Foam::abortCalculation::end()
+void Foam::functionObjects::abortCalculation::end()
 {
     removeFile();
 }
 
 
-void Foam::abortCalculation::timeSet()
-{
-    // Do nothing - only valid on execute
-}
+void Foam::functionObjects::abortCalculation::timeSet()
+{}
 
 
-void Foam::abortCalculation::write()
-{
-    // Do nothing - only valid on execute
-}
+void Foam::functionObjects::abortCalculation::write()
+{}
 
 
 // ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/jobControl/abortCalculation/abortCalculation.H b/src/postProcessing/functionObjects/jobControl/abortCalculation/abortCalculation.H
index 95e1994fd47..21c0650080d 100644
--- a/src/postProcessing/functionObjects/jobControl/abortCalculation/abortCalculation.H
+++ b/src/postProcessing/functionObjects/jobControl/abortCalculation/abortCalculation.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::abortCalculation
+    Foam::functionObjects::abortCalculation
 
 Group
     grpJobControlFunctionObjects
@@ -58,6 +58,9 @@ class dictionary;
 class polyMesh;
 class mapPolyMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                       Class abortCalculation Declaration
 \*---------------------------------------------------------------------------*/
@@ -124,6 +127,16 @@ public:
             const bool loadFromFilesUnused = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~abortCalculation();
@@ -164,6 +177,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/jobControl/abortCalculation/abortCalculationFunctionObject.H b/src/postProcessing/functionObjects/jobControl/abortCalculation/abortCalculationFunctionObject.H
index 920677f16a2..97150ced98d 100644
--- a/src/postProcessing/functionObjects/jobControl/abortCalculation/abortCalculationFunctionObject.H
+++ b/src/postProcessing/functionObjects/jobControl/abortCalculation/abortCalculationFunctionObject.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) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,7 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<abortCalculation>
+    typedef OutputFilterFunctionObject<functionObjects::abortCalculation>
         abortCalculationFunctionObject;
 }
 
diff --git a/src/postProcessing/functionObjects/systemCall/systemCall.C b/src/postProcessing/functionObjects/systemCall/systemCall.C
index 1ad82b58d35..2462b526fed 100644
--- a/src/postProcessing/functionObjects/systemCall/systemCall.C
+++ b/src/postProcessing/functionObjects/systemCall/systemCall.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -31,13 +31,16 @@ License
 
 namespace Foam
 {
-defineTypeNameAndDebug(systemCall, 0);
+namespace functionObjects
+{
+    defineTypeNameAndDebug(systemCall, 0);
+}
 }
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::systemCall::systemCall
+Foam::functionObjects::systemCall::systemCall
 (
     const word& name,
     const objectRegistry&,
@@ -54,15 +57,27 @@ Foam::systemCall::systemCall
 }
 
 
+bool Foam::functionObjects::systemCall::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    return true;
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::systemCall::~systemCall()
+Foam::functionObjects::systemCall::~systemCall()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::systemCall::read(const dictionary& dict)
+void Foam::functionObjects::systemCall::read(const dictionary& dict)
 {
     dict.readIfPresent("executeCalls", executeCalls_);
     dict.readIfPresent("endCalls", endCalls_);
@@ -93,7 +108,7 @@ void Foam::systemCall::read(const dictionary& dict)
 }
 
 
-void Foam::systemCall::execute()
+void Foam::functionObjects::systemCall::execute()
 {
     forAll(executeCalls_, callI)
     {
@@ -102,7 +117,7 @@ void Foam::systemCall::execute()
 }
 
 
-void Foam::systemCall::end()
+void Foam::functionObjects::systemCall::end()
 {
     forAll(endCalls_, callI)
     {
@@ -111,13 +126,11 @@ void Foam::systemCall::end()
 }
 
 
-void Foam::systemCall::timeSet()
-{
-    // Do nothing
-}
+void Foam::functionObjects::systemCall::timeSet()
+{}
 
 
-void Foam::systemCall::write()
+void Foam::functionObjects::systemCall::write()
 {
     forAll(writeCalls_, callI)
     {
diff --git a/src/postProcessing/functionObjects/systemCall/systemCall.H b/src/postProcessing/functionObjects/systemCall/systemCall.H
index eb9202c01b3..38ec3deff43 100644
--- a/src/postProcessing/functionObjects/systemCall/systemCall.H
+++ b/src/postProcessing/functionObjects/systemCall/systemCall.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::systemCall
+    Foam::functionObjects::systemCall
 
 Group
     grpFunctionObjects
@@ -100,6 +100,9 @@ class dictionary;
 class polyMesh;
 class mapPolyMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                          Class systemCall Declaration
 \*---------------------------------------------------------------------------*/
@@ -152,6 +155,16 @@ public:
             const bool loadFromFilesUnused = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~systemCall();
@@ -192,6 +205,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/systemCall/systemCallFunctionObject.H b/src/postProcessing/functionObjects/systemCall/systemCallFunctionObject.H
index 574b7598597..b0fdf35ea61 100644
--- a/src/postProcessing/functionObjects/systemCall/systemCallFunctionObject.H
+++ b/src/postProcessing/functionObjects/systemCall/systemCallFunctionObject.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) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,7 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<systemCall>
+    typedef OutputFilterFunctionObject<functionObjects::systemCall>
         systemCallFunctionObject;
 }
 
diff --git a/src/postProcessing/functionObjects/utilities/CourantNo/CourantNo.C b/src/postProcessing/functionObjects/utilities/CourantNo/CourantNo.C
index a98e6f2c007..13a4e61c936 100644
--- a/src/postProcessing/functionObjects/utilities/CourantNo/CourantNo.C
+++ b/src/postProcessing/functionObjects/utilities/CourantNo/CourantNo.C
@@ -31,15 +31,18 @@ License
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
+{
+namespace functionObjects
 {
     defineTypeNameAndDebug(CourantNo, 0);
 }
+}
 
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
 Foam::tmp<Foam::volScalarField::Internal>
-Foam::CourantNo::byRho
+Foam::functionObjects::CourantNo::byRho
 (
     const tmp<volScalarField::Internal>& Co
 ) const
@@ -57,7 +60,7 @@ Foam::CourantNo::byRho
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::CourantNo::CourantNo
+Foam::functionObjects::CourantNo::CourantNo
 (
     const word& name,
     const objectRegistry& obr,
@@ -67,118 +70,105 @@ Foam::CourantNo::CourantNo
 :
     name_(name),
     obr_(obr),
-    active_(true),
     phiName_("phi"),
     rhoName_("rho")
 {
-    // Check if the available mesh is an fvMesh, otherwise deactivate
-    if (!isA<fvMesh>(obr_))
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_ << nl
-            << endl;
-    }
-
     read(dict);
 
-    if (active_)
-    {
-        const fvMesh& mesh = refCast<const fvMesh>(obr_);
+    const fvMesh& mesh = refCast<const fvMesh>(obr_);
 
-        volScalarField* CourantNoPtr
+    volScalarField* CourantNoPtr
+    (
+        new volScalarField
         (
-            new volScalarField
+            IOobject
             (
-                IOobject
-                (
-                    type(),
-                    mesh.time().timeName(),
-                    mesh,
-                    IOobject::NO_READ,
-                    IOobject::NO_WRITE
-                ),
+                type(),
+                mesh.time().timeName(),
                 mesh,
-                dimensionedScalar("0", dimless, 0.0),
-                zeroGradientFvPatchScalarField::typeName
-            )
-        );
+                IOobject::NO_READ,
+                IOobject::NO_WRITE
+            ),
+            mesh,
+            dimensionedScalar("0", dimless, 0.0),
+            zeroGradientFvPatchScalarField::typeName
+        )
+    );
+
+    mesh.objectRegistry::store(CourantNoPtr);
+}
 
-        mesh.objectRegistry::store(CourantNoPtr);
-    }
+
+bool Foam::functionObjects::CourantNo::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
 }
 
 
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::CourantNo::~CourantNo()
+Foam::functionObjects::CourantNo::~CourantNo()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::CourantNo::read(const dictionary& dict)
+void Foam::functionObjects::CourantNo::read(const dictionary& dict)
 {
-    if (active_)
-    {
-        phiName_ = dict.lookupOrDefault<word>("phiName", "phi");
-        rhoName_ = dict.lookupOrDefault<word>("rhoName", "rho");
-    }
+    phiName_ = dict.lookupOrDefault<word>("phiName", "phi");
+    rhoName_ = dict.lookupOrDefault<word>("rhoName", "rho");
 }
 
 
-void Foam::CourantNo::execute()
+void Foam::functionObjects::CourantNo::execute()
 {
-    if (active_)
-    {
-        const fvMesh& mesh = refCast<const fvMesh>(obr_);
-
-        const surfaceScalarField& phi =
-            mesh.lookupObject<surfaceScalarField>(phiName_);
-
-        volScalarField& Co =
-            const_cast<volScalarField&>
-            (
-                mesh.lookupObject<volScalarField>(type())
-            );
-
-        Co.ref() = byRho
-        (
-            (0.5*mesh.time().deltaT())
-           *fvc::surfaceSum(mag(phi))()()
-           /mesh.V()
-        );
-        Co.correctBoundaryConditions();
-    }
+    const fvMesh& mesh = refCast<const fvMesh>(obr_);
+
+    const surfaceScalarField& phi =
+        mesh.lookupObject<surfaceScalarField>(phiName_);
+
+    volScalarField& Co = const_cast<volScalarField&>
+    (
+        mesh.lookupObject<volScalarField>(type())
+    );
+
+    Co.ref() = byRho
+    (
+        (0.5*mesh.time().deltaT())
+       *fvc::surfaceSum(mag(phi))()()
+       /mesh.V()
+    );
+    Co.correctBoundaryConditions();
 }
 
 
-void Foam::CourantNo::end()
+void Foam::functionObjects::CourantNo::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    execute();
 }
 
 
-void Foam::CourantNo::timeSet()
+void Foam::functionObjects::CourantNo::timeSet()
 {}
 
 
-void Foam::CourantNo::write()
+void Foam::functionObjects::CourantNo::write()
 {
-    if (active_)
-    {
-        const volScalarField& CourantNo =
-            obr_.lookupObject<volScalarField>(type());
+    const volScalarField& CourantNo =
+        obr_.lookupObject<volScalarField>(type());
 
-        Info<< type() << " " << name_ << " output:" << nl
-            << "    writing field " << CourantNo.name() << nl
-            << endl;
+    Info<< type() << " " << name_ << " output:" << nl
+        << "    writing field " << CourantNo.name() << nl
+        << endl;
 
-        CourantNo.write();
-    }
+    CourantNo.write();
 }
 
 
diff --git a/src/postProcessing/functionObjects/utilities/CourantNo/CourantNo.H b/src/postProcessing/functionObjects/utilities/CourantNo/CourantNo.H
index eff16de0cb2..a0796ea7a07 100644
--- a/src/postProcessing/functionObjects/utilities/CourantNo/CourantNo.H
+++ b/src/postProcessing/functionObjects/utilities/CourantNo/CourantNo.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::CourantNo
+    Foam::functionObjects::CourantNo
 
 Group
     grpUtilitiesFunctionObjects
@@ -54,6 +54,9 @@ class dictionary;
 class polyMesh;
 class mapPolyMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                           Class CourantNo Declaration
 \*---------------------------------------------------------------------------*/
@@ -68,9 +71,6 @@ class CourantNo
         //- Reference to the database
         const objectRegistry& obr_;
 
-        //- On/off switch
-        bool active_;
-
         //- Name of flux field, default is "phi"
         word phiName_;
 
@@ -111,6 +111,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~CourantNo();
@@ -151,6 +161,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/CourantNo/CourantNoFunctionObject.H b/src/postProcessing/functionObjects/utilities/CourantNo/CourantNoFunctionObject.H
index 1586e771abd..6bab35fc092 100644
--- a/src/postProcessing/functionObjects/utilities/CourantNo/CourantNoFunctionObject.H
+++ b/src/postProcessing/functionObjects/utilities/CourantNo/CourantNoFunctionObject.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,8 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<CourantNo> CourantNoFunctionObject;
+    typedef OutputFilterFunctionObject<functionObjects::CourantNo>
+        CourantNoFunctionObject;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/CourantNo/IOCourantNo.H b/src/postProcessing/functionObjects/utilities/CourantNo/IOCourantNo.H
index 5be7eb4eb9f..33006b3e504 100644
--- a/src/postProcessing/functionObjects/utilities/CourantNo/IOCourantNo.H
+++ b/src/postProcessing/functionObjects/utilities/CourantNo/IOCourantNo.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -39,7 +39,7 @@ Description
 
 namespace Foam
 {
-    typedef IOOutputFilter<CourantNo> IOCourantNo;
+    typedef IOOutputFilter<functionObjects::CourantNo> IOCourantNo;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/Lambda2/IOLambda2.H b/src/postProcessing/functionObjects/utilities/Lambda2/IOLambda2.H
index 0aacf47e94c..d8fd9a81adb 100644
--- a/src/postProcessing/functionObjects/utilities/Lambda2/IOLambda2.H
+++ b/src/postProcessing/functionObjects/utilities/Lambda2/IOLambda2.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -39,7 +39,7 @@ Description
 
 namespace Foam
 {
-    typedef IOOutputFilter<Lambda2> IOLambda2;
+    typedef IOOutputFilter<functionObjects::Lambda2> IOLambda2;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/Lambda2/Lambda2.C b/src/postProcessing/functionObjects/utilities/Lambda2/Lambda2.C
index 1fc38cd5bf1..23345a25ae4 100644
--- a/src/postProcessing/functionObjects/utilities/Lambda2/Lambda2.C
+++ b/src/postProcessing/functionObjects/utilities/Lambda2/Lambda2.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2013-2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2013-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -32,14 +32,17 @@ License
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
+{
+namespace functionObjects
 {
     defineTypeNameAndDebug(Lambda2, 0);
 }
+}
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::Lambda2::Lambda2
+Foam::functionObjects::Lambda2::Lambda2
 (
     const word& name,
     const objectRegistry& obr,
@@ -49,119 +52,105 @@ Foam::Lambda2::Lambda2
 :
     name_(name),
     obr_(obr),
-    active_(true),
     UName_("U")
 {
-    // Check if the available mesh is an fvMesh, otherwise deactivate
-    if (!isA<fvMesh>(obr_))
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_ << nl
-            << endl;
-    }
-
     read(dict);
 
-    if (active_)
-    {
-        const fvMesh& mesh = refCast<const fvMesh>(obr_);
+    const fvMesh& mesh = refCast<const fvMesh>(obr_);
 
-        volScalarField* Lambda2Ptr
+    volScalarField* Lambda2Ptr
+    (
+        new volScalarField
         (
-            new volScalarField
+            IOobject
             (
-                IOobject
-                (
-                    type(),
-                    mesh.time().timeName(),
-                    mesh,
-                    IOobject::NO_READ,
-                    IOobject::NO_WRITE
-                ),
+                type(),
+                mesh.time().timeName(),
                 mesh,
-                dimensionedScalar("0", dimless/sqr(dimTime), 0.0)
-            )
-        );
+                IOobject::NO_READ,
+                IOobject::NO_WRITE
+            ),
+            mesh,
+            dimensionedScalar("0", dimless/sqr(dimTime), 0.0)
+        )
+    );
+
+    mesh.objectRegistry::store(Lambda2Ptr);
+}
 
-        mesh.objectRegistry::store(Lambda2Ptr);
-    }
+
+bool Foam::functionObjects::Lambda2::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
 }
 
 
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::Lambda2::~Lambda2()
+Foam::functionObjects::Lambda2::~Lambda2()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::Lambda2::read(const dictionary& dict)
+void Foam::functionObjects::Lambda2::read(const dictionary& dict)
 {
-    if (active_)
-    {
-        UName_ = dict.lookupOrDefault<word>("UName", "U");
-    }
+    UName_ = dict.lookupOrDefault<word>("UName", "U");
 }
 
 
-void Foam::Lambda2::execute()
+void Foam::functionObjects::Lambda2::execute()
 {
-    if (active_)
-    {
-        const fvMesh& mesh = refCast<const fvMesh>(obr_);
+    const fvMesh& mesh = refCast<const fvMesh>(obr_);
 
-        const volVectorField& U =
-            mesh.lookupObject<volVectorField>(UName_);
+    const volVectorField& U =
+        mesh.lookupObject<volVectorField>(UName_);
 
-        const volTensorField gradU(fvc::grad(U));
+    const volTensorField gradU(fvc::grad(U));
 
-        const volTensorField SSplusWW
+    const volTensorField SSplusWW
+    (
+        (symm(gradU) & symm(gradU))
+      + (skew(gradU) & skew(gradU))
+    );
+
+    volScalarField& Lambda2 =
+        const_cast<volScalarField&>
         (
-            (symm(gradU) & symm(gradU))
-          + (skew(gradU) & skew(gradU))
+            mesh.lookupObject<volScalarField>(type())
         );
 
-        volScalarField& Lambda2 =
-            const_cast<volScalarField&>
-            (
-                mesh.lookupObject<volScalarField>(type())
-            );
-
-        Lambda2 = -eigenValues(SSplusWW)().component(vector::Y);
-    }
+    Lambda2 = -eigenValues(SSplusWW)().component(vector::Y);
 }
 
 
-void Foam::Lambda2::end()
+void Foam::functionObjects::Lambda2::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    execute();
 }
 
 
-void Foam::Lambda2::timeSet()
-{
-    // Do nothing
-}
+void Foam::functionObjects::Lambda2::timeSet()
+{}
 
 
-void Foam::Lambda2::write()
+void Foam::functionObjects::Lambda2::write()
 {
-    if (active_)
-    {
-        const volScalarField& Lambda2 =
-            obr_.lookupObject<volScalarField>(type());
+    const volScalarField& Lambda2 =
+        obr_.lookupObject<volScalarField>(type());
 
-        Info<< type() << " " << name_ << " output:" << nl
-            << "    writing field " << Lambda2.name() << nl
-            << endl;
+    Info<< type() << " " << name_ << " output:" << nl
+        << "    writing field " << Lambda2.name() << nl
+        << endl;
 
-        Lambda2.write();
-    }
+    Lambda2.write();
 }
 
 
diff --git a/src/postProcessing/functionObjects/utilities/Lambda2/Lambda2.H b/src/postProcessing/functionObjects/utilities/Lambda2/Lambda2.H
index f4360f46404..a394b9b5a81 100644
--- a/src/postProcessing/functionObjects/utilities/Lambda2/Lambda2.H
+++ b/src/postProcessing/functionObjects/utilities/Lambda2/Lambda2.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2013-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::Lambda2
+    Foam::functionObjects::Lambda2
 
 Group
     grpUtilitiesFunctionObjects
@@ -57,6 +57,9 @@ class dictionary;
 class polyMesh;
 class mapPolyMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                           Class Lambda2 Declaration
 \*---------------------------------------------------------------------------*/
@@ -71,9 +74,6 @@ class Lambda2
         //- Reference to the database
         const objectRegistry& obr_;
 
-        //- On/off switch
-        bool active_;
-
         //- Name of velocity field, default is "U"
         word UName_;
 
@@ -105,6 +105,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~Lambda2();
@@ -145,6 +155,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/Lambda2/Lambda2FunctionObject.H b/src/postProcessing/functionObjects/utilities/Lambda2/Lambda2FunctionObject.H
index e63d04a721d..63031374cbb 100644
--- a/src/postProcessing/functionObjects/utilities/Lambda2/Lambda2FunctionObject.H
+++ b/src/postProcessing/functionObjects/utilities/Lambda2/Lambda2FunctionObject.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,8 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<Lambda2> Lambda2FunctionObject;
+    typedef OutputFilterFunctionObject<functionObjects::Lambda2>
+        Lambda2FunctionObject;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/Peclet/IOPeclet.H b/src/postProcessing/functionObjects/utilities/Peclet/IOPeclet.H
index ea49009d559..16449b1cb3e 100644
--- a/src/postProcessing/functionObjects/utilities/Peclet/IOPeclet.H
+++ b/src/postProcessing/functionObjects/utilities/Peclet/IOPeclet.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -39,7 +39,7 @@ Description
 
 namespace Foam
 {
-    typedef IOOutputFilter<Peclet> IOPeclet;
+    typedef IOOutputFilter<functionObjects::Peclet> IOPeclet;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/Peclet/Peclet.C b/src/postProcessing/functionObjects/utilities/Peclet/Peclet.C
index 076d3b47ed4..ced9ace56d7 100644
--- a/src/postProcessing/functionObjects/utilities/Peclet/Peclet.C
+++ b/src/postProcessing/functionObjects/utilities/Peclet/Peclet.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2013-2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2013-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -34,14 +34,17 @@ License
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
+{
+namespace functionObjects
 {
     defineTypeNameAndDebug(Peclet, 0);
 }
+}
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::Peclet::Peclet
+Foam::functionObjects::Peclet::Peclet
 (
     const word& name,
     const objectRegistry& obr,
@@ -51,178 +54,164 @@ Foam::Peclet::Peclet
 :
     name_(name),
     obr_(obr),
-    active_(true),
     phiName_("phi"),
     rhoName_("rho")
 {
-    // Check if the available mesh is an fvMesh, otherwise deactivate
-    if (!isA<fvMesh>(obr_))
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_ << nl
-            << endl;
-    }
-
     read(dict);
 
-    if (active_)
-    {
-        const fvMesh& mesh = refCast<const fvMesh>(obr_);
+    const fvMesh& mesh = refCast<const fvMesh>(obr_);
 
-        surfaceScalarField* PecletPtr
+    surfaceScalarField* PecletPtr
+    (
+        new surfaceScalarField
         (
-            new surfaceScalarField
+            IOobject
             (
-                IOobject
-                (
-                    type(),
-                    mesh.time().timeName(),
-                    mesh,
-                    IOobject::NO_READ,
-                    IOobject::NO_WRITE
-                ),
+                type(),
+                mesh.time().timeName(),
                 mesh,
-                dimensionedScalar("0", dimless, 0.0)
-            )
-        );
+                IOobject::NO_READ,
+                IOobject::NO_WRITE
+            ),
+            mesh,
+            dimensionedScalar("0", dimless, 0.0)
+        )
+    );
 
-        mesh.objectRegistry::store(PecletPtr);
-    }
+    mesh.objectRegistry::store(PecletPtr);
+}
+
+
+bool Foam::functionObjects::Peclet::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
 }
 
 
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::Peclet::~Peclet()
+Foam::functionObjects::Peclet::~Peclet()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::Peclet::read(const dictionary& dict)
+void Foam::functionObjects::Peclet::read(const dictionary& dict)
 {
-    if (active_)
-    {
-        phiName_ = dict.lookupOrDefault<word>("phiName", "phi");
-        rhoName_ = dict.lookupOrDefault<word>("rhoName", "rho");
-    }
+    phiName_ = dict.lookupOrDefault<word>("phiName", "phi");
+    rhoName_ = dict.lookupOrDefault<word>("rhoName", "rho");
 }
 
 
-void Foam::Peclet::execute()
+void Foam::functionObjects::Peclet::execute()
 {
     typedef compressible::turbulenceModel cmpTurbModel;
     typedef incompressible::turbulenceModel icoTurbModel;
 
-    if (active_)
+    const fvMesh& mesh = refCast<const fvMesh>(obr_);
+
+    tmp<volScalarField> nuEff;
+    if (mesh.foundObject<cmpTurbModel>(turbulenceModel::propertiesName))
     {
-        const fvMesh& mesh = refCast<const fvMesh>(obr_);
+        const cmpTurbModel& model =
+            mesh.lookupObject<cmpTurbModel>
+            (
+                turbulenceModel::propertiesName
+            );
 
-        tmp<volScalarField> nuEff;
-        if (mesh.foundObject<cmpTurbModel>(turbulenceModel::propertiesName))
-        {
-            const cmpTurbModel& model =
-                mesh.lookupObject<cmpTurbModel>
-                (
-                    turbulenceModel::propertiesName
-                );
+        const volScalarField& rho =
+            mesh.lookupObject<volScalarField>(rhoName_);
 
-            const volScalarField& rho =
-                mesh.lookupObject<volScalarField>(rhoName_);
+        nuEff = model.muEff()/rho;
+    }
+    else if
+    (
+        mesh.foundObject<icoTurbModel>(turbulenceModel::propertiesName)
+    )
+    {
+        const icoTurbModel& model =
+            mesh.lookupObject<icoTurbModel>
+            (
+                turbulenceModel::propertiesName
+            );
 
-            nuEff = model.muEff()/rho;
-        }
-        else if
-        (
-            mesh.foundObject<icoTurbModel>(turbulenceModel::propertiesName)
-        )
-        {
-            const icoTurbModel& model =
-                mesh.lookupObject<icoTurbModel>
-                (
-                    turbulenceModel::propertiesName
-                );
-
-            nuEff = model.nuEff();
-        }
-        else if (mesh.foundObject<dictionary>("transportProperties"))
-        {
-            const dictionary& model =
-                mesh.lookupObject<dictionary>("transportProperties");
-
-            nuEff =
-                tmp<volScalarField>
+        nuEff = model.nuEff();
+    }
+    else if (mesh.foundObject<dictionary>("transportProperties"))
+    {
+        const dictionary& model =
+            mesh.lookupObject<dictionary>("transportProperties");
+
+        nuEff =
+            tmp<volScalarField>
+            (
+                new volScalarField
                 (
-                    new volScalarField
+                    IOobject
                     (
-                        IOobject
-                        (
-                            "nuEff",
-                            mesh.time().timeName(),
-                            mesh,
-                            IOobject::NO_READ,
-                            IOobject::NO_WRITE
-                        ),
+                        "nuEff",
+                        mesh.time().timeName(),
                         mesh,
-                        dimensionedScalar(model.lookup("nu"))
-                    )
-                );
-        }
-        else
-        {
-            FatalErrorInFunction
-                << "Unable to determine the viscosity"
-                << exit(FatalError);
-        }
-
-        const surfaceScalarField& phi =
-            mesh.lookupObject<surfaceScalarField>(phiName_);
-
-        surfaceScalarField& Peclet =
-            const_cast<surfaceScalarField&>
-            (
-                mesh.lookupObject<surfaceScalarField>(type())
-            );
-
-        Peclet =
-            mag(phi)
-           /(
-                mesh.magSf()
-               *mesh.surfaceInterpolation::deltaCoeffs()
-               *fvc::interpolate(nuEff)
+                        IOobject::NO_READ,
+                        IOobject::NO_WRITE
+                    ),
+                    mesh,
+                    dimensionedScalar(model.lookup("nu"))
+                )
             );
     }
-}
-
-
-void Foam::Peclet::end()
-{
-    if (active_)
+    else
     {
-        execute();
+        FatalErrorInFunction
+            << "Unable to determine the viscosity"
+            << exit(FatalError);
     }
+
+    const surfaceScalarField& phi =
+        mesh.lookupObject<surfaceScalarField>(phiName_);
+
+    surfaceScalarField& Peclet =
+        const_cast<surfaceScalarField&>
+        (
+            mesh.lookupObject<surfaceScalarField>(type())
+        );
+
+    Peclet =
+        mag(phi)
+       /(
+            mesh.magSf()
+           *mesh.surfaceInterpolation::deltaCoeffs()
+           *fvc::interpolate(nuEff)
+        );
 }
 
-void Foam::Peclet::timeSet()
+
+void Foam::functionObjects::Peclet::end()
 {
-    // Do nothing
+    execute();
 }
 
+void Foam::functionObjects::Peclet::timeSet()
+{}
 
-void Foam::Peclet::write()
+
+void Foam::functionObjects::Peclet::write()
 {
-    if (active_)
-    {
-        const surfaceScalarField& Peclet =
-            obr_.lookupObject<surfaceScalarField>(type());
+    const surfaceScalarField& Peclet =
+        obr_.lookupObject<surfaceScalarField>(type());
 
-        Info<< type() << " " << name_ << " output:" << nl
-            << "    writing field " << Peclet.name() << nl
-            << endl;
+    Info<< type() << " " << name_ << " output:" << nl
+        << "    writing field " << Peclet.name() << nl
+        << endl;
 
-        Peclet.write();
-    }
+    Peclet.write();
 }
 
 
diff --git a/src/postProcessing/functionObjects/utilities/Peclet/Peclet.H b/src/postProcessing/functionObjects/utilities/Peclet/Peclet.H
index 5becbe93e95..dba87188aba 100644
--- a/src/postProcessing/functionObjects/utilities/Peclet/Peclet.H
+++ b/src/postProcessing/functionObjects/utilities/Peclet/Peclet.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2013-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::Peclet
+    Foam::functionObjects::Peclet
 
 Group
     grpUtilitiesFunctionObjects
@@ -56,6 +56,9 @@ class dictionary;
 class polyMesh;
 class mapPolyMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                           Class Peclet Declaration
 \*---------------------------------------------------------------------------*/
@@ -70,9 +73,6 @@ class Peclet
         //- Reference to the database
         const objectRegistry& obr_;
 
-        //- On/off switch
-        bool active_;
-
         //- Name of flux field, default is "phi"
         word phiName_;
 
@@ -107,6 +107,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~Peclet();
@@ -147,6 +157,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/Peclet/PecletFunctionObject.H b/src/postProcessing/functionObjects/utilities/Peclet/PecletFunctionObject.H
index fdeca7e5717..a740de23d67 100644
--- a/src/postProcessing/functionObjects/utilities/Peclet/PecletFunctionObject.H
+++ b/src/postProcessing/functionObjects/utilities/Peclet/PecletFunctionObject.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,8 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<Peclet> PecletFunctionObject;
+    typedef OutputFilterFunctionObject<functionObjects::Peclet>
+        PecletFunctionObject;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/Q/Q.C b/src/postProcessing/functionObjects/utilities/Q/Q.C
index 1e13c375a93..7e4fb2ff312 100644
--- a/src/postProcessing/functionObjects/utilities/Q/Q.C
+++ b/src/postProcessing/functionObjects/utilities/Q/Q.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2013-2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2013-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -32,13 +32,16 @@ License
 
 namespace Foam
 {
-defineTypeNameAndDebug(Q, 0);
+namespace functionObjects
+{
+    defineTypeNameAndDebug(Q, 0);
+}
 }
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::Q::Q
+Foam::functionObjects::Q::Q
 (
     const word& name,
     const objectRegistry& obr,
@@ -48,113 +51,99 @@ Foam::Q::Q
 :
     name_(name),
     obr_(obr),
-    active_(true),
     UName_("U")
 {
-    // Check if the available mesh is an fvMesh, otherwise deactivate
-    if (!isA<fvMesh>(obr_))
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_ << nl
-            << endl;
-    }
-
     read(dict);
 
-    if (active_)
-    {
-        const fvMesh& mesh = refCast<const fvMesh>(obr_);
+    const fvMesh& mesh = refCast<const fvMesh>(obr_);
 
-        volScalarField* QPtr
+    volScalarField* QPtr
+    (
+        new volScalarField
         (
-            new volScalarField
+            IOobject
             (
-                IOobject
-                (
-                    type(),
-                    mesh.time().timeName(),
-                    mesh,
-                    IOobject::NO_READ,
-                    IOobject::NO_WRITE
-                ),
+                type(),
+                mesh.time().timeName(),
                 mesh,
-                dimensionedScalar("0", dimless/sqr(dimTime), 0.0)
-            )
-        );
+                IOobject::NO_READ,
+                IOobject::NO_WRITE
+            ),
+            mesh,
+            dimensionedScalar("0", dimless/sqr(dimTime), 0.0)
+        )
+    );
+
+    mesh.objectRegistry::store(QPtr);
+}
 
-        mesh.objectRegistry::store(QPtr);
-    }
+
+bool Foam::functionObjects::Q::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
 }
 
 
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::Q::~Q()
+Foam::functionObjects::Q::~Q()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::Q::read(const dictionary& dict)
+void Foam::functionObjects::Q::read(const dictionary& dict)
 {
-    if (active_)
-    {
-        UName_ = dict.lookupOrDefault<word>("UName", "U");
-    }
+    UName_ = dict.lookupOrDefault<word>("UName", "U");
 }
 
 
-void Foam::Q::execute()
+void Foam::functionObjects::Q::execute()
 {
-    if (active_)
-    {
-        const fvMesh& mesh = refCast<const fvMesh>(obr_);
+    const fvMesh& mesh = refCast<const fvMesh>(obr_);
 
-        const volVectorField& U =
-            mesh.lookupObject<volVectorField>(UName_);
+    const volVectorField& U =
+        mesh.lookupObject<volVectorField>(UName_);
 
-        const volTensorField gradU(fvc::grad(U));
+    const volTensorField gradU(fvc::grad(U));
 
-        volScalarField& Q =
-            const_cast<volScalarField&>
-            (
-                mesh.lookupObject<volScalarField>(type())
-            );
+    volScalarField& Q =
+        const_cast<volScalarField&>
+        (
+            mesh.lookupObject<volScalarField>(type())
+        );
 
-        Q = 0.5*(sqr(tr(gradU)) - tr(((gradU) & (gradU))));
-    }
+    Q = 0.5*(sqr(tr(gradU)) - tr(((gradU) & (gradU))));
 }
 
 
-void Foam::Q::end()
+void Foam::functionObjects::Q::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    execute();
 }
 
 
-void Foam::Q::timeSet()
-{
-    // Do nothing
-}
+void Foam::functionObjects::Q::timeSet()
+{}
 
 
-void Foam::Q::write()
+void Foam::functionObjects::Q::write()
 {
-    if (active_)
-    {
-        const volScalarField& Q =
-            obr_.lookupObject<volScalarField>(type());
+    const volScalarField& Q =
+        obr_.lookupObject<volScalarField>(type());
 
-        Info<< type() << " " << name_ << " output:" << nl
-            << "    writing field " << Q.name() << nl
-            << endl;
+    Info<< type() << " " << name_ << " output:" << nl
+        << "    writing field " << Q.name() << nl
+        << endl;
 
-        Q.write();
-    }
+    Q.write();
 }
 
 
diff --git a/src/postProcessing/functionObjects/utilities/Q/Q.H b/src/postProcessing/functionObjects/utilities/Q/Q.H
index aed626228c8..56e00833c36 100644
--- a/src/postProcessing/functionObjects/utilities/Q/Q.H
+++ b/src/postProcessing/functionObjects/utilities/Q/Q.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2013-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::Q
+    Foam::functionObjects::Q
 
 Group
     grpUtilitiesFunctionObjects
@@ -60,6 +60,9 @@ class dictionary;
 class polyMesh;
 class mapPolyMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                           Class Q Declaration
 \*---------------------------------------------------------------------------*/
@@ -74,9 +77,6 @@ class Q
         //- Reference to the database
         const objectRegistry& obr_;
 
-        //- On/off switch
-        bool active_;
-
         //- Name of velocity field, default is "U"
         word UName_;
 
@@ -108,6 +108,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~Q();
@@ -148,6 +158,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/Q/QFunctionObject.H b/src/postProcessing/functionObjects/utilities/Q/QFunctionObject.H
index 4c96aac5054..27d72f6aa11 100644
--- a/src/postProcessing/functionObjects/utilities/Q/QFunctionObject.H
+++ b/src/postProcessing/functionObjects/utilities/Q/QFunctionObject.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,8 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<Q> QFunctionObject;
+    typedef OutputFilterFunctionObject<functionObjects::Q>
+        QFunctionObject;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/blendingFactor/IOblendingFactor.H b/src/postProcessing/functionObjects/utilities/blendingFactor/IOblendingFactor.H
index 2d1ae3dc1e4..ceef2c02fb5 100644
--- a/src/postProcessing/functionObjects/utilities/blendingFactor/IOblendingFactor.H
+++ b/src/postProcessing/functionObjects/utilities/blendingFactor/IOblendingFactor.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2013-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -39,7 +39,7 @@ Description
 
 namespace Foam
 {
-    typedef IOOutputFilter<blendingFactor> IOblendingFactor;
+    typedef IOOutputFilter<functionObjects::blendingFactor> IOblendingFactor;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactor.C b/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactor.C
index 05da696bae8..64863bcfc65 100644
--- a/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactor.C
+++ b/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactor.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2013-2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2013-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -29,14 +29,17 @@ License
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
+{
+namespace functionObjects
 {
     defineTypeNameAndDebug(blendingFactor, 0);
 }
+}
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::blendingFactor::blendingFactor
+Foam::functionObjects::blendingFactor::blendingFactor
 (
     const word& name,
     const objectRegistry& obr,
@@ -46,80 +49,69 @@ Foam::blendingFactor::blendingFactor
 :
     name_(name),
     obr_(obr),
-    active_(true),
     phiName_("unknown-phiName"),
     fieldName_("unknown-fieldName")
 {
-    // Check if the available mesh is an fvMesh, otherwise deactivate
-    if (!isA<fvMesh>(obr_))
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_ << nl
-            << endl;
-    }
-
     read(dict);
 }
 
 
+bool Foam::functionObjects::blendingFactor::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::blendingFactor::~blendingFactor()
+Foam::functionObjects::blendingFactor::~blendingFactor()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::blendingFactor::read(const dictionary& dict)
+void Foam::functionObjects::blendingFactor::read(const dictionary& dict)
 {
-    if (active_)
-    {
-        phiName_ = dict.lookupOrDefault<word>("phiName", "phi");
-        dict.lookup("fieldName") >> fieldName_;
-    }
+    phiName_ = dict.lookupOrDefault<word>("phiName", "phi");
+    dict.lookup("fieldName") >> fieldName_;
 }
 
 
-void Foam::blendingFactor::execute()
+void Foam::functionObjects::blendingFactor::execute()
 {
-    if (active_)
-    {
-        calc<scalar>();
-        calc<vector>();
-    }
+    calc<scalar>();
+    calc<vector>();
 }
 
 
-void Foam::blendingFactor::end()
+void Foam::functionObjects::blendingFactor::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    execute();
 }
 
-void Foam::blendingFactor::timeSet()
-{
-    // Do nothing
-}
+void Foam::functionObjects::blendingFactor::timeSet()
+{}
 
 
-void Foam::blendingFactor::write()
+void Foam::functionObjects::blendingFactor::write()
 {
-    if (active_)
-    {
-        const word fieldName = "blendingFactor:" + fieldName_;
+    const word fieldName = "blendingFactor:" + fieldName_;
 
-        const volScalarField& blendingFactor =
-            obr_.lookupObject<volScalarField>(fieldName);
+    const volScalarField& blendingFactor =
+        obr_.lookupObject<volScalarField>(fieldName);
 
-        Info<< type() << " " << name_ << " output:" << nl
-            << "    writing field " << blendingFactor.name() << nl
-            << endl;
+    Info<< type() << " " << name_ << " output:" << nl
+        << "    writing field " << blendingFactor.name() << nl
+        << endl;
 
-        blendingFactor.write();
-    }
+    blendingFactor.write();
 }
 
 
diff --git a/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactor.H b/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactor.H
index 8b86a25cea6..8e739442ccc 100644
--- a/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactor.H
+++ b/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactor.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2013-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::blendingFactor
+    Foam::functionObjects::blendingFactor
 
 Group
     grpUtilitiesFunctionObjects
@@ -58,6 +58,9 @@ class dictionary;
 class polyMesh;
 class mapPolyMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                           Class blendingFactor Declaration
 \*---------------------------------------------------------------------------*/
@@ -72,9 +75,6 @@ class blendingFactor
         //- Reference to the database
         const objectRegistry& obr_;
 
-        //- On/off switch
-        bool active_;
-
         //- Name of flux field, default is "phi"
         word phiName_;
 
@@ -120,6 +120,17 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
+
 
     //- Destructor
     virtual ~blendingFactor();
@@ -160,6 +171,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactorFunctionObject.H b/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactorFunctionObject.H
index b2e2369ebe1..301d365d131 100644
--- a/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactorFunctionObject.H
+++ b/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactorFunctionObject.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2013-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,7 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<blendingFactor>
+    typedef OutputFilterFunctionObject<functionObjects::blendingFactor>
         blendingFactorFunctionObject;
 }
 
diff --git a/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactorTemplates.C b/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactorTemplates.C
index a2275cf5f03..d2df84d3cbe 100644
--- a/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactorTemplates.C
+++ b/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactorTemplates.C
@@ -31,7 +31,7 @@ License
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 template<class Type>
-Foam::volScalarField& Foam::blendingFactor::factor
+Foam::volScalarField& Foam::functionObjects::blendingFactor::factor
 (
     const GeometricField<Type, fvPatchField, volMesh>& field
 )
@@ -70,7 +70,7 @@ Foam::volScalarField& Foam::blendingFactor::factor
 
 
 template<class Type>
-void Foam::blendingFactor::calc()
+void Foam::functionObjects::blendingFactor::calc()
 {
     typedef GeometricField<Type, fvPatchField, volMesh> fieldType;
 
diff --git a/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFields.C b/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFields.C
index 095a801c2e8..33722637d65 100644
--- a/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFields.C
+++ b/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFields.C
@@ -36,13 +36,16 @@ using namespace Foam::constant;
 
 namespace Foam
 {
-defineTypeNameAndDebug(dsmcFields, 0);
+namespace functionObjects
+{
+    defineTypeNameAndDebug(dsmcFields, 0);
+}
 }
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::dsmcFields::dsmcFields
+Foam::functionObjects::dsmcFields::dsmcFields
 (
     const word& name,
     const objectRegistry& obr,
@@ -51,231 +54,220 @@ Foam::dsmcFields::dsmcFields
 )
 :
     name_(name),
-    obr_(obr),
-    active_(true)
+    obr_(obr)
 {
-    // Check if the available mesh is an fvMesh, otherwise deactivate
-    if (!isA<fvMesh>(obr_))
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_ << nl
-            << endl;
-    }
-
     read(dict);
 }
 
 
+bool Foam::functionObjects::dsmcFields::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::dsmcFields::~dsmcFields()
+Foam::functionObjects::dsmcFields::~dsmcFields()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::dsmcFields::read(const dictionary& dict)
-{
-    if (active_)
-    {
-
-    }
-}
+void Foam::functionObjects::dsmcFields::read(const dictionary& dict)
+{}
 
 
-void Foam::dsmcFields::execute()
-{
-    // Do nothing - only valid on write
-}
+void Foam::functionObjects::dsmcFields::execute()
+{}
 
 
-void Foam::dsmcFields::end()
-{
-    // Do nothing - only valid on write
-}
+void Foam::functionObjects::dsmcFields::end()
+{}
 
 
-void Foam::dsmcFields::timeSet()
-{
-    // Do nothing - only valid on write
-}
+void Foam::functionObjects::dsmcFields::timeSet()
+{}
 
 
-void Foam::dsmcFields::write()
+void Foam::functionObjects::dsmcFields::write()
 {
-    if (active_)
+    word rhoNMeanName = "rhoNMean";
+    word rhoMMeanName = "rhoMMean";
+    word momentumMeanName = "momentumMean";
+    word linearKEMeanName = "linearKEMean";
+    word internalEMeanName = "internalEMean";
+    word iDofMeanName = "iDofMean";
+    word fDMeanName = "fDMean";
+
+    const volScalarField& rhoNMean = obr_.lookupObject<volScalarField>
+    (
+        rhoNMeanName
+    );
+
+    const volScalarField& rhoMMean = obr_.lookupObject<volScalarField>
+    (
+        rhoMMeanName
+    );
+
+    const volVectorField& momentumMean = obr_.lookupObject<volVectorField>
+    (
+        momentumMeanName
+    );
+
+    const volScalarField& linearKEMean = obr_.lookupObject<volScalarField>
+    (
+        linearKEMeanName
+    );
+
+    const volScalarField& internalEMean = obr_.lookupObject<volScalarField>
+    (
+        internalEMeanName
+    );
+
+    const volScalarField& iDofMean = obr_.lookupObject<volScalarField>
+    (
+        iDofMeanName
+    );
+
+    const volVectorField& fDMean = obr_.lookupObject<volVectorField>
+    (
+        fDMeanName
+    );
+
+    if (min(mag(rhoNMean)).value() > VSMALL)
     {
-        word rhoNMeanName = "rhoNMean";
-        word rhoMMeanName = "rhoMMean";
-        word momentumMeanName = "momentumMean";
-        word linearKEMeanName = "linearKEMean";
-        word internalEMeanName = "internalEMean";
-        word iDofMeanName = "iDofMean";
-        word fDMeanName = "fDMean";
-
-        const volScalarField& rhoNMean = obr_.lookupObject<volScalarField>
-        (
-            rhoNMeanName
-        );
-
-        const volScalarField& rhoMMean = obr_.lookupObject<volScalarField>
-        (
-            rhoMMeanName
-        );
+        Info<< "Calculating dsmcFields." << endl;
 
-        const volVectorField& momentumMean = obr_.lookupObject<volVectorField>
+        Info<< "    Calculating UMean field." << endl;
+        volVectorField UMean
         (
-            momentumMeanName
+            IOobject
+            (
+                "UMean",
+                obr_.time().timeName(),
+                obr_,
+                IOobject::NO_READ
+            ),
+            momentumMean/rhoMMean
         );
 
-        const volScalarField& linearKEMean = obr_.lookupObject<volScalarField>
+        Info<< "    Calculating translationalT field." << endl;
+        volScalarField translationalT
         (
-            linearKEMeanName
+            IOobject
+            (
+                "translationalT",
+                obr_.time().timeName(),
+                obr_,
+                IOobject::NO_READ
+            ),
+
+            2.0/(3.0*physicoChemical::k.value()*rhoNMean)
+           *(linearKEMean - 0.5*rhoMMean*(UMean & UMean))
         );
 
-        const volScalarField& internalEMean = obr_.lookupObject<volScalarField>
+        Info<< "    Calculating internalT field." << endl;
+        volScalarField internalT
         (
-            internalEMeanName
+            IOobject
+            (
+                "internalT",
+                obr_.time().timeName(),
+                obr_,
+                IOobject::NO_READ
+            ),
+            (2.0/physicoChemical::k.value())*(internalEMean/iDofMean)
         );
 
-        const volScalarField& iDofMean = obr_.lookupObject<volScalarField>
+        Info<< "    Calculating overallT field." << endl;
+        volScalarField overallT
         (
-            iDofMeanName
+            IOobject
+            (
+                "overallT",
+                obr_.time().timeName(),
+                obr_,
+                IOobject::NO_READ
+            ),
+            2.0/(physicoChemical::k.value()*(3.0*rhoNMean + iDofMean))
+           *(linearKEMean - 0.5*rhoMMean*(UMean & UMean) + internalEMean)
         );
 
-        const volVectorField& fDMean = obr_.lookupObject<volVectorField>
+        Info<< "    Calculating pressure field." << endl;
+        volScalarField p
         (
-            fDMeanName
+            IOobject
+            (
+                "p",
+                obr_.time().timeName(),
+                obr_,
+                IOobject::NO_READ
+            ),
+            physicoChemical::k.value()*rhoNMean*translationalT
         );
 
-        if (min(mag(rhoNMean)).value() > VSMALL)
-        {
-            Info<< "Calculating dsmcFields." << endl;
-
-            Info<< "    Calculating UMean field." << endl;
-            volVectorField UMean
-            (
-                IOobject
-                (
-                    "UMean",
-                    obr_.time().timeName(),
-                    obr_,
-                    IOobject::NO_READ
-                ),
-                momentumMean/rhoMMean
-            );
-
-            Info<< "    Calculating translationalT field." << endl;
-            volScalarField translationalT
-            (
-                IOobject
-                (
-                    "translationalT",
-                    obr_.time().timeName(),
-                    obr_,
-                    IOobject::NO_READ
-                ),
-
-                2.0/(3.0*physicoChemical::k.value()*rhoNMean)
-               *(linearKEMean - 0.5*rhoMMean*(UMean & UMean))
-            );
-
-            Info<< "    Calculating internalT field." << endl;
-            volScalarField internalT
-            (
-                IOobject
-                (
-                    "internalT",
-                    obr_.time().timeName(),
-                    obr_,
-                    IOobject::NO_READ
-                ),
-                (2.0/physicoChemical::k.value())*(internalEMean/iDofMean)
-            );
-
-            Info<< "    Calculating overallT field." << endl;
-            volScalarField overallT
-            (
-                IOobject
-                (
-                    "overallT",
-                    obr_.time().timeName(),
-                    obr_,
-                    IOobject::NO_READ
-                ),
-                2.0/(physicoChemical::k.value()*(3.0*rhoNMean + iDofMean))
-               *(linearKEMean - 0.5*rhoMMean*(UMean & UMean) + internalEMean)
-            );
-
-            Info<< "    Calculating pressure field." << endl;
-            volScalarField p
-            (
-                IOobject
-                (
-                    "p",
-                    obr_.time().timeName(),
-                    obr_,
-                    IOobject::NO_READ
-                ),
-                physicoChemical::k.value()*rhoNMean*translationalT
-            );
+        const fvMesh& mesh = fDMean.mesh();
 
-            const fvMesh& mesh = fDMean.mesh();
+        volScalarField::Boundary& pBf = p.boundaryFieldRef();
 
-            volScalarField::Boundary& pBf = p.boundaryFieldRef();
+        forAll(mesh.boundaryMesh(), i)
+        {
+            const polyPatch& patch = mesh.boundaryMesh()[i];
 
-            forAll(mesh.boundaryMesh(), i)
+            if (isA<wallPolyPatch>(patch))
             {
-                const polyPatch& patch = mesh.boundaryMesh()[i];
-
-                if (isA<wallPolyPatch>(patch))
-                {
-                    pBf[i] =
-                        fDMean.boundaryField()[i]
-                      & (patch.faceAreas()/mag(patch.faceAreas()));
-                }
+                pBf[i] =
+                    fDMean.boundaryField()[i]
+                  & (patch.faceAreas()/mag(patch.faceAreas()));
             }
+        }
 
-            Info<< "    mag(UMean) max/min : "
-                << max(mag(UMean)).value() << " "
-                << min(mag(UMean)).value() << endl;
+        Info<< "    mag(UMean) max/min : "
+            << max(mag(UMean)).value() << " "
+            << min(mag(UMean)).value() << endl;
 
-            Info<< "    translationalT max/min : "
-                << max(translationalT).value() << " "
-                << min(translationalT).value() << endl;
+        Info<< "    translationalT max/min : "
+            << max(translationalT).value() << " "
+            << min(translationalT).value() << endl;
 
-            Info<< "    internalT max/min : "
-                << max(internalT).value() << " "
-                << min(internalT).value() << endl;
+        Info<< "    internalT max/min : "
+            << max(internalT).value() << " "
+            << min(internalT).value() << endl;
 
-            Info<< "    overallT max/min : "
-                << max(overallT).value() << " "
-                << min(overallT).value() << endl;
+        Info<< "    overallT max/min : "
+            << max(overallT).value() << " "
+            << min(overallT).value() << endl;
 
-            Info<< "    p max/min : "
-                << max(p).value() << " "
-                << min(p).value() << endl;
+        Info<< "    p max/min : "
+            << max(p).value() << " "
+            << min(p).value() << endl;
 
-            UMean.write();
+        UMean.write();
 
-            translationalT.write();
+        translationalT.write();
 
-            internalT.write();
+        internalT.write();
 
-            overallT.write();
+        overallT.write();
 
-            p.write();
+        p.write();
 
-            Info<< "dsmcFields written." << nl << endl;
-        }
-        else
-        {
-            Info<< "Small value (" << min(mag(rhoNMean))
-                << ") found in rhoNMean field. "
-                << "Not calculating dsmcFields to avoid division by zero."
-                << endl;
-        }
+        Info<< "dsmcFields written." << nl << endl;
+    }
+    else
+    {
+        Info<< "Small value (" << min(mag(rhoNMean))
+            << ") found in rhoNMean field. "
+            << "Not calculating dsmcFields to avoid division by zero."
+            << endl;
     }
 }
 
diff --git a/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFields.H b/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFields.H
index b6f7ae68d61..e702a01abde 100644
--- a/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFields.H
+++ b/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFields.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::dsmcFields
+    Foam::functionObjects::dsmcFields
 
 Group
     grpUtilitiesFunctionObjects
@@ -45,6 +45,7 @@ SourceFiles
 #define dsmcFields_H
 
 #include "typeInfo.H"
+#include "autoPtr.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -57,6 +58,9 @@ class dictionary;
 class polyMesh;
 class mapPolyMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                          Class dsmcFields Declaration
 \*---------------------------------------------------------------------------*/
@@ -70,9 +74,6 @@ class dsmcFields
 
         const objectRegistry& obr_;
 
-        //- on/off switch
-        bool active_;
-
 
     // Private Member Functions
 
@@ -101,6 +102,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~dsmcFields();
@@ -141,6 +152,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFieldsFunctionObject.H b/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFieldsFunctionObject.H
index 95501a1446f..7a220c4bbab 100644
--- a/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFieldsFunctionObject.H
+++ b/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFieldsFunctionObject.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) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,7 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<dsmcFields>
+    typedef OutputFilterFunctionObject<functionObjects::dsmcFields>
         dsmcFieldsFunctionObject;
 }
 
diff --git a/src/postProcessing/functionObjects/utilities/pressureTools/IOpressureTools.H b/src/postProcessing/functionObjects/utilities/pressureTools/IOpressureTools.H
index 4d10f447209..7119cff70d0 100644
--- a/src/postProcessing/functionObjects/utilities/pressureTools/IOpressureTools.H
+++ b/src/postProcessing/functionObjects/utilities/pressureTools/IOpressureTools.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -39,7 +39,7 @@ Description
 
 namespace Foam
 {
-    typedef IOOutputFilter<pressureTools> IOpressureTools;
+    typedef IOOutputFilter<functionObjects::pressureTools> IOpressureTools;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/pressureTools/pressureTools.C b/src/postProcessing/functionObjects/utilities/pressureTools/pressureTools.C
index 84a50de5f80..c4315511235 100644
--- a/src/postProcessing/functionObjects/utilities/pressureTools/pressureTools.C
+++ b/src/postProcessing/functionObjects/utilities/pressureTools/pressureTools.C
@@ -30,14 +30,17 @@ License
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
+{
+namespace functionObjects
 {
     defineTypeNameAndDebug(pressureTools, 0);
 }
+}
 
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
-Foam::word Foam::pressureTools::pName() const
+Foam::word Foam::functionObjects::pressureTools::pName() const
 {
     word fieldName = pName_;
 
@@ -59,7 +62,7 @@ Foam::word Foam::pressureTools::pName() const
 }
 
 
-Foam::dimensionedScalar Foam::pressureTools::rhoScale
+Foam::dimensionedScalar Foam::functionObjects::pressureTools::rhoScale
 (
     const volScalarField& p
 ) const
@@ -75,7 +78,7 @@ Foam::dimensionedScalar Foam::pressureTools::rhoScale
 }
 
 
-Foam::tmp<Foam::volScalarField> Foam::pressureTools::rho
+Foam::tmp<Foam::volScalarField> Foam::functionObjects::pressureTools::rho
 (
     const volScalarField& p
 ) const
@@ -107,7 +110,7 @@ Foam::tmp<Foam::volScalarField> Foam::pressureTools::rho
 }
 
 
-Foam::dimensionedScalar Foam::pressureTools::pRef() const
+Foam::dimensionedScalar Foam::functionObjects::pressureTools::pRef() const
 {
     dimensionedScalar value("pRef", dimPressure, 0.0);
 
@@ -120,7 +123,7 @@ Foam::dimensionedScalar Foam::pressureTools::pRef() const
 }
 
 
-Foam::tmp<Foam::volScalarField> Foam::pressureTools::pDyn
+Foam::tmp<Foam::volScalarField> Foam::functionObjects::pressureTools::pDyn
 (
     const volScalarField& p
 ) const
@@ -155,7 +158,8 @@ Foam::tmp<Foam::volScalarField> Foam::pressureTools::pDyn
 }
 
 
-Foam::tmp<Foam::volScalarField> Foam::pressureTools::convertToCoeff
+Foam::tmp<Foam::volScalarField>
+Foam::functionObjects::pressureTools::convertToCoeff
 (
     const volScalarField& p
 ) const
@@ -179,7 +183,7 @@ Foam::tmp<Foam::volScalarField> Foam::pressureTools::convertToCoeff
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::pressureTools::pressureTools
+Foam::functionObjects::pressureTools::pressureTools
 (
     const word& name,
     const objectRegistry& obr,
@@ -189,7 +193,6 @@ Foam::pressureTools::pressureTools
 :
     name_(name),
     obr_(obr),
-    active_(true),
     pName_("p"),
     UName_("U"),
     rhoName_("rho"),
@@ -200,144 +203,130 @@ Foam::pressureTools::pressureTools
     UInf_(Zero),
     rhoInf_(0.0)
 {
-    // Check if the available mesh is an fvMesh, otherwise deactivate
-    if (!isA<fvMesh>(obr_))
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_ << nl
-            << endl;
-    }
-
     read(dict);
 
-    if (active_)
-    {
-        dimensionSet pDims(dimPressure);
+    dimensionSet pDims(dimPressure);
 
-        if (calcCoeff_)
-        {
-            pDims /= dimPressure;
-        }
+    if (calcCoeff_)
+    {
+        pDims /= dimPressure;
+    }
 
-        const fvMesh& mesh = refCast<const fvMesh>(obr_);
+    const fvMesh& mesh = refCast<const fvMesh>(obr_);
 
-        volScalarField* pPtr
+    volScalarField* pPtr
+    (
+        new volScalarField
         (
-            new volScalarField
+            IOobject
             (
-                IOobject
-                (
-                    pName(),
-                    mesh.time().timeName(),
-                    mesh,
-                    IOobject::NO_READ,
-                    IOobject::NO_WRITE
-                ),
+                pName(),
+                mesh.time().timeName(),
                 mesh,
-                dimensionedScalar("0", pDims, 0.0)
-            )
-        );
+                IOobject::NO_READ,
+                IOobject::NO_WRITE
+            ),
+            mesh,
+            dimensionedScalar("0", pDims, 0.0)
+        )
+    );
 
-        mesh.objectRegistry::store(pPtr);
-    }
+    mesh.objectRegistry::store(pPtr);
+}
+
+
+bool Foam::functionObjects::pressureTools::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
 }
 
 
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::pressureTools::~pressureTools()
+Foam::functionObjects::pressureTools::~pressureTools()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::pressureTools::read(const dictionary& dict)
+void Foam::functionObjects::pressureTools::read(const dictionary& dict)
 {
-    if (active_)
+    dict.readIfPresent("pName", pName_);
+    dict.readIfPresent("UName", UName_);
+    dict.readIfPresent("rhoName", rhoName_);
+
+    if (rhoName_ == "rhoInf")
     {
-        dict.readIfPresent("pName", pName_);
-        dict.readIfPresent("UName", UName_);
-        dict.readIfPresent("rhoName", rhoName_);
+        dict.lookup("rhoInf") >> rhoInf_;
+    }
 
-        if (rhoName_ == "rhoInf")
-        {
-            dict.lookup("rhoInf") >> rhoInf_;
-        }
+    dict.lookup("calcTotal") >> calcTotal_;
+    if (calcTotal_)
+    {
+        dict.lookup("pRef") >> pRef_;
+    }
 
-        dict.lookup("calcTotal") >> calcTotal_;
-        if (calcTotal_)
-        {
-            dict.lookup("pRef") >> pRef_;
-        }
+    dict.lookup("calcCoeff") >> calcCoeff_;
+    if (calcCoeff_)
+    {
+        dict.lookup("pInf") >> pInf_;
+        dict.lookup("UInf") >> UInf_;
+        dict.lookup("rhoInf") >> rhoInf_;
 
-        dict.lookup("calcCoeff") >> calcCoeff_;
-        if (calcCoeff_)
+        scalar zeroCheck = 0.5*rhoInf_*magSqr(UInf_) + pInf_;
+
+        if (mag(zeroCheck) < ROOTVSMALL)
         {
-            dict.lookup("pInf") >> pInf_;
-            dict.lookup("UInf") >> UInf_;
-            dict.lookup("rhoInf") >> rhoInf_;
-
-            scalar zeroCheck = 0.5*rhoInf_*magSqr(UInf_) + pInf_;
-
-            if (mag(zeroCheck) < ROOTVSMALL)
-            {
-                WarningInFunction
-                    << type() << " " << name_ << ": "
-                    << "Coefficient calculation requested, but reference "
-                    << "pressure level is zero.  Please check the supplied "
-                    << "values of pInf, UInf and rhoInf" << endl;
-            }
+            WarningInFunction
+                << type() << " " << name_ << ": "
+                << "Coefficient calculation requested, but reference "
+                << "pressure level is zero.  Please check the supplied "
+                << "values of pInf, UInf and rhoInf" << endl;
         }
     }
 }
 
 
-void Foam::pressureTools::execute()
+void Foam::functionObjects::pressureTools::execute()
 {
-    if (active_)
-    {
-        const volScalarField& p = obr_.lookupObject<volScalarField>(pName_);
+    const volScalarField& p = obr_.lookupObject<volScalarField>(pName_);
 
-        volScalarField& pResult =
-            const_cast<volScalarField&>
-            (
-                obr_.lookupObject<volScalarField>(pName())
-            );
+    volScalarField& pResult = const_cast<volScalarField&>
+    (
+        obr_.lookupObject<volScalarField>(pName())
+    );
 
-        pResult == convertToCoeff(rhoScale(p)*p + pDyn(p) + pRef());
-    }
+    pResult == convertToCoeff(rhoScale(p)*p + pDyn(p) + pRef());
 }
 
 
-void Foam::pressureTools::end()
+void Foam::functionObjects::pressureTools::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    execute();
 }
 
 
-void Foam::pressureTools::timeSet()
-{
-    // Do nothing
-}
+void Foam::functionObjects::pressureTools::timeSet()
+{}
 
 
-void Foam::pressureTools::write()
+void Foam::functionObjects::pressureTools::write()
 {
-    if (active_)
-    {
-        const volScalarField& pResult =
-            obr_.lookupObject<volScalarField>(pName());
+    const volScalarField& pResult =
+        obr_.lookupObject<volScalarField>(pName());
 
-        Info<< type() << " " << name_ << " output:" << nl
-            << "    writing field " << pResult.name() << nl
-            << endl;
+    Info<< type() << " " << name_ << " output:" << nl
+        << "    writing field " << pResult.name() << nl
+        << endl;
 
-        pResult.write();
-    }
+    pResult.write();
 }
 
 
diff --git a/src/postProcessing/functionObjects/utilities/pressureTools/pressureTools.H b/src/postProcessing/functionObjects/utilities/pressureTools/pressureTools.H
index 6d80b388d10..d06fb776ab3 100644
--- a/src/postProcessing/functionObjects/utilities/pressureTools/pressureTools.H
+++ b/src/postProcessing/functionObjects/utilities/pressureTools/pressureTools.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::pressureTools
+    Foam::functionObjects::pressureTools
 
 Group
     grpUtilitiesFunctionObjects
@@ -123,6 +123,9 @@ class dictionary;
 class polyMesh;
 class mapPolyMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                         Class pressureTools Declaration
 \*---------------------------------------------------------------------------*/
@@ -137,9 +140,6 @@ class pressureTools
         //- Reference to the database
         const objectRegistry& obr_;
 
-        //- On/off switch
-        bool active_;
-
         //- Name of pressure field, default is "p"
         word pName_;
 
@@ -219,6 +219,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~pressureTools();
@@ -259,6 +269,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/pressureTools/pressureToolsFunctionObject.H b/src/postProcessing/functionObjects/utilities/pressureTools/pressureToolsFunctionObject.H
index 0b83c7d148d..39141da9f92 100644
--- a/src/postProcessing/functionObjects/utilities/pressureTools/pressureToolsFunctionObject.H
+++ b/src/postProcessing/functionObjects/utilities/pressureTools/pressureToolsFunctionObject.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,7 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<pressureTools>
+    typedef OutputFilterFunctionObject<functionObjects::pressureTools>
         pressureToolsFunctionObject;
 }
 
diff --git a/src/postProcessing/functionObjects/utilities/residuals/IOresiduals.H b/src/postProcessing/functionObjects/utilities/residuals/IOresiduals.H
index 1f74ab27a3a..249e4ec5d8e 100644
--- a/src/postProcessing/functionObjects/utilities/residuals/IOresiduals.H
+++ b/src/postProcessing/functionObjects/utilities/residuals/IOresiduals.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2015-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -39,7 +39,7 @@ Description
 
 namespace Foam
 {
-    typedef IOOutputFilter<residuals> IOresiduals;
+    typedef IOOutputFilter<functionObjects::residuals> IOresiduals;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/residuals/residuals.C b/src/postProcessing/functionObjects/utilities/residuals/residuals.C
index 9c7eca1be09..ee63506ac32 100644
--- a/src/postProcessing/functionObjects/utilities/residuals/residuals.C
+++ b/src/postProcessing/functionObjects/utilities/residuals/residuals.C
@@ -31,14 +31,17 @@ License
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
+{
+namespace functionObjects
 {
     defineTypeNameAndDebug(residuals, 0);
 }
+}
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::residuals::residuals
+Foam::functionObjects::residuals::residuals
 (
     const word& name,
     const objectRegistry& obr,
@@ -49,40 +52,40 @@ Foam::residuals::residuals
     functionObjectFiles(obr, name, typeName),
     name_(name),
     obr_(obr),
-    active_(true),
     fieldSet_()
 {
-    // Check if the available mesh is an fvMesh otherwise deactivate
-    if (!isA<fvMesh>(obr_))
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_
-            << endl;
-    }
-
     read(dict);
 }
 
 
+bool Foam::functionObjects::residuals::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::residuals::~residuals()
+Foam::functionObjects::residuals::~residuals()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::residuals::read(const dictionary& dict)
+void Foam::functionObjects::residuals::read(const dictionary& dict)
 {
-    if (active_)
-    {
-        dict.lookup("fields") >> fieldSet_;
-    }
+    dict.lookup("fields") >> fieldSet_;
 }
 
 
-void Foam::residuals::writeFileHeader(const label i)
+void Foam::functionObjects::residuals::writeFileHeader(const label i)
 {
     if (Pstream::master())
     {
@@ -105,41 +108,38 @@ void Foam::residuals::writeFileHeader(const label i)
 }
 
 
-void Foam::residuals::execute()
+void Foam::functionObjects::residuals::execute()
 {}
 
 
-void Foam::residuals::end()
+void Foam::functionObjects::residuals::end()
 {}
 
 
-void Foam::residuals::timeSet()
+void Foam::functionObjects::residuals::timeSet()
 {}
 
 
-void Foam::residuals::write()
+void Foam::functionObjects::residuals::write()
 {
-    if (active_)
+    functionObjectFiles::write();
+
+    if (Pstream::master())
     {
-        functionObjectFiles::write();
+        writeTime(file());
 
-        if (Pstream::master())
+        forAll(fieldSet_, fieldI)
         {
-            writeTime(file());
-
-            forAll(fieldSet_, fieldI)
-            {
-                const word& fieldName = fieldSet_[fieldI];
-
-                writeResidual<scalar>(fieldName);
-                writeResidual<vector>(fieldName);
-                writeResidual<sphericalTensor>(fieldName);
-                writeResidual<symmTensor>(fieldName);
-                writeResidual<tensor>(fieldName);
-            }
+            const word& fieldName = fieldSet_[fieldI];
 
-            file() << endl;
+            writeResidual<scalar>(fieldName);
+            writeResidual<vector>(fieldName);
+            writeResidual<sphericalTensor>(fieldName);
+            writeResidual<symmTensor>(fieldName);
+            writeResidual<tensor>(fieldName);
         }
+
+        file() << endl;
     }
 }
 
diff --git a/src/postProcessing/functionObjects/utilities/residuals/residuals.H b/src/postProcessing/functionObjects/utilities/residuals/residuals.H
index 06192df6b5e..01a44e0c3e0 100644
--- a/src/postProcessing/functionObjects/utilities/residuals/residuals.H
+++ b/src/postProcessing/functionObjects/utilities/residuals/residuals.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::residuals
+    Foam::functionObjects::residuals
 
 Group
     grpUtilitiesFunctionObjects
@@ -82,6 +82,9 @@ class dictionary;
 class polyMesh;
 class mapPolyMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                        Class residuals Declaration
 \*---------------------------------------------------------------------------*/
@@ -100,9 +103,6 @@ protected:
 
         const objectRegistry& obr_;
 
-        //- on/off switch
-        bool active_;
-
         //- Fields to write residuals
         wordList fieldSet_;
 
@@ -146,6 +146,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~residuals();
@@ -190,6 +200,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/residuals/residualsFunctionObject.H b/src/postProcessing/functionObjects/utilities/residuals/residualsFunctionObject.H
index 9bc49f984e1..3d28368f6ef 100644
--- a/src/postProcessing/functionObjects/utilities/residuals/residualsFunctionObject.H
+++ b/src/postProcessing/functionObjects/utilities/residuals/residualsFunctionObject.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2015-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,7 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<residuals>
+    typedef OutputFilterFunctionObject<functionObjects::residuals>
         residualsFunctionObject;
 }
 
diff --git a/src/postProcessing/functionObjects/utilities/residuals/residualsTemplates.C b/src/postProcessing/functionObjects/utilities/residuals/residualsTemplates.C
index 6709a0827ff..b7647242bca 100644
--- a/src/postProcessing/functionObjects/utilities/residuals/residualsTemplates.C
+++ b/src/postProcessing/functionObjects/utilities/residuals/residualsTemplates.C
@@ -32,7 +32,7 @@ License
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 template<class Type>
-void Foam::residuals::writeFileHeader(const word& fieldName)
+void Foam::functionObjects::residuals::writeFileHeader(const word& fieldName)
 {
     typedef GeometricField<Type, fvPatchField, volMesh> fieldType;
 
@@ -62,7 +62,7 @@ void Foam::residuals::writeFileHeader(const word& fieldName)
 
 
 template<class Type>
-void Foam::residuals::writeResidual(const word& fieldName)
+void Foam::functionObjects::residuals::writeResidual(const word& fieldName)
 {
     typedef GeometricField<Type, fvPatchField, volMesh> fieldType;
 
diff --git a/src/postProcessing/functionObjects/utilities/scalarTransport/IOscalarTransport.H b/src/postProcessing/functionObjects/utilities/scalarTransport/IOscalarTransport.H
index 37d3ef0f3d6..e6c9c1dc4c7 100644
--- a/src/postProcessing/functionObjects/utilities/scalarTransport/IOscalarTransport.H
+++ b/src/postProcessing/functionObjects/utilities/scalarTransport/IOscalarTransport.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -39,7 +39,8 @@ Description
 
 namespace Foam
 {
-    typedef IOOutputFilter<scalarTransport> IOscalarTransport;
+    typedef IOOutputFilter<functionObjects::scalarTransport>
+        IOscalarTransport;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransport.C b/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransport.C
index 3281ea4ffd4..a4bfb5bbbc0 100644
--- a/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransport.C
+++ b/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransport.C
@@ -40,14 +40,17 @@ License
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
+{
+namespace functionObjects
 {
     defineTypeNameAndDebug(scalarTransport, 0);
 }
+}
 
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
-Foam::wordList Foam::scalarTransport::boundaryTypes() const
+Foam::wordList Foam::functionObjects::scalarTransport::boundaryTypes() const
 {
     const volVectorField& U = mesh_.lookupObject<volVectorField>(UName_);
 
@@ -70,7 +73,7 @@ Foam::wordList Foam::scalarTransport::boundaryTypes() const
 }
 
 
-Foam::tmp<Foam::volScalarField> Foam::scalarTransport::DT
+Foam::tmp<Foam::volScalarField> Foam::functionObjects::scalarTransport::DT
 (
     const surfaceScalarField& phi
 ) const
@@ -139,7 +142,7 @@ Foam::tmp<Foam::volScalarField> Foam::scalarTransport::DT
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::scalarTransport::scalarTransport
+Foam::functionObjects::scalarTransport::scalarTransport
 (
     const word& name,
     const objectRegistry& obr,
@@ -182,15 +185,28 @@ Foam::scalarTransport::scalarTransport
 }
 
 
+bool Foam::functionObjects::scalarTransport::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::scalarTransport::~scalarTransport()
+Foam::functionObjects::scalarTransport::~scalarTransport()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::scalarTransport::read(const dictionary& dict)
+void Foam::functionObjects::scalarTransport::read(const dictionary& dict)
 {
     Info<< type() << ":" << nl;
 
@@ -214,7 +230,7 @@ void Foam::scalarTransport::read(const dictionary& dict)
 }
 
 
-void Foam::scalarTransport::execute()
+void Foam::functionObjects::scalarTransport::execute()
 {
     Info<< type() << " output:" << endl;
 
@@ -298,17 +314,17 @@ void Foam::scalarTransport::execute()
 }
 
 
-void Foam::scalarTransport::end()
+void Foam::functionObjects::scalarTransport::end()
 {
     execute();
 }
 
 
-void Foam::scalarTransport::timeSet()
+void Foam::functionObjects::scalarTransport::timeSet()
 {}
 
 
-void Foam::scalarTransport::write()
+void Foam::functionObjects::scalarTransport::write()
 {}
 
 
diff --git a/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransport.H b/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransport.H
index 8ba8c9ce2c1..21724bfb3d6 100644
--- a/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransport.H
+++ b/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransport.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::scalarTransport
+    Foam::functionObjects::scalarTransport
 
 Group
     grpUtilitiesFunctionObjects
@@ -64,6 +64,9 @@ class objectRegistry;
 class dictionary;
 class mapPolyMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                        Class scalarTransport Declaration
 \*---------------------------------------------------------------------------*/
@@ -142,6 +145,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~scalarTransport();
@@ -182,6 +195,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransportFunctionObject.H b/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransportFunctionObject.H
index f5a417f4fde..cea384054cb 100644
--- a/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransportFunctionObject.H
+++ b/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransportFunctionObject.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,7 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<scalarTransport>
+    typedef OutputFilterFunctionObject<functionObjects::scalarTransport>
         scalarTransportFunctionObject;
 }
 
diff --git a/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/IOtimeActivatedFileUpdate.H b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/IOtimeActivatedFileUpdate.H
index 5aac253afbf..4d4d3ac408a 100644
--- a/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/IOtimeActivatedFileUpdate.H
+++ b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/IOtimeActivatedFileUpdate.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) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -39,7 +39,8 @@ Description
 
 namespace Foam
 {
-    typedef IOOutputFilter<timeActivatedFileUpdate> IOtimeActivatedFileUpdate;
+    typedef IOOutputFilter<functionObjects::timeActivatedFileUpdate>
+        IOtimeActivatedFileUpdate;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.C b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.C
index caef71319ff..acee1ecfb5a 100644
--- a/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.C
+++ b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -31,14 +31,17 @@ License
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
+{
+namespace functionObjects
 {
     defineTypeNameAndDebug(timeActivatedFileUpdate, 0);
 }
+}
 
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
-void Foam::timeActivatedFileUpdate::updateFile()
+void Foam::functionObjects::timeActivatedFileUpdate::updateFile()
 {
     label i = lastIndex_;
     while
@@ -63,7 +66,7 @@ void Foam::timeActivatedFileUpdate::updateFile()
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::timeActivatedFileUpdate::timeActivatedFileUpdate
+Foam::functionObjects::timeActivatedFileUpdate::timeActivatedFileUpdate
 (
     const word& name,
     const objectRegistry& obr,
@@ -73,7 +76,6 @@ Foam::timeActivatedFileUpdate::timeActivatedFileUpdate
 :
     name_(name),
     obr_(obr),
-    active_(true),
     fileToUpdate_(dict.lookup("fileToUpdate")),
     timeVsFile_(),
     lastIndex_(-1)
@@ -82,73 +84,75 @@ Foam::timeActivatedFileUpdate::timeActivatedFileUpdate
 }
 
 
+bool Foam::functionObjects::timeActivatedFileUpdate::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    return true;
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::timeActivatedFileUpdate::~timeActivatedFileUpdate()
+Foam::functionObjects::timeActivatedFileUpdate::~timeActivatedFileUpdate()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::timeActivatedFileUpdate::read(const dictionary& dict)
+void Foam::functionObjects::timeActivatedFileUpdate::read
+(
+    const dictionary& dict
+)
 {
-    if (active_)
-    {
-        dict.lookup("fileToUpdate") >> fileToUpdate_;
-        dict.lookup("timeVsFile") >> timeVsFile_;
+    dict.lookup("fileToUpdate") >> fileToUpdate_;
+    dict.lookup("timeVsFile") >> timeVsFile_;
 
-        lastIndex_ = -1;
-        fileToUpdate_.expand();
+    lastIndex_ = -1;
+    fileToUpdate_.expand();
 
-        Info<< type() << ": time vs file list:" << nl;
-        forAll(timeVsFile_, i)
+    Info<< type() << ": time vs file list:" << nl;
+    forAll(timeVsFile_, i)
+    {
+        timeVsFile_[i].second() = timeVsFile_[i].second().expand();
+        if (!isFile(timeVsFile_[i].second()))
         {
-            timeVsFile_[i].second() = timeVsFile_[i].second().expand();
-            if (!isFile(timeVsFile_[i].second()))
-            {
-                FatalErrorInFunction
-                    << "File: " << timeVsFile_[i].second() << " not found"
-                    << nl << exit(FatalError);
-            }
-
-            Info<< "    " << timeVsFile_[i].first() << tab
-                << timeVsFile_[i].second() << endl;
+            FatalErrorInFunction
+                << "File: " << timeVsFile_[i].second() << " not found"
+                << nl << exit(FatalError);
         }
-        Info<< endl;
 
-        updateFile();
+        Info<< "    " << timeVsFile_[i].first() << tab
+            << timeVsFile_[i].second() << endl;
     }
+    Info<< endl;
+
+    updateFile();
 }
 
 
-void Foam::timeActivatedFileUpdate::execute()
+void Foam::functionObjects::timeActivatedFileUpdate::execute()
 {
-    if (active_)
-    {
-        updateFile();
-    }
+    updateFile();
 }
 
 
-void Foam::timeActivatedFileUpdate::end()
+void Foam::functionObjects::timeActivatedFileUpdate::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    execute();
 }
 
 
-void Foam::timeActivatedFileUpdate::timeSet()
-{
-    // Do nothing
-}
+void Foam::functionObjects::timeActivatedFileUpdate::timeSet()
+{}
 
 
-void Foam::timeActivatedFileUpdate::write()
-{
-    // Do nothing
-}
+void Foam::functionObjects::timeActivatedFileUpdate::write()
+{}
 
 
 // ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.H b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.H
index 42e5144a87d..40d6ae37b41 100644
--- a/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.H
+++ b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::timeActivatedFileUpdate
+    Foam::functionObjects::timeActivatedFileUpdate
 
 Group
     grpUtilitiesFunctionObjects
@@ -73,6 +73,9 @@ class dictionary;
 class polyMesh;
 class mapPolyMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                   Class timeActivatedFileUpdate Declaration
 \*---------------------------------------------------------------------------*/
@@ -87,9 +90,6 @@ class timeActivatedFileUpdate
         //- Owner database
         const objectRegistry& obr_;
 
-        //- On/off switch
-        bool active_;
-
         //- Name of file to update
         fileName fileToUpdate_;
 
@@ -130,6 +130,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~timeActivatedFileUpdate();
@@ -170,6 +180,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdateFunctionObject.H b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdateFunctionObject.H
index d661d81901d..af8d9e4cc98 100644
--- a/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdateFunctionObject.H
+++ b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdateFunctionObject.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) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,7 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<timeActivatedFileUpdate>
+    typedef OutputFilterFunctionObject<functionObjects::timeActivatedFileUpdate>
         timeActivatedFileUpdateFunctionObject;
 }
 
diff --git a/src/postProcessing/functionObjects/utilities/turbulenceFields/IOturbulenceFields.H b/src/postProcessing/functionObjects/utilities/turbulenceFields/IOturbulenceFields.H
index c6005f8e37b..da664cdb787 100644
--- a/src/postProcessing/functionObjects/utilities/turbulenceFields/IOturbulenceFields.H
+++ b/src/postProcessing/functionObjects/utilities/turbulenceFields/IOturbulenceFields.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012-2014 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -39,7 +39,8 @@ Description
 
 namespace Foam
 {
-    typedef IOOutputFilter<turbulenceFields> IOturbulenceFields;
+    typedef IOOutputFilter<functionObjects::turbulenceFields>
+        IOturbulenceFields;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFields.C b/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFields.C
index 85c33035e5d..15862244495 100644
--- a/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFields.C
+++ b/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFields.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2013-2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2013-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -31,44 +31,66 @@ License
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
+{
+namespace functionObjects
 {
     defineTypeNameAndDebug(turbulenceFields, 0);
-
-    template<>
-    const char* NamedEnum<turbulenceFields::compressibleField, 8>::names[] =
-    {
-        "k",
-        "epsilon",
-        "mut",
-        "muEff",
-        "alphat",
-        "alphaEff",
-        "R",
-        "devRhoReff"
-    };
-    const NamedEnum<turbulenceFields::compressibleField, 8>
-        turbulenceFields::compressibleFieldNames_;
-
-    template<>
-    const char* NamedEnum<turbulenceFields::incompressibleField, 6>::names[] =
-    {
-        "k",
-        "epsilon",
-        "nut",
-        "nuEff",
-        "R",
-        "devReff"
-    };
-    const NamedEnum<turbulenceFields::incompressibleField, 6>
-        turbulenceFields::incompressibleFieldNames_;
-
-    const word turbulenceFields::modelName = turbulenceModel::propertiesName;
+}
 }
 
+template<>
+const char* Foam::NamedEnum
+<
+    Foam::functionObjects::turbulenceFields::compressibleField,
+    8
+>::names[] =
+{
+    "k",
+    "epsilon",
+    "mut",
+    "muEff",
+    "alphat",
+    "alphaEff",
+    "R",
+    "devRhoReff"
+};
+
+const Foam::NamedEnum
+<
+    Foam::functionObjects::turbulenceFields::compressibleField,
+    8
+> Foam::functionObjects::turbulenceFields::compressibleFieldNames_;
+
+template<>
+const char* Foam::NamedEnum
+<
+    Foam::functionObjects::turbulenceFields::incompressibleField,
+    6
+>::names[] =
+{
+    "k",
+    "epsilon",
+    "nut",
+    "nuEff",
+    "R",
+    "devReff"
+};
+
+const Foam::NamedEnum
+<
+    Foam::functionObjects::turbulenceFields::incompressibleField,
+    6
+> Foam::functionObjects::turbulenceFields::incompressibleFieldNames_;
+
+const Foam::word Foam::functionObjects::turbulenceFields::modelName
+(
+    Foam::turbulenceModel::propertiesName
+);
+
 
 // * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * * //
 
-bool Foam::turbulenceFields::compressible()
+bool Foam::functionObjects::turbulenceFields::compressible()
 {
     if (obr_.foundObject<compressible::turbulenceModel>(modelName))
     {
@@ -80,9 +102,9 @@ bool Foam::turbulenceFields::compressible()
     }
     else
     {
-        WarningInFunction
-            << "Turbulence model not found in database, deactivating";
-        active_ = false;
+        FatalErrorInFunction
+            << "Turbulence model not found in database, deactivating"
+            << exit(FatalError);
     }
 
     return false;
@@ -91,7 +113,7 @@ bool Foam::turbulenceFields::compressible()
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::turbulenceFields::turbulenceFields
+Foam::functionObjects::turbulenceFields::turbulenceFields
 (
     const word& name,
     const objectRegistry& obr,
@@ -101,65 +123,74 @@ Foam::turbulenceFields::turbulenceFields
 :
     name_(name),
     obr_(obr),
-    active_(true),
     fieldSet_()
 {
-    // Check if the available mesh is an fvMesh otherise deactivate
-    if (isA<fvMesh>(obr_))
+    read(dict);
+}
+
+
+bool Foam::functionObjects::turbulenceFields::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    if (!isA<fvMesh>(obr))
+    {
+        return false;
+    }
+
+    if
+    (
+        obr.foundObject<compressible::turbulenceModel>(modelName)
+     || obr.foundObject<incompressible::turbulenceModel>(modelName)
+    )
     {
-        read(dict);
+        return true;
     }
     else
     {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_
-            << endl;
+        return false;
     }
 }
 
 
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::turbulenceFields::~turbulenceFields()
+Foam::functionObjects::turbulenceFields::~turbulenceFields()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::turbulenceFields::read(const dictionary& dict)
+void Foam::functionObjects::turbulenceFields::read(const dictionary& dict)
 {
-    if (active_)
-    {
-        fieldSet_.insert(wordList(dict.lookup("fields")));
+    fieldSet_.insert(wordList(dict.lookup("fields")));
 
-        Info<< type() << " " << name_ << ": ";
-        if (fieldSet_.size())
-        {
-            Info<< "storing fields:" << nl;
-            forAllConstIter(wordHashSet, fieldSet_, iter)
-            {
-                Info<< "    " << modelName << ':' << iter.key() << nl;
-            }
-            Info<< endl;
-        }
-        else
+    Info<< type() << " " << name_ << ": ";
+    if (fieldSet_.size())
+    {
+        Info<< "storing fields:" << nl;
+        forAllConstIter(wordHashSet, fieldSet_, iter)
         {
-            Info<< "no fields requested to be stored" << nl << endl;
+            Info<< "    " << modelName << ':' << iter.key() << nl;
         }
+        Info<< endl;
+    }
+    else
+    {
+        Info<< "no fields requested to be stored" << nl << endl;
     }
 }
 
 
-void Foam::turbulenceFields::execute()
+void Foam::functionObjects::turbulenceFields::execute()
 {
     bool comp = compressible();
 
-    if (!active_)
-    {
-        return;
-    }
-
     if (comp)
     {
         const compressible::turbulenceModel& model =
@@ -269,20 +300,17 @@ void Foam::turbulenceFields::execute()
 }
 
 
-void Foam::turbulenceFields::end()
+void Foam::functionObjects::turbulenceFields::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    execute();
 }
 
 
-void Foam::turbulenceFields::timeSet()
+void Foam::functionObjects::turbulenceFields::timeSet()
 {}
 
 
-void Foam::turbulenceFields::write()
+void Foam::functionObjects::turbulenceFields::write()
 {}
 
 
diff --git a/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFields.H b/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFields.H
index af37dc1cbcb..c31eaceca40 100644
--- a/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFields.H
+++ b/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFields.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::turbulenceFields
+    Foam::functionObjects::turbulenceFields
 
 Group
     grpFieldFunctionObjects
@@ -103,6 +103,9 @@ class dictionary;
 class polyMesh;
 class mapPolyMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                       Class turbulenceFields Declaration
 \*---------------------------------------------------------------------------*/
@@ -147,9 +150,6 @@ protected:
 
         const objectRegistry& obr_;
 
-        //- on/off switch
-        bool active_;
-
         //- Fields to load
         wordHashSet fieldSet_;
 
@@ -197,6 +197,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~turbulenceFields();
@@ -237,6 +247,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFieldsFunctionObject.H b/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFieldsFunctionObject.H
index e9e393d170d..6d600f7ce72 100644
--- a/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFieldsFunctionObject.H
+++ b/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFieldsFunctionObject.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012-2014 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,7 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<turbulenceFields>
+    typedef OutputFilterFunctionObject<functionObjects::turbulenceFields>
         turbulenceFieldsFunctionObject;
 }
 
diff --git a/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFieldsTemplates.C b/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFieldsTemplates.C
index 727917928ac..b8c2b6440f3 100644
--- a/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFieldsTemplates.C
+++ b/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFieldsTemplates.C
@@ -28,7 +28,7 @@ License
 // * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * * //
 
 template<class Type>
-void Foam::turbulenceFields::processField
+void Foam::functionObjects::turbulenceFields::processField
 (
     const word& fieldName,
     const tmp<GeometricField<Type, fvPatchField, volMesh>>& tvalue
diff --git a/src/postProcessing/functionObjects/utilities/vorticity/IOvorticity.H b/src/postProcessing/functionObjects/utilities/vorticity/IOvorticity.H
index c2ac753b1fb..1d04fae2f8f 100644
--- a/src/postProcessing/functionObjects/utilities/vorticity/IOvorticity.H
+++ b/src/postProcessing/functionObjects/utilities/vorticity/IOvorticity.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2014 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2014-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -39,7 +39,7 @@ Description
 
 namespace Foam
 {
-    typedef IOOutputFilter<vorticity> IOvorticity;
+    typedef IOOutputFilter<functionObjects::vorticity> IOvorticity;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/vorticity/vorticity.C b/src/postProcessing/functionObjects/utilities/vorticity/vorticity.C
index 6d22f5a9772..fd45701ecf2 100644
--- a/src/postProcessing/functionObjects/utilities/vorticity/vorticity.C
+++ b/src/postProcessing/functionObjects/utilities/vorticity/vorticity.C
@@ -31,14 +31,17 @@ License
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
+{
+namespace functionObjects
 {
     defineTypeNameAndDebug(vorticity, 0);
 }
+}
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::vorticity::vorticity
+Foam::functionObjects::vorticity::vorticity
 (
     const word& name,
     const objectRegistry& obr,
@@ -48,113 +51,98 @@ Foam::vorticity::vorticity
 :
     name_(name),
     obr_(obr),
-    active_(true),
     UName_("U"),
     outputName_(typeName)
 {
-    // Check if the available mesh is an fvMesh, otherwise deactivate
-    if (!isA<fvMesh>(obr_))
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_ << nl
-            << endl;
-    }
-
     read(dict);
 
-    if (active_)
-    {
-        const fvMesh& mesh = refCast<const fvMesh>(obr_);
+    const fvMesh& mesh = refCast<const fvMesh>(obr_);
 
-        volVectorField* vorticityPtr
+    volVectorField* vorticityPtr
+    (
+        new volVectorField
         (
-            new volVectorField
+            IOobject
             (
-                IOobject
-                (
-                    outputName_,
-                    mesh.time().timeName(),
-                    mesh,
-                    IOobject::NO_READ,
-                    IOobject::NO_WRITE
-                ),
+                outputName_,
+                mesh.time().timeName(),
                 mesh,
-                dimensionedVector("0", dimless/dimTime, Zero)
-            )
-        );
+                IOobject::NO_READ,
+                IOobject::NO_WRITE
+            ),
+            mesh,
+            dimensionedVector("0", dimless/dimTime, Zero)
+        )
+    );
+
+    mesh.objectRegistry::store(vorticityPtr);
+}
 
-        mesh.objectRegistry::store(vorticityPtr);
-    }
+
+bool Foam::functionObjects::vorticity::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
 }
 
 
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::vorticity::~vorticity()
+Foam::functionObjects::vorticity::~vorticity()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::vorticity::read(const dictionary& dict)
+void Foam::functionObjects::vorticity::read(const dictionary& dict)
 {
-    if (active_)
+    UName_ = dict.lookupOrDefault<word>("UName", "U");
+    if (UName_ != "U")
     {
-        UName_ = dict.lookupOrDefault<word>("UName", "U");
-        if (UName_ != "U")
-        {
-            outputName_ = typeName + "(" + UName_ + ")";
-        }
+        outputName_ = typeName + "(" + UName_ + ")";
     }
 }
 
 
-void Foam::vorticity::execute()
+void Foam::functionObjects::vorticity::execute()
 {
-    if (active_)
-    {
-        const volVectorField& U = obr_.lookupObject<volVectorField>(UName_);
+    const volVectorField& U = obr_.lookupObject<volVectorField>(UName_);
 
-        volVectorField& vorticity =
-            const_cast<volVectorField&>
-            (
-                obr_.lookupObject<volVectorField>(outputName_)
-            );
+    volVectorField& vorticity = const_cast<volVectorField&>
+    (
+        obr_.lookupObject<volVectorField>(outputName_)
+    );
 
-        vorticity = fvc::curl(U);
-    }
+    vorticity = fvc::curl(U);
 }
 
 
-void Foam::vorticity::end()
+void Foam::functionObjects::vorticity::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    execute();
 }
 
 
-void Foam::vorticity::timeSet()
-{
-    // Do nothing
-}
+void Foam::functionObjects::vorticity::timeSet()
+{}
 
 
-void Foam::vorticity::write()
+void Foam::functionObjects::vorticity::write()
 {
-    if (active_)
-    {
-        const volVectorField& vorticity =
-            obr_.lookupObject<volVectorField>(outputName_);
+    const volVectorField& vorticity =
+        obr_.lookupObject<volVectorField>(outputName_);
 
-        Info<< type() << " " << name_ << " output:" << nl
-            << "    writing field " << vorticity.name() << nl
-            << endl;
+    Info<< type() << " " << name_ << " output:" << nl
+        << "    writing field " << vorticity.name() << nl
+        << endl;
 
-        vorticity.write();
-    }
+    vorticity.write();
 }
 
 
diff --git a/src/postProcessing/functionObjects/utilities/vorticity/vorticity.H b/src/postProcessing/functionObjects/utilities/vorticity/vorticity.H
index bce5d943ebc..dd6a7dff074 100644
--- a/src/postProcessing/functionObjects/utilities/vorticity/vorticity.H
+++ b/src/postProcessing/functionObjects/utilities/vorticity/vorticity.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2014 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2014-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::vorticity
+    Foam::functionObjects::vorticity
 
 Group
     grpUtilitiesFunctionObjects
@@ -52,6 +52,9 @@ class dictionary;
 class polyMesh;
 class mapPolyMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                           Class vorticity Declaration
 \*---------------------------------------------------------------------------*/
@@ -66,9 +69,6 @@ class vorticity
         //- Reference to the database
         const objectRegistry& obr_;
 
-        //- On/off switch
-        bool active_;
-
         //- Name of velocity field, default is "U"
         word UName_;
 
@@ -103,6 +103,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~vorticity();
@@ -143,6 +153,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/vorticity/vorticityFunctionObject.H b/src/postProcessing/functionObjects/utilities/vorticity/vorticityFunctionObject.H
index 765ec1e6f9b..aee3f04f8e1 100644
--- a/src/postProcessing/functionObjects/utilities/vorticity/vorticityFunctionObject.H
+++ b/src/postProcessing/functionObjects/utilities/vorticity/vorticityFunctionObject.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2014 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2014-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,8 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<vorticity> vorticityFunctionObject;
+    typedef OutputFilterFunctionObject<functionObjects::vorticity>
+        vorticityFunctionObject;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/wallShearStress/IOwallShearStress.H b/src/postProcessing/functionObjects/utilities/wallShearStress/IOwallShearStress.H
index c7e453b1d86..3a38e7fc0c8 100644
--- a/src/postProcessing/functionObjects/utilities/wallShearStress/IOwallShearStress.H
+++ b/src/postProcessing/functionObjects/utilities/wallShearStress/IOwallShearStress.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -39,7 +39,7 @@ Description
 
 namespace Foam
 {
-    typedef IOOutputFilter<wallShearStress> IOwallShearStress;
+    typedef IOOutputFilter<functionObjects::wallShearStress> IOwallShearStress;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.C b/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.C
index d64abbf03ca..e2160e34311 100644
--- a/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.C
+++ b/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.C
@@ -33,14 +33,17 @@ License
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
+{
+namespace functionObjects
 {
     defineTypeNameAndDebug(wallShearStress, 0);
 }
+}
 
 
 // * * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * //
 
-void Foam::wallShearStress::writeFileHeader(const label i)
+void Foam::functionObjects::wallShearStress::writeFileHeader(const label i)
 {
     // Add headers to output data
     writeHeader(file(), "Wall shear stress");
@@ -52,7 +55,7 @@ void Foam::wallShearStress::writeFileHeader(const label i)
 }
 
 
-void Foam::wallShearStress::calcShearStress
+void Foam::functionObjects::wallShearStress::calcShearStress
 (
     const fvMesh& mesh,
     const volSymmTensorField& Reff,
@@ -91,7 +94,7 @@ void Foam::wallShearStress::calcShearStress
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::wallShearStress::wallShearStress
+Foam::functionObjects::wallShearStress::wallShearStress
 (
     const word& name,
     const objectRegistry& obr,
@@ -102,194 +105,180 @@ Foam::wallShearStress::wallShearStress
     functionObjectFiles(obr, name, typeName),
     name_(name),
     obr_(obr),
-    active_(true),
     log_(true),
     patchSet_()
 {
-    // Check if the available mesh is an fvMesh, otherwise deactivate
-    if (!isA<fvMesh>(obr_))
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_ << nl
-            << endl;
-    }
+    const fvMesh& mesh = refCast<const fvMesh>(obr_);
 
-    if (active_)
-    {
-        const fvMesh& mesh = refCast<const fvMesh>(obr_);
-
-        volVectorField* wallShearStressPtr
+    volVectorField* wallShearStressPtr
+    (
+        new volVectorField
         (
-            new volVectorField
+            IOobject
             (
-                IOobject
-                (
-                    type(),
-                    mesh.time().timeName(),
-                    mesh,
-                    IOobject::NO_READ,
-                    IOobject::NO_WRITE
-                ),
+                type(),
+                mesh.time().timeName(),
                 mesh,
-                dimensionedVector
-                (
-                    "0",
-                    sqr(dimLength)/sqr(dimTime),
-                    Zero
-                )
+                IOobject::NO_READ,
+                IOobject::NO_WRITE
+            ),
+            mesh,
+            dimensionedVector
+            (
+                "0",
+                sqr(dimLength)/sqr(dimTime),
+                Zero
             )
-        );
+        )
+    );
 
-        mesh.objectRegistry::store(wallShearStressPtr);
-    }
+    mesh.objectRegistry::store(wallShearStressPtr);
 
     read(dict);
 }
 
 
+bool Foam::functionObjects::wallShearStress::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::wallShearStress::~wallShearStress()
+Foam::functionObjects::wallShearStress::~wallShearStress()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::wallShearStress::read(const dictionary& dict)
+void Foam::functionObjects::wallShearStress::read(const dictionary& dict)
 {
-    if (active_)
-    {
-        log_ = dict.lookupOrDefault<Switch>("log", true);
+    log_ = dict.lookupOrDefault<Switch>("log", true);
 
-        const fvMesh& mesh = refCast<const fvMesh>(obr_);
-        const polyBoundaryMesh& pbm = mesh.boundaryMesh();
+    const fvMesh& mesh = refCast<const fvMesh>(obr_);
+    const polyBoundaryMesh& pbm = mesh.boundaryMesh();
 
-        patchSet_ =
-            mesh.boundaryMesh().patchSet
-            (
-                wordReList(dict.lookupOrDefault("patches", wordReList()))
-            );
+    patchSet_ =
+        mesh.boundaryMesh().patchSet
+        (
+            wordReList(dict.lookupOrDefault("patches", wordReList()))
+        );
 
-        Info<< type() << " " << name_ << ":" << nl;
+    Info<< type() << " " << name_ << ":" << nl;
 
-        if (patchSet_.empty())
+    if (patchSet_.empty())
+    {
+        forAll(pbm, patchi)
         {
-            forAll(pbm, patchi)
+            if (isA<wallPolyPatch>(pbm[patchi]))
             {
-                if (isA<wallPolyPatch>(pbm[patchi]))
-                {
-                    patchSet_.insert(patchi);
-                }
+                patchSet_.insert(patchi);
             }
-
-            Info<< "    processing all wall patches" << nl << endl;
         }
-        else
+
+        Info<< "    processing all wall patches" << nl << endl;
+    }
+    else
+    {
+        Info<< "    processing wall patches: " << nl;
+        labelHashSet filteredPatchSet;
+        forAllConstIter(labelHashSet, patchSet_, iter)
         {
-            Info<< "    processing wall patches: " << nl;
-            labelHashSet filteredPatchSet;
-            forAllConstIter(labelHashSet, patchSet_, iter)
+            label patchi = iter.key();
+            if (isA<wallPolyPatch>(pbm[patchi]))
             {
-                label patchi = iter.key();
-                if (isA<wallPolyPatch>(pbm[patchi]))
-                {
-                    filteredPatchSet.insert(patchi);
-                    Info<< "        " << pbm[patchi].name() << endl;
-                }
-                else
-                {
-                    WarningInFunction
-                        << "Requested wall shear stress on non-wall boundary "
-                        << "type patch: " << pbm[patchi].name() << endl;
-                }
+                filteredPatchSet.insert(patchi);
+                Info<< "        " << pbm[patchi].name() << endl;
             }
+            else
+            {
+                WarningInFunction
+                    << "Requested wall shear stress on non-wall boundary "
+                    << "type patch: " << pbm[patchi].name() << endl;
+            }
+        }
 
-            Info<< endl;
+        Info<< endl;
 
-            patchSet_ = filteredPatchSet;
-        }
+        patchSet_ = filteredPatchSet;
     }
 }
 
 
-void Foam::wallShearStress::execute()
+void Foam::functionObjects::wallShearStress::execute()
 {
     typedef compressible::turbulenceModel cmpModel;
     typedef incompressible::turbulenceModel icoModel;
 
-    if (active_)
-    {
-        functionObjectFiles::write();
-
-        const fvMesh& mesh = refCast<const fvMesh>(obr_);
-
-        volVectorField& wallShearStress =
-            const_cast<volVectorField&>
-            (
-                mesh.lookupObject<volVectorField>(type())
-            );
+    functionObjectFiles::write();
 
-        if (log_) Info<< type() << " " << name_ << " output:" << nl;
+    const fvMesh& mesh = refCast<const fvMesh>(obr_);
 
+    volVectorField& wallShearStress =
+        const_cast<volVectorField&>
+        (
+            mesh.lookupObject<volVectorField>(type())
+        );
 
-        tmp<volSymmTensorField> Reff;
-        if (mesh.foundObject<cmpModel>(turbulenceModel::propertiesName))
-        {
-            const cmpModel& model =
-                mesh.lookupObject<cmpModel>(turbulenceModel::propertiesName);
+    if (log_) Info<< type() << " " << name_ << " output:" << nl;
 
-            Reff = model.devRhoReff();
-        }
-        else if (mesh.foundObject<icoModel>(turbulenceModel::propertiesName))
-        {
-            const icoModel& model =
-                mesh.lookupObject<icoModel>(turbulenceModel::propertiesName);
 
-            Reff = model.devReff();
-        }
-        else
-        {
-            FatalErrorInFunction
-                << "Unable to find turbulence model in the "
-                << "database" << exit(FatalError);
-        }
+    tmp<volSymmTensorField> Reff;
+    if (mesh.foundObject<cmpModel>(turbulenceModel::propertiesName))
+    {
+        const cmpModel& model =
+            mesh.lookupObject<cmpModel>(turbulenceModel::propertiesName);
 
-        calcShearStress(mesh, Reff(), wallShearStress);
+        Reff = model.devRhoReff();
     }
-}
-
+    else if (mesh.foundObject<icoModel>(turbulenceModel::propertiesName))
+    {
+        const icoModel& model =
+            mesh.lookupObject<icoModel>(turbulenceModel::propertiesName);
 
-void Foam::wallShearStress::end()
-{
-    if (active_)
+        Reff = model.devReff();
+    }
+    else
     {
-        execute();
+        FatalErrorInFunction
+            << "Unable to find turbulence model in the "
+            << "database" << exit(FatalError);
     }
+
+    calcShearStress(mesh, Reff(), wallShearStress);
 }
 
 
-void Foam::wallShearStress::timeSet()
+void Foam::functionObjects::wallShearStress::end()
 {
-    // Do nothing
+    execute();
 }
 
 
-void Foam::wallShearStress::write()
+void Foam::functionObjects::wallShearStress::timeSet()
+{}
+
+
+void Foam::functionObjects::wallShearStress::write()
 {
-    if (active_)
-    {
-        functionObjectFiles::write();
+    functionObjectFiles::write();
 
-        const volVectorField& wallShearStress =
-            obr_.lookupObject<volVectorField>(type());
+    const volVectorField& wallShearStress =
+        obr_.lookupObject<volVectorField>(type());
 
-        if (log_) Info<< type() << " " << name_ << " output:" << nl
-            << "    writing field " << wallShearStress.name() << nl
-            << endl;
+    if (log_) Info<< type() << " " << name_ << " output:" << nl
+        << "    writing field " << wallShearStress.name() << nl
+        << endl;
 
-        wallShearStress.write();
-    }
+    wallShearStress.write();
 }
 
 
diff --git a/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.H b/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.H
index b99c08ad6f6..519851b4a4a 100644
--- a/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.H
+++ b/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::wallShearStress
+    Foam::functionObjects::wallShearStress
 
 Group
     grpUtilitiesFunctionObjects
@@ -90,6 +90,9 @@ class polyMesh;
 class mapPolyMesh;
 class fvMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                        Class wallShearStress Declaration
 \*---------------------------------------------------------------------------*/
@@ -107,9 +110,6 @@ protected:
 
         const objectRegistry& obr_;
 
-        //- on/off switch
-        bool active_;
-
         //- Switch to send output to Info as well as to file
         Switch log_;
 
@@ -160,6 +160,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~wallShearStress();
@@ -200,6 +210,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStressFunctionObject.H b/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStressFunctionObject.H
index 6b0dfc47f48..5e15293c548 100644
--- a/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStressFunctionObject.H
+++ b/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStressFunctionObject.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,7 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<wallShearStress>
+    typedef OutputFilterFunctionObject<functionObjects::wallShearStress>
         wallShearStressFunctionObject;
 }
 
diff --git a/src/postProcessing/functionObjects/utilities/yPlus/IOyPlus.H b/src/postProcessing/functionObjects/utilities/yPlus/IOyPlus.H
index dc2eaef11e7..9276c243ee8 100644
--- a/src/postProcessing/functionObjects/utilities/yPlus/IOyPlus.H
+++ b/src/postProcessing/functionObjects/utilities/yPlus/IOyPlus.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012-2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -39,7 +39,7 @@ Description
 
 namespace Foam
 {
-    typedef IOOutputFilter<yPlus> IOyPlus;
+    typedef IOOutputFilter<functionObjects::yPlus> IOyPlus;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/yPlus/yPlus.C b/src/postProcessing/functionObjects/utilities/yPlus/yPlus.C
index d5242319e27..9b6289a814f 100644
--- a/src/postProcessing/functionObjects/utilities/yPlus/yPlus.C
+++ b/src/postProcessing/functionObjects/utilities/yPlus/yPlus.C
@@ -31,14 +31,17 @@ License
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
+{
+namespace functionObjects
 {
     defineTypeNameAndDebug(yPlus, 0);
 }
+}
 
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
-void Foam::yPlus::writeFileHeader(const label i)
+void Foam::functionObjects::yPlus::writeFileHeader(const label i)
 {
     writeHeader(file(), "y+ ()");
 
@@ -53,7 +56,7 @@ void Foam::yPlus::writeFileHeader(const label i)
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::yPlus::yPlus
+Foam::functionObjects::yPlus::yPlus
 (
     const word& name,
     const objectRegistry& obr,
@@ -64,135 +67,121 @@ Foam::yPlus::yPlus
     functionObjectFiles(obr, name, typeName),
     name_(name),
     obr_(obr),
-    active_(true),
     log_(true),
     phiName_("phi")
 {
-    // Check if the available mesh is an fvMesh, otherwise deactivate
-    if (!isA<fvMesh>(obr_))
-    {
-        active_ = false;
-        WarningInFunction
-            << "No fvMesh available, deactivating " << name_ << nl
-            << endl;
-    }
-
-    if (active_)
-    {
-        const fvMesh& mesh = refCast<const fvMesh>(obr_);
+    const fvMesh& mesh = refCast<const fvMesh>(obr_);
 
-        volScalarField* yPlusPtr
+    volScalarField* yPlusPtr
+    (
+        new volScalarField
         (
-            new volScalarField
+            IOobject
             (
-                IOobject
-                (
-                    type(),
-                    mesh.time().timeName(),
-                    mesh,
-                    IOobject::NO_READ,
-                    IOobject::NO_WRITE
-                ),
+                type(),
+                mesh.time().timeName(),
                 mesh,
-                dimensionedScalar("0", dimless, 0.0)
-            )
-        );
+                IOobject::NO_READ,
+                IOobject::NO_WRITE
+            ),
+            mesh,
+            dimensionedScalar("0", dimless, 0.0)
+        )
+    );
+
+    mesh.objectRegistry::store(yPlusPtr);
+}
 
-        mesh.objectRegistry::store(yPlusPtr);
-    }
+
+bool Foam::functionObjects::yPlus::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
 }
 
 
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
-Foam::yPlus::~yPlus()
+Foam::functionObjects::yPlus::~yPlus()
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::yPlus::read(const dictionary& dict)
+void Foam::functionObjects::yPlus::read(const dictionary& dict)
 {
-    if (active_)
-    {
-        log_ = dict.lookupOrDefault<Switch>("log", true);
-        phiName_ = dict.lookupOrDefault<word>("phiName", "phi");
-    }
+    log_ = dict.lookupOrDefault<Switch>("log", true);
+    phiName_ = dict.lookupOrDefault<word>("phiName", "phi");
 }
 
 
-void Foam::yPlus::execute()
+void Foam::functionObjects::yPlus::execute()
 {
     typedef compressible::turbulenceModel cmpModel;
     typedef incompressible::turbulenceModel icoModel;
 
-    if (active_)
-    {
-        functionObjectFiles::write();
+    functionObjectFiles::write();
 
-        const fvMesh& mesh = refCast<const fvMesh>(obr_);
+    const fvMesh& mesh = refCast<const fvMesh>(obr_);
 
-        volScalarField& yPlus =
-            const_cast<volScalarField&>
-            (
-                mesh.lookupObject<volScalarField>(type())
-            );
-
-        if (log_) Info<< type() << " " << name_ << " output:" << nl;
-
-        tmp<volSymmTensorField> Reff;
-        if (mesh.foundObject<cmpModel>(turbulenceModel::propertiesName))
-        {
-            const cmpModel& model =
-                mesh.lookupObject<cmpModel>(turbulenceModel::propertiesName);
-
-            calcYPlus(model, mesh, yPlus);
-        }
-        else if (mesh.foundObject<icoModel>(turbulenceModel::propertiesName))
-        {
-            const icoModel& model =
-                mesh.lookupObject<icoModel>(turbulenceModel::propertiesName);
-
-            calcYPlus(model, mesh, yPlus);
-        }
-        else
-        {
-            FatalErrorInFunction
-                << "Unable to find turbulence model in the "
-                << "database" << exit(FatalError);
-        }
-    }
-}
+    volScalarField& yPlus =
+        const_cast<volScalarField&>
+        (
+            mesh.lookupObject<volScalarField>(type())
+        );
 
+    if (log_) Info<< type() << " " << name_ << " output:" << nl;
 
-void Foam::yPlus::end()
-{
-    if (active_)
+    tmp<volSymmTensorField> Reff;
+    if (mesh.foundObject<cmpModel>(turbulenceModel::propertiesName))
+    {
+        const cmpModel& model =
+            mesh.lookupObject<cmpModel>(turbulenceModel::propertiesName);
+
+        calcYPlus(model, mesh, yPlus);
+    }
+    else if (mesh.foundObject<icoModel>(turbulenceModel::propertiesName))
     {
-        execute();
+        const icoModel& model =
+            mesh.lookupObject<icoModel>(turbulenceModel::propertiesName);
+
+        calcYPlus(model, mesh, yPlus);
+    }
+    else
+    {
+        FatalErrorInFunction
+            << "Unable to find turbulence model in the "
+            << "database" << exit(FatalError);
     }
 }
 
 
-void Foam::yPlus::timeSet()
+void Foam::functionObjects::yPlus::end()
 {
-    // Do nothing
+    execute();
 }
 
 
-void Foam::yPlus::write()
+void Foam::functionObjects::yPlus::timeSet()
+{}
+
+
+void Foam::functionObjects::yPlus::write()
 {
-    if (active_)
-    {
-        functionObjectFiles::write();
+    functionObjectFiles::write();
 
-        const volScalarField& yPlus =
-            obr_.lookupObject<volScalarField>(type());
+    const volScalarField& yPlus =
+        obr_.lookupObject<volScalarField>(type());
 
-        if (log_) Info<< "    writing field " << yPlus.name() << nl << endl;
+    if (log_) Info<< "    writing field " << yPlus.name() << nl << endl;
 
-        yPlus.write();
-    }
+    yPlus.write();
 }
 
 
diff --git a/src/postProcessing/functionObjects/utilities/yPlus/yPlus.H b/src/postProcessing/functionObjects/utilities/yPlus/yPlus.H
index e1653107cd7..7b026d97713 100644
--- a/src/postProcessing/functionObjects/utilities/yPlus/yPlus.H
+++ b/src/postProcessing/functionObjects/utilities/yPlus/yPlus.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::yPlus
+    Foam::functionObjects::yPlus
 
 Group
     grpUtilitiesFunctionObjects
@@ -57,6 +57,9 @@ class polyMesh;
 class mapPolyMesh;
 class fvMesh;
 
+namespace functionObjects
+{
+
 /*---------------------------------------------------------------------------*\
                           Class yPlus Declaration
 \*---------------------------------------------------------------------------*/
@@ -72,9 +75,6 @@ class yPlus
 
         const objectRegistry& obr_;
 
-        //- on/off switch
-        bool active_;
-
         //- Switch to send output to Info as well as to file
         Switch log_;
 
@@ -121,6 +121,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~yPlus();
@@ -161,6 +171,7 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+} // End namespace functionObjects
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/yPlus/yPlusFunctionObject.H b/src/postProcessing/functionObjects/utilities/yPlus/yPlusFunctionObject.H
index dd54426043a..7075ea2729d 100644
--- a/src/postProcessing/functionObjects/utilities/yPlus/yPlusFunctionObject.H
+++ b/src/postProcessing/functionObjects/utilities/yPlus/yPlusFunctionObject.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012-2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -43,7 +43,8 @@ SourceFiles
 
 namespace Foam
 {
-    typedef OutputFilterFunctionObject<yPlus> yPlusFunctionObject;
+    typedef OutputFilterFunctionObject<functionObjects::yPlus>
+        yPlusFunctionObject;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/postProcessing/functionObjects/utilities/yPlus/yPlusTemplates.C b/src/postProcessing/functionObjects/utilities/yPlus/yPlusTemplates.C
index 189a6b3d9f9..6577f516819 100644
--- a/src/postProcessing/functionObjects/utilities/yPlus/yPlusTemplates.C
+++ b/src/postProcessing/functionObjects/utilities/yPlus/yPlusTemplates.C
@@ -31,7 +31,7 @@ License
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
 template<class TurbulenceModel>
-void Foam::yPlus::calcYPlus
+void Foam::functionObjects::yPlus::calcYPlus
 (
     const TurbulenceModel& turbulenceModel,
     const fvMesh& mesh,
diff --git a/src/regionModels/pyrolysisModels/noPyrolysis/noPyrolysis.C b/src/regionModels/pyrolysisModels/noPyrolysis/noPyrolysis.C
index 55347678064..8e01df73ef6 100644
--- a/src/regionModels/pyrolysisModels/noPyrolysis/noPyrolysis.C
+++ b/src/regionModels/pyrolysisModels/noPyrolysis/noPyrolysis.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -135,15 +135,11 @@ noPyrolysis::~noPyrolysis()
 // * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
 
 void noPyrolysis::preEvolveRegion()
-{
-    //Do nothing
-}
+{}
 
 
 void noPyrolysis::evolveRegion()
-{
-    //Do nothing
-}
+{}
 
 
 const volScalarField& noPyrolysis::rho() const
diff --git a/src/sampling/meshToMesh0/meshToMesh0Templates.C b/src/sampling/meshToMesh0/meshToMesh0Templates.C
index e4d4f49ab56..2eae59e4fc4 100644
--- a/src/sampling/meshToMesh0/meshToMesh0Templates.C
+++ b/src/sampling/meshToMesh0/meshToMesh0Templates.C
@@ -303,7 +303,6 @@ void Foam::meshToMesh0::interpolate
                 }
                 case CELL_VOLUME_WEIGHT:
                 {
-                    // Do nothing
                     break;
                 }
 
diff --git a/src/sampling/probes/patchProbes.C b/src/sampling/probes/patchProbes.C
index 0d4acb2de6d..0541cd5c7e3 100644
--- a/src/sampling/probes/patchProbes.C
+++ b/src/sampling/probes/patchProbes.C
@@ -202,6 +202,18 @@ Foam::patchProbes::patchProbes
 }
 
 
+bool Foam::patchProbes::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    return true;
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
 Foam::patchProbes::~patchProbes()
diff --git a/src/sampling/probes/patchProbes.H b/src/sampling/probes/patchProbes.H
index 7ee2e796d0b..447463ebe97 100644
--- a/src/sampling/probes/patchProbes.H
+++ b/src/sampling/probes/patchProbes.H
@@ -138,6 +138,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~patchProbes();
diff --git a/src/sampling/probes/probes.C b/src/sampling/probes/probes.C
index 8d4b50f97f6..661bba6a4dd 100644
--- a/src/sampling/probes/probes.C
+++ b/src/sampling/probes/probes.C
@@ -287,6 +287,18 @@ Foam::probes::probes
 }
 
 
+bool Foam::probes::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    return true;
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
 Foam::probes::~probes()
@@ -296,21 +308,15 @@ Foam::probes::~probes()
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 void Foam::probes::execute()
-{
-    // Do nothing - only valid on write
-}
+{}
 
 
 void Foam::probes::end()
-{
-    // Do nothing - only valid on write
-}
+{}
 
 
 void Foam::probes::timeSet()
-{
-    // Do nothing - only valid on write
-}
+{}
 
 
 void Foam::probes::write()
diff --git a/src/sampling/probes/probes.H b/src/sampling/probes/probes.H
index 2d7e8c1d767..18de7b51510 100644
--- a/src/sampling/probes/probes.H
+++ b/src/sampling/probes/probes.H
@@ -210,6 +210,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~probes();
diff --git a/src/sampling/sampledSet/sampledSets/sampledSets.C b/src/sampling/sampledSet/sampledSets/sampledSets.C
index 538249d1afc..1a0723762fd 100644
--- a/src/sampling/sampledSet/sampledSets/sampledSets.C
+++ b/src/sampling/sampledSet/sampledSets/sampledSets.C
@@ -162,6 +162,18 @@ Foam::sampledSets::sampledSets
 }
 
 
+bool Foam::sampledSets::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    return true;
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
 Foam::sampledSets::~sampledSets()
@@ -177,21 +189,15 @@ void Foam::sampledSets::verbose(const bool verbosity)
 
 
 void Foam::sampledSets::execute()
-{
-    // Do nothing - only valid on write
-}
+{}
 
 
 void Foam::sampledSets::end()
-{
-    // Do nothing - only valid on write
-}
+{}
 
 
 void Foam::sampledSets::timeSet()
-{
-    // Do nothing - only valid on write
-}
+{}
 
 
 void Foam::sampledSets::write()
diff --git a/src/sampling/sampledSet/sampledSets/sampledSets.H b/src/sampling/sampledSet/sampledSets/sampledSets.H
index 26e494c28d3..332efc2e533 100644
--- a/src/sampling/sampledSet/sampledSets/sampledSets.H
+++ b/src/sampling/sampledSet/sampledSets/sampledSets.H
@@ -266,6 +266,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~sampledSets();
diff --git a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C
index 220a61baee6..41ac7b56e14 100644
--- a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C
+++ b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -115,6 +115,19 @@ Foam::sampledSurfaces::sampledSurfaces
 }
 
 
+bool Foam::sampledSurfaces::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    return true;
+}
+
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
 Foam::sampledSurfaces::~sampledSurfaces()
@@ -130,21 +143,15 @@ void Foam::sampledSurfaces::verbose(const bool verbosity)
 
 
 void Foam::sampledSurfaces::execute()
-{
-    // Do nothing - only valid on write
-}
+{}
 
 
 void Foam::sampledSurfaces::end()
-{
-    // Do nothing - only valid on write
-}
+{}
 
 
 void Foam::sampledSurfaces::timeSet()
-{
-    // Do nothing - only valid on write
-}
+{}
 
 
 void Foam::sampledSurfaces::write()
diff --git a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.H b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.H
index f2c2430e5a6..50b6f2710a8 100644
--- a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.H
+++ b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.H
@@ -186,6 +186,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~sampledSurfaces();
diff --git a/src/thermophysicalModels/radiation/derivedFvPatchFields/greyDiffusiveViewFactor/greyDiffusiveViewFactorFixedValueFvPatchScalarField.C b/src/thermophysicalModels/radiation/derivedFvPatchFields/greyDiffusiveViewFactor/greyDiffusiveViewFactorFixedValueFvPatchScalarField.C
index 282c77a8a26..866fbe8d2be 100644
--- a/src/thermophysicalModels/radiation/derivedFvPatchFields/greyDiffusiveViewFactor/greyDiffusiveViewFactorFixedValueFvPatchScalarField.C
+++ b/src/thermophysicalModels/radiation/derivedFvPatchFields/greyDiffusiveViewFactor/greyDiffusiveViewFactorFixedValueFvPatchScalarField.C
@@ -136,8 +136,6 @@ updateCoeffs()
         return;
     }
 
-    // Do nothing
-
     if (debug)
     {
         scalar Q = gSum((*this)*patch().magSf());
diff --git a/src/thermophysicalModels/radiation/radiationModels/noRadiation/noRadiation.C b/src/thermophysicalModels/radiation/radiationModels/noRadiation/noRadiation.C
index e89127328ad..c3233d5ebde 100644
--- a/src/thermophysicalModels/radiation/radiationModels/noRadiation/noRadiation.C
+++ b/src/thermophysicalModels/radiation/radiationModels/noRadiation/noRadiation.C
@@ -75,9 +75,7 @@ bool Foam::radiation::noRadiation::read()
 
 
 void Foam::radiation::noRadiation::calculate()
-{
-    // Do nothing
-}
+{}
 
 
 Foam::tmp<Foam::volScalarField> Foam::radiation::noRadiation::Rp() const
diff --git a/src/thermophysicalModels/radiation/radiationModels/opaqueSolid/opaqueSolid.C b/src/thermophysicalModels/radiation/radiationModels/opaqueSolid/opaqueSolid.C
index dd5b0268db0..740b9a94bbe 100644
--- a/src/thermophysicalModels/radiation/radiationModels/opaqueSolid/opaqueSolid.C
+++ b/src/thermophysicalModels/radiation/radiationModels/opaqueSolid/opaqueSolid.C
@@ -76,9 +76,7 @@ bool Foam::radiation::opaqueSolid::read()
 
 
 void Foam::radiation::opaqueSolid::calculate()
-{
-    // Do nothing
-}
+{}
 
 
 Foam::tmp<Foam::volScalarField> Foam::radiation::opaqueSolid::Rp() const
diff --git a/src/thermophysicalModels/radiation/submodels/sootModel/noSoot/noSoot.C b/src/thermophysicalModels/radiation/submodels/sootModel/noSoot/noSoot.C
index 7b621ac7e3b..42429fc5c72 100644
--- a/src/thermophysicalModels/radiation/submodels/sootModel/noSoot/noSoot.C
+++ b/src/thermophysicalModels/radiation/submodels/sootModel/noSoot/noSoot.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2013-2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2013-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -61,9 +61,7 @@ Foam::radiation::noSoot::~noSoot()
 
 
 void Foam::radiation::noSoot::correct()
-{
-    //Do nothing
-}
+{}
 
 const Foam::volScalarField& Foam::radiation::noSoot::soot() const
 {
diff --git a/src/thermophysicalModels/reactionThermo/functionObjects/moleFractions/moleFractions.C b/src/thermophysicalModels/reactionThermo/functionObjects/moleFractions/moleFractions.C
index 39e5e308da3..f7d8bb51ab7 100644
--- a/src/thermophysicalModels/reactionThermo/functionObjects/moleFractions/moleFractions.C
+++ b/src/thermophysicalModels/reactionThermo/functionObjects/moleFractions/moleFractions.C
@@ -102,6 +102,20 @@ Foam::moleFractions<ThermoType>::moleFractions
 }
 
 
+template<class ThermoType>
+bool Foam::moleFractions<ThermoType>::viable
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+{
+    // Construction is viable if the available mesh is an fvMesh
+    return isA<fvMesh>(obr);
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
 template<class ThermoType>
diff --git a/src/thermophysicalModels/reactionThermo/functionObjects/moleFractions/moleFractions.H b/src/thermophysicalModels/reactionThermo/functionObjects/moleFractions/moleFractions.H
index 05c7fa416a5..7e6beb8c19f 100644
--- a/src/thermophysicalModels/reactionThermo/functionObjects/moleFractions/moleFractions.H
+++ b/src/thermophysicalModels/reactionThermo/functionObjects/moleFractions/moleFractions.H
@@ -119,6 +119,16 @@ public:
             const bool loadFromFiles = false
         );
 
+        //- Return true if the construction of this functionObject is viable
+        //  i.e. the prerequisites for construction are available
+        static bool viable
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
 
     //- Destructor
     virtual ~moleFractions();
-- 
GitLab