diff --git a/src/postProcessing/functionObjects/field/Make/files b/src/postProcessing/functionObjects/field/Make/files
index 75464c40139f6cd10a231b39aa23a81f4fbbf873..24a3e5b5996697409bc557f41a12d3ebd647b38f 100644
--- a/src/postProcessing/functionObjects/field/Make/files
+++ b/src/postProcessing/functionObjects/field/Make/files
@@ -46,4 +46,7 @@ surfaceInterpolateFields/surfaceInterpolateFieldsFunctionObject.C
 regionSizeDistribution/regionSizeDistribution.C
 regionSizeDistribution/regionSizeDistributionFunctionObject.C
 
+histogram/histogram.C
+histogram/histogramFunctionObject.C
+
 LIB = $(FOAM_LIBBIN)/libfieldFunctionObjects
diff --git a/src/postProcessing/functionObjects/field/histogram/histogram.C b/src/postProcessing/functionObjects/field/histogram/histogram.C
new file mode 100644
index 0000000000000000000000000000000000000000..3f4e46eaab4dc32b1bbdbda04f7c376e03bffb74
--- /dev/null
+++ b/src/postProcessing/functionObjects/field/histogram/histogram.C
@@ -0,0 +1,221 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2016 OpenFOAM Foundation
+     \\/     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 3 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, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "histogram.H"
+#include "volFields.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace functionObjects
+{
+    defineTypeNameAndDebug(histogram, 0);
+}
+}
+
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+void Foam::functionObjects::histogram::writeGraph
+(
+    const coordSet& coords,
+    const word& fieldName,
+    const scalarField& values
+) const
+{
+    const wordList fieldNames(1, fieldName);
+
+    fileName outputPath = baseTimeDir();
+    mkDir(outputPath);
+    OFstream graphFile
+    (
+        outputPath/formatterPtr_().getFileName(coords, fieldNames)
+    );
+
+    Info<< "Writing histogram of " << fieldName
+        << " to " << graphFile.name() << endl;
+
+    List<const scalarField*> yPtrs(1);
+    yPtrs[0] = &values;
+    formatterPtr_().write(coords, fieldNames, yPtrs, graphFile);
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::functionObjects::histogram::histogram
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+:
+    functionObjectFile(obr, name, typeName),
+    name_(name),
+    obr_(obr),
+    active_(true)
+{
+    // 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;
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::functionObjects::histogram::~histogram()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+void Foam::functionObjects::histogram::read(const dictionary& dict)
+{
+    if (active_)
+    {
+        dict.lookup("field") >> fieldName_;
+        dict.lookup("max") >> max_;
+        min_ = 0.0;
+        dict.readIfPresent("min", min_);
+        dict.lookup("nBins") >> nBins_;
+
+        word format(dict.lookup("setFormat"));
+        formatterPtr_ = writer<scalar>::New(format);
+    }
+}
+
+
+void Foam::functionObjects::histogram::execute()
+{}
+
+
+void Foam::functionObjects::histogram::end()
+{}
+
+
+void Foam::functionObjects::histogram::timeSet()
+{}
+
+
+void Foam::functionObjects::histogram::write()
+{
+    if (active_)
+    {
+        Info<< type() << " " << name_ << " output:" << nl;
+
+        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
+            (
+                new volScalarField
+                (
+                    IOobject
+                    (
+                        fieldName_,
+                        mesh.time().timeName(),
+                        mesh,
+                        IOobject::MUST_READ,
+                        IOobject::NO_WRITE
+                    ),
+                    mesh
+                )
+            );
+        }
+
+        const volScalarField& field =
+        (
+             fieldPtr.valid()
+           ? fieldPtr()
+           : obr_.lookupObject<volScalarField>(fieldName_)
+        );
+
+        // Calculate the mid-points of bins for the graph axis
+        pointField xBin(nBins_);
+        const scalar delta = (max_- min_)/nBins_;
+
+        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)
+        {
+            const label bini = (field[celli] - min_)/delta;
+            if (bini >= 0 && bini < nBins_)
+            {
+                volFrac[bini] += V[celli];
+            }
+        }
+
+        Pstream::listCombineGather(volFrac, plusEqOp<scalar>());
+
+        if (Pstream::master())
+        {
+            const scalar sumVol = sum(volFrac);
+
+            if (sumVol > SMALL)
+            {
+                volFrac /= sumVol;
+
+                const coordSet coords
+                (
+                    "Volume_Fraction",
+                    "x",
+                    xBin,
+                    mag(xBin)
+                );
+
+                writeGraph(coords, field.name(), volFrac);
+            }
+        }
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/field/histogram/histogram.H b/src/postProcessing/functionObjects/field/histogram/histogram.H
new file mode 100644
index 0000000000000000000000000000000000000000..8d0c367f84802a7475e87589d922358c7e76bcd3
--- /dev/null
+++ b/src/postProcessing/functionObjects/field/histogram/histogram.H
@@ -0,0 +1,204 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2016 OpenFOAM Foundation
+     \\/     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 3 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, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::functionObjects::histogram
+
+Group
+    grpFieldFunctionObjects
+
+Description
+    Write the volume-weighted histogram of a volScalarField.
+
+    Example of function object specification:
+    \verbatim
+    histogram1
+    {
+        type            histogram;
+
+        functionObjectLibs ("libfieldFunctionObjects.so");
+
+        field           p;
+        nBins           100;
+        min             -5;
+        max             5;
+        setFormat       gnuplot;
+    }
+    \endverbatim
+
+    \heading Function object usage
+    \table
+        Property     | Description             | Required    | Default value
+        type         | type name: histogram    | yes         |
+        field        | Field to analyse        | yes         |
+        nBins        | Number of bins for the histogram | yes|
+        max          | Maximum value sampled   | yes         |
+        min          | minimum value sampled   | no          | 0
+        setFormat    | Output format           | yes         |
+    \endtable
+
+SeeAlso
+    Foam::functionObject
+    Foam::OutputFilterFunctionObject
+
+SourceFiles
+    histogram.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef functionObjects_histogram_H
+#define functionObjects_histogram_H
+
+#include "functionObjectFile.H"
+#include "writer.H"
+#include "volFieldsFwd.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// Forward declaration of classes
+class mapPolyMesh;
+class polyMesh;
+
+namespace functionObjects
+{
+
+/*---------------------------------------------------------------------------*\
+                         Class histogram Declaration
+\*---------------------------------------------------------------------------*/
+
+class histogram
+:
+    public functionObjectFile
+{
+    // Private data
+
+        //- Name of this set of histogram objects
+        word name_;
+
+        const objectRegistry& obr_;
+
+        //- on/off switch
+        bool active_;
+
+        //- Name of field
+        word fieldName_;
+
+        //- Maximum value
+        scalar max_;
+
+        //- Minimum value
+        scalar min_;
+
+        //- Mumber of bins
+        label nBins_;
+
+        //- Output formatter to write
+        autoPtr<writer<scalar>> formatterPtr_;
+
+
+    // Private Member Functions
+
+        void writeGraph
+        (
+            const coordSet& coords,
+            const word& valueName,
+            const scalarField& values
+        ) const;
+
+        //- Disallow default bitwise copy construct
+        histogram(const histogram&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const histogram&);
+
+
+public:
+
+    //- Runtime type information
+    TypeName("histogram");
+
+
+    // Constructors
+
+        //- Construct for given objectRegistry and dictionary.
+        //  Allow the possibility to load fields from files
+        histogram
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
+
+    // Destructor
+
+        virtual ~histogram();
+
+
+    // Member Functions
+
+        //- Return name of the set of histogram
+        virtual const word& name() const
+        {
+            return name_;
+        }
+
+        //- Read the histogram data
+        virtual void read(const dictionary&);
+
+        //- Execute, currently does nothing
+        virtual void execute();
+
+        //- Execute at the final time-loop, currently does nothing
+        virtual void end();
+
+        //- Called when time was set at the end of the Time::operator++
+        virtual void timeSet();
+
+        //- Calculate the histogram and write
+        virtual void write();
+
+        //- Update for changes of mesh
+        virtual void updateMesh(const mapPolyMesh&)
+        {}
+
+        //- Update for changes of mesh
+        virtual void movePoints(const polyMesh&)
+        {}
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace functionObjects
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/field/histogram/histogramFunctionObject.C b/src/postProcessing/functionObjects/field/histogram/histogramFunctionObject.C
new file mode 100644
index 0000000000000000000000000000000000000000..fbbcf34e48f303f0f999339e31969550d7c1624c
--- /dev/null
+++ b/src/postProcessing/functionObjects/field/histogram/histogramFunctionObject.C
@@ -0,0 +1,46 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2016 OpenFOAM Foundation
+     \\/     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 3 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, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "histogramFunctionObject.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+    defineNamedTemplateTypeNameAndDebug
+    (
+        histogramFunctionObject,
+        0
+    );
+
+    addToRunTimeSelectionTable
+    (
+        functionObject,
+        histogramFunctionObject,
+        dictionary
+    );
+}
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/field/histogram/histogramFunctionObject.H b/src/postProcessing/functionObjects/field/histogram/histogramFunctionObject.H
new file mode 100644
index 0000000000000000000000000000000000000000..c246af837e9db87514825d6c8fb0e6a7c099bb0d
--- /dev/null
+++ b/src/postProcessing/functionObjects/field/histogram/histogramFunctionObject.H
@@ -0,0 +1,54 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2016 OpenFOAM Foundation
+     \\/     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 3 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, see <http://www.gnu.org/licenses/>.
+
+Typedef
+    Foam::histogramFunctionObject
+
+Description
+    FunctionObject wrapper around histogram to allow it to be
+    created via the functions list within controlDict.
+
+SourceFiles
+    histogramFunctionObject.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef histogramFunctionObject_H
+#define histogramFunctionObject_H
+
+#include "histogram.H"
+#include "OutputFilterFunctionObject.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+    typedef OutputFilterFunctionObject<functionObjects::histogram>
+        histogramFunctionObject;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //