diff --git a/src/regionModels/surfaceFilmModels/submodels/thermo/phaseChangeModel/standardPhaseChange/standardPhaseChange.C b/src/regionModels/surfaceFilmModels/submodels/thermo/phaseChangeModel/standardPhaseChange/standardPhaseChange.C
index 128b529e11e0710eb6904539a64239d40eaf6f98..85c6d473a7a2c86f024d41bd06fdbf2c940bb421 100644
--- a/src/regionModels/surfaceFilmModels/submodels/thermo/phaseChangeModel/standardPhaseChange/standardPhaseChange.C
+++ b/src/regionModels/surfaceFilmModels/submodels/thermo/phaseChangeModel/standardPhaseChange/standardPhaseChange.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2017 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2018 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -26,6 +26,7 @@ License
 #include "standardPhaseChange.H"
 #include "addToRunTimeSelectionTable.H"
 #include "thermoSingleLayer.H"
+#include "zeroField.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -77,7 +78,8 @@ standardPhaseChange::standardPhaseChange
     phaseChangeModel(typeName, film, dict),
     deltaMin_(readScalar(coeffDict_.lookup("deltaMin"))),
     L_(readScalar(coeffDict_.lookup("L"))),
-    TbFactor_(coeffDict_.lookupOrDefault<scalar>("TbFactor", 1.1))
+    TbFactor_(coeffDict_.lookupOrDefault<scalar>("TbFactor", 1.1)),
+    YInfZero_(coeffDict_.lookupOrDefault<Switch>("YInfZero", false))
 {}
 
 
@@ -89,26 +91,28 @@ standardPhaseChange::~standardPhaseChange()
 
 // * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
 
+template<class YInfType>
 void standardPhaseChange::correctModel
 (
     const scalar dt,
     scalarField& availableMass,
     scalarField& dMass,
-    scalarField& dEnergy
+    scalarField& dEnergy,
+    YInfType YInf
 )
 {
     const thermoSingleLayer& film = filmType<thermoSingleLayer>();
 
-    // set local thermo properties
+    // Set local thermo properties
     const SLGThermo& thermo = film.thermo();
     const filmThermoModel& filmThermo = film.filmThermo();
     const label vapId = thermo.carrierId(filmThermo.name());
 
-    // retrieve fields from film model
+    // Retrieve fields from film model
     const scalarField& delta = film.delta();
-    const scalarField& YInf = film.YPrimary()[vapId];
     const scalarField& pInf = film.pPrimary();
     const scalarField& T = film.T();
+    const scalarField& hs = film.hs();
     const scalarField& rho = film.rho();
     const scalarField& rhoInf = film.rhoPrimary();
     const scalarField& muInf = film.muPrimary();
@@ -116,36 +120,44 @@ void standardPhaseChange::correctModel
     const vectorField dU(film.UPrimary() - film.Us());
     const scalarField limMass
     (
-        max(scalar(0.0), availableMass - deltaMin_*rho*magSf)
+        max(scalar(0), availableMass - deltaMin_*rho*magSf)
     );
 
+    // Molecular weight of vapour [kg/kmol]
+    const scalar Wvap = thermo.carrier().W(vapId);
+
+    // Molecular weight of liquid [kg/kmol]
+    const scalar Wliq = filmThermo.W();
+
     forAll(dMass, celli)
     {
+        scalar dm = 0;
+
         if (delta[celli] > deltaMin_)
         {
-            // cell pressure [Pa]
+            // Cell pressure [Pa]
             const scalar pc = pInf[celli];
 
-            // calculate the boiling temperature
+            // Calculate the boiling temperature
             const scalar Tb = filmThermo.Tb(pc);
 
-            // local temperature - impose lower limit of 200 K for stability
+            // Local temperature - impose lower limit of 200 K for stability
             const scalar Tloc = min(TbFactor_*Tb, max(200.0, T[celli]));
 
-            // saturation pressure [Pa]
+            // Saturation pressure [Pa]
             const scalar pSat = filmThermo.pv(pc, Tloc);
 
-            // latent heat [J/kg]
+            // Latent heat [J/kg]
             const scalar hVap = filmThermo.hl(pc, Tloc);
 
-            // calculate mass transfer
+            // Calculate mass transfer
             if (pSat >= 0.95*pc)
             {
-                // boiling
+                // Boiling
                 const scalar Cp = filmThermo.Cp(pc, Tloc);
                 const scalar Tcorr = max(0.0, T[celli] - Tb);
                 const scalar qCorr = limMass[celli]*Cp*(Tcorr);
-                dMass[celli] = qCorr/hVap;
+                dm = qCorr/hVap;
             }
             else
             {
@@ -158,39 +170,59 @@ void standardPhaseChange::correctModel
                 // Reynolds number
                 const scalar Re = rhoInfc*mag(dU[celli])*L_/muInfc;
 
-                // molecular weight of vapour [kg/kmol]
-                const scalar Wvap = thermo.carrier().W(vapId);
-
-                // molecular weight of liquid [kg/kmol]
-                const scalar Wliq = filmThermo.W();
-
-                // vapour mass fraction at interface
+                // Vapour mass fraction at interface
                 const scalar Ys = Wliq*pSat/(Wliq*pSat + Wvap*(pc - pSat));
 
-                // vapour diffusivity [m2/s]
+                // Vapour diffusivity [m2/s]
                 const scalar Dab = filmThermo.D(pc, Tloc);
 
                 // Schmidt number
-                const scalar Sc = muInfc/(rhoInfc*(Dab + ROOTVSMALL));
+                const scalar Sc = muInfc/(rhoInfc*(Dab + rootVSmall));
 
                 // Sherwood number
                 const scalar Sh = this->Sh(Re, Sc);
 
-                // mass transfer coefficient [m/s]
-                const scalar hm = Sh*Dab/(L_ + ROOTVSMALL);
+                // Mass transfer coefficient [m/s]
+                const scalar hm = Sh*Dab/(L_ + rootVSmall);
 
-                // add mass contribution to source
-                dMass[celli] =
-                    dt*magSf[celli]*rhoInfc*hm*(Ys - YInf[celli])/(1.0 - Ys);
+                // Add mass contribution to source
+                dm = dt*magSf[celli]*rhoInfc*hm*(Ys - YInf[celli])/(1.0 - Ys);
             }
 
-            dMass[celli] = min(limMass[celli], max(0.0, dMass[celli]));
-            dEnergy[celli] = dMass[celli]*hVap;
+            dMass[celli] += min(limMass[celli], max(dm, 0));
+
+            // Heat is assumed to be removed by heat-transfer to the wall
+            // so the energy remains unchanged by the phase-change.
+            dEnergy[celli] += dm*hs[celli];
+            // dEnergy[celli] += dm*(hs[celli] + hVap);
         }
     }
 }
 
 
