diff --git a/applications/utilities/postProcessing/velocityField/divPhi/Make/files b/applications/utilities/postProcessing/velocityField/divPhi/Make/files
deleted file mode 100644
index 0eb1cf466c230ed6e97c253778da8836e414f2ad..0000000000000000000000000000000000000000
--- a/applications/utilities/postProcessing/velocityField/divPhi/Make/files
+++ /dev/null
@@ -1,3 +0,0 @@
-divPhiApp.C
-
-EXE = $(FOAM_APPBIN)/divPhi
diff --git a/applications/utilities/postProcessing/velocityField/divPhi/Make/options b/applications/utilities/postProcessing/velocityField/divPhi/Make/options
deleted file mode 100644
index 41164260772b6d1bd213d329e2dfbccf6cacfb99..0000000000000000000000000000000000000000
--- a/applications/utilities/postProcessing/velocityField/divPhi/Make/options
+++ /dev/null
@@ -1,7 +0,0 @@
-EXE_INC = \
-    -I$(FOAM_SRC)/postProcessing/postCalc \
-    -I$(LIB_SRC)/finiteVolume/lnInclude
-
-EXE_LIBS = \
-    $(FOAM_LIBBIN)/postCalc.o \
-    -lfiniteVolume
diff --git a/applications/utilities/postProcessing/velocityField/divU/FoamX/divU.cfg b/applications/utilities/postProcessing/velocityField/divU/FoamX/divU.cfg
deleted file mode 100644
index 69a24b8a8e248a6ddb07e273e1dbe9e828ffb509..0000000000000000000000000000000000000000
--- a/applications/utilities/postProcessing/velocityField/divU/FoamX/divU.cfg
+++ /dev/null
@@ -1,27 +0,0 @@
-/*---------------------------------------------------------------------------*\
-| =========                 |                                                 |
-| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
-|  \\    /   O peration     | Version:  1.0                                   |
-|   \\  /    A nd           | Web:      http://www.openfoam.org               |
-|    \\/     M anipulation  |                                                 |
-\*---------------------------------------------------------------------------*/
-// divU tool definition
-
-description     "div(U) calculation";
-
-divUDict
-{
-    type            dictionary;
-    description     "divU control dictionary";
-    dictionaryPath  "system";
-
-    entries
-    {
-        arguments
-        {
-            type        rootCaseTimeArguments;
-        }
-    }
-}
-
-// ************************************************************************* //
diff --git a/applications/utilities/postProcessing/velocityField/divU/Make/files b/applications/utilities/postProcessing/velocityField/divU/Make/files
deleted file mode 100644
index 27af90178366e385ee3d8710750398460312be77..0000000000000000000000000000000000000000
--- a/applications/utilities/postProcessing/velocityField/divU/Make/files
+++ /dev/null
@@ -1,3 +0,0 @@
-divUApp.C
-
-EXE = $(FOAM_APPBIN)/divU
diff --git a/applications/utilities/postProcessing/velocityField/divU/Make/options b/applications/utilities/postProcessing/velocityField/divU/Make/options
deleted file mode 100644
index 41164260772b6d1bd213d329e2dfbccf6cacfb99..0000000000000000000000000000000000000000
--- a/applications/utilities/postProcessing/velocityField/divU/Make/options
+++ /dev/null
@@ -1,7 +0,0 @@
-EXE_INC = \
-    -I$(FOAM_SRC)/postProcessing/postCalc \
-    -I$(LIB_SRC)/finiteVolume/lnInclude
-
-EXE_LIBS = \
-    $(FOAM_LIBBIN)/postCalc.o \
-    -lfiniteVolume
diff --git a/applications/utilities/postProcessing/velocityField/divU/divUApp.C b/applications/utilities/postProcessing/velocityField/divU/divUApp.C
deleted file mode 100644
index 225c20f38439fd3dbcb37c26175f872c136df83a..0000000000000000000000000000000000000000
--- a/applications/utilities/postProcessing/velocityField/divU/divUApp.C
+++ /dev/null
@@ -1,84 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-Application
-    divU
-
-Description
-    Calculates and writes the divergence of the velocity field U.
-    The -noWrite option just outputs the max/min values without writing the
-    field.
-
-\*---------------------------------------------------------------------------*/
-
-#include "calc.H"
-#include "fvc.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh)
-{
-    bool writeResults = !args.options().found("noWrite");
-
-    IOobject Uheader
-    (
-        "U",
-        runTime.timeName(),
-        mesh,
-        IOobject::MUST_READ
-    );
-
-    if (Uheader.headerOk())
-    {
-        Info<< "    Reading U" << endl;
-        volVectorField U(Uheader, mesh);
-
-        Info<< "    Calculating divU" << endl;
-        volScalarField divU
-        (
-            IOobject
-            (
-                "divU",
-                runTime.timeName(),
-                mesh
-            ),
-            fvc::div(U)
-        );
-
-        Info<< "div(U) max/min : "
-            << max(divU).value() << " "
-            << min(divU).value() << endl;
-
-        if (writeResults)
-        {
-            divU.write();
-        }
-    }
-    else
-    {
-        Info<< "    No U" << endl;
-    }
-}
-
-// ************************************************************************* //
diff --git a/src/postProcessing/foamCalcFunctions/Make/files b/src/postProcessing/foamCalcFunctions/Make/files
index 839e7681476983b657eb01a4236941da8b8cef06..016ae776044f90327a3f6da64849177506272eb7 100644
--- a/src/postProcessing/foamCalcFunctions/Make/files
+++ b/src/postProcessing/foamCalcFunctions/Make/files
@@ -5,5 +5,6 @@ field/components/components.C
 field/mag/mag.C
 field/magSqr/magSqr.C
 field/magGrad/magGrad.C
+field/div/div.C
 
 LIB = $(FOAM_LIBBIN)/libfoamCalcFunctions
diff --git a/src/postProcessing/foamCalcFunctions/field/div/div.C b/src/postProcessing/foamCalcFunctions/field/div/div.C
new file mode 100644
index 0000000000000000000000000000000000000000..5afc5c9d9aac6e7ed72d284a4111565068045242
--- /dev/null
+++ b/src/postProcessing/foamCalcFunctions/field/div/div.C
@@ -0,0 +1,128 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation; either version 2 of the License, or (at your
+    option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM; if not, write to the Free Software Foundation,
+    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+\*---------------------------------------------------------------------------*/
+
+#include "div.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+    namespace calcTypes
+    {
+        defineTypeNameAndDebug(div, 0);
+        addToRunTimeSelectionTable(calcType, div, dictionary);
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::calcTypes::div::div()
+:
+    calcType()
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::calcTypes::div::~div()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+void Foam::calcTypes::div::init()
+{
+    Foam::argList::validArgs.append("div");
+    argList::validArgs.append("fieldName1 .. fieldNameN");
+}
+
+
+void Foam::calcTypes::div::preCalc
+(
+    const argList& args,
+    const Time& runTime,
+    const fvMesh& mesh
+)
+{
+    if (args.additionalArgs().size() < 2)
+    {
+        Info<< nl << "must specify one or more fields" << nl;
+        args.printUsage();
+        FatalError.exit();
+    }
+}
+
+
+void Foam::calcTypes::div::calc
+(
+    const argList& args,
+    const Time& runTime,
+    const fvMesh& mesh
+)
+{
+    const stringList& params = args.additionalArgs();
+
+    for (label fieldi=1; fieldi<params.size(); fieldi++)
+    {
+        const word fieldName(params[fieldi]);
+
+        IOobject fieldHeader
+        (
+            fieldName,
+            runTime.timeName(),
+            mesh,
+            IOobject::MUST_READ
+        );
+
+        // Check field exists
+        if (fieldHeader.headerOk())
+        {
+            bool processed = false;
+
+            writeDivField<surfaceScalarField>(fieldHeader, mesh, processed);
+            writeDivField<volVectorField>(fieldHeader, mesh, processed);
+
+            if (!processed)
+            {
+                 FatalError
+                     << "Unable to process " << fieldName << nl
+                     << "No call to div for fields of type "
+                     << fieldHeader.headerClassName() << nl << nl
+                     << exit(FatalError);
+            }
+        }
+        else
+        {
+            Info<< "    No " << fieldName << endl;
+        }
+    }
+}
+
+
+// ************************************************************************* //
+
diff --git a/src/postProcessing/foamCalcFunctions/field/div/div.H b/src/postProcessing/foamCalcFunctions/field/div/div.H
new file mode 100644
index 0000000000000000000000000000000000000000..7b920d369d8c6d5368d9b5ad8ccca89b44695281
--- /dev/null
+++ b/src/postProcessing/foamCalcFunctions/field/div/div.H
@@ -0,0 +1,139 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation; either version 2 of the License, or (at your
+    option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM; if not, write to the Free Software Foundation,
+    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+Class
+    Foam::div
+
+Description
+    Writes scalar fields corresponding to the divergence of the supplied
+    field (name) for each time.
+
+SourceFiles
+    div.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef div_H
+#define div_H
+
+#include "calcType.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+namespace calcTypes
+{
+
+/*---------------------------------------------------------------------------*\
+                          Class div Declaration
+\*---------------------------------------------------------------------------*/
+
+class div
+:
+    public calcType
+{
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        div(const div&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const div&);
+
+
+protected:
+
+    // Member Functions
+
+        // Calculation routines
+
+            //- Initialise - typically setting static variables,
+            //  e.g. command line arguments
+            virtual void init();
+
+            //- Pre-time loop calculations
+            virtual void preCalc
+            (
+                const argList& args,
+                const Time& runTime,
+                const fvMesh& mesh
+            );
+
+            //- Time loop calculations
+            virtual void calc
+            (
+                const argList& args,
+                const Time& runTime,
+                const fvMesh& mesh
+            );
+
+
+        // I-O
+
+            //- Write div fields
+            template<class Type>
+            void writeDivField
+            (
+                const IOobject& header,
+                const fvMesh& mesh,
+                bool& processed
+            );
+
+
+public:
+
+    //- Runtime type information
+    TypeName("div");
+
+
+    // Constructors
+
+        //- Construct null
+        div();
+
+
+    // Destructor
+
+        virtual ~div();
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace calcTypes
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+#   include "writeDivField.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/postProcessing/velocityField/divPhi/divPhiApp.C b/src/postProcessing/foamCalcFunctions/field/div/writeDivField.C
similarity index 56%
rename from applications/utilities/postProcessing/velocityField/divPhi/divPhiApp.C
rename to src/postProcessing/foamCalcFunctions/field/div/writeDivField.C
index eb9d1ad26dea736d84a976b8f159f203435c0653..693c8673a4a5ba4e05c418984729feeb838ec25c 100644
--- a/applications/utilities/postProcessing/velocityField/divPhi/divPhiApp.C
+++ b/src/postProcessing/foamCalcFunctions/field/div/writeDivField.C
@@ -22,58 +22,38 @@ License
     along with OpenFOAM; if not, write to the Free Software Foundation,
     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 
-Application
-    divPhi
-
-Description
-    Calculates and writes the divergence of the flux field phi. The
-    -noWrite option just outputs the max/min values without writing the
-    field.
-
 \*---------------------------------------------------------------------------*/
 
-#include "calc.H"
-#include "fvc.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh)
+template<class Type>
+void Foam::calcTypes::div::writeDivField
+(
+    const IOobject& header,
+    const fvMesh& mesh,
+    bool& processed
+)
 {
-    bool writeResults = !args.options().found("noWrite");
-
-    Info<< "    Reading phi" << endl;
-    surfaceScalarField phi
-    (
-        IOobject
-        (
-            "phi",
-            runTime.timeName(),
-            mesh,
-            IOobject::MUST_READ
-        ),
-        mesh
-    );
+    if (header.headerClassName() == Type::typeName)
+    {
+        Info<< "    Reading " << header.name() << endl;
+        Type field(header, mesh);
 
-    Info<< "    Calculating divPhi" << endl;
-    volScalarField divPhi
-    (
-        IOobject
+        Info<< "    Calculating div" << header.name() << endl;
+        volScalarField divField
         (
-            "divPhi",
-            runTime.timeName(),
-            mesh
-        ),
-        fvc::div(phi)
-    );
-
-    Info<< "div(phi) max/min : "
-        << max(divPhi).value() << " "
-        << min(divPhi).value() << endl;
-
-    if (writeResults)
-    {
-        divPhi.write();
+            IOobject
+            (
+                "div" + header.name(),
+                mesh.time().timeName(),
+                mesh,
+                IOobject::NO_READ
+            ),
+            fvc::div(field)
+        );
+        divField.write();
+
+        processed = true;
     }
 }
 
-// ************************************************************************* //
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //