diff --git a/applications/solvers/DNS/dnsFoam/dnsFoam.C b/applications/solvers/DNS/dnsFoam/dnsFoam.C
index cf5da63f97f20cabc78e6b2bc555b2e58969bc88..e7011cdb75b4eb83e34de6f6205015b34068a4da 100644
--- a/applications/solvers/DNS/dnsFoam/dnsFoam.C
+++ b/applications/solvers/DNS/dnsFoam/dnsFoam.C
@@ -55,6 +55,13 @@ int main(int argc, char *argv[])
 
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+    label ntot = 1;
+    forAll(K.nn(), idim)
+    {
+        ntot *= K.nn()[idim];
+    }
+    const scalar recRootN = 1.0/Foam::sqrt(scalar(ntot));
+
     Info<< nl << "Starting time loop" << endl;
 
     while (runTime.loop())
diff --git a/applications/solvers/DNS/dnsFoam/readTurbulenceProperties.H b/applications/solvers/DNS/dnsFoam/readTurbulenceProperties.H
index 0b44eed10cfea2bf319a713ac20a21240e9a5832..cb718fcd0b04aaa3adbe289963ce313093e37380 100644
--- a/applications/solvers/DNS/dnsFoam/readTurbulenceProperties.H
+++ b/applications/solvers/DNS/dnsFoam/readTurbulenceProperties.H
@@ -20,9 +20,3 @@
     Kmesh K(mesh);
     UOprocess forceGen(K, runTime.deltaTValue(), turbulenceProperties);
 
-    label ntot = 1;
-    forAll(K.nn(), idim)
-    {
-        ntot *= K.nn()[idim];
-    }
-    const scalar recRootN = 1.0/Foam::sqrt(scalar(ntot));
diff --git a/applications/solvers/combustion/fireFoam/createFields.H b/applications/solvers/combustion/fireFoam/createFields.H
index d6f83561b37512e12040e83ddd08f1cabd273cf7..ded747d608ba07be040f43ca48154fe43faf5fba 100644
--- a/applications/solvers/combustion/fireFoam/createFields.H
+++ b/applications/solvers/combustion/fireFoam/createFields.H
@@ -102,28 +102,6 @@ forAll(Y, i)
 }
 fields.add(thermo.he());
 
-IOdictionary additionalControlsDict
-(
-    IOobject
-    (
-        "additionalControls",
-        runTime.constant(),
-        mesh,
-        IOobject::MUST_READ_IF_MODIFIED,
-        IOobject::NO_WRITE
-    )
-);
-
-bool solvePrimaryRegion
-(
-    additionalControlsDict.lookupOrDefault("solvePrimaryRegion", true)
-);
-
-bool solvePyrolysisRegion
-(
-    additionalControlsDict.lookupOrDefault("solvePyrolysisRegion", true)
-);
-
 volScalarField Qdot
 (
     IOobject
diff --git a/applications/solvers/combustion/fireFoam/createRegionControls.H b/applications/solvers/combustion/fireFoam/createRegionControls.H
new file mode 100644
index 0000000000000000000000000000000000000000..6734f6168ee8e7bd737e4388e35aaa7f50ab9f34
--- /dev/null
+++ b/applications/solvers/combustion/fireFoam/createRegionControls.H
@@ -0,0 +1,23 @@
+IOdictionary additionalControlsDict
+(
+    IOobject
+    (
+        "additionalControls",
+        runTime.constant(),
+        mesh,
+        IOobject::MUST_READ_IF_MODIFIED,
+        IOobject::NO_WRITE
+    )
+);
+
+bool solvePrimaryRegion
+(
+    additionalControlsDict.lookupOrDefault("solvePrimaryRegion", true)
+);
+
+bool solvePyrolysisRegion
+(
+    additionalControlsDict.lookupOrDefault("solvePyrolysisRegion", true)
+);
+
+scalar maxDi = pyrolysis.maxDiff();
diff --git a/applications/solvers/combustion/fireFoam/fireFoam.C b/applications/solvers/combustion/fireFoam/fireFoam.C
index 7a3c3c1372c33ccef4a3dc1ca8dee59d32261338..199d4103a38f053cb068ab778f926f51e329fa9a 100644
--- a/applications/solvers/combustion/fireFoam/fireFoam.C
+++ b/applications/solvers/combustion/fireFoam/fireFoam.C
@@ -63,7 +63,7 @@ int main(int argc, char *argv[])
     #include "createTimeControls.H"
     #include "compressibleCourantNo.H"
     #include "setInitialDeltaT.H"
-    #include "readPyrolysisTimeControls.H"
+    #include "createRegionControls.H"
 
     turbulence->validate();
 
diff --git a/applications/solvers/combustion/fireFoam/readPyrolysisTimeControls.H b/applications/solvers/combustion/fireFoam/readPyrolysisTimeControls.H
deleted file mode 100644
index c8ba13c886e115de72ce6d1e5f443a5b37d19e8b..0000000000000000000000000000000000000000
--- a/applications/solvers/combustion/fireFoam/readPyrolysisTimeControls.H
+++ /dev/null
@@ -1,34 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 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/>.
-
-Global
-    readPyrolysisTimeControls
-
-Description
-
-
-\*---------------------------------------------------------------------------*/
-
-scalar maxDi = pyrolysis.maxDiff();
-
-// ************************************************************************* //
diff --git a/applications/solvers/incompressible/simpleFoam/overSimpleFoam/createFields.H b/applications/solvers/incompressible/simpleFoam/overSimpleFoam/createFields.H
index b3d40776f4f5d91425a423933cd9911c692e60f8..c8083c49488f96fdc06e4af54002cdbb700be266 100644
--- a/applications/solvers/incompressible/simpleFoam/overSimpleFoam/createFields.H
+++ b/applications/solvers/incompressible/simpleFoam/overSimpleFoam/createFields.H
@@ -44,4 +44,3 @@ autoPtr<incompressible::turbulenceModel> turbulence
 
 #include "createMRF.H"
 
-#include "createOversetFields.H"
diff --git a/applications/solvers/incompressible/simpleFoam/overSimpleFoam/overSimpleFoam.C b/applications/solvers/incompressible/simpleFoam/overSimpleFoam/overSimpleFoam.C
index 12074885404c8147bff83358d61a22f0129cba94..f69901b1239edf8f29d3328fe114dfef31be1db6 100644
--- a/applications/solvers/incompressible/simpleFoam/overSimpleFoam/overSimpleFoam.C
+++ b/applications/solvers/incompressible/simpleFoam/overSimpleFoam/overSimpleFoam.C
@@ -87,6 +87,7 @@ int main(int argc, char *argv[])
     #include "createUpdatedDynamicFvMesh.H"
     #include "createControl.H"
     #include "createFields.H"
+    #include "createOversetFields.H"
     #include "createFvOptions.H"
     #include "initContinuityErrs.H"
 
diff --git a/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/createPorousZones.H b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/createPorousZones.H
index f67c6d7890a480636a0dbcc8a9b38fb8dda7e190..4d558e2d6fe3f76733322c8635fd6d4c8b9c83b3 100644
--- a/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/createPorousZones.H
+++ b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/createPorousZones.H
@@ -1,20 +1,2 @@
     IOporosityModelList pZones(mesh);
-    bool pressureImplicitPorosity(false);
 
-    // nUCorrectors used for pressureImplicitPorosity
-    int nUCorr = 0;
-    if (pZones.active())
-    {
-        // nUCorrectors for pressureImplicitPorosity
-        nUCorr = simple.dict().lookupOrDefault<int>("nUCorrectors", 0);
-
-        if (nUCorr > 0)
-        {
-            pressureImplicitPorosity = true;
-            Info<< "Using pressure implicit porosity" << endl;
-        }
-        else
-        {
-            Info<< "Using pressure explicit porosity" << endl;
-        }
-    }
diff --git a/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/porousSimpleFoam.C b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/porousSimpleFoam.C
index a03cb5ed448fb1621b59a20479aca21d9cc7098d..909a5b61b539eb69484e0c360e0d65f4ccf721af 100644
--- a/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/porousSimpleFoam.C
+++ b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/porousSimpleFoam.C
@@ -55,6 +55,7 @@ int main(int argc, char *argv[])
     #include "createControl.H"
     #include "createFields.H"
     #include "createPorousZones.H"
+    #include "setPorosityTreatment.H"
     #include "initContinuityErrs.H"
 
     turbulence->validate();
diff --git a/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/setPorosityTreatment.H b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/setPorosityTreatment.H
new file mode 100644
index 0000000000000000000000000000000000000000..7dc7ae15374a4befd375339c87018e358761c802
--- /dev/null
+++ b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/setPorosityTreatment.H
@@ -0,0 +1,19 @@
+bool pressureImplicitPorosity(false);
+
+// nUCorrectors used for pressureImplicitPorosity
+int nUCorr = 0;
+if (pZones.active())
+{
+    // nUCorrectors for pressureImplicitPorosity
+    nUCorr = simple.dict().lookupOrDefault<int>("nUCorrectors", 0);
+
+    if (nUCorr > 0)
+    {
+        pressureImplicitPorosity = true;
+        Info<< "Using pressure implicit porosity" << endl;
+    }
+    else
+    {
+        Info<< "Using pressure explicit porosity" << endl;
+    }
+}
diff --git a/applications/solvers/lagrangian/reactingParcelFoam/createFields.H b/applications/solvers/lagrangian/reactingParcelFoam/createFields.H
index c2352ee5b47af7d419a6a7d2e572d40afaa7087d..7cecbb45c4a0c3ae3590ab0891fe7c3d4df485a3 100644
--- a/applications/solvers/lagrangian/reactingParcelFoam/createFields.H
+++ b/applications/solvers/lagrangian/reactingParcelFoam/createFields.H
@@ -103,11 +103,6 @@ forAll(Y, i)
 }
 fields.add(thermo.he());
 
-bool solvePrimaryRegion
-(
-    pimple.dict().lookupOrDefault("solvePrimaryRegion", true)
-);
-
 volScalarField Qdot
 (
     IOobject
diff --git a/applications/solvers/lagrangian/reactingParcelFoam/createRegionControls.H b/applications/solvers/lagrangian/reactingParcelFoam/createRegionControls.H
new file mode 100644
index 0000000000000000000000000000000000000000..07ac2a9e4ee5917f056dbe0aeb0c8d7abe20ba10
--- /dev/null
+++ b/applications/solvers/lagrangian/reactingParcelFoam/createRegionControls.H
@@ -0,0 +1,5 @@
+bool solvePrimaryRegion
+(
+    pimple.dict().lookupOrDefault("solvePrimaryRegion", true)
+);
+
diff --git a/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C b/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C
index 8862c4018437a6d6dfcb2c4d5c5718c9eb7b0148..88f7e81b5ffd61287d0b097ff270ce1ba80e27e3 100644
--- a/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C
+++ b/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C
@@ -61,6 +61,7 @@ int main(int argc, char *argv[])
     #include "createTimeControls.H"
     #include "createFields.H"
     #include "createFieldRefs.H"
+    #include "createRegionControls.H"
     #include "initContinuityErrs.H"
 
     turbulence->validate();
diff --git a/applications/solvers/multiphase/MPPICInterFoam/alphaEqn.H b/applications/solvers/multiphase/MPPICInterFoam/alphaEqn.H
index 40ca20533c0d149a12265c6c98c10ed2d513b933..bada4c6c0129c5351fb3b85fe0e076a95161687c 100644
--- a/applications/solvers/multiphase/MPPICInterFoam/alphaEqn.H
+++ b/applications/solvers/multiphase/MPPICInterFoam/alphaEqn.H
@@ -65,8 +65,14 @@
         phic += (mixture.cAlpha()*icAlpha)*fvc::interpolate(mag(U));
     }
 
-    surfaceScalarField::Boundary& phicBf =
-        phic.boundaryFieldRef();
+    // Add the optional shear compression contribution
+    if (scAlpha > 0)
+    {
+        phic +=
+            scAlpha*mag(mesh.delta() & fvc::interpolate(symm(fvc::grad(U))));
+    }
+
+    surfaceScalarField::Boundary& phicBf = phic.boundaryFieldRef();
 
     // Do not compress interface at non-coupled boundary faces
     // (inlets, outlets etc.)