diff --git a/src/thermophysicalModels/reactionThermo/Make/files b/src/thermophysicalModels/reactionThermo/Make/files
index 57f14fc0d..8870103df 100644
--- a/src/thermophysicalModels/reactionThermo/Make/files
+++ b/src/thermophysicalModels/reactionThermo/Make/files
@@ -19,4 +19,6 @@ derivedFvPatchFields/fixedUnburntEnthalpy/fixedUnburntEnthalpyFvPatchScalarField
derivedFvPatchFields/gradientUnburntEnthalpy/gradientUnburntEnthalpyFvPatchScalarField.C
derivedFvPatchFields/mixedUnburntEnthalpy/mixedUnburntEnthalpyFvPatchScalarField.C
+functionObjects/moleFractions/moleFractionsFunctionObjects.C
+
LIB = $(FOAM_LIBBIN)/libreactionThermophysicalModels
diff --git a/src/thermophysicalModels/reactionThermo/functionObjects/moleFractions/moleFractions.C b/src/thermophysicalModels/reactionThermo/functionObjects/moleFractions/moleFractions.C
new file mode 100644
index 000000000..4ae994033
--- /dev/null
+++ b/src/thermophysicalModels/reactionThermo/functionObjects/moleFractions/moleFractions.C
@@ -0,0 +1,144 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / 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 .
+
+\*---------------------------------------------------------------------------*/
+
+#include "moleFractions.H"
+#include "basicThermo.H"
+
+// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
+
+template
+void Foam::moleFractions::calculateMoleFractions()
+{
+ const ThermoType& thermo =
+ mesh_.lookupObject(basicThermo::dictName);
+
+ const PtrList& Y = thermo.composition().Y();
+
+ const volScalarField W(thermo.composition().W());
+
+ forAll(Y, i)
+ {
+ X_[i] = W*Y[i]/thermo.composition().W(i);
+ }
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+template
+Foam::moleFractions::moleFractions
+(
+ const word& name,
+ const objectRegistry& obr,
+ const dictionary& dict,
+ const bool loadFromFiles
+)
+:
+ functionObjectFile(obr, name),
+ name_(name),
+ mesh_(refCast(obr))
+{
+ if (mesh_.foundObject(basicThermo::dictName))
+ {
+ const ThermoType& thermo =
+ mesh_.lookupObject(basicThermo::dictName);
+
+ const PtrList& Y = thermo.composition().Y();
+
+ X_.setSize(Y.size());
+
+ forAll(Y, i)
+ {
+ X_.set
+ (
+ i,
+ new volScalarField
+ (
+ IOobject
+ (
+ "X_" + Y[i].name(),
+ mesh_.time().timeName(),
+ mesh_,
+ IOobject::NO_READ,
+ IOobject::AUTO_WRITE
+ ),
+ mesh_,
+ dimensionedScalar("X", dimless, 0)
+ )
+ );
+ }
+
+ calculateMoleFractions();
+ }
+ else
+ {
+ FatalErrorInFunction
+ << "Cannot find thermodynamics model of type "
+ << ThermoType::typeName
+ << exit(FatalError);
+ }
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
+
+template
+Foam::moleFractions::~moleFractions()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+template
+void Foam::moleFractions::read
+(
+ const dictionary& dict
+)
+{}
+
+
+template
+void Foam::moleFractions::execute()
+{
+ calculateMoleFractions();
+}
+
+
+template
+void Foam::moleFractions::end()
+{}
+
+
+template
+void Foam::moleFractions::timeSet()
+{}
+
+
+template
+void Foam::moleFractions::write()
+{}
+
+
+// ************************************************************************* //
diff --git a/src/thermophysicalModels/reactionThermo/functionObjects/moleFractions/moleFractions.H b/src/thermophysicalModels/reactionThermo/functionObjects/moleFractions/moleFractions.H
new file mode 100644
index 000000000..b699d1600
--- /dev/null
+++ b/src/thermophysicalModels/reactionThermo/functionObjects/moleFractions/moleFractions.H
@@ -0,0 +1,174 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / 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 .
+
+Class
+ Foam::moleFractions
+
+Description
+ This function object calculates mole-fraction fields from the mass-fraction
+ fields of the psi/rhoReactionThermo and caches them for output and further
+ post-processing.
+
+ The names of the mole-fraction fields are obtained from the corresponding
+ mass-fraction fields prepended by "X_"
+
+ Example of function object specification:
+ \verbatim
+ moleFractions
+ {
+ type psiReactionThermoMoleFractions;
+ }
+ \endverbatim
+ or
+ \verbatim
+ moleFractions
+ {
+ type rhoReactionThermoMoleFractions;
+ }
+ \endverbatim
+ depending on the thermodynamics package used in the solver.
+
+SeeAlso
+ Foam::functionObject
+ Foam::OutputFilterFunctionObject
+
+SourceFiles
+ moleFractions.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef moleFractions_H
+#define moleFractions_H
+
+#include "functionObjectFile.H"
+#include "volFields.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+ Class moleFractions Declaration
+\*---------------------------------------------------------------------------*/
+
+template
+class moleFractions
+:
+ public functionObjectFile
+{
+ // Private data
+
+ //- Name of moleFractions functionObject
+ word name_;
+
+ //- Reference to the mesh
+ const fvMesh& mesh_;
+
+ //- Species mole fractions
+ PtrList X_;
+
+
+ // Private Member Functions
+
+ //- Calculate the mole fraction fields
+ virtual void calculateMoleFractions();
+
+ //- Disallow default bitwise copy construct
+ moleFractions(const moleFractions&);
+
+ //- Disallow default bitwise assignment
+ void operator=(const moleFractions&);
+
+
+public:
+
+ //- Runtime type information
+ TypeName("moleFractions");
+
+
+ // Constructors
+
+ //- Construct for given objectRegistry and dictionary.
+ // Allow the possibility to load fields from files
+ moleFractions
+ (
+ const word& name,
+ const objectRegistry&,
+ const dictionary&,
+ const bool loadFromFiles = false
+ );
+
+
+ //- Destructor
+ virtual ~moleFractions();
+
+
+ // Member Functions
+
+ //- Return name of the moleFractions functionObject
+ virtual const word& name() const
+ {
+ return name_;
+ }
+
+ //- Read the moleFractions 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 moleFractions 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 Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+# include "moleFractions.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/thermophysicalModels/reactionThermo/functionObjects/moleFractions/moleFractionsFunctionObjects.C b/src/thermophysicalModels/reactionThermo/functionObjects/moleFractions/moleFractionsFunctionObjects.C
new file mode 100644
index 000000000..09c5a1d8c
--- /dev/null
+++ b/src/thermophysicalModels/reactionThermo/functionObjects/moleFractions/moleFractionsFunctionObjects.C
@@ -0,0 +1,76 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / 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 .
+
+\*---------------------------------------------------------------------------*/
+
+#include "moleFractionsFunctionObjects.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ defineTemplateTypeNameAndDebugWithName
+ (
+ moleFractions,
+ "psiReactionThermoMoleFractions",
+ 0
+ );
+
+ defineTemplateTypeNameAndDebugWithName
+ (
+ psiReactionThermoMoleFractionsFunctionObject,
+ "psiReactionThermoMoleFractions",
+ 0
+ );
+
+ addToRunTimeSelectionTable
+ (
+ functionObject,
+ psiReactionThermoMoleFractionsFunctionObject,
+ dictionary
+ );
+
+ defineTemplateTypeNameAndDebugWithName
+ (
+ moleFractions,
+ "rhoReactionThermoMoleFractions",
+ 0
+ );
+
+ defineTemplateTypeNameAndDebugWithName
+ (
+ rhoReactionThermoMoleFractionsFunctionObject,
+ "rhoReactionThermoMoleFractions",
+ 0
+ );
+
+ addToRunTimeSelectionTable
+ (
+ functionObject,
+ rhoReactionThermoMoleFractionsFunctionObject,
+ dictionary
+ );
+}
+
+
+// ************************************************************************* //
diff --git a/src/thermophysicalModels/reactionThermo/functionObjects/moleFractions/moleFractionsFunctionObjects.H b/src/thermophysicalModels/reactionThermo/functionObjects/moleFractions/moleFractionsFunctionObjects.H
new file mode 100644
index 000000000..21092bba3
--- /dev/null
+++ b/src/thermophysicalModels/reactionThermo/functionObjects/moleFractions/moleFractionsFunctionObjects.H
@@ -0,0 +1,61 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / 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 .
+
+Typedef
+ Foam::moleFractionsFunctionObject
+
+Description
+ FunctionObject wrapper around moleFractions to allow
+ it to be created via the functions entry within controlDict.
+
+SourceFiles
+ moleFractionsFunctionObjects.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef moleFractionsFunctionObjects_H
+#define moleFractionsFunctionObjects_H
+
+#include "OutputFilterFunctionObject.H"
+#include "moleFractions.H"
+#include "psiReactionThermo.H"
+#include "rhoReactionThermo.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ typedef OutputFilterFunctionObject>
+ psiReactionThermoMoleFractionsFunctionObject;
+
+
+ typedef OutputFilterFunctionObject>
+ rhoReactionThermoMoleFractionsFunctionObject;
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //