diff --git a/applications/solvers/multiphase/reactingEulerFoam/Allwclean b/applications/solvers/multiphase/reactingEulerFoam/Allwclean
index 2fe4eb69c0e1a0f2a1959bc866580af9971686aa..4ac3e56e70a6c5b6ce27eaafdf2595162746148f 100755
--- a/applications/solvers/multiphase/reactingEulerFoam/Allwclean
+++ b/applications/solvers/multiphase/reactingEulerFoam/Allwclean
@@ -3,6 +3,5 @@ cd "${0%/*}" || exit    # Run from this directory
 
 wclean reactingTwoPhaseEulerFoam
 wclean reactingMultiphaseEulerFoam
-wclean libso functionObjects
 
 #------------------------------------------------------------------------------
diff --git a/applications/solvers/multiphase/reactingEulerFoam/Allwmake b/applications/solvers/multiphase/reactingEulerFoam/Allwmake
index 22b8bfef5ce1dc9b924b11849fe4c2c8b331a18f..afb6570f3afccad85b3fbdd5080f7e0343c72ed1 100755
--- a/applications/solvers/multiphase/reactingEulerFoam/Allwmake
+++ b/applications/solvers/multiphase/reactingEulerFoam/Allwmake
@@ -16,6 +16,5 @@ esac
 
 reactingTwoPhaseEulerFoam/Allwmake $targetType $*
 reactingMultiphaseEulerFoam/Allwmake $targetType $*
-wmake $targetType functionObjects
 
 #------------------------------------------------------------------------------
diff --git a/src/Allwmake b/src/Allwmake
index 812b206ecbfb6a699863635518ba16684e76b6c3..1bcafada44b4e1712650607d67d289244d40078d 100755
--- a/src/Allwmake
+++ b/src/Allwmake
@@ -100,8 +100,9 @@ wmake $targetType engine
 
 conversion/Allwmake $targetType $*
 
-phaseSystemModels/Allwmake $targetType $*
 functionObjects/Allwmake $targetType $*
+phaseSystemModels/Allwmake $targetType $*
+
 
 wmake $targetType lumpedPointMotion
 wmake $targetType sixDoFRigidBodyMotion
diff --git a/src/functionObjects/field/Make/options b/src/functionObjects/field/Make/options
index 03f219f2604201beea9b231148617c8ef13b4342..c24acfb63201d0ff95ac4e860474a2a9bb544fe1 100644
--- a/src/functionObjects/field/Make/options
+++ b/src/functionObjects/field/Make/options
@@ -38,6 +38,4 @@ LIB_LIBS = \
     -lcompressibleTurbulenceModels \
     -lchemistryModel \
     -lreactionThermophysicalModels \
-    -lpairPatchAgglomeration \
-    -ltwoPhaseReactingTurbulenceModels \
-    -lreactingPhaseSystem
+    -lpairPatchAgglomeration
diff --git a/src/functionObjects/field/heatTransferCoeff/heatTransferCoeff.C b/src/functionObjects/field/heatTransferCoeff/heatTransferCoeff.C
index 9f66f0a86c6eb17eeaab813c873afae19871f99c..6a37e30b5a91432df3606ba485d5a984793997f7 100644
--- a/src/functionObjects/field/heatTransferCoeff/heatTransferCoeff.C
+++ b/src/functionObjects/field/heatTransferCoeff/heatTransferCoeff.C
@@ -47,7 +47,7 @@ bool Foam::functionObjects::heatTransferCoeff::calc()
 {
     volScalarField& htc = mesh_.lookupObjectRef<volScalarField>(resultName_);
 
-    htcModelPtr_->calc(htc);
+    htcModelPtr_->calc(htc, htcModelPtr_->q());
 
     return true;
 }
diff --git a/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/ReynoldsAnalogy/ReynoldsAnalogy.C b/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/ReynoldsAnalogy/ReynoldsAnalogy.C
index 3cd1f32642828098d68c9133e8bd6c4fab312a78..a32e632c384d234bcfebcd8e5d0f571ac47ee90d 100644
--- a/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/ReynoldsAnalogy/ReynoldsAnalogy.C
+++ b/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/ReynoldsAnalogy/ReynoldsAnalogy.C
@@ -243,7 +243,11 @@ bool Foam::heatTransferCoeffModels::ReynoldsAnalogy::read
 }
 
 
-void Foam::heatTransferCoeffModels::ReynoldsAnalogy::htc(volScalarField& htc)
+void Foam::heatTransferCoeffModels::ReynoldsAnalogy::htc
+(
+    volScalarField& htc,
+    const FieldField<Field, scalar>& q
+)
 {
     const FieldField<Field, scalar> CfBf(Cf());
     const scalar magU = mag(URef_);
diff --git a/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/ReynoldsAnalogy/ReynoldsAnalogy.H b/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/ReynoldsAnalogy/ReynoldsAnalogy.H
index 3e9b463622dae95eb6e91bc148c4fca462677346..1f227dd77696f57972266452667ed80b2623666e 100644
--- a/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/ReynoldsAnalogy/ReynoldsAnalogy.H
+++ b/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/ReynoldsAnalogy/ReynoldsAnalogy.H
@@ -131,7 +131,11 @@ protected:
         tmp<FieldField<Field, scalar>> Cf() const;
 
         //- Set the heat transfer coefficient
-        virtual void htc(volScalarField& htc);
+        virtual void htc
+        (
+            volScalarField& htc,
+            const FieldField<Field, scalar>& q
+        );
 
 
         //- No copy construct
diff --git a/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/fixedReferenceTemperature/fixedReferenceTemperature.C b/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/fixedReferenceTemperature/fixedReferenceTemperature.C
index d2bd89459aa596930477cb296e4e6b87733ba922..e7f8b7a72ea54539502b0aadd6b4e360bb23a40d 100644
--- a/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/fixedReferenceTemperature/fixedReferenceTemperature.C
+++ b/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/fixedReferenceTemperature/fixedReferenceTemperature.C
@@ -81,10 +81,11 @@ bool Foam::heatTransferCoeffModels::fixedReferenceTemperature::read
 
 void Foam::heatTransferCoeffModels::fixedReferenceTemperature::htc
 (
-    volScalarField& htc
+    volScalarField& htc,
+    const FieldField<Field, scalar>& q
 )
 {
-    const FieldField<Field, scalar> qBf(q());
+    //const FieldField<Field, scalar> qBf(q());
     const volScalarField& T = mesh_.lookupObject<volScalarField>(TName_);
     const volScalarField::Boundary& Tbf = T.boundaryField();
     const scalar eps = ROOTVSMALL;
@@ -92,7 +93,7 @@ void Foam::heatTransferCoeffModels::fixedReferenceTemperature::htc
     volScalarField::Boundary& htcBf = htc.boundaryFieldRef();
     for (const label patchi : patchSet_)
     {
-        htcBf[patchi] = qBf[patchi]/(TRef_ - Tbf[patchi] + eps);
+        htcBf[patchi] = q[patchi]/(TRef_ - Tbf[patchi] + eps);
     }
 }
 
diff --git a/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/fixedReferenceTemperature/fixedReferenceTemperature.H b/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/fixedReferenceTemperature/fixedReferenceTemperature.H
index e5f17ea8da0547b0404c10733f7bf936ee8003e0..589c48b7a3f080af7065eba619abe56800ebea4f 100644
--- a/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/fixedReferenceTemperature/fixedReferenceTemperature.H
+++ b/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/fixedReferenceTemperature/fixedReferenceTemperature.H
@@ -94,7 +94,11 @@ protected:
     // Protected Member Functions
 
         //- Set the heat transfer coefficient
-        virtual void htc(volScalarField& htc);
+        virtual void htc
+        (
+            volScalarField& htc,
+            const FieldField<Field, scalar>& q
+        );
 
         //- No copy construct
         fixedReferenceTemperature(const fixedReferenceTemperature&) = delete;
diff --git a/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/heatTransferCoeffModel/heatTransferCoeffModel.C b/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/heatTransferCoeffModel/heatTransferCoeffModel.C
index 0e078a8d784f11bb210b4bfb963b72041a564978..8f1d013e65a7d99bfcf730acb13eec0ca74f76c9 100644
--- a/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/heatTransferCoeffModel/heatTransferCoeffModel.C
+++ b/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/heatTransferCoeffModel/heatTransferCoeffModel.C
@@ -30,7 +30,6 @@ License
 #include "fluidThermo.H"
 #include "turbulentTransportModel.H"
 #include "turbulentFluidThermoModel.H"
-#include "phaseSystem.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
@@ -91,28 +90,6 @@ Foam::heatTransferCoeffModel::q() const
             q[patchi] = alphabf[patchi]*hebf[patchi].snGrad();
         }
     }
-    else if (mesh_.foundObject<phaseSystem>("phaseProperties"))
-    {
-        const phaseSystem& fluid =
-        (
-            mesh_.lookupObject<phaseSystem>("phaseProperties")
-        );
-
-        for (label patchi : patchSet_)
-        {
-            forAll(fluid.phases(), phasei)
-            {
-                const phaseModel& phase = fluid.phases()[phasei];
-                const fvPatchScalarField& alpha =
-                    phase.boundaryField()[patchi];
-                const volScalarField& he = phase.thermo().he();
-                const volScalarField::Boundary& hebf = he.boundaryField();
-
-                q[patchi] +=
-                    alpha*phase.alphaEff(patchi)()*hebf[patchi].snGrad();
-            }
-        }
-    }
     else
     {
         FatalErrorInFunction
@@ -170,9 +147,13 @@ bool Foam::heatTransferCoeffModel::read(const dictionary& dict)
 }
 
 
-bool Foam::heatTransferCoeffModel::calc(volScalarField& result)
+bool Foam::heatTransferCoeffModel::calc
+(
+    volScalarField& result,
+    const FieldField<Field, scalar>& q
+)
 {
-    htc(result);
+    htc(result, q);
 
     return true;
 }
diff --git a/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/heatTransferCoeffModel/heatTransferCoeffModel.H b/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/heatTransferCoeffModel/heatTransferCoeffModel.H
index d9e9ec13b6f8cf5db686ddd4a78c6bc0c851624b..35ca55a042de5725796b44e610298338895b5891 100644
--- a/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/heatTransferCoeffModel/heatTransferCoeffModel.H
+++ b/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/heatTransferCoeffModel/heatTransferCoeffModel.H
@@ -64,9 +64,10 @@ class fvMesh;
 
 class heatTransferCoeffModel
 {
-protected:
 
-    // Protected Data
+public:
+
+    // Public Data
 
         //- Mesh reference
         const fvMesh& mesh_;
@@ -81,12 +82,17 @@ protected:
         word qrName_;
 
 
+protected:
+
     // Protected Member Functions
 
-        tmp<FieldField<Field, scalar>> q() const;
 
         //- Set the heat transfer coefficient
-        virtual void htc(volScalarField& htc) = 0;
+        virtual void htc
+        (
+            volScalarField& htc,
+            const FieldField<Field, scalar>& q
+        ) = 0;
 
         //- No copy construct
         heatTransferCoeffModel(const heatTransferCoeffModel&) = delete;
@@ -148,7 +154,15 @@ public:
         //- Read from dictionary
         virtual bool read(const dictionary& dict);
 
-        virtual bool calc(volScalarField& result);
+        virtual bool calc
+        (
+            volScalarField& result,
+            const FieldField<Field, scalar>& q
+        );
+
+        //- Return q
+        tmp<FieldField<Field, scalar>> q() const;
+
 };
 
 
diff --git a/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/localReferenceTemperature/localReferenceTemperature.C b/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/localReferenceTemperature/localReferenceTemperature.C
index b26f01502eb7c5e96287984b2ede80bbe227ef13..841d011d497fcf82771a116370067b8ae540f5c1 100644
--- a/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/localReferenceTemperature/localReferenceTemperature.C
+++ b/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/localReferenceTemperature/localReferenceTemperature.C
@@ -74,10 +74,11 @@ bool Foam::heatTransferCoeffModels::localReferenceTemperature::read
 
 void Foam::heatTransferCoeffModels::localReferenceTemperature::htc
 (
-    volScalarField& htc
+    volScalarField& htc,
+    const FieldField<Field, scalar>& q
 )
 {
-    const FieldField<Field, scalar> qBf(q());
+    //const FieldField<Field, scalar> qBf(q());
     const volScalarField& T = mesh_.lookupObject<volScalarField>(TName_);
     const volScalarField::Boundary& Tbf = T.boundaryField();
     const scalar eps = ROOTVSMALL;
@@ -87,7 +88,7 @@ void Foam::heatTransferCoeffModels::localReferenceTemperature::htc
     for (const label patchi : patchSet_)
     {
         const scalarField Tc(Tbf[patchi].patchInternalField());
-        htcBf[patchi] = qBf[patchi]/(Tc - Tbf[patchi] + eps);
+        htcBf[patchi] = q[patchi]/(Tc - Tbf[patchi] + eps);
     }
 }
 
diff --git a/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/localReferenceTemperature/localReferenceTemperature.H b/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/localReferenceTemperature/localReferenceTemperature.H
index f7578eec4d98b09280ace3eedce0fb4147b1ad46..77f2f7b980e0b6642f638c2d16ace0008ce5d960 100644
--- a/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/localReferenceTemperature/localReferenceTemperature.H
+++ b/src/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/localReferenceTemperature/localReferenceTemperature.H
@@ -95,7 +95,11 @@ protected:
     // Protected Member Functions
 
         //- Set the heat transfer coefficient
-        virtual void htc(volScalarField& htc);
+        virtual void htc
+        (
+            volScalarField& htc,
+            const FieldField<Field, scalar>& q
+        );
 
 
 public:
diff --git a/src/phaseSystemModels/Allwclean b/src/phaseSystemModels/Allwclean
index ab4d65ca0355012639caaaac67fb7badde8bea01..cc8f941470c33b473e1a9edcfaa31965b31e6fe8 100755
--- a/src/phaseSystemModels/Allwclean
+++ b/src/phaseSystemModels/Allwclean
@@ -11,5 +11,6 @@ wclean libso reactingEulerFoam/reactingMultiphaseEulerFoam/multiphaseCompressibl
 
 wclean libso reactingEulerFoam/reactingTwoPhaseEulerFoam/twoPhaseSystem
 wclean libso reactingEulerFoam/reactingTwoPhaseEulerFoam/twoPhaseCompressibleTurbulenceModels
+wclean libso  reactingEulerFoam/functionObjects
 
 #------------------------------------------------------------------------------
diff --git a/src/phaseSystemModels/Allwmake b/src/phaseSystemModels/Allwmake
index 686604a701fcdf2f2aea66116ec7b4f736e64608..c4a18999fbf43a0bbad85b683126d09f9b0dd1c7 100755
--- a/src/phaseSystemModels/Allwmake
+++ b/src/phaseSystemModels/Allwmake
@@ -28,4 +28,6 @@ wmake $targetType  reactingEulerFoam/reactingTwoPhaseEulerFoam/twoPhaseCompressi
 
 wmake $targetType  reactingEulerFoam/phaseSystems
 
+wmake $targetType  reactingEulerFoam/functionObjects
+
 #------------------------------------------------------------------------------
diff --git a/applications/solvers/multiphase/reactingEulerFoam/functionObjects/Make/files b/src/phaseSystemModels/reactingEulerFoam/functionObjects/Make/files
similarity index 72%
rename from applications/solvers/multiphase/reactingEulerFoam/functionObjects/Make/files
rename to src/phaseSystemModels/reactingEulerFoam/functionObjects/Make/files
index ca7d02162dbd5f5feb601c39c9fae101549aa696..567c9619ea0ba90bf3f7aef88cb3150f079ee723 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/functionObjects/Make/files
+++ b/src/phaseSystemModels/reactingEulerFoam/functionObjects/Make/files
@@ -1,4 +1,5 @@
 sizeDistribution/sizeDistribution.C
 phaseForces/phaseForces.C
+reactingEulerHtcModel/reactingEulerHtcModel.C
 
 LIB = $(FOAM_LIBBIN)/libreactingEulerFoamFunctionObjects
diff --git a/applications/solvers/multiphase/reactingEulerFoam/functionObjects/Make/options b/src/phaseSystemModels/reactingEulerFoam/functionObjects/Make/options
similarity index 100%
rename from applications/solvers/multiphase/reactingEulerFoam/functionObjects/Make/options
rename to src/phaseSystemModels/reactingEulerFoam/functionObjects/Make/options
diff --git a/applications/solvers/multiphase/reactingEulerFoam/functionObjects/phaseForces/phaseForces.C b/src/phaseSystemModels/reactingEulerFoam/functionObjects/phaseForces/phaseForces.C
similarity index 100%
rename from applications/solvers/multiphase/reactingEulerFoam/functionObjects/phaseForces/phaseForces.C
rename to src/phaseSystemModels/reactingEulerFoam/functionObjects/phaseForces/phaseForces.C
diff --git a/applications/solvers/multiphase/reactingEulerFoam/functionObjects/phaseForces/phaseForces.H b/src/phaseSystemModels/reactingEulerFoam/functionObjects/phaseForces/phaseForces.H
similarity index 100%
rename from applications/solvers/multiphase/reactingEulerFoam/functionObjects/phaseForces/phaseForces.H
rename to src/phaseSystemModels/reactingEulerFoam/functionObjects/phaseForces/phaseForces.H
diff --git a/src/phaseSystemModels/reactingEulerFoam/functionObjects/reactingEulerHtcModel/reactingEulerHtcModel.C b/src/phaseSystemModels/reactingEulerFoam/functionObjects/reactingEulerHtcModel/reactingEulerHtcModel.C
new file mode 100644
index 0000000000000000000000000000000000000000..c6012464ad8f3db28049bdf884862e0268bf9452
--- /dev/null
+++ b/src/phaseSystemModels/reactingEulerFoam/functionObjects/reactingEulerHtcModel/reactingEulerHtcModel.C
@@ -0,0 +1,182 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | www.openfoam.com
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+    Copyright (C) 2020 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+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 "reactingEulerHtcModel.H"
+#include "phaseSystem.H"
+#include "addToRunTimeSelectionTable.H"
+#include "dictionary.H"
+
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace functionObjects
+{
+    defineTypeNameAndDebug(reactingEulerHtcModel, 0);
+    addToRunTimeSelectionTable
+        (functionObject, reactingEulerHtcModel, dictionary);
+}
+}
+
+// * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * * //
+
+
+Foam::tmp<Foam::FieldField<Foam::Field, Foam::scalar>>
+Foam::functionObjects::reactingEulerHtcModel::q() const
+{
+
+    const fvMesh& mesh = htcModelPtr_->mesh_;
+
+    const volScalarField& T =
+        mesh.lookupObject<volScalarField>(htcModelPtr_->TName_);
+
+    const volScalarField::Boundary& Tbf = T.boundaryField();
+
+    auto tq = tmp<FieldField<Field, scalar>>::New(Tbf.size());
+    auto& q = tq.ref();
+
+    forAll(q, patchi)
+    {
+        q.set(patchi, new Field<scalar>(Tbf[patchi].size(), Zero));
+    }
+
+    if (mesh.foundObject<phaseSystem>("phaseProperties"))
+    {
+        const phaseSystem& fluid =
+        (
+            mesh.lookupObject<phaseSystem>("phaseProperties")
+        );
+
+        for (label patchi : htcModelPtr_->patchSet_)
+        {
+            forAll(fluid.phases(), phasei)
+            {
+                const phaseModel& phase = fluid.phases()[phasei];
+                const fvPatchScalarField& alpha =
+                    phase.boundaryField()[patchi];
+                const volScalarField& he = phase.thermo().he();
+                const volScalarField::Boundary& hebf = he.boundaryField();
+
+                q[patchi] +=
+                    alpha*phase.alphaEff(patchi)()*hebf[patchi].snGrad();
+            }
+        }
+    }
+    else
+    {
+        FatalErrorInFunction
+            << "Unable to find a valid phaseSystem to evaluate q"
+            << exit(FatalError);
+    }
+
+    // Add radiative heat flux contribution if present
+
+    const volScalarField* qrPtr =
+        mesh.cfindObject<volScalarField>(htcModelPtr_->qrName_);
+
+    if (qrPtr)
+    {
+        const volScalarField::Boundary& qrbf = qrPtr->boundaryField();
+
+        for (const label patchi : htcModelPtr_->patchSet_)
+        {
+            q[patchi] += qrbf[patchi];
+        }
+    }
+
+    return tq;
+}
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+bool Foam::functionObjects::reactingEulerHtcModel::calc()
+{
+    volScalarField& htc =
+        htcModelPtr_->mesh_.lookupObjectRef<volScalarField>(resultName_);
+
+    htcModelPtr_->calc(htc, q());
+
+    return true;
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::functionObjects::reactingEulerHtcModel::reactingEulerHtcModel
+(
+    const word& name,
+    const Time& runTime,
+    const dictionary& dict
+)
+:
+    fieldExpression(name, runTime, dict),
+    htcModelPtr_()
+{
+    read(dict);
+
+    setResultName(typeName, name + ":htc:" + htcModelPtr_->type());
+
+    volScalarField* heatTransferCoeffPtr
+    (
+        new volScalarField
+        (
+            IOobject
+            (
+                resultName_,
+                mesh_.time().timeName(),
+                mesh_,
+                IOobject::NO_READ,
+                IOobject::NO_WRITE
+            ),
+            mesh_,
+            dimensionedScalar(dimPower/dimArea/dimTemperature, Zero)
+        )
+    );
+
+    mesh_.objectRegistry::store(heatTransferCoeffPtr);
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+bool Foam::functionObjects::reactingEulerHtcModel::read(const dictionary& dict)
+{
+    if (fieldExpression::read(dict))
+    {
+        htcModelPtr_ =
+            heatTransferCoeffModel::New(dict, mesh_, fieldName_);
+
+        htcModelPtr_->read(dict);
+
+        return true;
+    }
+
+    return false;
+}
+
+// ************************************************************************* //
diff --git a/src/phaseSystemModels/reactingEulerFoam/functionObjects/reactingEulerHtcModel/reactingEulerHtcModel.H b/src/phaseSystemModels/reactingEulerFoam/functionObjects/reactingEulerHtcModel/reactingEulerHtcModel.H
new file mode 100644
index 0000000000000000000000000000000000000000..e989b2ef909dc06f81c3e154a954c6bfb42a07cd
--- /dev/null
+++ b/src/phaseSystemModels/reactingEulerFoam/functionObjects/reactingEulerHtcModel/reactingEulerHtcModel.H
@@ -0,0 +1,128 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | www.openfoam.com
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+    Copyright (C) 2020 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+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/>.
+
+Namespace
+    Foam::reactingEulerHtcModel
+
+Description
+    A heat transfer coefficient for reactingEuler solvers
+
+Class
+    Foam::reactingEulerHtcModel
+
+SourceFiles
+    reactingEulerHtcModel.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef reactingEulerHtcModel_H
+#define reactingEulerHtcModel_H
+
+#include "HashSet.H"
+#include "volFields.H"
+#include "fieldExpression.H"
+#include "runTimeSelectionTables.H"
+#include "heatTransferCoeffModel.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+namespace functionObjects
+{
+
+/*---------------------------------------------------------------------------*\
+                   Class reactingEulerHtcModel Declaration
+\*---------------------------------------------------------------------------*/
+
+class reactingEulerHtcModel
+:
+    public fieldExpression
+{
+private:
+
+    //- Heat transfer coefficient model
+    autoPtr<heatTransferCoeffModel> htcModelPtr_;
+
+
+    // Private Member Functions
+
+        //- No copy construct
+        reactingEulerHtcModel(const reactingEulerHtcModel&) = delete;
+
+        //- No copy assignment
+        void operator=(const reactingEulerHtcModel&) = delete;
+
+
+protected:
+
+        //- Calculate the heat transfer coefficient field and return true
+        // if successful
+        virtual bool calc();
+
+        //- Calculate heat flux
+        tmp<FieldField<Field, scalar>> q() const;
+
+
+
+public:
+
+    //- Runtime type information
+    TypeName("reactingEulerHtcModel");
+
+
+    // Constructors
+
+        //- Construct from components
+        reactingEulerHtcModel
+        (
+            const word& name,
+            const Time& runTime,
+            const dictionary& dict
+        );
+
+
+    //- Destructor
+    virtual ~reactingEulerHtcModel() = default;
+
+    // Member Functions
+
+        //- Read the heatTransferCoeff data
+        virtual bool read(const dictionary&);
+
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace functionObjects
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/solvers/multiphase/reactingEulerFoam/functionObjects/sizeDistribution/sizeDistribution.C b/src/phaseSystemModels/reactingEulerFoam/functionObjects/sizeDistribution/sizeDistribution.C
similarity index 100%
rename from applications/solvers/multiphase/reactingEulerFoam/functionObjects/sizeDistribution/sizeDistribution.C
rename to src/phaseSystemModels/reactingEulerFoam/functionObjects/sizeDistribution/sizeDistribution.C
diff --git a/applications/solvers/multiphase/reactingEulerFoam/functionObjects/sizeDistribution/sizeDistribution.H b/src/phaseSystemModels/reactingEulerFoam/functionObjects/sizeDistribution/sizeDistribution.H
similarity index 100%
rename from applications/solvers/multiphase/reactingEulerFoam/functionObjects/sizeDistribution/sizeDistribution.H
rename to src/phaseSystemModels/reactingEulerFoam/functionObjects/sizeDistribution/sizeDistribution.H
diff --git a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/system/controlDict b/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/system/controlDict
index eb8dd8a8e6405de9a2fda71346753983372f1b68..13683da17deedf67a6991cf80f5b3135af6f74bf 100644
--- a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/system/controlDict
+++ b/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/system/controlDict
@@ -49,4 +49,19 @@ adjustTimeStep  no;
 
 maxCo           0.5;
 
+functions
+{
+    htc
+    {
+        type            heatTransferCoeff;
+        libs            (fieldFunctionObjects);
+        field           T;
+        writeControl    outputTime;
+        writeInterval   1;
+        htcModel        fixedReferenceTemperature;
+        patches         (ceiling);
+        TRef            373;
+    }
+}
+
 // ************************************************************************* //
diff --git a/tutorials/heatTransfer/chtMultiRegionTwoPhaseEulerFoam/solidQuenching2D/system/controlDict b/tutorials/heatTransfer/chtMultiRegionTwoPhaseEulerFoam/solidQuenching2D/system/controlDict
index 9434d196ca6415a0bdf64953cc9176f042e0ccf6..bf2aa0735055959b6800045c1ee469eb5bd83ac7 100644
--- a/tutorials/heatTransfer/chtMultiRegionTwoPhaseEulerFoam/solidQuenching2D/system/controlDict
+++ b/tutorials/heatTransfer/chtMultiRegionTwoPhaseEulerFoam/solidQuenching2D/system/controlDict
@@ -34,7 +34,7 @@ deltaT          1e-6;
 
 writeControl    adjustable;
 
-writeInterval   0.1;
+writeInterval   0.01;
 
 purgeWrite      0;
 
@@ -63,8 +63,8 @@ functions
 {
     htc
     {
-        type            heatTransferCoeff;
-        libs            (fieldFunctionObjects);
+        type            reactingEulerHtcModel;
+        libs            (reactingEulerFoamFunctionObjects);
         region          water;
         field           T.liquid;
         writeControl    outputTime;
@@ -74,6 +74,7 @@ functions
         TRef            373;
     }
 
+    
     htcSurfaceFieldValue
     {
         type            surfaceFieldValue;
@@ -94,8 +95,9 @@ functions
 
         operation       areaAverage;
 
-        fields          ( heatTransferCoeff(T.liquid) );
+        fields          ( reactingEulerHtcModel(T.liquid) );
     }
+    
 }
 
 // ************************************************************************* //