+void standardPhaseChange::correctModel
+(
+    const scalar dt,
+    scalarField& availableMass,
+    scalarField& dMass,
+    scalarField& dEnergy
+)
+{
+    if (YInfZero_)
+    {
+        correctModel(dt, availableMass, dMass, dEnergy, zeroField());
+    }
+    else
+    {
+        const thermoSingleLayer& film = filmType<thermoSingleLayer>();
+        const label vapId = film.thermo().carrierId(film.filmThermo().name());
+        const scalarField& YInf = film.YPrimary()[vapId];
+
+        correctModel(dt, availableMass, dMass, dEnergy, YInf);
+    }
+}
+
+
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 } // End namespace surfaceFilmModels
diff --git a/src/regionModels/surfaceFilmModels/submodels/thermo/phaseChangeModel/standardPhaseChange/standardPhaseChange.H b/src/regionModels/surfaceFilmModels/submodels/thermo/phaseChangeModel/standardPhaseChange/standardPhaseChange.H
index 55007cc6c6aa6a8f82e4970c9217cef52ec1b5e6..96d15ed899b92da7b5430d505b646b9a36a29d23 100644
--- a/src/regionModels/surfaceFilmModels/submodels/thermo/phaseChangeModel/standardPhaseChange/standardPhaseChange.H
+++ b/src/regionModels/surfaceFilmModels/submodels/thermo/phaseChangeModel/standardPhaseChange/standardPhaseChange.H
@@ -79,12 +79,25 @@ protected:
         //  Used to set max limit on temperature to Tb*TbFactor
         const scalar TbFactor_;
 
+        //- Switch to treat YInf as zero
+        Switch YInfZero_;
+
 
     // Protected member functions
 
         //- Return Sherwood number as a function of Reynolds and Schmidt numbers
         scalar Sh(const scalar Re, const scalar Sc) const;
 
+        template<class YInfType>
+        void correctModel
+        (
+            const scalar dt,
+            scalarField& availableMass,
+            scalarField& dMass,
+            scalarField& dEnergy,
+            YInfType YInf
+        );
+
 
 public: