diff --git a/src/postProcessing/functionObjects/field/MachNo/MachNo.C b/src/postProcessing/functionObjects/field/MachNo/MachNo.C
new file mode 100644
index 0000000000000000000000000000000000000000..d252a45b30767eb35aed8b67a6c69f63d056b966
--- /dev/null
+++ b/src/postProcessing/functionObjects/field/MachNo/MachNo.C
@@ -0,0 +1,95 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  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 "MachNo.H"
+#include "fluidThermo.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace functionObjects
+{
+    defineTypeNameAndDebug(MachNo, 0);
+
+    addToRunTimeSelectionTable
+    (
+        functionObject,
+        MachNo,
+        dictionary
+    );
+}
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::functionObjects::MachNo::MachNo
+(
+    const word& name,
+    const Time& runTime,
+    const dictionary& dict
+)
+:
+    fieldExpression(name, runTime, dict, "U", "Ma")
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::functionObjects::MachNo::~MachNo()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+bool Foam::functionObjects::MachNo::execute(const bool postProcess)
+{
+    if
+    (
+        foundField<volVectorField>(fieldName_)
+     && mesh_.foundObject<fluidThermo>(fluidThermo::dictName)
+    )
+    {
+        const fluidThermo& thermo =
+            mesh_.lookupObject<fluidThermo>(fluidThermo::dictName);
+
+        const volVectorField& U = lookupField<volVectorField>(fieldName_);
+
+        return store
+        (
+            resultName_,
+            mag(U)/sqrt(thermo.gamma()*thermo.p()/thermo.rho())
+        );
+    }
+    else
+    {
+        return false;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/field/MachNo/MachNo.H b/src/postProcessing/functionObjects/field/MachNo/MachNo.H
new file mode 100644
index 0000000000000000000000000000000000000000..4d744f621943f25360353a7e3f843dc5587baa53
--- /dev/null
+++ b/src/postProcessing/functionObjects/field/MachNo/MachNo.H
@@ -0,0 +1,102 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  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::MachNo
+
+Group
+    grpFieldFunctionObjects
+
+Description
+    This function object calculates and writes the Mach number as a
+    volScalarField.
+
+SeeAlso
+    Foam::functionObjects::fieldExpression
+    Foam::functionObjects::fvMeshFunctionObject
+
+SourceFiles
+    MachNo.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef functionObjects_MachNo_H
+#define functionObjects_MachNo_H
+
+#include "fieldExpression.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace functionObjects
+{
+
+/*---------------------------------------------------------------------------*\
+                          Class MachNo Declaration
+\*---------------------------------------------------------------------------*/
+
+class MachNo
+:
+    public fieldExpression
+{
+
+public:
+
+    //- Runtime type information
+    TypeName("MachNo");
+
+
+    // Constructors
+
+        //- Construct for given objectRegistry and dictionary.
+        //  Allow the possibility to load fields from files
+        MachNo
+        (
+            const word& name,
+            const Time& runTime,
+            const dictionary& dict
+        );
+
+
+    //- Destructor
+    virtual ~MachNo();
+
+
+    // Member Functions
+
+        //- Calculate the Mach number field
+        virtual bool execute(const bool postProcess = false);
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace functionObjects
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/field/Make/files b/src/postProcessing/functionObjects/field/Make/files
index ee11ceecfbe26d21bad27a99cde28fefc8a35255..934c931ac8e13f01ea674712068c220f17c159f6 100644
--- a/src/postProcessing/functionObjects/field/Make/files
+++ b/src/postProcessing/functionObjects/field/Make/files
@@ -45,5 +45,6 @@ CourantNo/CourantNo.C
 PecletNo/PecletNo.C
 blendingFactor/blendingFactor.C
 pressure/pressure.C
+MachNo/MachNo.C
 
 LIB = $(FOAM_LIBBIN)/libfieldFunctionObjects
diff --git a/src/postProcessing/functionObjects/field/Make/options b/src/postProcessing/functionObjects/field/Make/options
index 8f45abcac0e751fe1a5ac807d7c931a26f976f9e..5e97121147df4d0142b7d7adca581b0f70fd9a8a 100644
--- a/src/postProcessing/functionObjects/field/Make/options
+++ b/src/postProcessing/functionObjects/field/Make/options
@@ -5,10 +5,15 @@ EXE_INC = \
     -I$(LIB_SRC)/fileFormats/lnInclude \
     -I$(LIB_SRC)/sampling/lnInclude \
     -I$(LIB_SRC)/surfMesh/lnInclude \
+    -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
+    -I$(LIB_SRC)/transportModels \
+    -I$(LIB_SRC)/transportModels/compressible/lnInclude \
     -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude
 
 LIB_LIBS = \
     -lfiniteVolume \
+    -lfluidThermophysicalModels \
+    -lcompressibleTransportModels \
     -lturbulenceModels \
     -lmeshTools \
     -lsurfMesh \
diff --git a/tutorials/compressible/sonicFoam/laminar/forwardStep/system/controlDict b/tutorials/compressible/sonicFoam/laminar/forwardStep/system/controlDict
index 3fc5df7bb9896eb706351449d3095daa5b796449..caa6bae1aed87fe62a7d861aa09cca0c63b12d31 100644
--- a/tutorials/compressible/sonicFoam/laminar/forwardStep/system/controlDict
+++ b/tutorials/compressible/sonicFoam/laminar/forwardStep/system/controlDict
@@ -45,5 +45,17 @@ timePrecision   6;
 
 runTimeModifiable true;
 
+functions
+{
+    libs ("libfieldFunctionObjects.so");
+
+    Ma
+    {
+        type            MachNo;
+        executeControl  writeTime;
+        writeControl    writeTime;
+    }
+}
+
 
 // ************************************************************************* //