diff --git a/src/functionObjects/solvers/scalarTransport/scalarTransport.C b/src/functionObjects/solvers/scalarTransport/scalarTransport.C
index 4e7cfb07762a6f5e65eb285af15df6f191444383..d8fef5a3123b12c4e449c8308164a0d7f8b4d22e 100644
--- a/src/functionObjects/solvers/scalarTransport/scalarTransport.C
+++ b/src/functionObjects/solvers/scalarTransport/scalarTransport.C
@@ -74,6 +74,11 @@ Foam::volScalarField& Foam::functionObjects::scalarTransport::transportedField()
             )
         );
         store(fieldName_, tfldPtr);
+
+        if (phaseName_ != "none")
+        {
+            mesh_.setFluxRequired(fieldName_);
+        }
     }
 
     return const_cast<volScalarField&>
@@ -86,8 +91,7 @@ Foam::volScalarField& Foam::functionObjects::scalarTransport::transportedField()
 Foam::tmp<Foam::volScalarField> Foam::functionObjects::scalarTransport::D
 (
     const volScalarField& s,
-    const surfaceScalarField& phi,
-    const volScalarField& alpha
+    const surfaceScalarField& phi
 ) const
 {
     typedef incompressible::turbulenceModel icoModel;
@@ -95,8 +99,6 @@ Foam::tmp<Foam::volScalarField> Foam::functionObjects::scalarTransport::D
 
     word Dname("D" + s.name());
 
-    volScalarField phaseMask(pos(alpha - 0.99));
-
     if (constantD_)
     {
         tmp<volScalarField> tD
@@ -116,7 +118,7 @@ Foam::tmp<Foam::volScalarField> Foam::functionObjects::scalarTransport::D
             )
         );
 
-        return phaseMask*tD;
+        return tD;
     }
     else if (nutName_ != "none")
     {
@@ -125,7 +127,7 @@ Foam::tmp<Foam::volScalarField> Foam::functionObjects::scalarTransport::D
 
         return tmp<volScalarField>
         (
-            new volScalarField(Dname, phaseMask*nutMean)
+            new volScalarField(Dname, nutMean)
         );
     }
     else if (foundObject<icoModel>(turbulenceModel::propertiesName))
@@ -137,7 +139,7 @@ Foam::tmp<Foam::volScalarField> Foam::functionObjects::scalarTransport::D
 
         return tmp<volScalarField>
         (
-             new volScalarField(Dname, phaseMask*model.nuEff())
+             new volScalarField(Dname, model.nuEff())
         );
     }
     else if (foundObject<cmpModel>(turbulenceModel::propertiesName))
@@ -149,7 +151,7 @@ Foam::tmp<Foam::volScalarField> Foam::functionObjects::scalarTransport::D
 
         return tmp<volScalarField>
         (
-             new volScalarField(Dname, phaseMask*model.muEff())
+             new volScalarField(Dname, model.muEff())
         );
     }
     else
@@ -268,7 +270,8 @@ bool Foam::functionObjects::scalarTransport::execute()
                 mesh_.time().timeName(),
                 mesh_.time(),
                 IOobject::NO_READ,
-                IOobject::NO_WRITE
+                IOobject::NO_WRITE,
+                false
             ),
             mesh_,
             dimensionedScalar("tPhi", dimMass/dimTime, 0.0)
@@ -288,7 +291,7 @@ bool Foam::functionObjects::scalarTransport::execute()
         phi.dimensions().reset(dimVolume/dimTime);
     }
 
-    //Obtain phi from phiName or constructed from UPhiName
+    // Obtain phi from phiName or constructed from UPhiName
     if (phiName_ != "none")
     {
         phi = const_cast<surfaceScalarField&>
@@ -314,37 +317,10 @@ bool Foam::functionObjects::scalarTransport::execute()
         }
     }
 
-    tmp<volScalarField> tPhaseMask
-    (
-        new volScalarField
-        (
-            IOobject
-            (
-                "tPhaseMask",
-                mesh_.time().timeName(),
-                mesh_.time(),
-                IOobject::NO_READ,
-                IOobject::NO_WRITE
-            ),
-            mesh_,
-            dimensionedScalar("tPhaseMask", dimless, 1.0)
-        )
-    );
-    volScalarField& phaseMask = tPhaseMask.ref();
-
-    // Set phaseMask if s is transported in a phase
-    if (phaseName_ != "none")
-    {
-        const volScalarField& alpha =
-            mesh_.lookupObject<volScalarField>(phaseName_);
-
-        phaseMask = alpha;
-    }
-
     volScalarField& s = transportedField();
 
     // Calculate the diffusivity
-    volScalarField D(this->D(s, phi, phaseMask));
+    volScalarField D(this->D(s, phi));
 
     word divScheme("div(phi," + schemesField_ + ")");
     word laplacianScheme("laplacian(" + D.name() + "," + schemesField_ + ")");
@@ -356,7 +332,7 @@ bool Foam::functionObjects::scalarTransport::execute()
         relaxCoeff = mesh_.equationRelaxationFactor(schemesField_);
     }
 
-    // two phase scalar transport
+    // Two phase scalar transport
     if (phaseName_ != "none")
     {
         const volScalarField& alpha =
@@ -365,6 +341,7 @@ bool Foam::functionObjects::scalarTransport::execute()
         const surfaceScalarField& limitedPhiAlpa =
             mesh_.lookupObject<surfaceScalarField>(phasePhiCompressedName_);
 
+        D *= pos(alpha - 0.99);
 /*
         surfaceScalarField phic(2.0*mag(phi/mesh_.magSf()));
 
@@ -402,8 +379,8 @@ bool Foam::functionObjects::scalarTransport::execute()
         // Reset D dimensions consistent with limitedPhiAlpa
         D.dimensions().reset(limitedPhiAlpa.dimensions()/dimLength);
 
-        tmp<surfaceScalarField> tTPhiUD;
         // Solve
+        tmp<surfaceScalarField> tTPhiUD;
         for (label i = 0; i <= nCorr_; i++)
         {
             fvScalarMatrix sEqn
diff --git a/src/functionObjects/solvers/scalarTransport/scalarTransport.H b/src/functionObjects/solvers/scalarTransport/scalarTransport.H
index 66b8f14790d03695a49ecc9f1c9c515ccfbe0e71..4b54572dc341d39f0da8f8931f9976d215b9018a 100644
--- a/src/functionObjects/solvers/scalarTransport/scalarTransport.H
+++ b/src/functionObjects/solvers/scalarTransport/scalarTransport.H
@@ -212,8 +212,7 @@ class scalarTransport
         tmp<volScalarField> D
         (
             const volScalarField& s,
-            const surfaceScalarField& phi,
-            const volScalarField& alpha
+            const surfaceScalarField& phi
         ) const;
 
         //- Disallow default bitwise copy construct