diff --git a/applications/solvers/combustion/XiFoam/EaEqn.H b/applications/solvers/combustion/XiFoam/EaEqn.H
index 6840c4eb6d0893d5697a812f91e8b68d7c446ffc..5493722c9375cd8e1e9d0120877768ea1828d32c 100644
--- a/applications/solvers/combustion/XiFoam/EaEqn.H
+++ b/applications/solvers/combustion/XiFoam/EaEqn.H
@@ -16,9 +16,13 @@
           : -dpdt
         )
       - fvm::laplacian(turbulence->alphaEff(), hea)
+      + sources(rho, hea)
     );
 
     EaEqn.relax();
+
+    sources.constrain(EaEqn);
+
     EaEqn.solve();
 
     thermo.correct();
diff --git a/applications/solvers/combustion/XiFoam/Make/options b/applications/solvers/combustion/XiFoam/Make/options
index 3a07a7de587f6b8951465bc598356c4e5a5cb0d3..fdebdc8ce844bc066f0a6e3d2806a5fb4f4399d6 100644
--- a/applications/solvers/combustion/XiFoam/Make/options
+++ b/applications/solvers/combustion/XiFoam/Make/options
@@ -1,14 +1,20 @@
 EXE_INC = \
+    -I$(LIB_SRC)/finiteVolume/lnInclude \
+    -I$(LIB_SRC)/fieldSources/lnInclude \
+    -I$(LIB_SRC)/sampling/lnInclude \
+    -I$(LIB_SRC)/meshTools/lnInclude\
     -I$(LIB_SRC)/engine/lnInclude \
     -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
     -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
     -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
     -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
-    -I$(LIB_SRC)/thermophysicalModels/laminarFlameSpeed/lnInclude \
-    -I$(LIB_SRC)/meshTools/lnInclude \
-    -I$(LIB_SRC)/finiteVolume/lnInclude
+    -I$(LIB_SRC)/thermophysicalModels/laminarFlameSpeed/lnInclude
 
 EXE_LIBS = \
+    -lfiniteVolume \
+    -lfieldSources \
+    -lsampling \
+    -lmeshTools \
     -lengine \
     -lcompressibleTurbulenceModel \
     -lcompressibleRASModels \
@@ -16,6 +22,4 @@ EXE_LIBS = \
     -lfluidThermophysicalModels \
     -lreactionThermophysicalModels \
     -lspecie \
-    -llaminarFlameSpeedModels \
-    -lmeshTools \
-    -lfiniteVolume
+    -llaminarFlameSpeedModels
diff --git a/applications/solvers/combustion/XiFoam/UEqn.H b/applications/solvers/combustion/XiFoam/UEqn.H
index b9bc567aae9107cd8d687ec4666488586472f863..643a99f1343e40fa58ea6aa4f1060718c61eac9f 100644
--- a/applications/solvers/combustion/XiFoam/UEqn.H
+++ b/applications/solvers/combustion/XiFoam/UEqn.H
@@ -5,10 +5,13 @@
       + turbulence->divDevRhoReff(U)
      ==
         rho*g
+      + sources(rho, U)
     );
 
     UEqn.relax();
 
+    sources.constrain(UEqn);
+
     if (pimple.momentumPredictor())
     {
         solve(UEqn == -fvc::grad(p));
diff --git a/applications/solvers/combustion/XiFoam/XiFoam.C b/applications/solvers/combustion/XiFoam/XiFoam.C
index 1573ede331f4406c0645b40d6b7bba92507a43ec..a3e90f7169cebba8ff2fbea060f78db1c54b1e32 100644
--- a/applications/solvers/combustion/XiFoam/XiFoam.C
+++ b/applications/solvers/combustion/XiFoam/XiFoam.C
@@ -56,6 +56,7 @@ Description
 #include "ignition.H"
 #include "Switch.H"
 #include "pimpleControl.H"
+#include "IObasicSourceList.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/applications/solvers/combustion/XiFoam/bEqn.H b/applications/solvers/combustion/XiFoam/bEqn.H
index ff19598ba13b3298cd00103564765b359be3104c..49c2c63ae7c76c5eda0ce14cc52b8461e1da9924 100644
--- a/applications/solvers/combustion/XiFoam/bEqn.H
+++ b/applications/solvers/combustion/XiFoam/bEqn.H
@@ -34,7 +34,7 @@ if (ign.ignited())
 
     // Calculate turbulent flame speed flux
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    surfaceScalarField phiSt(fvc::interpolate(rhou*StCorr*Su*Xi)*nf);
+    surfaceScalarField phiSt("phiSt", fvc::interpolate(rhou*StCorr*Su*Xi)*nf);
 
     scalar StCoNum = max
     (
@@ -50,9 +50,11 @@ if (ign.ignited())
     (
         fvm::ddt(rho, b)
       + mvConvection->fvmDiv(phi, b)
-      + fvm::div(phiSt, b, "div(phiSt,b)")
+      + fvm::div(phiSt, b)
       - fvm::Sp(fvc::div(phiSt), b)
       - fvm::laplacian(turbulence->alphaEff(), b)
+     ==
+        sources(rho, b)
     );
 
 
@@ -64,6 +66,9 @@ if (ign.ignited())
     // Solve for b
     // ~~~~~~~~~~~
     bEqn.relax();
+
+    sources.constrain(bEqn);
+
     bEqn.solve();
 
     Info<< "min(b) = " << min(b).value() << endl;
@@ -153,9 +158,13 @@ if (ign.ignited())
           ==
           - fvm::SuSp(-rho*Rc*Su0/Su, Su)
           - fvm::SuSp(rho*(sigmas + Rc), Su)
+          + sources(rho, Su)
         );
 
         SuEqn.relax();
+
+        sources.constrain(SuEqn);
+
         SuEqn.solve();
 
         // Limit the maximum Su
@@ -234,9 +243,13 @@ if (ign.ignited())
                 ),
                 Xi
             )
+          + sources(rho, Xi)
         );
 
         XiEqn.relax();
+
+        sources.constrain(XiEqn);
+
         XiEqn.solve();
 
         // Correct boundedness of Xi
diff --git a/applications/solvers/combustion/XiFoam/createFields.H b/applications/solvers/combustion/XiFoam/createFields.H
index 17103885e5e2249ae704a0c6606101aa29d85afd..3b7cd9b7aef85cd4936c039ffa7daedc8e685f22 100644
--- a/applications/solvers/combustion/XiFoam/createFields.H
+++ b/applications/solvers/combustion/XiFoam/createFields.H
@@ -138,3 +138,5 @@
     fields.add(b);
     fields.add(thermo.he());
     fields.add(thermo.heu());
+
+    IObasicSourceList sources(mesh);
diff --git a/applications/solvers/combustion/XiFoam/ftEqn.H b/applications/solvers/combustion/XiFoam/ftEqn.H
index 96dbc3f06b6b6aa383d4833a79d20a3af96b5925..da1d76fe6902296060729b214b42e46170cee931 100644
--- a/applications/solvers/combustion/XiFoam/ftEqn.H
+++ b/applications/solvers/combustion/XiFoam/ftEqn.H
@@ -13,10 +13,16 @@ if (composition.contains("ft"))
 {
     volScalarField& ft = composition.Y("ft");
 
-    solve
+    fvScalarMatrix ftEqn
     (
         fvm::ddt(rho, ft)
       + mvConvection->fvmDiv(phi, ft)
       - fvm::laplacian(turbulence->alphaEff(), ft)
+     ==
+        sources(rho, ft)
     );
+
+    sources.constrain(ftEqn);
+
+    ftEqn.solve();
 }
diff --git a/applications/solvers/combustion/XiFoam/pEqn.H b/applications/solvers/combustion/XiFoam/pEqn.H
index 1543ca539a6793ee15b3df87dec596e415600422..b5a6d173fbe4a1b2c5bd4ef2feb89a1550c5bb40 100644
--- a/applications/solvers/combustion/XiFoam/pEqn.H
+++ b/applications/solvers/combustion/XiFoam/pEqn.H
@@ -16,6 +16,8 @@ if (pimple.transonic())
         )
     );
 
+    sources.relativeFlux(fvc::interpolate(psi), phid);
+
     while (pimple.correctNonOrthogonal())
     {
         fvScalarMatrix pEqn
@@ -23,8 +25,12 @@ if (pimple.transonic())
             fvm::ddt(psi, p)
           + fvm::div(phid, p)
           - fvm::laplacian(rho*rAU, p)
+         ==
+            sources(psi, p, rho.name())
         );
 
+        sources.constrain(pEqn);
+
         pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
 
         if (pimple.finalNonOrthogonalIter())
@@ -45,6 +51,8 @@ else
         )
     );
 
+    sources.relativeFlux(phiHbyA);
+
     while (pimple.correctNonOrthogonal())
     {
         fvScalarMatrix pEqn
@@ -52,8 +60,12 @@ else
             fvm::ddt(psi, p)
           + fvc::div(phiHbyA)
           - fvm::laplacian(rho*rAU, p)
+         ==
+            sources(psi, p, rho.name())
         );
 
+        sources.constrain(pEqn);
+
         pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
 
         if (pimple.finalNonOrthogonalIter())
@@ -68,6 +80,7 @@ else
 
 U = HbyA - rAU*fvc::grad(p);
 U.correctBoundaryConditions();
+sources.correct(U);
 K = 0.5*magSqr(U);
 
 if (thermo.dpdt())
diff --git a/applications/solvers/combustion/engineFoam/Make/options b/applications/solvers/combustion/engineFoam/Make/options
index ff38fdf05192bcfac7d2133718dadd6fdd3cb721..c7b3219f2d7f3bbed8115f1c2cda16e3dfda57b6 100644
--- a/applications/solvers/combustion/engineFoam/Make/options
+++ b/applications/solvers/combustion/engineFoam/Make/options
@@ -1,14 +1,21 @@
 EXE_INC = \
-    -I../XiFoam \
+    -I$(FOAM_SOLVERS)/combustion/XiFoam \
+    -I$(LIB_SRC)/finiteVolume/lnInclude \
+    -I$(LIB_SRC)/fieldSources/lnInclude \
+    -I$(LIB_SRC)/sampling/lnInclude \
+    -I$(LIB_SRC)/meshTools/lnInclude \
     -I$(LIB_SRC)/engine/lnInclude \
     -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
     -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
     -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
     -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
-    -I$(LIB_SRC)/thermophysicalModels/laminarFlameSpeed/lnInclude \
-    -I$(LIB_SRC)/finiteVolume/lnInclude
+    -I$(LIB_SRC)/thermophysicalModels/laminarFlameSpeed/lnInclude
 
 EXE_LIBS = \
+    -lfiniteVolume \
+    -lfieldSources \
+    -lsampling \
+    -lmeshTools \
     -lengine \
     -lcompressibleTurbulenceModel \
     -lcompressibleRASModels \
@@ -16,5 +23,4 @@ EXE_LIBS = \
     -lfluidThermophysicalModels \
     -lreactionThermophysicalModels \
     -lspecie \
-    -llaminarFlameSpeedModels \
-    -lfiniteVolume
+    -llaminarFlameSpeedModels
diff --git a/applications/solvers/combustion/engineFoam/UEqn.H b/applications/solvers/combustion/engineFoam/UEqn.H
index f110051946816e9a0f3aab7160c3681af6317377..de3dc757ccf53d5f2dee00a4b8406bfb73afefd1 100644
--- a/applications/solvers/combustion/engineFoam/UEqn.H
+++ b/applications/solvers/combustion/engineFoam/UEqn.H
@@ -3,6 +3,8 @@
         fvm::ddt(rho, U)
       + fvm::div(phi, U)
       + turbulence->divDevRhoReff(U)
+     ==
+        sources(rho, U)
     );
 
     if (pimple.momentumPredictor())
diff --git a/applications/solvers/combustion/engineFoam/engineFoam.C b/applications/solvers/combustion/engineFoam/engineFoam.C
index 0ee3df6b7b37ea7a77718875b5ea2e42fa2d7c98..65cd0356ed3dd3d64769a2000222213199807e2a 100644
--- a/applications/solvers/combustion/engineFoam/engineFoam.C
+++ b/applications/solvers/combustion/engineFoam/engineFoam.C
@@ -59,6 +59,7 @@ Description
 #include "OFstream.H"
 #include "mathematicalConstants.H"
 #include "pimpleControl.H"
+#include "IObasicSourceList.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/applications/solvers/combustion/engineFoam/pEqn.H b/applications/solvers/combustion/engineFoam/pEqn.H
index 7b005cc311926e0009f416408bf1ded3537ae2c1..b38d6dbf4b0506f27a3e8492d1ed22ebc554fdf1 100644
--- a/applications/solvers/combustion/engineFoam/pEqn.H
+++ b/applications/solvers/combustion/engineFoam/pEqn.H
@@ -13,6 +13,8 @@ if (pimple.transonic())
        *((fvc::interpolate(HbyA) & mesh.Sf()) - fvc::meshPhi(rho, U))
     );
 
+    sources.relativeFlux(fvc::interpolate(psi), phid);
+
     while (pimple.correctNonOrthogonal())
     {
         fvScalarMatrix pEqn
@@ -20,8 +22,12 @@ if (pimple.transonic())
             fvm::ddt(psi, p)
           + fvm::div(phid, p)
           - fvm::laplacian(rho*rAU, p)
+         ==
+            sources(psi, p, rho.name())
         );
 
+        sources.constrain(pEqn);
+
         pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
 
         if (pimple.finalNonOrthogonalIter())
@@ -39,6 +45,8 @@ else
        *((fvc::interpolate(HbyA) & mesh.Sf()) - fvc::meshPhi(rho, U))
     );
 
+    sources.relativeFlux(fvc::interpolate(rho), phiHbyA);
+
     while (pimple.correctNonOrthogonal())
     {
         fvScalarMatrix pEqn
@@ -46,8 +54,12 @@ else
             fvm::ddt(psi, p)
           + fvc::div(phiHbyA)
           - fvm::laplacian(rho*rAU, p)
+         ==
+            sources(psi, p, rho.name())
         );
 
+        sources.constrain(pEqn);
+
         pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
 
         if (pimple.finalNonOrthogonalIter())
@@ -62,6 +74,7 @@ else
 
 U = HbyA - rAU*fvc::grad(p);
 U.correctBoundaryConditions();
+sources.correct(U);
 K = 0.5*magSqr(U);
 
 if (thermo.dpdt())
diff --git a/applications/solvers/combustion/fireFoam/Make/options b/applications/solvers/combustion/fireFoam/Make/options
index b7498e50f5b049a21489724059f0988bd8643c6b..73804d8283937f5150ae8fe419f9d1ba7b5bfdac 100644
--- a/applications/solvers/combustion/fireFoam/Make/options
+++ b/applications/solvers/combustion/fireFoam/Make/options
@@ -1,6 +1,8 @@
 EXE_INC = \
     -I$(LIB_SRC)/finiteVolume/lnInclude \
+    -I$(LIB_SRC)/fieldSources/lnInclude \
     -I${LIB_SRC}/meshTools/lnInclude \
+    -I${LIB_SRC}/sampling/lnInclude \
     -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
     -I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \
     -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
@@ -29,7 +31,9 @@ EXE_INC = \
 
 EXE_LIBS = \
     -lfiniteVolume \
+    -lfieldSources \
     -lmeshTools \
+    -lsampling \
     -lcompressibleRASModels \
     -lcompressibleLESModels \
     -lspecie \
diff --git a/applications/solvers/combustion/fireFoam/UEqn.H b/applications/solvers/combustion/fireFoam/UEqn.H
index 31d01e4327c7749a5f9b30ccb1a814bc5f5e8d7c..90e633fc36617153e8fa0001e2631adb4d40daaf 100644
--- a/applications/solvers/combustion/fireFoam/UEqn.H
+++ b/applications/solvers/combustion/fireFoam/UEqn.H
@@ -5,10 +5,13 @@
       + turbulence->divDevRhoReff(U)
      ==
         parcels.SU(U)
+      + sources(rho, U)
     );
 
     UEqn.relax();
 
+    sources.constrain(UEqn);
+
     if (pimple.momentumPredictor())
     {
         solve
diff --git a/applications/solvers/combustion/fireFoam/YEEqn.H b/applications/solvers/combustion/fireFoam/YEEqn.H
index f979d3bb7de445c0edb93d93e6ea5a7ba8469eb0..a23f99dab7461aa6fe1df5450eb8f9bd1a01b4d8 100644
--- a/applications/solvers/combustion/fireFoam/YEEqn.H
+++ b/applications/solvers/combustion/fireFoam/YEEqn.H
@@ -30,9 +30,13 @@ tmp<fv::convectionScheme<scalar> > mvConvection
                 parcels.SYi(i, Yi)
               + surfaceFilm.Srho(i)
               + combustion->R(Yi)
+              + sources(rho, Yi)
             );
 
             YiEqn.relax();
+
+            sources.constrain(YiEqn);
+
             YiEqn.solve(mesh.solver("Yi"));
 
             Yi.max(0.0);
@@ -69,9 +73,13 @@ tmp<fv::convectionScheme<scalar> > mvConvection
       + radiation->Sh(thermo)
       + parcels.Sh(he)
       + surfaceFilm.Sh()
+      + sources(rho, he)
     );
 
     EEqn.relax();
+
+    sources.constrain(EEqn);
+
     EEqn.solve();
 
     thermo.correct();
diff --git a/applications/solvers/combustion/fireFoam/createFields.H b/applications/solvers/combustion/fireFoam/createFields.H
index 8159ee73aa67906e0c54937a76f12cb3cea3562e..be23570078094e5d3233047ebc0f7b8ce1ac4ff1 100644
--- a/applications/solvers/combustion/fireFoam/createFields.H
+++ b/applications/solvers/combustion/fireFoam/createFields.H
@@ -146,3 +146,5 @@
     (
         additionalControlsDict.lookup("solvePrimaryRegion")
     );
+
+    IObasicSourceList sources(mesh);
diff --git a/applications/solvers/combustion/fireFoam/fireFoam.C b/applications/solvers/combustion/fireFoam/fireFoam.C
index 021ed3c6f0ba93a357e753e8162029f1020e3c6a..3f30495a99676979dfb9b92c7953e80f8ce1364b 100644
--- a/applications/solvers/combustion/fireFoam/fireFoam.C
+++ b/applications/solvers/combustion/fireFoam/fireFoam.C
@@ -40,6 +40,7 @@ Description
 #include "solidChemistryModel.H"
 #include "psiCombustionModel.H"
 #include "pimpleControl.H"
+#include "IObasicSourceList.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/applications/solvers/combustion/fireFoam/pEqn.H b/applications/solvers/combustion/fireFoam/pEqn.H
index 4c33f5633e1c6b984488bea990e1a142d5da669c..6101c9dd5dbb59d6792ea45f09b11ac52c8ad21c 100644
--- a/applications/solvers/combustion/fireFoam/pEqn.H
+++ b/applications/solvers/combustion/fireFoam/pEqn.H
@@ -21,6 +21,7 @@ surfaceScalarField phiHbyA
   + phig
 );
 
+sources.relativeFlux(phiHbyA);
 
 while (pimple.correctNonOrthogonal())
 {
@@ -33,8 +34,11 @@ while (pimple.correctNonOrthogonal())
      ==
         parcels.Srho()
       + surfaceFilm.Srho()
+      + sources(psi, p_rgh, rho.name())
     );
 
+    sources.constrain(p_rghEqn);
+
     p_rghEqn.solve(mesh.solver(p_rgh.select(pimple.finalInnerIter())));
 
     if (pimple.finalNonOrthogonalIter())
@@ -42,6 +46,7 @@ while (pimple.correctNonOrthogonal())
         phi = phiHbyA + p_rghEqn.flux();
         U = HbyA + rAU*fvc::reconstruct((p_rghEqn.flux() + phig)/rhorAUf);
         U.correctBoundaryConditions();
+        sources.correct(U);
     }
 }
 
diff --git a/applications/solvers/combustion/fireFoam/rhoEqn.H b/applications/solvers/combustion/fireFoam/rhoEqn.H
index f93906018171e762b96eb5ca4bc1e1ca85176742..c465309edbc49266dec7ab2f10d721253a6dc858 100644
--- a/applications/solvers/combustion/fireFoam/rhoEqn.H
+++ b/applications/solvers/combustion/fireFoam/rhoEqn.H
@@ -30,14 +30,19 @@ Description
 \*---------------------------------------------------------------------------*/
 
 {
-    solve
+    fvScalarMatrix rhoEqn
     (
         fvm::ddt(rho)
       + fvc::div(phi)
       ==
         parcels.Srho(rho)
       + surfaceFilm.Srho()
+      + sources(rho)
     );
+
+    sources.constrain(rhoEqn);
+
+    rhoEqn.solve();
 }
 
 // ************************************************************************* //
diff --git a/applications/solvers/combustion/reactingFoam/EEqn.H b/applications/solvers/combustion/reactingFoam/EEqn.H
index e1bf055604477aed18bdec6b126b03fcfd9b0849..5568c7e5be798761e24e635a4849d22d5b851f69 100644
--- a/applications/solvers/combustion/reactingFoam/EEqn.H
+++ b/applications/solvers/combustion/reactingFoam/EEqn.H
@@ -19,9 +19,13 @@
 //    - fvm::laplacian(turbulence->muEff(), he)  // unit lewis no.
      ==
         reaction->Sh()
+      + sources(rho, he)
     );
 
     EEqn.relax();
+
+    sources.constrain(EEqn);
+
     EEqn.solve();
 
     thermo.correct();
diff --git a/applications/solvers/combustion/reactingFoam/Make/options b/applications/solvers/combustion/reactingFoam/Make/options
index 46b69a63cd523c4af2fd12d5f78a228fe64c8b96..d29dc0ed9a0616d836f13a988cb1a6e57ba114a7 100644
--- a/applications/solvers/combustion/reactingFoam/Make/options
+++ b/applications/solvers/combustion/reactingFoam/Make/options
@@ -1,14 +1,21 @@
 EXE_INC = \
+    -I$(LIB_SRC)/finiteVolume/lnInclude \
+    -I$(LIB_SRC)/fieldSources/lnInclude \
+    -I$(LIB_SRC)/meshTools/lnInclude \
+    -I$(LIB_SRC)/sampling/lnInclude \
     -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
     -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
     -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
     -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
     -I$(LIB_SRC)/thermophysicalModels/chemistryModel/lnInclude \
     -I$(LIB_SRC)/ODE/lnInclude \
-    -I$(LIB_SRC)/finiteVolume/lnInclude \
     -I$(LIB_SRC)/combustionModels/lnInclude
 
 EXE_LIBS = \
+    -lfiniteVolume \
+    -lfieldSources \
+    -lmeshTools \
+    -lsampling \
     -lcompressibleTurbulenceModel \
     -lcompressibleRASModels \
     -lcompressibleLESModels \
@@ -17,5 +24,4 @@ EXE_LIBS = \
     -lfluidThermophysicalModels \
     -lchemistryModel \
     -lODE \
-    -lfiniteVolume \
     -lcombustionModels
diff --git a/applications/solvers/combustion/reactingFoam/UEqn.H b/applications/solvers/combustion/reactingFoam/UEqn.H
index b9bc567aae9107cd8d687ec4666488586472f863..643a99f1343e40fa58ea6aa4f1060718c61eac9f 100644
--- a/applications/solvers/combustion/reactingFoam/UEqn.H
+++ b/applications/solvers/combustion/reactingFoam/UEqn.H
@@ -5,10 +5,13 @@
       + turbulence->divDevRhoReff(U)
      ==
         rho*g
+      + sources(rho, U)
     );
 
     UEqn.relax();
 
+    sources.constrain(UEqn);
+
     if (pimple.momentumPredictor())
     {
         solve(UEqn == -fvc::grad(p));
diff --git a/applications/solvers/combustion/reactingFoam/YEqn.H b/applications/solvers/combustion/reactingFoam/YEqn.H
index ccc4b135a5dc1e246492cffda6cca93a0bdcacb3..2f0d29fd8495f080d5e401eda2058af600571a73 100644
--- a/applications/solvers/combustion/reactingFoam/YEqn.H
+++ b/applications/solvers/combustion/reactingFoam/YEqn.H
@@ -28,9 +28,13 @@ tmp<fv::convectionScheme<scalar> > mvConvection
               - fvm::laplacian(turbulence->muEff(), Yi)
              ==
                 reaction->R(Yi)
+              + sources(rho, Yi)
             );
 
             YiEqn.relax();
+
+            sources.constrain(YiEqn);
+
             YiEqn.solve(mesh.solver("Yi"));
 
             Yi.max(0.0);
diff --git a/applications/solvers/combustion/reactingFoam/createFields.H b/applications/solvers/combustion/reactingFoam/createFields.H
index 32bdd372ee9318986c9fc26635ab6b9dc2f9801b..21769875eadcfc5dee1d9dd5a509b5eaabed6d48 100644
--- a/applications/solvers/combustion/reactingFoam/createFields.H
+++ b/applications/solvers/combustion/reactingFoam/createFields.H
@@ -99,3 +99,5 @@ volScalarField dQ
     mesh,
     dimensionedScalar("dQ", dimEnergy/dimTime, 0.0)
 );
+
+IObasicSourceList sources(mesh);
diff --git a/applications/solvers/combustion/reactingFoam/pEqn.H b/applications/solvers/combustion/reactingFoam/pEqn.H
index 1543ca539a6793ee15b3df87dec596e415600422..2ed1bc1ca56166e6df3f500a893e37432957666f 100644
--- a/applications/solvers/combustion/reactingFoam/pEqn.H
+++ b/applications/solvers/combustion/reactingFoam/pEqn.H
@@ -16,6 +16,8 @@ if (pimple.transonic())
         )
     );
 
+    sources.relativeFlux(fvc::interpolate(psi), phid);
+
     while (pimple.correctNonOrthogonal())
     {
         fvScalarMatrix pEqn
@@ -23,8 +25,12 @@ if (pimple.transonic())
             fvm::ddt(psi, p)
           + fvm::div(phid, p)
           - fvm::laplacian(rho*rAU, p)
+         ==
+            sources(psi, p, rho.name())
         );
 
+        sources.constrain(pEqn);
+
         pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
 
         if (pimple.finalNonOrthogonalIter())
@@ -45,6 +51,8 @@ else
         )
     );
 
+    sources.relativeFlux(fvc::interpolate(rho), phiHbyA);
+
     while (pimple.correctNonOrthogonal())
     {
         fvScalarMatrix pEqn
@@ -52,8 +60,12 @@ else
             fvm::ddt(psi, p)
           + fvc::div(phiHbyA)
           - fvm::laplacian(rho*rAU, p)
+         ==
+            sources(psi, p, rho.name())
         );
 
+        sources.constrain(pEqn);
+
         pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
 
         if (pimple.finalNonOrthogonalIter())
@@ -68,6 +80,7 @@ else
 
 U = HbyA - rAU*fvc::grad(p);
 U.correctBoundaryConditions();
+sources.correct(U);
 K = 0.5*magSqr(U);
 
 if (thermo.dpdt())
diff --git a/applications/solvers/combustion/reactingFoam/reactingFoam.C b/applications/solvers/combustion/reactingFoam/reactingFoam.C
index cd7d371651379bcaf6a071f351a5db23565eba06..c68f94ebf7ff1c70b5734b1318b9ddba9ceea409 100644
--- a/applications/solvers/combustion/reactingFoam/reactingFoam.C
+++ b/applications/solvers/combustion/reactingFoam/reactingFoam.C
@@ -34,6 +34,7 @@ Description
 #include "psiCombustionModel.H"
 #include "multivariateScheme.H"
 #include "pimpleControl.H"
+#include "IObasicSourceList.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/applications/solvers/combustion/rhoReactingFoam/Make/options b/applications/solvers/combustion/rhoReactingFoam/Make/options
index 6dbd401b63e46a591930a7cda3d024deab887104..0d1336e1ac931489b22f4fa81c82b37cc547aa64 100644
--- a/applications/solvers/combustion/rhoReactingFoam/Make/options
+++ b/applications/solvers/combustion/rhoReactingFoam/Make/options
@@ -1,17 +1,23 @@
 EXE_INC = \
-    -I../reactingFoam \
+    -I$(FOAM_SOLVERS)/combustion/reactingFoam \
+    -I$(LIB_SRC)/finiteVolume/lnInclude \
+    -I$(LIB_SRC)/fieldSources/lnInclude \
+    -I$(LIB_SRC)/meshTools/lnInclude \
+    -I$(LIB_SRC)/sampling/lnInclude \
     -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
     -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
     -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
     -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
     -I$(LIB_SRC)/thermophysicalModels/chemistryModel/lnInclude \
     -I$(LIB_SRC)/ODE/lnInclude \
-    -I$(LIB_SRC)/finiteVolume/lnInclude \
-    -I$(FOAM_SOLVERS)/combustion/reactingFoam \
     -I$(LIB_SRC)/combustionModels/lnInclude
 
 
 EXE_LIBS = \
+    -lfiniteVolume \
+    -lfieldSources \
+    -lmeshTools \
+    -lsampling \
     -lcompressibleTurbulenceModel \
     -lcompressibleRASModels \
     -lcompressibleLESModels \
@@ -20,5 +26,4 @@ EXE_LIBS = \
     -lfluidThermophysicalModels \
     -lchemistryModel \
     -lODE \
-    -lfiniteVolume \
     -lcombustionModels
diff --git a/applications/solvers/combustion/rhoReactingFoam/createFields.H b/applications/solvers/combustion/rhoReactingFoam/createFields.H
index e99639e18971bf81674fbabcbbeffb47d8dcaed2..4c517fb646de239362429f3f6b90794d4ee05954 100644
--- a/applications/solvers/combustion/rhoReactingFoam/createFields.H
+++ b/applications/solvers/combustion/rhoReactingFoam/createFields.H
@@ -101,3 +101,5 @@ volScalarField dQ
     mesh,
     dimensionedScalar("dQ", dimEnergy/dimTime, 0.0)
 );
+
+IObasicSourceList sources(mesh);
diff --git a/applications/solvers/combustion/rhoReactingFoam/pEqn.H b/applications/solvers/combustion/rhoReactingFoam/pEqn.H
index 85dbbf7f7e6902951fd9072a1ea0f8efd2c234da..cb25d83662c4c1634950e493c25b02f931f816be 100644
--- a/applications/solvers/combustion/rhoReactingFoam/pEqn.H
+++ b/applications/solvers/combustion/rhoReactingFoam/pEqn.H
@@ -18,6 +18,8 @@
           + fvc::ddtPhiCorr(rAU, rho, U, phi)
         );
 
+        sources.relativeFlux(phiHbyA);
+
         surfaceScalarField phid("phid", fvc::interpolate(thermo.psi())*phiHbyA);
 
         phiHbyA *= fvc::interpolate(rho);
@@ -34,8 +36,12 @@
             (
                 pDDtEqn
               - fvm::laplacian(rho*rAU, p)
+             ==
+                sources(psi, p, rho.name())
             );
 
+            sources.constrain(pEqn);
+
             pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
 
             if (pimple.finalNonOrthogonalIter())
@@ -56,10 +62,14 @@
             )
         );
 
+        sources.relativeFlux(fvc::interpolate(rho), phiHbyA);
+
         fvScalarMatrix pDDtEqn
         (
             fvc::ddt(rho) + psi*correction(fvm::ddt(p))
           + fvc::div(phiHbyA)
+         ==
+            sources(psi, p, rho.name())
         );
 
         while (pimple.correctNonOrthogonal())
@@ -70,6 +80,8 @@
               - fvm::laplacian(rho*rAU, p)
             );
 
+            sources.constrain(pEqn);
+
             pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
 
             if (pimple.finalNonOrthogonalIter())
@@ -87,6 +99,7 @@
 
     U = HbyA - rAU*fvc::grad(p);
     U.correctBoundaryConditions();
+    sources.correct(U);
     K = 0.5*magSqr(U);
 
     if (thermo.dpdt())
diff --git a/applications/solvers/combustion/rhoReactingFoam/rhoReactingFoam.C b/applications/solvers/combustion/rhoReactingFoam/rhoReactingFoam.C
index 3ac060612d68784e0492145480161594b3c88fc9..0a91aa4b03bdde86034f3730b0ba3287bc98b08a 100644
--- a/applications/solvers/combustion/rhoReactingFoam/rhoReactingFoam.C
+++ b/applications/solvers/combustion/rhoReactingFoam/rhoReactingFoam.C
@@ -35,6 +35,7 @@ Description
 #include "turbulenceModel.H"
 #include "multivariateScheme.H"
 #include "pimpleControl.H"
+#include "IObasicSourceList.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/applications/solvers/compressible/rhoCentralFoam/BCs/T/smoluchowskiJumpTFvPatchScalarField.C b/applications/solvers/compressible/rhoCentralFoam/BCs/T/smoluchowskiJumpTFvPatchScalarField.C
index d0183e9f7df71dca7c768912eff73307de631403..2b04637b041560d751f983cba43a1b6c103a148b 100644
--- a/applications/solvers/compressible/rhoCentralFoam/BCs/T/smoluchowskiJumpTFvPatchScalarField.C
+++ b/applications/solvers/compressible/rhoCentralFoam/BCs/T/smoluchowskiJumpTFvPatchScalarField.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -38,6 +38,10 @@ Foam::smoluchowskiJumpTFvPatchScalarField::smoluchowskiJumpTFvPatchScalarField
 )
 :
     mixedFvPatchScalarField(p, iF),
+    UName_("U"),
+    rhoName_("rho"),
+    psiName_("thermo:psi"),
+    muName_("thermo:mu"),
     accommodationCoeff_(1.0),
     Twall_(p.size(), 0.0),
     gamma_(1.4)
@@ -57,6 +61,10 @@ Foam::smoluchowskiJumpTFvPatchScalarField::smoluchowskiJumpTFvPatchScalarField
 )
 :
     mixedFvPatchScalarField(ptf, p, iF, mapper),
+    UName_(ptf.UName_),
+    rhoName_(ptf.rhoName_),
+    psiName_(ptf.psiName_),
+    muName_(ptf.muName_),
     accommodationCoeff_(ptf.accommodationCoeff_),
     Twall_(ptf.Twall_),
     gamma_(ptf.gamma_)
@@ -71,6 +79,10 @@ Foam::smoluchowskiJumpTFvPatchScalarField::smoluchowskiJumpTFvPatchScalarField
 )
 :
     mixedFvPatchScalarField(p, iF),
+    UName_(dict.lookupOrDefault<word>("U", "U")),
+    rhoName_(dict.lookupOrDefault<word>("rho", "rho")),
+    psiName_(dict.lookupOrDefault<word>("psi", "thermo:psi")),
+    muName_(dict.lookupOrDefault<word>("mu", "thermo:mu")),
     accommodationCoeff_(readScalar(dict.lookup("accommodationCoeff"))),
     Twall_("Twall", dict, p.size()),
     gamma_(dict.lookupOrDefault<scalar>("gamma", 1.4))
@@ -93,7 +105,7 @@ Foam::smoluchowskiJumpTFvPatchScalarField::smoluchowskiJumpTFvPatchScalarField
             dict
         )   << "unphysical accommodationCoeff specified"
             << "(0 < accommodationCoeff <= 1)" << endl
-            << exit(FatalError);
+            << exit(FatalIOError);
     }
 
     if (dict.found("value"))
@@ -159,13 +171,13 @@ void Foam::smoluchowskiJumpTFvPatchScalarField::updateCoeffs()
     }
 
     const fvPatchScalarField& pmu =
-        patch().lookupPatchField<volScalarField, scalar>("mu");
+        patch().lookupPatchField<volScalarField, scalar>(muName_);
     const fvPatchScalarField& prho =
-        patch().lookupPatchField<volScalarField, scalar>("rho");
+        patch().lookupPatchField<volScalarField, scalar>(rhoName_);
     const fvPatchField<scalar>& ppsi =
-        patch().lookupPatchField<volScalarField, scalar>("psi");
+        patch().lookupPatchField<volScalarField, scalar>(psiName_);
     const fvPatchVectorField& pU =
-        patch().lookupPatchField<volVectorField, vector>("U");
+        patch().lookupPatchField<volVectorField, vector>(UName_);
 
     // Prandtl number reading consistent with rhoCentralFoam
     const dictionary& thermophysicalProperties =
@@ -204,6 +216,12 @@ void Foam::smoluchowskiJumpTFvPatchScalarField::updateCoeffs()
 void Foam::smoluchowskiJumpTFvPatchScalarField::write(Ostream& os) const
 {
     fvPatchScalarField::write(os);
+
+    writeEntryIfDifferent<word>(os, "U", "U", UName_);
+    writeEntryIfDifferent<word>(os, "rho", "rho", rhoName_);
+    writeEntryIfDifferent<word>(os, "psi", "thermo:psi", psiName_);
+    writeEntryIfDifferent<word>(os, "mu", "thermo:mu", muName_);
+
     os.writeKeyword("accommodationCoeff")
         << accommodationCoeff_ << token::END_STATEMENT << nl;
     Twall_.writeEntry("Twall", os);
diff --git a/applications/solvers/compressible/rhoCentralFoam/BCs/T/smoluchowskiJumpTFvPatchScalarField.H b/applications/solvers/compressible/rhoCentralFoam/BCs/T/smoluchowskiJumpTFvPatchScalarField.H
index 8f84cfb6e69482e9f7a9d2972c83e55efc6faca4..845aa9f424ff2486cbf664622530f97c66fc4885 100644
--- a/applications/solvers/compressible/rhoCentralFoam/BCs/T/smoluchowskiJumpTFvPatchScalarField.H
+++ b/applications/solvers/compressible/rhoCentralFoam/BCs/T/smoluchowskiJumpTFvPatchScalarField.H
@@ -53,13 +53,25 @@ class smoluchowskiJumpTFvPatchScalarField
 
     // Private data
 
-        // Accommodation coefficient
+        //- Velocity field name, default = "U"
+        word UName_;
+
+        //- Density field name, default = "rho"
+        word rhoName_;
+
+        //- Compressibility field name, default = "thermo:psi"
+        word psiName_;
+
+        //- Dynamic viscosity field name, default = "thermo:mu"
+        word muName_;
+
+        //- Accommodation coefficient
         scalar accommodationCoeff_;
 
-        // Wall surface temperature
+        //- Wall surface temperature
         scalarField Twall_;
 
-        // Heat capacity ratio (default 1.4)
+        //- Heat capacity ratio (default 1.4)
         scalar gamma_;
 
 public:
diff --git a/applications/solvers/compressible/rhoCentralFoam/BCs/U/maxwellSlipUFvPatchVectorField.C b/applications/solvers/compressible/rhoCentralFoam/BCs/U/maxwellSlipUFvPatchVectorField.C
index 875e42683e36badcb530d09208c3fa4482950f9f..6ec81dd4dc905c359d01ab59c2cdf3591bf774be 100644
--- a/applications/solvers/compressible/rhoCentralFoam/BCs/U/maxwellSlipUFvPatchVectorField.C
+++ b/applications/solvers/compressible/rhoCentralFoam/BCs/U/maxwellSlipUFvPatchVectorField.C
@@ -30,20 +30,20 @@ License
 #include "volFields.H"
 #include "fvcGrad.H"
 
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-maxwellSlipUFvPatchVectorField::maxwellSlipUFvPatchVectorField
+Foam::maxwellSlipUFvPatchVectorField::maxwellSlipUFvPatchVectorField
 (
     const fvPatch& p,
     const DimensionedField<vector, volMesh>& iF
 )
 :
     mixedFixedValueSlipFvPatchVectorField(p, iF),
+    TName_("T"),
+    rhoName_("rho"),
+    psiName_("thermo:psi"),
+    muName_("thermo:mu"),
+    tauMCName_("tauMC"),
     accommodationCoeff_(1.0),
     Uwall_(p.size(), vector(0.0, 0.0, 0.0)),
     thermalCreep_(true),
@@ -51,23 +51,28 @@ maxwellSlipUFvPatchVectorField::maxwellSlipUFvPatchVectorField
 {}
 
 
-maxwellSlipUFvPatchVectorField::maxwellSlipUFvPatchVectorField
+Foam::maxwellSlipUFvPatchVectorField::maxwellSlipUFvPatchVectorField
 (
-    const maxwellSlipUFvPatchVectorField& tdpvf,
+    const maxwellSlipUFvPatchVectorField& mspvf,
     const fvPatch& p,
     const DimensionedField<vector, volMesh>& iF,
     const fvPatchFieldMapper& mapper
 )
 :
-    mixedFixedValueSlipFvPatchVectorField(tdpvf, p, iF, mapper),
-    accommodationCoeff_(tdpvf.accommodationCoeff_),
-    Uwall_(tdpvf.Uwall_),
-    thermalCreep_(tdpvf.thermalCreep_),
-    curvature_(tdpvf.curvature_)
+    mixedFixedValueSlipFvPatchVectorField(mspvf, p, iF, mapper),
+    TName_(mspvf.TName_),
+    rhoName_(mspvf.rhoName_),
+    psiName_(mspvf.psiName_),
+    muName_(mspvf.muName_),
+    tauMCName_(mspvf.tauMCName_),
+    accommodationCoeff_(mspvf.accommodationCoeff_),
+    Uwall_(mspvf.Uwall_),
+    thermalCreep_(mspvf.thermalCreep_),
+    curvature_(mspvf.curvature_)
 {}
 
 
-maxwellSlipUFvPatchVectorField::maxwellSlipUFvPatchVectorField
+Foam::maxwellSlipUFvPatchVectorField::maxwellSlipUFvPatchVectorField
 (
     const fvPatch& p,
     const DimensionedField<vector, volMesh>& iF,
@@ -75,6 +80,11 @@ maxwellSlipUFvPatchVectorField::maxwellSlipUFvPatchVectorField
 )
 :
     mixedFixedValueSlipFvPatchVectorField(p, iF),
+    TName_(dict.lookupOrDefault<word>("T", "T")),
+    rhoName_(dict.lookupOrDefault<word>("rho", "rho")),
+    psiName_(dict.lookupOrDefault<word>("psi", "thermo:psi")),
+    muName_(dict.lookupOrDefault<word>("mu", "thermo:mu")),
+    tauMCName_(dict.lookupOrDefault<word>("tauMC", "tauMC")),
     accommodationCoeff_(readScalar(dict.lookup("accommodationCoeff"))),
     Uwall_("Uwall", dict, p.size()),
     thermalCreep_(dict.lookupOrDefault("thermalCreep", true)),
@@ -88,13 +98,16 @@ maxwellSlipUFvPatchVectorField::maxwellSlipUFvPatchVectorField
     {
         FatalIOErrorIn
         (
-            "maxwellSlipUFvPatchScalarField::"
-            "maxwellSlipUFvPatchScalarField"
-            "(const fvPatch&, const scalarField&, const dictionary&)",
+            "maxwellSlipUFvPatchScalarField::maxwellSlipUFvPatchScalarField"
+            "("
+                "const fvPatch&, "
+                "const DimensionedField<vector, volMesh>&, "
+                "const dictionary&"
+            ")",
             dict
         )   << "unphysical accommodationCoeff_ specified"
             << "(0 < accommodationCoeff_ <= 1)" << endl
-            << exit(FatalError);
+            << exit(FatalIOError);
     }
 
     if (dict.found("value"))
@@ -119,23 +132,28 @@ maxwellSlipUFvPatchVectorField::maxwellSlipUFvPatchVectorField
 }
 
 
-maxwellSlipUFvPatchVectorField::maxwellSlipUFvPatchVectorField
+Foam::maxwellSlipUFvPatchVectorField::maxwellSlipUFvPatchVectorField
 (
-    const maxwellSlipUFvPatchVectorField& tdpvf,
+    const maxwellSlipUFvPatchVectorField& mspvf,
     const DimensionedField<vector, volMesh>& iF
 )
 :
-    mixedFixedValueSlipFvPatchVectorField(tdpvf, iF),
-    accommodationCoeff_(tdpvf.accommodationCoeff_),
-    Uwall_(tdpvf.Uwall_),
-    thermalCreep_(tdpvf.thermalCreep_),
-    curvature_(tdpvf.curvature_)
+    mixedFixedValueSlipFvPatchVectorField(mspvf, iF),
+    TName_(mspvf.TName_),
+    rhoName_(mspvf.rhoName_),
+    psiName_(mspvf.psiName_),
+    muName_(mspvf.muName_),
+    tauMCName_(mspvf.tauMCName_),
+    accommodationCoeff_(mspvf.accommodationCoeff_),
+    Uwall_(mspvf.Uwall_),
+    thermalCreep_(mspvf.thermalCreep_),
+    curvature_(mspvf.curvature_)
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void maxwellSlipUFvPatchVectorField::updateCoeffs()
+void Foam::maxwellSlipUFvPatchVectorField::updateCoeffs()
 {
     if (updated())
     {
@@ -143,11 +161,11 @@ void maxwellSlipUFvPatchVectorField::updateCoeffs()
     }
 
     const fvPatchScalarField& pmu =
-        patch().lookupPatchField<volScalarField, scalar>("mu");
+        patch().lookupPatchField<volScalarField, scalar>(muName_);
     const fvPatchScalarField& prho =
-        patch().lookupPatchField<volScalarField, scalar>("rho");
+        patch().lookupPatchField<volScalarField, scalar>(rhoName_);
     const fvPatchField<scalar>& ppsi =
-        patch().lookupPatchField<volScalarField, scalar>("psi");
+        patch().lookupPatchField<volScalarField, scalar>(psiName_);
 
     Field<scalar> C1
     (
@@ -163,7 +181,7 @@ void maxwellSlipUFvPatchVectorField::updateCoeffs()
     if (thermalCreep_)
     {
         const volScalarField& vsfT =
-            this->db().objectRegistry::lookupObject<volScalarField>("T");
+            this->db().objectRegistry::lookupObject<volScalarField>(TName_);
         label patchi = this->patch().index();
         const fvPatchScalarField& pT = vsfT.boundaryField()[patchi];
         Field<vector> gradpT(fvc::grad(vsfT)().boundaryField()[patchi]);
@@ -175,7 +193,7 @@ void maxwellSlipUFvPatchVectorField::updateCoeffs()
     if (curvature_)
     {
         const fvPatchTensorField& ptauMC =
-            patch().lookupPatchField<volTensorField, tensor>("tauMC");
+            patch().lookupPatchField<volTensorField, tensor>(tauMCName_);
         vectorField n(patch().nf());
 
         refValue() -= C1/prho*transform(I - n*n, (n & ptauMC));
@@ -185,9 +203,15 @@ void maxwellSlipUFvPatchVectorField::updateCoeffs()
 }
 
 
-void maxwellSlipUFvPatchVectorField::write(Ostream& os) const
+void Foam::maxwellSlipUFvPatchVectorField::write(Ostream& os) const
 {
     fvPatchVectorField::write(os);
+    writeEntryIfDifferent<word>(os, "T", "T", TName_);
+    writeEntryIfDifferent<word>(os, "rho", "rho", rhoName_);
+    writeEntryIfDifferent<word>(os, "psi", "thermo:psi", psiName_);
+    writeEntryIfDifferent<word>(os, "mu", "thermo:mu", muName_);
+    writeEntryIfDifferent<word>(os, "tauMC", "tauMC", tauMCName_);
+
     os.writeKeyword("accommodationCoeff")
         << accommodationCoeff_ << token::END_STATEMENT << nl;
     Uwall_.writeEntry("Uwall", os);
@@ -204,14 +228,13 @@ void maxwellSlipUFvPatchVectorField::write(Ostream& os) const
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-makePatchTypeField
-(
-    fvPatchVectorField,
-    maxwellSlipUFvPatchVectorField
-);
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace Foam
+namespace Foam
+{
+    makePatchTypeField
+    (
+        fvPatchVectorField,
+        maxwellSlipUFvPatchVectorField
+    );
+}
 
 // ************************************************************************* //
diff --git a/applications/solvers/compressible/rhoCentralFoam/BCs/U/maxwellSlipUFvPatchVectorField.H b/applications/solvers/compressible/rhoCentralFoam/BCs/U/maxwellSlipUFvPatchVectorField.H
index df441c5d91cf0820d7f93321bcfb2e5d3fe3e526..afebd9a9bf6d5a7df8b2029db0655627311b6795 100644
--- a/applications/solvers/compressible/rhoCentralFoam/BCs/U/maxwellSlipUFvPatchVectorField.H
+++ b/applications/solvers/compressible/rhoCentralFoam/BCs/U/maxwellSlipUFvPatchVectorField.H
@@ -54,6 +54,21 @@ class maxwellSlipUFvPatchVectorField
 {
     // Private data
 
+        //- Temperature field name, default = "T"
+        word TName_;
+
+        //- Density field name, default = "rho"
+        word rhoName_;
+
+        //- Compressibility field name, default = "thermo:psi"
+        word psiName_;
+
+        //- Dynamic viscosity field name, default = "thermo:mu"
+        word muName_;
+
+        //- tauMC field name, default = "tauMC"
+        word tauMCName_;
+
         // Accommodation coefficient
         scalar accommodationCoeff_;
 
diff --git a/applications/solvers/compressible/rhoCentralFoam/BCs/mixedFixedValueSlip/mixedFixedValueSlipFvPatchField.C b/applications/solvers/compressible/rhoCentralFoam/BCs/mixedFixedValueSlip/mixedFixedValueSlipFvPatchField.C
index 8f31a2b460b8cda1cd2eb670b91327b4fffa8e2f..5c1459381f04bd48f6b415e5e67a7d477664c225 100644
--- a/applications/solvers/compressible/rhoCentralFoam/BCs/mixedFixedValueSlip/mixedFixedValueSlipFvPatchField.C
+++ b/applications/solvers/compressible/rhoCentralFoam/BCs/mixedFixedValueSlip/mixedFixedValueSlipFvPatchField.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -98,6 +98,7 @@ mixedFixedValueSlipFvPatchField<Type>::mixedFixedValueSlipFvPatchField
     valueFraction_(ptf.valueFraction_)
 {}
 
+
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 // Map from self
diff --git a/applications/solvers/compressible/rhoCentralFoam/BCs/rho/fixedRhoFvPatchScalarField.C b/applications/solvers/compressible/rhoCentralFoam/BCs/rho/fixedRhoFvPatchScalarField.C
index cf9450a657b0f52ab1ae3a55871acbe4481fcb02..5eefe82ff5dedae1001c4f026b208a56e0b0293a 100644
--- a/applications/solvers/compressible/rhoCentralFoam/BCs/rho/fixedRhoFvPatchScalarField.C
+++ b/applications/solvers/compressible/rhoCentralFoam/BCs/rho/fixedRhoFvPatchScalarField.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -27,27 +27,22 @@ License
 #include "addToRunTimeSelectionTable.H"
 #include "fvPatchFieldMapper.H"
 #include "volFields.H"
-#include "surfaceFields.H"
-#include "fvCFD.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-fixedRhoFvPatchScalarField::fixedRhoFvPatchScalarField
+Foam::fixedRhoFvPatchScalarField::fixedRhoFvPatchScalarField
 (
     const fvPatch& p,
     const DimensionedField<scalar, volMesh>& iF
 )
 :
-    fixedValueFvPatchScalarField(p, iF)
+    fixedValueFvPatchScalarField(p, iF),
+    pName_("p"),
+    psiName_("thermo:psi")
 {}
 
 
-fixedRhoFvPatchScalarField::fixedRhoFvPatchScalarField
+Foam::fixedRhoFvPatchScalarField::fixedRhoFvPatchScalarField
 (
     const fixedRhoFvPatchScalarField& ptf,
     const fvPatch& p,
@@ -55,43 +50,51 @@ fixedRhoFvPatchScalarField::fixedRhoFvPatchScalarField
     const fvPatchFieldMapper& mapper
 )
 :
-    fixedValueFvPatchScalarField(ptf, p, iF, mapper)
+    fixedValueFvPatchScalarField(ptf, p, iF, mapper),
+    pName_(ptf.pName_),
+    psiName_(ptf.psiName_)
 {}
 
 
-fixedRhoFvPatchScalarField::fixedRhoFvPatchScalarField
+Foam::fixedRhoFvPatchScalarField::fixedRhoFvPatchScalarField
 (
     const fvPatch& p,
     const DimensionedField<scalar, volMesh>& iF,
     const dictionary& dict
 )
 :
-    fixedValueFvPatchScalarField(p, iF, dict)
+    fixedValueFvPatchScalarField(p, iF, dict),
+    pName_(dict.lookupOrDefault<word>("p", "p")),
+    psiName_(dict.lookupOrDefault<word>("psi", "thermo:psi"))
 {}
 
 
-fixedRhoFvPatchScalarField::fixedRhoFvPatchScalarField
+Foam::fixedRhoFvPatchScalarField::fixedRhoFvPatchScalarField
 (
-    const fixedRhoFvPatchScalarField& tppsf
+    const fixedRhoFvPatchScalarField& frpsf
 )
 :
-    fixedValueFvPatchScalarField(tppsf)
+    fixedValueFvPatchScalarField(frpsf),
+    pName_(frpsf.pName_),
+    psiName_(frpsf.psiName_)
 {}
 
 
-fixedRhoFvPatchScalarField::fixedRhoFvPatchScalarField
+Foam::fixedRhoFvPatchScalarField::fixedRhoFvPatchScalarField
 (
-    const fixedRhoFvPatchScalarField& tppsf,
+    const fixedRhoFvPatchScalarField& frpsf,
     const DimensionedField<scalar, volMesh>& iF
 )
 :
-    fixedValueFvPatchScalarField(tppsf, iF)
+    fixedValueFvPatchScalarField(frpsf, iF),
+    pName_(frpsf.pName_),
+    psiName_(frpsf.psiName_)
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void fixedRhoFvPatchScalarField::updateCoeffs()
+void Foam::fixedRhoFvPatchScalarField::updateCoeffs()
 {
     if (updated())
     {
@@ -99,10 +102,10 @@ void fixedRhoFvPatchScalarField::updateCoeffs()
     }
 
     const fvPatchField<scalar>& psip =
-        patch().lookupPatchField<volScalarField, scalar>("psi");
+        patch().lookupPatchField<volScalarField, scalar>(psiName_);
 
     const fvPatchField<scalar>& pp =
-        patch().lookupPatchField<volScalarField, scalar>("p");
+        patch().lookupPatchField<volScalarField, scalar>(pName_);
 
     operator==(psip*pp);
 
@@ -110,16 +113,24 @@ void fixedRhoFvPatchScalarField::updateCoeffs()
 }
 
 
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+void Foam::fixedRhoFvPatchScalarField::write(Ostream& os) const
+{
+    fvPatchScalarField::write(os);
 
-makePatchTypeField
-(
-    fvPatchScalarField,
-    fixedRhoFvPatchScalarField
-);
+    writeEntryIfDifferent<word>(os, "p", "p", this->pName_);
+    writeEntryIfDifferent<word>(os, "psi", "thermo:psi", psiName_);
+    writeEntry("value", os);
+}
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-} // End namespace Foam
+namespace Foam
+{
+    makePatchTypeField
+    (
+        fvPatchScalarField,
+        fixedRhoFvPatchScalarField
+    );
+}
 
 // ************************************************************************* //
diff --git a/applications/solvers/compressible/rhoCentralFoam/BCs/rho/fixedRhoFvPatchScalarField.H b/applications/solvers/compressible/rhoCentralFoam/BCs/rho/fixedRhoFvPatchScalarField.H
index 697ae723a5c0be9ab901fbfac5f63f9af0ad6e63..6efbb4947d0f55f2cf6b92d53f0605a746ea0d97 100644
--- a/applications/solvers/compressible/rhoCentralFoam/BCs/rho/fixedRhoFvPatchScalarField.H
+++ b/applications/solvers/compressible/rhoCentralFoam/BCs/rho/fixedRhoFvPatchScalarField.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -24,9 +24,42 @@ License
 Class
     Foam::fixedRhoFvPatchScalarField
 
+Group
+    grpInletBoundaryConditions
+
 Description
     Foam::fixedRhoFvPatchScalarField
 
+    This boundary condition provides a fixed density inlet condition for
+    compressible solvers, where the density of calculated using:
+
+    \f{
+        \rho = \psi p
+    \f]
+
+    where
+    \vartable
+        p     | pressure [Pa]
+        \rho  | density [kg/m3]
+    \endvartable
+
+
+    \heading Patch usage
+
+    \table
+        Property     | Description             | Required    | Default value
+        pName        | Pressure field name     | no          | p
+        psiName      | Compressibility field name | no       | thermo:psi
+    \endtable
+
+    Example of the boundary condition specification:
+    \verbatim
+    myPatch
+    {
+        type            fixedRho;
+    }
+    \endverbatim
+
 SourceFiles
     fixedRhoFvPatchScalarField.C
 
@@ -43,7 +76,7 @@ namespace Foam
 {
 
 /*---------------------------------------------------------------------------*\
-                Class fixedRhoFvPatchScalarField Declaration
+                 Class fixedRhoFvPatchScalarField Declaration
 \*---------------------------------------------------------------------------*/
 
 class fixedRhoFvPatchScalarField
@@ -51,6 +84,17 @@ class fixedRhoFvPatchScalarField
     public fixedValueFvPatchScalarField
 {
 
+private:
+
+    // Private data
+
+        //- Pressure field name, default = "p"
+        word pName_;
+
+        //- Compressibility field name, default = "thermo:psi"
+        word psiName_;
+
+
 public:
 
     //- Runtime type information
@@ -125,6 +169,10 @@ public:
 
             //- Update the coefficients associated with the patch field
             virtual void updateCoeffs();
+
+
+        //- Write
+        virtual void write(Ostream&) const;
 };
 
 
diff --git a/applications/solvers/compressible/rhoPimpleFoam/Allwmake b/applications/solvers/compressible/rhoPimpleFoam/Allwmake
index f6f8ad3635d10f11e2557d9e6f0af3258a738bb2..ac06b7350a1e8ea3ee081768c38ebf5f9d5b031a 100755
--- a/applications/solvers/compressible/rhoPimpleFoam/Allwmake
+++ b/applications/solvers/compressible/rhoPimpleFoam/Allwmake
@@ -4,7 +4,6 @@ set -x
 
 wmake
 wmake rhoPimplecFoam
-wmake rhoPorousMRFPimpleFoam
-wmake rhoPorousMRFLTSPimpleFoam
+wmake rhoLTSPimpleFoam
 
 # ----------------------------------------------------------------- end-of-file
diff --git a/applications/solvers/compressible/rhoPimpleFoam/UEqn.H b/applications/solvers/compressible/rhoPimpleFoam/UEqn.H
index 397e8930357dfd548a96f62b9f63acfc943f2423..e4fa5cd6b389b241b34ddc5966be6dbce90fa8bc 100644
--- a/applications/solvers/compressible/rhoPimpleFoam/UEqn.H
+++ b/applications/solvers/compressible/rhoPimpleFoam/UEqn.H
@@ -5,6 +5,8 @@ tmp<fvVectorMatrix> UEqn
     fvm::ddt(rho, U)
   + fvm::div(phi, U)
   + turbulence->divDevRhoReff(U)
+ ==
+    sources(rho, U)
 );
 
 UEqn().relax();
@@ -13,6 +15,6 @@ sources.constrain(UEqn());
 
 if (pimple.momentumPredictor())
 {
-    solve(UEqn() == -fvc::grad(p) + sources(rho, U));
+    solve(UEqn() == -fvc::grad(p));
     K = 0.5*magSqr(U);
 }
diff --git a/applications/solvers/compressible/rhoPimpleFoam/pEqn.H b/applications/solvers/compressible/rhoPimpleFoam/pEqn.H
index 5f28a3456d82c8d6c1b8f05d90b1519e9a5f5931..a656d772481adc52390a1c9fd7889545f6e50d4a 100644
--- a/applications/solvers/compressible/rhoPimpleFoam/pEqn.H
+++ b/applications/solvers/compressible/rhoPimpleFoam/pEqn.H
@@ -5,7 +5,7 @@ rho.relax();
 
 volScalarField rAU(1.0/UEqn().A());
 volVectorField HbyA("HbyA", U);
-HbyA = rAU*(UEqn() == sources(rho, U))().H();
+HbyA = rAU*UEqn().H();
 
 if (pimple.nCorrPISO() <= 1)
 {
@@ -24,6 +24,8 @@ if (pimple.transonic())
         )
     );
 
+    sources.relativeFlux(fvc::interpolate(psi), phid);
+
     volScalarField Dp("Dp", rho*rAU);
 
     while (pimple.correctNonOrthogonal())
@@ -37,7 +39,7 @@ if (pimple.transonic())
             sources(psi, p, rho.name())
         );
 
-        sources.constrain(pEqn, rho.name());
+        sources.constrain(pEqn);
 
         pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
 
@@ -59,6 +61,8 @@ else
         )
     );
 
+    sources.relativeFlux(fvc::interpolate(rho), phiHbyA);
+
     volScalarField Dp("Dp", rho*rAU);
 
     while (pimple.correctNonOrthogonal())
@@ -73,7 +77,7 @@ else
             sources(psi, p, rho.name())
         );
 
-        sources.constrain(pEqn, rho.name());
+        sources.constrain(pEqn);
 
         pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
 
diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoLTSPimpleFoam/Make/files b/applications/solvers/compressible/rhoPimpleFoam/rhoLTSPimpleFoam/Make/files
new file mode 100644
index 0000000000000000000000000000000000000000..ff61e6022f6a5fae2729c5bd287c2ddacd2390b1
--- /dev/null
+++ b/applications/solvers/compressible/rhoPimpleFoam/rhoLTSPimpleFoam/Make/files
@@ -0,0 +1,3 @@
+rhoLTSPimpleFoam.C
+
+EXE = $(FOAM_APPBIN)/rhoLTSPimpleFoam
diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFLTSPimpleFoam/Make/options b/applications/solvers/compressible/rhoPimpleFoam/rhoLTSPimpleFoam/Make/options
similarity index 100%
rename from applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFLTSPimpleFoam/Make/options
rename to applications/solvers/compressible/rhoPimpleFoam/rhoLTSPimpleFoam/Make/options
diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFLTSPimpleFoam/rhoPorousMRFLTSPimpleFoam.C b/applications/solvers/compressible/rhoPimpleFoam/rhoLTSPimpleFoam/rhoLTSPimpleFoam.C
similarity index 94%
rename from applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFLTSPimpleFoam/rhoPorousMRFLTSPimpleFoam.C
rename to applications/solvers/compressible/rhoPimpleFoam/rhoLTSPimpleFoam/rhoLTSPimpleFoam.C
index 18a32a1791338badc6fef7daf5eee6dc773171b8..ccbba350c265c534fdb0d30c8c6aa1258036d2b5 100644
--- a/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFLTSPimpleFoam/rhoPorousMRFLTSPimpleFoam.C
+++ b/applications/solvers/compressible/rhoPimpleFoam/rhoLTSPimpleFoam/rhoLTSPimpleFoam.C
@@ -26,7 +26,7 @@ Application
 
 Description
     Transient solver for laminar or turbulent flow of compressible fluids
-    with support for porous media and MRF for HVAC and similar applications.
+    with support for run-time selectable sources, e.g. MRF, explicit porosity.
 
     Uses the flexible PIMPLE (PISO-SIMPLE) solution for time-resolved and
     pseudo-transient simulations with support for local time-stepping for
@@ -37,8 +37,6 @@ Description
 #include "fvCFD.H"
 #include "psiThermo.H"
 #include "turbulenceModel.H"
-#include "IOMRFZoneList.H"
-#include "IOporosityModelList.H"
 #include "IObasicSourceList.H"
 #include "fvcSmooth.H"
 #include "pimpleControl.H"
@@ -56,7 +54,6 @@ int main(int argc, char *argv[])
 
     #include "setInitialrDeltaT.H"
     #include "createFields.H"
-    #include "createZones.H"
     #include "initContinuityErrs.H"
 
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFLTSPimpleFoam/setInitialrDeltaT.H b/applications/solvers/compressible/rhoPimpleFoam/rhoLTSPimpleFoam/setInitialrDeltaT.H
similarity index 100%
rename from applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFLTSPimpleFoam/setInitialrDeltaT.H
rename to applications/solvers/compressible/rhoPimpleFoam/rhoLTSPimpleFoam/setInitialrDeltaT.H
diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFLTSPimpleFoam/setrDeltaT.H b/applications/solvers/compressible/rhoPimpleFoam/rhoLTSPimpleFoam/setrDeltaT.H
similarity index 100%
rename from applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFLTSPimpleFoam/setrDeltaT.H
rename to applications/solvers/compressible/rhoPimpleFoam/rhoLTSPimpleFoam/setrDeltaT.H
diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/pEqn.H b/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/pEqn.H
index 628eb71f2961392d5c1173fbbf30aeb07cd5f81b..aa3e615af6ca93aa284b2ada525da95363bb21db 100644
--- a/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/pEqn.H
+++ b/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/pEqn.H
@@ -51,7 +51,7 @@ if (pimple.transonic())
         // Relax the pressure equation to maintain diagonal dominance
         pEqn.relax();
 
-        sources.constrain(pEqn, rho.name());
+        sources.constrain(pEqn);
 
         pEqn.solve();
 
@@ -89,7 +89,7 @@ else
             sources(psi, p, rho.name())
         );
 
-        sources.constrain(pEqn, rho.name());
+        sources.constrain(pEqn);
 
         pEqn.solve();
 
diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFLTSPimpleFoam/Make/files b/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFLTSPimpleFoam/Make/files
deleted file mode 100644
index 3b438a61773fd05589a0a7d0131d152ceb99d258..0000000000000000000000000000000000000000
--- a/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFLTSPimpleFoam/Make/files
+++ /dev/null
@@ -1,3 +0,0 @@
-rhoPorousMRFLTSPimpleFoam.C
-
-EXE = $(FOAM_APPBIN)/rhoPorousMRFLTSPimpleFoam
diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFPimpleFoam/Make/files b/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFPimpleFoam/Make/files
deleted file mode 100644
index a798455eb7f807cacb1cdcea8d70c02d871821aa..0000000000000000000000000000000000000000
--- a/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFPimpleFoam/Make/files
+++ /dev/null
@@ -1,4 +0,0 @@
-rhoPorousMRFPimpleFoam.C
-
-EXE = $(FOAM_APPBIN)/rhoPorousMRFPimpleFoam
-
diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFPimpleFoam/Make/options b/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFPimpleFoam/Make/options
deleted file mode 100644
index c78d474b4fb3d4649d7afad5957132ee2da37253..0000000000000000000000000000000000000000
--- a/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFPimpleFoam/Make/options
+++ /dev/null
@@ -1,20 +0,0 @@
-EXE_INC = \
-    -I.. \
-    -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-    -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
-    -I$(LIB_SRC)/finiteVolume/cfdTools \
-    -I$(LIB_SRC)/finiteVolume/lnInclude \
-    -I$(LIB_SRC)/meshTools/lnInclude \
-    -I$(LIB_SRC)/sampling/lnInclude \
-    -I$(LIB_SRC)/fieldSources/lnInclude
-
-EXE_LIBS = \
-    -lfluidThermophysicalModels \
-    -lspecie \
-    -lcompressibleTurbulenceModel \
-    -lcompressibleRASModels \
-    -lcompressibleLESModels \
-    -lfiniteVolume \
-    -lmeshTools \
-    -lsampling \
-    -lfieldSources
diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFPimpleFoam/UEqn.H b/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFPimpleFoam/UEqn.H
deleted file mode 100644
index 9651610157c483596253639cb1380be1cc8e2f9b..0000000000000000000000000000000000000000
--- a/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFPimpleFoam/UEqn.H
+++ /dev/null
@@ -1,22 +0,0 @@
-// Solve the Momentum equation
-
-tmp<fvVectorMatrix> UEqn
-(
-    //pZones.ddt(rho, U)
-    fvm::ddt(rho, U)
-  + fvm::div(phi, U)
-  + turbulence->divDevRhoReff(U)
-);
-
-UEqn().relax();
-
-mrfZones.addCoriolis(rho, UEqn());
-
-pZones.addResistance(UEqn());
-
-sources.constrain(UEqn());
-
-if (pimple.momentumPredictor())
-{
-    solve(UEqn() == -fvc::grad(p) + sources(rho, U));
-}
diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFPimpleFoam/createZones.H b/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFPimpleFoam/createZones.H
deleted file mode 100644
index f6c7e4dddf33cbb73940a05cb55af029823306bb..0000000000000000000000000000000000000000
--- a/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFPimpleFoam/createZones.H
+++ /dev/null
@@ -1,5 +0,0 @@
-    IOMRFZoneList mrfZones(mesh);
-    mrfZones.correctBoundaryVelocity(U);
-
-    IOporosityModelList pZones(mesh);
-    Switch pressureImplicitPorosity(false);
diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFPimpleFoam/pEqn.H b/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFPimpleFoam/pEqn.H
deleted file mode 100644
index 304798b9662d6c7bb8dd3bfc0bded47e552db19e..0000000000000000000000000000000000000000
--- a/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFPimpleFoam/pEqn.H
+++ /dev/null
@@ -1,111 +0,0 @@
-rho = thermo.rho();
-rho = max(rho, rhoMin);
-rho = min(rho, rhoMax);
-rho.relax();
-
-volScalarField rAU(1.0/UEqn().A());
-volVectorField HbyA("HbyA", U);
-HbyA = rAU*(UEqn() == sources(rho, U))().H();
-
-if (pimple.nCorrPISO() <= 1)
-{
-    UEqn.clear();
-}
-
-if (pimple.transonic())
-{
-    surfaceScalarField phid
-    (
-        "phid",
-        fvc::interpolate(psi)
-       *(
-            (fvc::interpolate(HbyA) & mesh.Sf())
-          + fvc::ddtPhiCorr(rAU, rho, U, phi)
-        )
-    );
-    mrfZones.relativeFlux(fvc::interpolate(psi), phid);
-
-    volScalarField Dp("Dp", rho*rAU);
-
-    while (pimple.correctNonOrthogonal())
-    {
-        fvScalarMatrix pEqn
-        (
-            fvm::ddt(psi, p)
-          + fvm::div(phid, p)
-          - fvm::laplacian(Dp, p)
-         ==
-            sources(psi, p, rho.name())
-        );
-
-        sources.constrain(pEqn, rho.name());
-
-        pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
-
-        if (pimple.finalNonOrthogonalIter())
-        {
-            phi == pEqn.flux();
-        }
-    }
-}
-else
-{
-    surfaceScalarField phiHbyA
-    (
-        "phiHbyA",
-        fvc::interpolate(rho)
-       *(
-            (fvc::interpolate(HbyA) & mesh.Sf())
-          + fvc::ddtPhiCorr(rAU, rho, U, phi)
-        )
-    );
-
-    mrfZones.relativeFlux(fvc::interpolate(rho), phiHbyA);
-
-    volScalarField Dp("Dp", rho*rAU);
-
-    while (pimple.correctNonOrthogonal())
-    {
-        // Pressure corrector
-        fvScalarMatrix pEqn
-        (
-            fvm::ddt(psi, p)
-          + fvc::div(phiHbyA)
-          - fvm::laplacian(Dp, p)
-         ==
-            sources(psi, p, rho.name())
-        );
-
-        sources.constrain(pEqn, rho.name());
-
-        pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
-
-        if (pimple.finalNonOrthogonalIter())
-        {
-            phi = phiHbyA + pEqn.flux();
-        }
-    }
-}
-
-#include "rhoEqn.H"
-#include "compressibleContinuityErrs.H"
-
-// Explicitly relax pressure for momentum corrector
-p.relax();
-
-rho = thermo.rho();
-rho = max(rho, rhoMin);
-rho = min(rho, rhoMax);
-rho.relax();
-Info<< "rho max/min : " << max(rho).value()
-    << " " << min(rho).value() << endl;
-
-U = HbyA - rAU*fvc::grad(p);
-U.correctBoundaryConditions();
-sources.correct(U);
-K = 0.5*magSqr(U);
-
-if (thermo.dpdt())
-{
-    dpdt = fvc::ddt(p);
-}
diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFPimpleFoam/rhoPorousMRFPimpleFoam.C b/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFPimpleFoam/rhoPorousMRFPimpleFoam.C
deleted file mode 100644
index 0975b0de2b3c375aaddf93d3fde5891541b7e445..0000000000000000000000000000000000000000
--- a/applications/solvers/compressible/rhoPimpleFoam/rhoPorousMRFPimpleFoam/rhoPorousMRFPimpleFoam.C
+++ /dev/null
@@ -1,109 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2012 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/>.
-
-Application
-    rhoPorousMRFPimpleFoam
-
-Description
-    Transient solver for laminar or turbulent flow of compressible fluids
-    with support for porous media and MRF for HVAC and similar applications.
-
-    Uses the flexible PIMPLE (PISO-SIMPLE) solution for time-resolved and
-    pseudo-transient simulations.
-
-\*---------------------------------------------------------------------------*/
-
-#include "fvCFD.H"
-#include "psiThermo.H"
-#include "turbulenceModel.H"
-#include "bound.H"
-#include "IOMRFZoneList.H"
-#include "IOporosityModelList.H"
-#include "IObasicSourceList.H"
-#include "pimpleControl.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-int main(int argc, char *argv[])
-{
-    #include "setRootCase.H"
-    #include "createTime.H"
-    #include "createMesh.H"
-
-    pimpleControl pimple(mesh);
-
-    #include "createFields.H"
-    #include "createZones.H"
-    #include "initContinuityErrs.H"
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-    Info<< "\nStarting time loop\n" << endl;
-
-    while (runTime.run())
-    {
-        #include "readTimeControls.H"
-        #include "compressibleCourantNo.H"
-        #include "setDeltaT.H"
-
-        runTime++;
-
-        Info<< "Time = " << runTime.timeName() << nl << endl;
-
-        if (pimple.nCorrPIMPLE() <= 1)
-        {
-            #include "rhoEqn.H"
-        }
-
-        // --- Pressure-velocity PIMPLE corrector loop
-        while (pimple.loop())
-        {
-            #include "UEqn.H"
-            #include "EEqn.H"
-
-            // --- Pressure corrector loop
-            while (pimple.correct())
-            {
-                #include "pEqn.H"
-            }
-
-            if (pimple.turbCorr())
-            {
-                turbulence->correct();
-            }
-        }
-
-        runTime.write();
-
-        Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
-            << "  ClockTime = " << runTime.elapsedClockTime() << " s"
-            << nl << endl;
-    }
-
-    Info<< "End\n" << endl;
-
-    return 0;
-}
-
-
-// ************************************************************************* //
diff --git a/applications/solvers/compressible/rhoSimpleFoam/UEqn.H b/applications/solvers/compressible/rhoSimpleFoam/UEqn.H
index 21ec2646be5bb5702e0b2210335592e1fe124ec0..8bbd96028194b6ecd1742e993bb3cb914c152acb 100644
--- a/applications/solvers/compressible/rhoSimpleFoam/UEqn.H
+++ b/applications/solvers/compressible/rhoSimpleFoam/UEqn.H
@@ -4,6 +4,8 @@
     (
         fvm::div(phi, U)
       + turbulence->divDevRhoReff(U)
+     ==
+        sources(rho, U)
     );
 
     UEqn().relax();
diff --git a/applications/solvers/compressible/rhoSimpleFoam/pEqn.H b/applications/solvers/compressible/rhoSimpleFoam/pEqn.H
index 2ea228f172d80bc4d4a330662723e9754840c0a2..2782d206524c620c7e535a190aecb004ae99f5e9 100644
--- a/applications/solvers/compressible/rhoSimpleFoam/pEqn.H
+++ b/applications/solvers/compressible/rhoSimpleFoam/pEqn.H
@@ -6,7 +6,7 @@
 
     volScalarField rAU(1.0/UEqn().A());
     volVectorField HbyA("HbyA", U);
-    HbyA = rAU*(UEqn() == sources(rho, U))().H();
+    HbyA = rAU*UEqn().H();
 
     UEqn.clear();
 
@@ -20,6 +20,8 @@
             fvc::interpolate(psi)*(fvc::interpolate(HbyA) & mesh.Sf())
         );
 
+        sources.relativeFlux(fvc::interpolate(psi), phid);
+
         while (simple.correctNonOrthogonal())
         {
             fvScalarMatrix pEqn
@@ -33,7 +35,7 @@
             // Relax the pressure equation to ensure diagonal-dominance
             pEqn.relax();
 
-            sources.constrain(pEqn, rho.name());
+            sources.constrain(pEqn);
 
             pEqn.setReference(pRefCell, pRefValue);
 
@@ -53,6 +55,8 @@
             fvc::interpolate(rho)*(fvc::interpolate(HbyA) & mesh.Sf())
         );
 
+        sources.relativeFlux(fvc::interpolate(rho), phiHbyA);
+
         closedVolume = adjustPhi(phiHbyA, U, p);
 
         while (simple.correctNonOrthogonal())
@@ -67,7 +71,7 @@
 
             pEqn.setReference(pRefCell, pRefValue);
 
-            sources.constrain(pEqn, rho.name());
+            sources.constrain(pEqn);
 
             pEqn.solve();
 
diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousMRFSimpleFoam/Make/files b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousMRFSimpleFoam/Make/files
deleted file mode 100644
index d4792428af5f610d9cdfb8ef3ecc1c34c89abc50..0000000000000000000000000000000000000000
--- a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousMRFSimpleFoam/Make/files
+++ /dev/null
@@ -1,3 +0,0 @@
-rhoPorousMRFSimpleFoam.C
-
-EXE = $(FOAM_APPBIN)/rhoPorousMRFSimpleFoam
diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousMRFSimpleFoam/EEqn.H b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/EEqn.H
similarity index 100%
rename from applications/solvers/compressible/rhoSimpleFoam/rhoPorousMRFSimpleFoam/EEqn.H
rename to applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/EEqn.H
diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/Make/files b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/Make/files
new file mode 100644
index 0000000000000000000000000000000000000000..d108d0246ea8291699b0accf03dc7c4f1ffabb44
--- /dev/null
+++ b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/Make/files
@@ -0,0 +1,3 @@
+rhoPorousSimpleFoam.C
+
+EXE = $(FOAM_APPBIN)/rhoPorousSimpleFoam
diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousMRFSimpleFoam/Make/options b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/Make/options
similarity index 100%
rename from applications/solvers/compressible/rhoSimpleFoam/rhoPorousMRFSimpleFoam/Make/options
rename to applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/Make/options
diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousMRFSimpleFoam/UEqn.H b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/UEqn.H
similarity index 100%
rename from applications/solvers/compressible/rhoSimpleFoam/rhoPorousMRFSimpleFoam/UEqn.H
rename to applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/UEqn.H
diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousMRFSimpleFoam/createFields.H b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/createFields.H
similarity index 100%
rename from applications/solvers/compressible/rhoSimpleFoam/rhoPorousMRFSimpleFoam/createFields.H
rename to applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/createFields.H
diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousMRFSimpleFoam/createZones.H b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/createZones.H
similarity index 100%
rename from applications/solvers/compressible/rhoSimpleFoam/rhoPorousMRFSimpleFoam/createZones.H
rename to applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/createZones.H
diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousMRFSimpleFoam/pEqn.H b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/pEqn.H
similarity index 100%
rename from applications/solvers/compressible/rhoSimpleFoam/rhoPorousMRFSimpleFoam/pEqn.H
rename to applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/pEqn.H
diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousMRFSimpleFoam/rhoPorousMRFSimpleFoam.C b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C
similarity index 100%
rename from applications/solvers/compressible/rhoSimpleFoam/rhoPorousMRFSimpleFoam/rhoPorousMRFSimpleFoam.C
rename to applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C
diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoSimplecFoam/pEqn.H b/applications/solvers/compressible/rhoSimpleFoam/rhoSimplecFoam/pEqn.H
index 1ffacc1afaf9c5a2495e8e321c84f65a7ea592ac..02300d8a9e9a62676aa78bad3a9b53fae6f119ee 100644
--- a/applications/solvers/compressible/rhoSimpleFoam/rhoSimplecFoam/pEqn.H
+++ b/applications/solvers/compressible/rhoSimpleFoam/rhoSimplecFoam/pEqn.H
@@ -45,7 +45,7 @@ if (simple.transonic())
         // Relax the pressure equation to maintain diagonal dominance
         pEqn.relax();
 
-        sources.constrain(pEqn, rho.name());
+        sources.constrain(pEqn);
 
         pEqn.setReference(pRefCell, pRefValue);
 
@@ -82,7 +82,7 @@ else
             sources(psi, p, rho.name())
         );
 
-        sources.constrain(pEqn, rho.name());
+        sources.constrain(pEqn);
 
         pEqn.setReference(pRefCell, pRefValue);
 
diff --git a/applications/solvers/heatTransfer/buoyantPimpleFoam/EEqn.H b/applications/solvers/heatTransfer/buoyantPimpleFoam/EEqn.H
new file mode 100644
index 0000000000000000000000000000000000000000..1cc6ed584c6c3806864cc0a0f461182796b9799a
--- /dev/null
+++ b/applications/solvers/heatTransfer/buoyantPimpleFoam/EEqn.H
@@ -0,0 +1,28 @@
+{
+    volScalarField& he = thermo.he();
+
+    fvScalarMatrix EEqn
+    (
+        fvm::ddt(rho, he) + fvm::div(phi, he)
+      + fvc::ddt(rho, K) + fvc::div(phi, K)
+      + (
+            he.name() == "e"
+          ? fvc::div
+            (
+                fvc::absolute(phi/fvc::interpolate(rho), U),
+                p,
+                "div(phiv,p)"
+            )
+          : -dpdt
+        )
+      - fvm::laplacian(turbulence->alphaEff(), he)
+     ==
+        sources(rho, he)
+    );
+
+    EEqn.relax();
+    sources.constrain(EEqn);
+    EEqn.solve();
+
+    thermo.correct();
+}
diff --git a/applications/solvers/heatTransfer/buoyantPimpleFoam/Make/options b/applications/solvers/heatTransfer/buoyantPimpleFoam/Make/options
index 5d86b094de32587a79d2bade587ef6f47ccbeb90..6962643dcd609b438ad5e64f56641b41fa1221cb 100644
--- a/applications/solvers/heatTransfer/buoyantPimpleFoam/Make/options
+++ b/applications/solvers/heatTransfer/buoyantPimpleFoam/Make/options
@@ -1,21 +1,21 @@
 EXE_INC = \
-    -I../../compressible/rhoPimpleFoam \
-    -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-    -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
     -I$(LIB_SRC)/finiteVolume/lnInclude \
     -I$(LIB_SRC)/sampling/lnInclude \
     -I$(LIB_SRC)/meshTools/lnInclude \
     -I$(LIB_SRC)/fieldSources/lnInclude \
+    -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
+    -I$(LIB_SRC)/thermophysicalModels/radiationModels/lnInclude \
+    -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel
 
 EXE_LIBS = \
+    -lfiniteVolume \
+    -lsampling \
     -lmeshTools \
+    -lfieldSources \
     -lfluidThermophysicalModels \
+    -lradiationModels \
     -lspecie \
     -lcompressibleTurbulenceModel \
     -lcompressibleRASModels \
-    -lcompressibleLESModels \
-    -lfiniteVolume \
-    -lsampling \
-    -lmeshTools \
-    -lfieldSources
+    -lcompressibleLESModels
 
diff --git a/applications/solvers/heatTransfer/buoyantPimpleFoam/UEqn.H b/applications/solvers/heatTransfer/buoyantPimpleFoam/UEqn.H
index d8f3bb56ce13a0455c52f7ccbe598f353ea21b2e..e12724ed69716582c3b683aa1907ac9cb9a89171 100644
--- a/applications/solvers/heatTransfer/buoyantPimpleFoam/UEqn.H
+++ b/applications/solvers/heatTransfer/buoyantPimpleFoam/UEqn.H
@@ -5,10 +5,14 @@
         fvm::ddt(rho, U)
       + fvm::div(phi, U)
       + turbulence->divDevRhoReff(U)
+     ==
+        sources(rho, U)
     );
 
     UEqn.relax();
 
+    sources.constrain(UEqn);
+
     if (pimple.momentumPredictor())
     {
         solve
@@ -22,7 +26,6 @@
                   - fvc::snGrad(p_rgh)
                 )*mesh.magSf()
             )
-          + sources(rho, U)
         );
         K = 0.5*magSqr(U);
     }
diff --git a/applications/solvers/heatTransfer/buoyantPimpleFoam/buoyantPimpleFoam.C b/applications/solvers/heatTransfer/buoyantPimpleFoam/buoyantPimpleFoam.C
index 79d3fb7f2f7668b4dbf1696c25ac7f38a6a0c25b..62fcf33c04c861e5204ad10ffd8c963254c9513a 100644
--- a/applications/solvers/heatTransfer/buoyantPimpleFoam/buoyantPimpleFoam.C
+++ b/applications/solvers/heatTransfer/buoyantPimpleFoam/buoyantPimpleFoam.C
@@ -36,7 +36,7 @@ Description
 #include "fvCFD.H"
 #include "rhoThermo.H"
 #include "turbulenceModel.H"
-#include "fixedGradientFvPatchFields.H"
+#include "radiationModel.H"
 #include "IObasicSourceList.H"
 #include "pimpleControl.H"
 
@@ -49,6 +49,7 @@ int main(int argc, char *argv[])
     #include "createMesh.H"
     #include "readGravitationalAcceleration.H"
     #include "createFields.H"
+    #include "createRadiationModel.H"
     #include "initContinuityErrs.H"
     #include "readTimeControls.H"
     #include "compressibleCourantNo.H"
diff --git a/applications/solvers/heatTransfer/buoyantPimpleFoam/createFields.H b/applications/solvers/heatTransfer/buoyantPimpleFoam/createFields.H
index 9838978028edd00a3f9fbce7563b59bce0dcc9cb..b606339627d2b97b590deecec5d30159ba678f87 100644
--- a/applications/solvers/heatTransfer/buoyantPimpleFoam/createFields.H
+++ b/applications/solvers/heatTransfer/buoyantPimpleFoam/createFields.H
@@ -1,9 +1,6 @@
     Info<< "Reading thermophysical properties\n" << endl;
 
-    autoPtr<rhoThermo> pThermo
-    (
-        rhoThermo::New(mesh)
-    );
+    autoPtr<rhoThermo> pThermo(rhoThermo::New(mesh));
     rhoThermo& thermo = pThermo();
     thermo.validate(args.executable(), "h", "e");
 
diff --git a/applications/solvers/heatTransfer/buoyantPimpleFoam/pEqn.H b/applications/solvers/heatTransfer/buoyantPimpleFoam/pEqn.H
index 86c314c9c4bab41f858844d961d85eeaac511ccf..99bef3a118b8f6163992997b6221bfa00ded3185 100644
--- a/applications/solvers/heatTransfer/buoyantPimpleFoam/pEqn.H
+++ b/applications/solvers/heatTransfer/buoyantPimpleFoam/pEqn.H
@@ -9,7 +9,7 @@
     surfaceScalarField rhorAUf("Dp", fvc::interpolate(rho*rAU));
 
     volVectorField HbyA("HbyA", U);
-    HbyA = rAU*(UEqn == sources(rho, U))().H();
+    HbyA = rAU*UEqn.H();
 
     surfaceScalarField phig(-rhorAUf*ghf*fvc::snGrad(rho)*mesh.magSf());
 
@@ -24,6 +24,8 @@
       + phig
     );
 
+    sources.relativeFlux(fvc::interpolate(rho), phiHbyA);
+
     fvScalarMatrix p_rghDDtEqn
     (
         fvc::ddt(rho) + psi*correction(fvm::ddt(p_rgh))
@@ -40,7 +42,7 @@
           - fvm::laplacian(rhorAUf, p_rgh)
         );
 
-        sources.constrain(p_rghEqn, rho.name());
+        sources.constrain(p_rghEqn);
 
         p_rghEqn.solve(mesh.solver(p_rgh.select(pimple.finalInnerIter())));
 
diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/Allwmake b/applications/solvers/heatTransfer/buoyantSimpleFoam/Allwmake
deleted file mode 100755
index 0fe8e8f4ad18ed67c9f57ed5c360bc03d39f69cf..0000000000000000000000000000000000000000
--- a/applications/solvers/heatTransfer/buoyantSimpleFoam/Allwmake
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-cd ${0%/*} || exit 1    # run from this directory
-set -x
-
-wmake
-wmake buoyantSimpleRadiationFoam
-
-# ----------------------------------------------------------------- end-of-file
diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/EEqn.H b/applications/solvers/heatTransfer/buoyantSimpleFoam/EEqn.H
index e4c79b40cc5685ddbeeab18c32e8611d745656b8..094b50cb3eec079b73160ce77e34ef5a8d055327 100644
--- a/applications/solvers/heatTransfer/buoyantSimpleFoam/EEqn.H
+++ b/applications/solvers/heatTransfer/buoyantSimpleFoam/EEqn.H
@@ -10,10 +10,17 @@
           : fvc::div(phi, volScalarField("K", 0.5*magSqr(U)))
         )
       - fvm::laplacian(turbulence->alphaEff(), he)
+     ==
+        radiation->Sh(thermo)
+      + sources(rho, he)
     );
 
     EEqn.relax();
+
+    sources.constrain(EEqn);
+
     EEqn.solve();
 
     thermo.correct();
+    radiation->correct();
 }
diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/Make/options b/applications/solvers/heatTransfer/buoyantSimpleFoam/Make/options
index 74ddd1244659aa9f6591ddb2ea9f9b2d46881429..5103b2dd72c6c1c05a19a38ff441ca31f39b197e 100644
--- a/applications/solvers/heatTransfer/buoyantSimpleFoam/Make/options
+++ b/applications/solvers/heatTransfer/buoyantSimpleFoam/Make/options
@@ -1,14 +1,22 @@
 EXE_INC = \
+    -I$(LIB_SRC)/finiteVolume/lnInclude \
+    -I$(LIB_SRC)/fieldSources/lnInclude \
+    -I$(LIB_SRC)/sampling/lnInclude \
+    -I$(LIB_SRC)/meshTools/lnInclude \
     -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
+    -I$(LIB_SRC)/thermophysicalModels/radiationModels/lnInclude \
     -I$(LIB_SRC)/turbulenceModels \
     -I$(LIB_SRC)/turbulenceModels/compressible/RAS/lnInclude \
-    -I$(LIB_SRC)/finiteVolume/cfdTools \
-    -I$(LIB_SRC)/finiteVolume/lnInclude
+    -I$(LIB_SRC)/turbulenceModels/RAS \
 
 EXE_LIBS = \
+    -lfiniteVolume \
+    -lfieldSources \
+    -lsampling \
     -lmeshTools \
     -lfluidThermophysicalModels \
     -lspecie \
+    -lradiationModels \
     -lcompressibleTurbulenceModel \
     -lcompressibleRASModels \
-    -lfiniteVolume
+    -lmeshTools
diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/UEqn.H b/applications/solvers/heatTransfer/buoyantSimpleFoam/UEqn.H
index e1593c3691cda41ce18ded23b5925b5813bcb9ab..860cef45470a74ded924459b3c3e7f86ce445405 100644
--- a/applications/solvers/heatTransfer/buoyantSimpleFoam/UEqn.H
+++ b/applications/solvers/heatTransfer/buoyantSimpleFoam/UEqn.H
@@ -4,11 +4,13 @@
     (
         fvm::div(phi, U)
       + turbulence->divDevRhoReff(U)
+     ==
+        sources(rho, U)
     );
 
     UEqn().relax();
 
-    mrfZones.addCoriolis(rho, UEqn());
+    sources.constrain(UEqn());
 
     if (simple.momentumPredictor())
     {
diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleFoam.C b/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleFoam.C
index fc47fc90a1cc25556e6e52077db6976588ccf1a8..bbd6f77773c2777d9962c9d392090b60f30023b2 100644
--- a/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleFoam.C
+++ b/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleFoam.C
@@ -22,19 +22,20 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Application
-    buoyantSimpleFoam
+    buoyantSimpleRadiationFoam
 
 Description
-    Steady-state solver for buoyant, turbulent flow of compressible fluids
+    Steady-state solver for buoyant, turbulent flow of compressible fluids,
+    including radiation, for ventilation and heat-transfer.
 
 \*---------------------------------------------------------------------------*/
 
 #include "fvCFD.H"
 #include "psiThermo.H"
 #include "RASModel.H"
-#include "fixedGradientFvPatchFields.H"
+#include "radiationModel.H"
 #include "simpleControl.H"
-#include "IOMRFZoneList.H"
+#include "IObasicSourceList.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -45,7 +46,7 @@ int main(int argc, char *argv[])
     #include "createMesh.H"
     #include "readGravitationalAcceleration.H"
     #include "createFields.H"
-    #include "createZones.H"
+    #include "createRadiationModel.H"
     #include "initContinuityErrs.H"
 
     simpleControl simple(mesh);
diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleRadiationFoam/EEqn.H b/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleRadiationFoam/EEqn.H
deleted file mode 100644
index 0d1f41d0c30326a6647e51a0be4cc958921d69b8..0000000000000000000000000000000000000000
--- a/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleRadiationFoam/EEqn.H
+++ /dev/null
@@ -1,22 +0,0 @@
-{
-    volScalarField& he = thermo.he();
-
-    fvScalarMatrix EEqn
-    (
-        fvm::div(phi, he)
-      + (
-            he.name() == "e"
-          ? fvc::div(phi, volScalarField("Ekp", 0.5*magSqr(U) + p/rho))
-          : fvc::div(phi, volScalarField("K", 0.5*magSqr(U)))
-        )
-      - fvm::laplacian(turbulence->alphaEff(), he)
-     ==
-        radiation->Sh(thermo)
-    );
-
-    EEqn.relax();
-    EEqn.solve();
-
-    thermo.correct();
-    radiation->correct();
-}
diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleRadiationFoam/Make/files b/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleRadiationFoam/Make/files
deleted file mode 100644
index a8347c552591472f0adfd57571aebeb0d2cb440e..0000000000000000000000000000000000000000
--- a/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleRadiationFoam/Make/files
+++ /dev/null
@@ -1,3 +0,0 @@
-buoyantSimpleRadiationFoam.C
-
-EXE = $(FOAM_APPBIN)/buoyantSimpleRadiationFoam
diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleRadiationFoam/Make/options b/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleRadiationFoam/Make/options
deleted file mode 100644
index f26046adb2a08affb14512022e8082ea6fc73b51..0000000000000000000000000000000000000000
--- a/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleRadiationFoam/Make/options
+++ /dev/null
@@ -1,18 +0,0 @@
-EXE_INC = \
-    -I.. \
-    -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-    -I$(LIB_SRC)/thermophysicalModels/radiationModels/lnInclude \
-    -I$(LIB_SRC)/turbulenceModels \
-    -I$(LIB_SRC)/turbulenceModels/compressible/RAS/lnInclude \
-    -I$(LIB_SRC)/turbulenceModels/RAS \
-    -I$(LIB_SRC)/finiteVolume/cfdTools \
-    -I$(LIB_SRC)/finiteVolume/lnInclude
-
-EXE_LIBS = \
-    -lfluidThermophysicalModels \
-    -lspecie \
-    -lradiationModels \
-    -lcompressibleTurbulenceModel \
-    -lcompressibleRASModels \
-    -lfiniteVolume \
-    -lmeshTools
diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleRadiationFoam/buoyantSimpleRadiationFoam.C b/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleRadiationFoam/buoyantSimpleRadiationFoam.C
deleted file mode 100644
index 38f3a7c647c08a78f0cb9f4269d692529b23a634..0000000000000000000000000000000000000000
--- a/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleRadiationFoam/buoyantSimpleRadiationFoam.C
+++ /dev/null
@@ -1,86 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2012 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/>.
-
-Application
-    buoyantSimpleRadiationFoam
-
-Description
-    Steady-state solver for buoyant, turbulent flow of compressible fluids,
-    including radiation, for ventilation and heat-transfer.
-
-\*---------------------------------------------------------------------------*/
-
-#include "fvCFD.H"
-#include "psiThermo.H"
-#include "RASModel.H"
-#include "fixedGradientFvPatchFields.H"
-#include "radiationModel.H"
-#include "simpleControl.H"
-#include "IOMRFZoneList.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-int main(int argc, char *argv[])
-{
-    #include "setRootCase.H"
-    #include "createTime.H"
-    #include "createMesh.H"
-    #include "readGravitationalAcceleration.H"
-    #include "createFields.H"
-    #include "createZones.H"
-    #include "createRadiationModel.H"
-    #include "initContinuityErrs.H"
-
-    simpleControl simple(mesh);
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-    Info<< "\nStarting time loop\n" << endl;
-
-    while (simple.loop())
-    {
-        Info<< "Time = " << runTime.timeName() << nl << endl;
-
-        // Pressure-velocity SIMPLE corrector
-        {
-            #include "UEqn.H"
-            #include "EEqn.H"
-            #include "pEqn.H"
-        }
-
-        turbulence->correct();
-
-        runTime.write();
-
-        Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
-            << "  ClockTime = " << runTime.elapsedClockTime() << " s"
-            << nl << endl;
-    }
-
-    Info<< "End\n" << endl;
-
-    return 0;
-}
-
-
-// ************************************************************************* //
diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/createFields.H b/applications/solvers/heatTransfer/buoyantSimpleFoam/createFields.H
index bb7a65cb1d28ac920674974f91563447637874e1..704bf32d505598f57d2869c66d267970e3f4e84b 100644
--- a/applications/solvers/heatTransfer/buoyantSimpleFoam/createFields.H
+++ b/applications/solvers/heatTransfer/buoyantSimpleFoam/createFields.H
@@ -87,3 +87,5 @@
 
     dimensionedScalar initialMass = fvc::domainIntegrate(rho);
     dimensionedScalar totalVolume = sum(mesh.V());
+
+    IObasicSourceList sources(mesh);
diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/createZones.H b/applications/solvers/heatTransfer/buoyantSimpleFoam/createZones.H
deleted file mode 100644
index 08480c68d2d6f4c9efc89409a46ed1abe1042ad9..0000000000000000000000000000000000000000
--- a/applications/solvers/heatTransfer/buoyantSimpleFoam/createZones.H
+++ /dev/null
@@ -1,3 +0,0 @@
-    IOMRFZoneList mrfZones(mesh);
-    mrfZones.correctBoundaryVelocity(U);
-
diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/pEqn.H b/applications/solvers/heatTransfer/buoyantSimpleFoam/pEqn.H
index 66ae75b650e22a69f980c41e5b1365658c05d43a..2e6cbf3d47d000cd34923efb37740ccd76d6ae3f 100644
--- a/applications/solvers/heatTransfer/buoyantSimpleFoam/pEqn.H
+++ b/applications/solvers/heatTransfer/buoyantSimpleFoam/pEqn.H
@@ -17,7 +17,7 @@
         fvc::interpolate(rho)*(fvc::interpolate(HbyA) & mesh.Sf())
     );
 
-    mrfZones.relativeFlux(fvc::interpolate(rho), phiHbyA);
+    sources.relativeFlux(fvc::interpolate(rho), phiHbyA);
 
     bool closedVolume = adjustPhi(phiHbyA, U, p_rgh);
 
@@ -45,6 +45,7 @@
             // calculated from the relaxed pressure
             U = HbyA + rAU*fvc::reconstruct((phig - p_rghEqn.flux())/rhorAUf);
             U.correctBoundaryConditions();
+            sources.correct(U);
         }
     }
 
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C
index 45861220061db63a2bb6d2fe75671e8addec2b49..149a81a3a4b61484c154809536b9d5048fa013e9 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C
@@ -36,7 +36,6 @@ Description
 #include "regionProperties.H"
 #include "solidThermo.H"
 #include "radiationModel.H"
-#include "IOporosityModelList.H"
 #include "IObasicSourceList.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/EEqn.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/EEqn.H
index be84cfce0e70866d09a850892603a5845a1e04d5..3e3157de72c8b313724703aa5c54747f7df6d873 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/EEqn.H
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/EEqn.H
@@ -16,6 +16,9 @@
     );
 
     EEqn.relax();
+
+    sources.constrain(EEqn);
+
     EEqn.solve();
 
     thermo.correct();
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/UEqn.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/UEqn.H
index 8bbc8be5813473b16e1779f85869faee091a4f4e..8df8cd47840968a70df672ef61f39ede626142ce 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/UEqn.H
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/UEqn.H
@@ -3,13 +3,13 @@
     (
         fvm::div(phi, U)
       + turb.divDevRhoReff(U)
-      + sources(rho, U)
+     ==
+        sources(rho, U)
     );
 
     UEqn().relax();
 
-    // Add porous resistance
-    pZones.addResistance(UEqn());
+    sources.constrain(UEqn());
 
     solve
     (
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/createFluidFields.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/createFluidFields.H
index 3d66fa798b6bd653efc93ea38b1e35347b72bd9c..d30848804e830b517accca121df2e741be4f1dcf 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/createFluidFields.H
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/createFluidFields.H
@@ -18,7 +18,6 @@
     PtrList<dimensionedScalar> rhoMin(fluidRegions.size());
 
     PtrList<IObasicSourceList> heatSources(fluidRegions.size());
-    PtrList<IOporosityModelList> porousZonesFluid(fluidRegions.size());
 
     // Populate fluid field pointer lists
     forAll(fluidRegions, i)
@@ -200,13 +199,6 @@
             i,
             new IObasicSourceList(fluidRegions[i])
         );
-
-        Info<< "    Adding porous zones\n" << endl;
-        porousZonesFluid.set
-        (
-            i,
-            new IOporosityModelList(fluidRegions[i])
-        );
     }
 
 
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/pEqn.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/pEqn.H
index d2ea510ced756fd512808be931430aa46287e3a6..fca0848912396266a81e377094fd4c7aaef6548c 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/pEqn.H
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/pEqn.H
@@ -23,6 +23,8 @@
 
     phiHbyA += phig;
 
+    sources.relativeFlux(fvc::interpolate(rho), phiHbyA);
+
     dimensionedScalar compressibility = fvc::domainIntegrate(psi);
     bool compressible = (compressibility.value() > SMALL);
 
@@ -54,6 +56,7 @@
             // calculated from the relaxed pressure
             U = HbyA + rAU*fvc::reconstruct((phig - p_rghEqn.flux())/rhorAUf);
             U.correctBoundaryConditions();
+            sources.correct(U);
         }
     }
 
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/setRegionFluidFields.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/setRegionFluidFields.H
index 4f15d8c6192c87acd9401c2ce0184d5c19faa1cb..ee005e0d22964bab19e15fb14ef680bdeeaf8371 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/setRegionFluidFields.H
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/setRegionFluidFields.H
@@ -14,8 +14,6 @@
 
     IObasicSourceList& sources = heatSources[i];
 
-    const IOporosityModelList& pZones = porousZonesFluid[i];
-
     const dimensionedScalar initialMass
     (
         "initialMass",
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/pEqn.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/pEqn.H
index 753c3257de033e361dbeecafced8d21f665bc5f6..2944c6aef06de6b84e767b0e2fa74187078f013a 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/pEqn.H
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/pEqn.H
@@ -24,6 +24,8 @@
       + phig
     );
 
+    sources.relativeFlux(fvc::interpolate(rho), phiHbyA);
+
     {
         fvScalarMatrix p_rghDDtEqn
         (
@@ -64,6 +66,7 @@
                 U = HbyA
                   + rAU*fvc::reconstruct((phig + p_rghEqn.flux())/rhorAUf);
                 U.correctBoundaryConditions();
+                sources.correct(U);
                 K = 0.5*magSqr(U);
             }
         }
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solveSolid.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solveSolid.H
index a04750cf17ac37a98c582ff3fd3a5ea8a103944e..c281ccc1971a0499c81115683d71d47e4083b1a6 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solveSolid.H
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solveSolid.H
@@ -10,9 +10,14 @@ if (finalIter)
         (
             fvm::ddt(betav*rho, h)
           - fvm::laplacian(betav*alpha, h, "laplacian(alpha,h)")
-          + sources(rho, h)
+          ==
+            sources(rho, h)
         );
+
         hEqn().relax();
+
+        sources.constrain(hEqn());
+
         hEqn().solve(mesh.solver(h.select(finalIter)));
     }
 }
diff --git a/applications/solvers/incompressible/pimpleFoam/UEqn.H b/applications/solvers/incompressible/pimpleFoam/UEqn.H
index c274f6a2e8e59182c83e37bf308f30acb6946fd2..84a404654abc2741e3c1db12204b609b3ed63bc9 100644
--- a/applications/solvers/incompressible/pimpleFoam/UEqn.H
+++ b/applications/solvers/incompressible/pimpleFoam/UEqn.H
@@ -5,12 +5,10 @@ tmp<fvVectorMatrix> UEqn
     fvm::ddt(U)
   + fvm::div(phi, U)
   + turbulence->divDevReff(U)
+ ==
+    sources(U)
 );
 
-mrfZones.addCoriolis(UEqn());
-
-pZones.addResistance(UEqn());
-
 UEqn().relax();
 
 sources.constrain(UEqn());
@@ -19,5 +17,5 @@ volScalarField rAU(1.0/UEqn().A());
 
 if (pimple.momentumPredictor())
 {
-    solve(UEqn() == -fvc::grad(p) + sources(U));
+    solve(UEqn() == -fvc::grad(p));
 }
diff --git a/applications/solvers/incompressible/pimpleFoam/createZones.H b/applications/solvers/incompressible/pimpleFoam/createZones.H
deleted file mode 100644
index fcd02024d58b1b5be8e36f935e2ca70b4ba8bbaf..0000000000000000000000000000000000000000
--- a/applications/solvers/incompressible/pimpleFoam/createZones.H
+++ /dev/null
@@ -1,4 +0,0 @@
-    IOMRFZoneList mrfZones(mesh);
-    mrfZones.correctBoundaryVelocity(U);
-
-    IOporosityModelList pZones(mesh);
diff --git a/applications/solvers/incompressible/pimpleFoam/pEqn.H b/applications/solvers/incompressible/pimpleFoam/pEqn.H
index 1eb8590552ba896d94634784fd98e9f857db731c..9fc62bd9f13163a24aff6e02ec7b1dcb804878b2 100644
--- a/applications/solvers/incompressible/pimpleFoam/pEqn.H
+++ b/applications/solvers/incompressible/pimpleFoam/pEqn.H
@@ -1,5 +1,5 @@
 volVectorField HbyA("HbyA", U);
-HbyA = rAU*(UEqn() == sources(U))().H();
+HbyA = rAU*UEqn().H();
 
 if (pimple.nCorrPISO() <= 1)
 {
@@ -15,7 +15,7 @@ surfaceScalarField phiHbyA
 
 adjustPhi(phiHbyA, U, p);
 
-mrfZones.relativeFlux(phiHbyA);
+sources.relativeFlux(phiHbyA);
 
 // Non-orthogonal pressure corrector loop
 while (pimple.correctNonOrthogonal())
diff --git a/applications/solvers/incompressible/pimpleFoam/pimpleFoam.C b/applications/solvers/incompressible/pimpleFoam/pimpleFoam.C
index d55af57e34dc3a812ce8e157d76b0927fc67f634..8b0f240e4d6c75bc720a4a38ad7d0c74cc17e75a 100644
--- a/applications/solvers/incompressible/pimpleFoam/pimpleFoam.C
+++ b/applications/solvers/incompressible/pimpleFoam/pimpleFoam.C
@@ -30,8 +30,7 @@ Description
 
     Sub-models include:
     - turbulence modelling, i.e. laminar, RAS or LES
-    - porosity (explicit treatment)
-    - Multiple Reference Frame (MRF)
+    - run-time selectable sources, e.g. MRF, explicit porosity
 
 \*---------------------------------------------------------------------------*/
 
@@ -51,7 +50,6 @@ int main(int argc, char *argv[])
     #include "createTime.H"
     #include "createMesh.H"
     #include "createFields.H"
-    #include "createZones.H"
     #include "initContinuityErrs.H"
 
     pimpleControl pimple(mesh);
diff --git a/applications/solvers/incompressible/simpleFoam/Allwmake b/applications/solvers/incompressible/simpleFoam/Allwmake
index c73703955a90a1ac95d2b9cd909fdcc599d2e56b..801fd3b767bf1abcd414509438ee99f14456a324 100755
--- a/applications/solvers/incompressible/simpleFoam/Allwmake
+++ b/applications/solvers/incompressible/simpleFoam/Allwmake
@@ -5,7 +5,6 @@ set -x
 wmake
 
 wmake SRFSimpleFoam
-wmake MRFSimpleFoam
 wmake porousSimpleFoam
 
 # ----------------------------------------------------------------- end-of-file
diff --git a/applications/solvers/incompressible/simpleFoam/MRFSimpleFoam/MRFSimpleFoam.C b/applications/solvers/incompressible/simpleFoam/MRFSimpleFoam/MRFSimpleFoam.C
deleted file mode 100644
index 7c78107c539958ac28693edfd80d3c8354b83153..0000000000000000000000000000000000000000
--- a/applications/solvers/incompressible/simpleFoam/MRFSimpleFoam/MRFSimpleFoam.C
+++ /dev/null
@@ -1,85 +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/>.
-
-Application
-    MRFSimpleFoam
-
-Description
-    Steady-state solver for incompressible, turbulent flow of non-Newtonian
-    fluids with MRF regions.
-
-\*---------------------------------------------------------------------------*/
-
-#include "fvCFD.H"
-#include "singlePhaseTransportModel.H"
-#include "RASModel.H"
-#include "IOMRFZoneList.H"
-#include "simpleControl.H"
-#include "IObasicSourceList.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-int main(int argc, char *argv[])
-{
-    #include "setRootCase.H"
-
-    #include "createTime.H"
-    #include "createMesh.H"
-    #include "createFields.H"
-    #include "initContinuityErrs.H"
-
-    IOMRFZoneList mrfZones(mesh);
-    mrfZones.correctBoundaryVelocity(U);
-
-    simpleControl simple(mesh);
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-    Info<< "\nStarting time loop\n" << endl;
-
-    while (simple.loop())
-    {
-        Info<< "Time = " << runTime.timeName() << nl << endl;
-
-        // --- Pressure-velocity SIMPLE corrector
-        {
-            #include "UEqn.H"
-            #include "pEqn.H"
-        }
-
-        turbulence->correct();
-
-        runTime.write();
-
-        Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
-            << "  ClockTime = " << runTime.elapsedClockTime() << " s"
-            << nl << endl;
-    }
-
-    Info<< "End\n" << endl;
-
-    return 0;
-}
-
-
-// ************************************************************************* //
diff --git a/applications/solvers/incompressible/simpleFoam/MRFSimpleFoam/Make/files b/applications/solvers/incompressible/simpleFoam/MRFSimpleFoam/Make/files
deleted file mode 100644
index 56c194272d88eb33bf2b86f1d54567e0bdf1d930..0000000000000000000000000000000000000000
--- a/applications/solvers/incompressible/simpleFoam/MRFSimpleFoam/Make/files
+++ /dev/null
@@ -1,3 +0,0 @@
-MRFSimpleFoam.C
-
-EXE = $(FOAM_APPBIN)/MRFSimpleFoam
diff --git a/applications/solvers/incompressible/simpleFoam/MRFSimpleFoam/Make/options b/applications/solvers/incompressible/simpleFoam/MRFSimpleFoam/Make/options
deleted file mode 100644
index e9f47baf9b4a1c37fb5444c7aec9168980fbcba4..0000000000000000000000000000000000000000
--- a/applications/solvers/incompressible/simpleFoam/MRFSimpleFoam/Make/options
+++ /dev/null
@@ -1,19 +0,0 @@
-EXE_INC = \
-    -I.. \
-    -I$(LIB_SRC)/turbulenceModels \
-    -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/RASModel \
-    -I$(LIB_SRC)/transportModels \
-    -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
-    -I$(LIB_SRC)/finiteVolume/lnInclude \
-    -I$(LIB_SRC)/meshTools/lnInclude \
-    -I$(LIB_SRC)/fieldSources/lnInclude \
-    -I$(LIB_SRC)/sampling/lnInclude
-
-
-EXE_LIBS = \
-    -lincompressibleRASModels \
-    -lincompressibleTransportModels \
-    -lfiniteVolume \
-    -lmeshTools \
-    -lfieldSources \
-    -lsampling
diff --git a/applications/solvers/incompressible/simpleFoam/MRFSimpleFoam/UEqn.H b/applications/solvers/incompressible/simpleFoam/MRFSimpleFoam/UEqn.H
deleted file mode 100644
index d595a64c8f1eaac60f5e7c1526a9c8ff49c77479..0000000000000000000000000000000000000000
--- a/applications/solvers/incompressible/simpleFoam/MRFSimpleFoam/UEqn.H
+++ /dev/null
@@ -1,17 +0,0 @@
-    // Momentum predictor
-
-    tmp<fvVectorMatrix> UEqn
-    (
-        fvm::div(phi, U)
-      + turbulence->divDevReff(U)
-      ==
-        sources(U)
-    );
-
-    mrfZones.addCoriolis(UEqn());
-
-    UEqn().relax();
-
-    sources.constrain(UEqn());
-
-    solve(UEqn() == -fvc::grad(p));
diff --git a/applications/solvers/incompressible/simpleFoam/MRFSimpleFoam/pEqn.H b/applications/solvers/incompressible/simpleFoam/MRFSimpleFoam/pEqn.H
deleted file mode 100644
index b7bf83e8cd98f73c80bf70c0250da8e3d028fa16..0000000000000000000000000000000000000000
--- a/applications/solvers/incompressible/simpleFoam/MRFSimpleFoam/pEqn.H
+++ /dev/null
@@ -1,38 +0,0 @@
-{
-    volScalarField rAU(1.0/UEqn().A());
-    volVectorField HbyA("HbyA", U);
-    HbyA = rAU*UEqn().H();
-    UEqn.clear();
-
-    surfaceScalarField phiHbyA("phiHbyA", fvc::interpolate(HbyA) & mesh.Sf());
-    adjustPhi(phiHbyA, U, p);
-    mrfZones.relativeFlux(phiHbyA);
-    adjustPhi(phiHbyA, U, p);
-
-    // Non-orthogonal pressure corrector loop
-    while (simple.correctNonOrthogonal())
-    {
-        fvScalarMatrix pEqn
-        (
-            fvm::laplacian(rAU, p) == fvc::div(phiHbyA)
-        );
-
-        pEqn.setReference(pRefCell, pRefValue);
-        pEqn.solve();
-
-        if (simple.finalNonOrthogonalIter())
-        {
-            phi = phiHbyA - pEqn.flux();
-        }
-    }
-
-    #include "continuityErrs.H"
-
-    // Explicitly relax pressure for momentum corrector
-    p.relax();
-
-    // Momentum corrector
-    U = HbyA - rAU*fvc::grad(p);
-    U.correctBoundaryConditions();
-    sources.correct(U);
-}
diff --git a/applications/solvers/incompressible/simpleFoam/pEqn.H b/applications/solvers/incompressible/simpleFoam/pEqn.H
index adc0c0761a2f9a08b44270243423b176eea995c7..116929e3ea9ef23ae220cd9910ce240554266954 100644
--- a/applications/solvers/incompressible/simpleFoam/pEqn.H
+++ b/applications/solvers/incompressible/simpleFoam/pEqn.H
@@ -7,6 +7,8 @@
     surfaceScalarField phiHbyA("phiHbyA", fvc::interpolate(HbyA) & mesh.Sf());
     adjustPhi(phiHbyA, U, p);
 
+    sources.relativeFlux(phiHbyA);
+
     // Non-orthogonal pressure corrector loop
     while (simple.correctNonOrthogonal())
     {
diff --git a/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/UEqn.H b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/UEqn.H
index 632a160030e9b65501e13d6634ae25a53bfa321b..101c16d827afa0936982d2b62ceb17c38afbdce2 100644
--- a/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/UEqn.H
+++ b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/UEqn.H
@@ -8,6 +8,8 @@
         sources(U)
     );
 
+    mrfZones.addCoriolis(UEqn());
+
     UEqn().relax();
 
     sources.constrain(UEqn());
diff --git a/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/createPorousZones.H b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/createZones.H
similarity index 88%
rename from applications/solvers/incompressible/simpleFoam/porousSimpleFoam/createPorousZones.H
rename to applications/solvers/incompressible/simpleFoam/porousSimpleFoam/createZones.H
index 5c6dbea19c4122682311089f3a5f3ddb16d870f6..25c29f024cd215c2785dfceef8a285237fa4b733 100644
--- a/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/createPorousZones.H
+++ b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/createZones.H
@@ -1,3 +1,6 @@
+    IOMRFZoneList mrfZones(mesh);
+    mrfZones.correctBoundaryVelocity(U);
+
     IOporosityModelList pZones(mesh);
     Switch pressureImplicitPorosity(false);
 
diff --git a/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/pEqn.H b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/pEqn.H
index 8193e072c513972f2463c51339d9a43f4017d109..7aa494744fe554cab28351d8ff2e70dca9bb0ebe 100644
--- a/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/pEqn.H
+++ b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/pEqn.H
@@ -12,6 +12,8 @@ UEqn.clear();
 surfaceScalarField phiHbyA("phiHbyA", fvc::interpolate(HbyA) & mesh.Sf());
 adjustPhi(phiHbyA, U, p);
 
+mrfZones.relativeFlux(phiHbyA);
+
 while (simple.correctNonOrthogonal())
 {
     tmp<fvScalarMatrix> tpEqn;
@@ -50,3 +52,4 @@ else
 }
 
 U.correctBoundaryConditions();
+sources.correct(U);
diff --git a/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/porousSimpleFoam.C b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/porousSimpleFoam.C
index bde78bcbe155eb56a0a213c688e1ee317a1f0d4a..e7128f8c1f08b040774375cf4596bb0ca76f3324 100644
--- a/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/porousSimpleFoam.C
+++ b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/porousSimpleFoam.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -26,15 +26,17 @@ Application
 
 Description
     Steady-state solver for incompressible, turbulent flow with
-    implicit or explicit porosity treatment
+    implicit or explicit porosity treatment and support for multiple reference
+    frames (MRF)
 
 \*---------------------------------------------------------------------------*/
 
 #include "fvCFD.H"
 #include "singlePhaseTransportModel.H"
 #include "RASModel.H"
-#include "IOporosityModelList.H"
 #include "simpleControl.H"
+#include "IOMRFZoneList.H"
+#include "IOporosityModelList.H"
 #include "IObasicSourceList.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -48,7 +50,7 @@ int main(int argc, char *argv[])
     simpleControl simple(mesh);
 
     #include "createFields.H"
-    #include "createPorousZones.H"
+    #include "createZones.H"
     #include "initContinuityErrs.H"
 
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/applications/solvers/lagrangian/coalChemistryFoam/UEqn.H b/applications/solvers/lagrangian/coalChemistryFoam/UEqn.H
index 24f56e83d23232a5a3e97018f420f73cd13f4abc..fe7b047d9a24e41d4baa7f54324f75e3cc08f160 100644
--- a/applications/solvers/lagrangian/coalChemistryFoam/UEqn.H
+++ b/applications/solvers/lagrangian/coalChemistryFoam/UEqn.H
@@ -7,6 +7,7 @@
         rho.dimensionedInternalField()*g
       + coalParcels.SU(U)
       + limestoneParcels.SU(U)
+      + sources(rho, U)
     );
 
     UEqn.relax();
@@ -15,6 +16,6 @@
 
     if (pimple.momentumPredictor())
     {
-        solve(UEqn == -fvc::grad(p) + sources(rho, U));
+        solve(UEqn == -fvc::grad(p));
         K = 0.5*magSqr(U);
     }
diff --git a/applications/solvers/lagrangian/coalChemistryFoam/pEqn.H b/applications/solvers/lagrangian/coalChemistryFoam/pEqn.H
index 22d927ca6b109b721d4c36f579c6057575b098f0..0baee1ad3027eefd2261248ab45bb988b913c3f0 100644
--- a/applications/solvers/lagrangian/coalChemistryFoam/pEqn.H
+++ b/applications/solvers/lagrangian/coalChemistryFoam/pEqn.H
@@ -2,7 +2,7 @@ rho = thermo.rho();
 
 volScalarField rAU(1.0/UEqn.A());
 volVectorField HbyA("HbyA", U);
-HbyA = rAU*(UEqn == sources(rho, U))().H();
+HbyA = rAU*UEqn.H();
 
 if (pimple.transonic())
 {
@@ -16,6 +16,8 @@ if (pimple.transonic())
         )
     );
 
+    sources.relativeFlux(fvc::interpolate(psi), phid);
+
     while (pimple.correctNonOrthogonal())
     {
         fvScalarMatrix pEqn
@@ -28,7 +30,7 @@ if (pimple.transonic())
           + sources(psi, p, rho.name())
         );
 
-        sources.constrain(pEqn, rho.name());
+        sources.constrain(pEqn);
 
         pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
 
@@ -50,6 +52,8 @@ else
         )
     );
 
+    sources.relativeFlux(fvc::interpolate(rho), phiHbyA);
+
     while (pimple.correctNonOrthogonal())
     {
         fvScalarMatrix pEqn
@@ -62,7 +66,7 @@ else
           + sources(psi, p, rho.name())
         );
 
-        sources.constrain(pEqn, rho.name());
+        sources.constrain(pEqn);
 
         pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
 
diff --git a/applications/solvers/lagrangian/reactingParcelFilmFoam/EEqn.H b/applications/solvers/lagrangian/reactingParcelFilmFoam/EEqn.H
index f5a909a9dd00d45733e44175250a9700deb50d24..2c327a1099ab82a4a1e5b6791a913a8c142292df 100644
--- a/applications/solvers/lagrangian/reactingParcelFilmFoam/EEqn.H
+++ b/applications/solvers/lagrangian/reactingParcelFilmFoam/EEqn.H
@@ -21,9 +21,11 @@
       + surfaceFilm.Sh()
       + radiation->Sh(thermo)
       + combustion->Sh()
+      + sources(rho, he)
     );
 
     EEqn.relax();
+    sources.constrain(EEqn);
     EEqn.solve();
 
     thermo.correct();
diff --git a/applications/solvers/lagrangian/reactingParcelFilmFoam/Make/options b/applications/solvers/lagrangian/reactingParcelFilmFoam/Make/options
index a477abff475c373cff3e7d55f71c69d7706bb88e..a2d24b6d11d75c9adde33dd5c5cbc3f7df8e69c8 100644
--- a/applications/solvers/lagrangian/reactingParcelFilmFoam/Make/options
+++ b/applications/solvers/lagrangian/reactingParcelFilmFoam/Make/options
@@ -1,5 +1,7 @@
 EXE_INC = \
     -I$(LIB_SRC)/finiteVolume/lnInclude \
+    -I$(LIB_SRC)/fieldSources/lnInclude \
+    -I${LIB_SRC}/sampling/lnInclude \
     -I${LIB_SRC}/meshTools/lnInclude \
     -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
     -I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \
@@ -25,6 +27,8 @@ EXE_INC = \
 
 EXE_LIBS = \
     -lfiniteVolume \
+    -lfieldSources \
+    -lsampling \
     -lmeshTools \
     -lcompressibleRASModels \
     -lcompressibleLESModels \
diff --git a/applications/solvers/lagrangian/reactingParcelFilmFoam/UEqn.H b/applications/solvers/lagrangian/reactingParcelFilmFoam/UEqn.H
index 81c587e2438ce31da3b78672923bcf326c7a3a19..5884abe0c1f3f416c5db964fcf1e35055434cad8 100644
--- a/applications/solvers/lagrangian/reactingParcelFilmFoam/UEqn.H
+++ b/applications/solvers/lagrangian/reactingParcelFilmFoam/UEqn.H
@@ -5,10 +5,13 @@
       + turbulence->divDevRhoReff(U)
      ==
         parcels.SU(U)
+      + sources(rho, U)
     );
 
     UEqn.relax();
 
+    sources.constrain(UEqn);
+
     if (pimple.momentumPredictor())
     {
         solve
diff --git a/applications/solvers/lagrangian/reactingParcelFilmFoam/YEqn.H b/applications/solvers/lagrangian/reactingParcelFilmFoam/YEqn.H
index b14b7d6dae2d32e67e67d7ca2d8ad0fbc8e44533..e05dcdef6ab53038c91a52cf06c6ca2e0335ae4b 100644
--- a/applications/solvers/lagrangian/reactingParcelFilmFoam/YEqn.H
+++ b/applications/solvers/lagrangian/reactingParcelFilmFoam/YEqn.H
@@ -22,18 +22,24 @@ tmp<fv::convectionScheme<scalar> > mvConvection
         {
             volScalarField& Yi = Y[i];
 
-            solve
+            fvScalarMatrix YEqn
             (
                 fvm::ddt(rho, Yi)
               + mvConvection->fvmDiv(phi, Yi)
               - fvm::laplacian(turbulence->alphaEff(), Yi)
               ==
                 parcels.SYi(i, Yi)
+              + sources(rho, Yi)
+              + combustion->R(Yi)
               + surfaceFilm.Srho(i)
-              + combustion->R(Yi),
-                mesh.solver("Yi")
             );
 
+            YEqn.relax();
+
+            sources.constrain(YEqn);
+
+            YEqn.solve(mesh.solver("Yi"));
+
             Yi.max(0.0);
             Yt += Yi;
         }
diff --git a/applications/solvers/lagrangian/reactingParcelFilmFoam/createFields.H b/applications/solvers/lagrangian/reactingParcelFilmFoam/createFields.H
index 057978c8f893796cf9e57b64497b7e6612249629..1a15b1b2abfa2cee780794ed266582f6d491ff12 100644
--- a/applications/solvers/lagrangian/reactingParcelFilmFoam/createFields.H
+++ b/applications/solvers/lagrangian/reactingParcelFilmFoam/createFields.H
@@ -139,3 +139,5 @@
         mesh,
         dimensionedScalar("dQ", dimEnergy/dimTime, 0.0)
     );
+
+    IObasicSourceList sources(mesh);
diff --git a/applications/solvers/lagrangian/reactingParcelFilmFoam/pEqn.H b/applications/solvers/lagrangian/reactingParcelFilmFoam/pEqn.H
index 6a09845b6b5822e9c71e16c5fdc0475732160b70..bcdd3beca46acfd90b8002086273b1194daa7325 100644
--- a/applications/solvers/lagrangian/reactingParcelFilmFoam/pEqn.H
+++ b/applications/solvers/lagrangian/reactingParcelFilmFoam/pEqn.H
@@ -18,6 +18,7 @@ surfaceScalarField phiHbyA
   + phig
 );
 
+sources.relativeFlux(fvc::interpolate(rho), phiHbyA);
 
 while (pimple.correctNonOrthogonal())
 {
@@ -30,8 +31,11 @@ while (pimple.correctNonOrthogonal())
      ==
         parcels.Srho()
       + surfaceFilm.Srho()
+      + sources(psi, p_rgh, rho.name())
     );
 
+    sources.constrain(p_rghEqn);
+
     p_rghEqn.solve(mesh.solver(p_rgh.select(pimple.finalInnerIter())));
 
     if (pimple.finalNonOrthogonalIter())
@@ -39,6 +43,7 @@ while (pimple.correctNonOrthogonal())
         phi = phiHbyA + p_rghEqn.flux();
         U = HbyA + rAU*fvc::reconstruct((p_rghEqn.flux() + phig)/rhorAUf);
         U.correctBoundaryConditions();
+        sources.correct(U);
     }
 }
 
diff --git a/applications/solvers/lagrangian/reactingParcelFilmFoam/reactingParcelFilmFoam.C b/applications/solvers/lagrangian/reactingParcelFilmFoam/reactingParcelFilmFoam.C
index 06df5b17486a10591b46a851a6fe02f7ecf25d7d..203ee0ecd8afd0e8b2df0f9202fc6844034618e0 100644
--- a/applications/solvers/lagrangian/reactingParcelFilmFoam/reactingParcelFilmFoam.C
+++ b/applications/solvers/lagrangian/reactingParcelFilmFoam/reactingParcelFilmFoam.C
@@ -37,6 +37,7 @@ Description
 #include "psiCombustionModel.H"
 #include "radiationModel.H"
 #include "SLGThermo.H"
+#include "IObasicSourceList.H"
 #include "pimpleControl.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/applications/solvers/lagrangian/reactingParcelFilmFoam/rhoEqn.H b/applications/solvers/lagrangian/reactingParcelFilmFoam/rhoEqn.H
index f93906018171e762b96eb5ca4bc1e1ca85176742..282acfe91eee30d8bef14ed85a2468fec1bb7c2a 100644
--- a/applications/solvers/lagrangian/reactingParcelFilmFoam/rhoEqn.H
+++ b/applications/solvers/lagrangian/reactingParcelFilmFoam/rhoEqn.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -37,6 +37,7 @@ Description
       ==
         parcels.Srho(rho)
       + surfaceFilm.Srho()
+      + sources(rho)
     );
 }
 
diff --git a/applications/solvers/lagrangian/reactingParcelFoam/UEqn.H b/applications/solvers/lagrangian/reactingParcelFoam/UEqn.H
index 090922e57215a6080e9b650189abf4353df40dc5..612e582c54270b7b888f4b402ec2d5f47c43ffb0 100644
--- a/applications/solvers/lagrangian/reactingParcelFoam/UEqn.H
+++ b/applications/solvers/lagrangian/reactingParcelFoam/UEqn.H
@@ -7,6 +7,7 @@
      ==
         rho.dimensionedInternalField()*g
       + parcels.SU(U)
+      + sources(rho, U)
     );
 
     UEqn.relax();
@@ -17,6 +18,6 @@
 
     if (pimple.momentumPredictor())
     {
-        solve(UEqn == -fvc::grad(p) + sources(rho, U));
+        solve(UEqn == -fvc::grad(p));
         K = 0.5*magSqr(U);
     }
diff --git a/applications/solvers/lagrangian/reactingParcelFoam/pEqn.H b/applications/solvers/lagrangian/reactingParcelFoam/pEqn.H
index 1bcdf7c92f917c1a1514b50ab0ccbe95f1d38f15..569beae05861d2922dab4f9e1a0ae40c94eb3753 100644
--- a/applications/solvers/lagrangian/reactingParcelFoam/pEqn.H
+++ b/applications/solvers/lagrangian/reactingParcelFoam/pEqn.H
@@ -7,17 +7,19 @@
 
     volScalarField rAU(1.0/UEqn.A());
     volVectorField HbyA("HbyA", U);
-    HbyA = rAU*(UEqn == sources(rho, U))().H();
+    HbyA = rAU*UEqn.H();
 
-    surfaceScalarField phiHbyA("phiHbyA", fvc::interpolate(HbyA) & mesh.Sf());
-    if (!pZones.active())
-    {
-        // ddtPhiCorr only used without porosity
-        phiHbyA += fvc::ddtPhiCorr(rAU, rho, U, phi);
-    }
-
-    phiHbyA *= fvc::interpolate(rho);
+    surfaceScalarField phiHbyA
+    (
+        "phiHbyA",
+        fvc::interpolate(rho)
+       *(
+            (fvc::interpolate(HbyA) & mesh.Sf())
+          + fvc::ddtPhiCorr(rAU, rho, U, phi)
+        )
+    );
 
+    sources.relativeFlux(fvc::interpolate(rho), phiHbyA);
 
     fvScalarMatrix pDDtEqn
     (
@@ -36,7 +38,7 @@
           - fvm::laplacian(rho*rAU, p)
         );
 
-        sources.constrain(pDDtEqn, rho.name());
+        sources.constrain(pEqn);
 
         pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
 
diff --git a/applications/solvers/lagrangian/sprayFoam/UEqn.H b/applications/solvers/lagrangian/sprayFoam/UEqn.H
index 2ddaa2c30155749a087748516f58fb1d1dd18032..3723f7f79db5b06860fbd9405b20d4dcce5624b9 100644
--- a/applications/solvers/lagrangian/sprayFoam/UEqn.H
+++ b/applications/solvers/lagrangian/sprayFoam/UEqn.H
@@ -6,6 +6,7 @@
      ==
         rho.dimensionedInternalField()*g
       + parcels.SU(U)
+      + sources(rho, U)
     );
 
     UEqn.relax();
@@ -14,6 +15,6 @@
 
     if (pimple.momentumPredictor())
     {
-        solve(UEqn == -fvc::grad(p) + sources(rho, U));
+        solve(UEqn == -fvc::grad(p));
         K = 0.5*magSqr(U);
     }
diff --git a/applications/solvers/lagrangian/sprayFoam/pEqn.H b/applications/solvers/lagrangian/sprayFoam/pEqn.H
index d476a6bda8004f209adf65a540e53415e6a5edf1..9d95ee6dec51a7ea040ce4002e5a36119bd5c403 100644
--- a/applications/solvers/lagrangian/sprayFoam/pEqn.H
+++ b/applications/solvers/lagrangian/sprayFoam/pEqn.H
@@ -2,7 +2,7 @@ rho = thermo.rho();
 
 volScalarField rAU(1.0/UEqn.A());
 volVectorField HbyA("HbyA", U);
-HbyA = rAU*(UEqn == sources(rho, U))().H();
+HbyA = rAU*UEqn.H();
 
 if (pimple.transonic())
 {
@@ -16,6 +16,8 @@ if (pimple.transonic())
         )
     );
 
+    sources.relativeFlux(fvc::interpolate(psi), phid);
+
     while (pimple.correctNonOrthogonal())
     {
         fvScalarMatrix pEqn
@@ -28,6 +30,8 @@ if (pimple.transonic())
           + sources(psi, p, rho.name())
         );
 
+        sources.constrain(pEqn);
+
         pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
 
         if (pimple.finalNonOrthogonalIter())
@@ -48,6 +52,8 @@ else
         )
     );
 
+    sources.relativeFlux(fvc::interpolate(psi), phiHbyA);
+
     while (pimple.correctNonOrthogonal())
     {
         fvScalarMatrix pEqn
@@ -60,6 +66,8 @@ else
           + sources(psi, p, rho.name())
         );
 
+        sources.constrain(pEqn);
+
         pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
 
         if (pimple.finalNonOrthogonalIter())
diff --git a/applications/solvers/lagrangian/sprayFoam/sprayEngineFoam/pEqn.H b/applications/solvers/lagrangian/sprayFoam/sprayEngineFoam/pEqn.H
index 0301fba2eaa9a05f2329fdb9db204a49013576ae..d3435a81636e7a7245b0d2642669c432410e8f5e 100644
--- a/applications/solvers/lagrangian/sprayFoam/sprayEngineFoam/pEqn.H
+++ b/applications/solvers/lagrangian/sprayFoam/sprayEngineFoam/pEqn.H
@@ -2,7 +2,7 @@ rho = thermo.rho();
 
 volScalarField rAU(1.0/UEqn.A());
 volVectorField HbyA("HbyA", U);
-HbyA = rAU*(UEqn == sources(rho, U))().H();
+HbyA = rAU*UEqn.H();
 
 if (pimple.transonic())
 {
@@ -16,6 +16,8 @@ if (pimple.transonic())
         )
     );
 
+    sources.relativeFlux(fvc::interpolate(psi), phid);
+
     while (pimple.correctNonOrthogonal())
     {
         fvScalarMatrix pEqn
@@ -28,6 +30,8 @@ if (pimple.transonic())
           + sources(psi, p, rho.name())
         );
 
+        sources.constrain(pEqn);
+
         pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
 
         if (pimple.finalNonOrthogonalIter())
@@ -48,6 +52,8 @@ else
         )
     );
 
+    sources.relativeFlux(fvc::interpolate(rho), phiHbyA);
+
     while (pimple.correctNonOrthogonal())
     {
         fvScalarMatrix pEqn
@@ -60,6 +66,8 @@ else
           + sources(psi, p, rho.name())
         );
 
+        sources.constrain(pEqn);
+
         pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
 
         if (pimple.finalNonOrthogonalIter())
diff --git a/applications/test/fvSolutionCombine/Test-fvSolutionCombine.C b/applications/test/fvSolutionCombine/Test-fvSolutionCombine.C
index 074996252e396ce5ed4822f8e4d5ca7a447cf1e4..0d9775e84954f86bc08dc7a13932f0ad7bfda4df 100644
--- a/applications/test/fvSolutionCombine/Test-fvSolutionCombine.C
+++ b/applications/test/fvSolutionCombine/Test-fvSolutionCombine.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -114,7 +114,7 @@ int main(int argc, char *argv[])
         IOobject
         (
             dictName,
-            "system",
+            runTime.system(),
             runTime,
             IOobject::MUST_READ_IF_MODIFIED,
             IOobject::NO_WRITE,
@@ -128,9 +128,9 @@ int main(int argc, char *argv[])
         return 2;
     }
 
-    if (optRewrite && solutionDict.instance() != "system")
+    if (optRewrite && solutionDict.instance() != runTime.system())
     {
-        Info<<"instance is not 'system' "
+        Info<<"instance is not " << runTime.system()
             "- disabling rewrite for this file" << nl;
         optRewrite = false;
     }
diff --git a/applications/utilities/mesh/conversion/foamToStarMesh/getTimeIndex.H b/applications/utilities/mesh/conversion/foamToStarMesh/getTimeIndex.H
index d722c432e3b4aa5a45e7c11c1e5bfcd7c6d4f7a8..d21b64fdc1fe7affa0afd262c4359d4ba7aa1359 100644
--- a/applications/utilities/mesh/conversion/foamToStarMesh/getTimeIndex.H
+++ b/applications/utilities/mesh/conversion/foamToStarMesh/getTimeIndex.H
@@ -4,7 +4,7 @@
 
     if
     (
-        runTime.timeName() != "constant"
+        runTime.timeName() != runTime.constant()
      && runTime.timeName() != "0"
     )
     {
diff --git a/applications/utilities/mesh/conversion/foamToSurface/getTimeIndex.H b/applications/utilities/mesh/conversion/foamToSurface/getTimeIndex.H
index d722c432e3b4aa5a45e7c11c1e5bfcd7c6d4f7a8..d21b64fdc1fe7affa0afd262c4359d4ba7aa1359 100644
--- a/applications/utilities/mesh/conversion/foamToSurface/getTimeIndex.H
+++ b/applications/utilities/mesh/conversion/foamToSurface/getTimeIndex.H
@@ -4,7 +4,7 @@
 
     if
     (
-        runTime.timeName() != "constant"
+        runTime.timeName() != runTime.constant()
      && runTime.timeName() != "0"
     )
     {
diff --git a/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C b/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C
index 6f8712a0b357811f4bde59d981725018fa2a9fe0..097330487e2ab92d2a581bf0b02e487ba5b08b6a 100644
--- a/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C
+++ b/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -104,60 +104,50 @@ int main(int argc, char *argv[])
         polyMeshDir = polyMesh::meshSubDir;
     }
 
-    autoPtr<IOobject> meshDictIoPtr;
+    IOobject meshDictIO
+    (
+        dictName,
+        runTime.constant(),
+        polyMeshDir,
+        runTime,
+        IOobject::MUST_READ,
+        IOobject::NO_WRITE,
+        false
+    );
 
     if (args.optionFound("dict"))
     {
         const fileName dictPath = args["dict"];
 
-        meshDictIoPtr.set
-        (
-            new IOobject
-            (
-                (
-                    isDir(dictPath)
-                  ? dictPath/dictName
-                  : dictPath
-                ),
-                runTime,
-                IOobject::MUST_READ_IF_MODIFIED,
-                IOobject::NO_WRITE,
-                false
-            )
-        );
-    }
-    else
-    {
-        meshDictIoPtr.set
+        meshDictIO = IOobject
         (
-            new IOobject
             (
-                dictName,
-                runTime.constant(),
-                polyMeshDir,
-                runTime,
-                IOobject::MUST_READ_IF_MODIFIED,
-                IOobject::NO_WRITE,
-                false
-            )
+                isDir(dictPath)
+              ? dictPath/dictName
+              : dictPath
+            ),
+            runTime,
+            IOobject::MUST_READ,
+            IOobject::NO_WRITE,
+            false
         );
     }
 
-    if (!meshDictIoPtr->headerOk())
+    if (!meshDictIO.headerOk())
     {
         FatalErrorIn(args.executable())
             << "Cannot open mesh description file\n    "
-            << meshDictIoPtr->objectPath()
+            << meshDictIO.objectPath()
             << nl
             << exit(FatalError);
     }
 
     Info<< "Creating block mesh from\n    "
-        << meshDictIoPtr->objectPath() << endl;
+        << meshDictIO.objectPath() << endl;
 
     blockMesh::verbose(true);
 
-    IOdictionary meshDict(meshDictIoPtr());
+    IOdictionary meshDict(meshDictIO);
     blockMesh blocks(meshDict, regionName);
 
 
diff --git a/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/extrudeToRegionMesh.C b/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/extrudeToRegionMesh.C
index be4fffa8df24579f1fee5dbc5fb8eb8bd8d35c0a..b159f9c096dd5e8d5813568a2fe52a9d3abfeee3 100644
--- a/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/extrudeToRegionMesh.C
+++ b/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/extrudeToRegionMesh.C
@@ -1241,8 +1241,7 @@ int main(int argc, char *argv[])
 
     #include "addRegionOption.H"
     #include "addOverwriteOption.H"
-    argList::addOption("dict", "name", "specify alternative dictionary");
-
+    #include "addDictOption.H"
     #include "setRootCase.H"
     #include "createTime.H"
     #include "createNamedMesh.H"
@@ -1263,19 +1262,14 @@ int main(int argc, char *argv[])
 
     const word oldInstance = mesh.pointsInstance();
     bool overwrite = args.optionFound("overwrite");
-    const word dictName
-        (args.optionLookupOrDefault<word>("dict", "extrudeToRegionMeshDict"));
 
-    IOdictionary dict
-    (
-        IOobject
-        (
-            dictName,
-            runTime.system(),
-            runTime,
-            IOobject::MUST_READ_IF_MODIFIED
-        )
-    );
+
+    const word dictName("extrudeToRegionMeshDict");
+
+    #include "setSystemMeshDictionaryIO.H"
+
+    IOdictionary dict(dictIO);
+
 
     // Point generator
     autoPtr<extrudeModel> model(extrudeModel::New(dict));
diff --git a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C
index 6b6343091872e0e1dc15997225e917f1a7146516..2406cb667c45098ebd0ae54dfbf61f325e48d68c 100644
--- a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C
+++ b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C
@@ -369,7 +369,10 @@ int main(int argc, char *argv[])
     // Add all the surface regions as patches
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-    labelList globalToPatch;
+    //- Global surface region to patch (non faceZone surface) or patches
+    //  (faceZone surfaces)
+    labelList globalToMasterPatch;
+    labelList globalToSlavePatch;
     {
         Info<< nl
             << "Adding patches for surface regions" << nl
@@ -377,7 +380,8 @@ int main(int argc, char *argv[])
             << endl;
 
         // From global region number to mesh patch.
-        globalToPatch.setSize(surfaces.nRegions(), -1);
+        globalToMasterPatch.setSize(surfaces.nRegions(), -1);
+        globalToSlavePatch.setSize(surfaces.nRegions(), -1);
 
         Info<< "Patch\tType\tRegion" << nl
             << "-----\t----\t------"
@@ -394,36 +398,111 @@ int main(int argc, char *argv[])
 
             Info<< surfaces.names()[surfI] << ':' << nl << nl;
 
-            forAll(regNames, i)
+            if (surfaces.faceZoneNames()[surfI].empty())
             {
-                label globalRegionI = surfaces.globalRegion(surfI, i);
-
-                label patchI;
-
-                if (surfacePatchInfo.set(globalRegionI))
+                // 'Normal' surface
+                forAll(regNames, i)
                 {
-                    patchI = meshRefiner.addMeshedPatch
-                    (
-                        regNames[i],
-                        surfacePatchInfo[globalRegionI]
-                    );
+                    label globalRegionI = surfaces.globalRegion(surfI, i);
+
+                    label patchI;
+
+                    if (surfacePatchInfo.set(globalRegionI))
+                    {
+                        patchI = meshRefiner.addMeshedPatch
+                        (
+                            regNames[i],
+                            surfacePatchInfo[globalRegionI]
+                        );
+                    }
+                    else
+                    {
+                        dictionary patchInfo;
+                        patchInfo.set("type", wallPolyPatch::typeName);
+
+                        patchI = meshRefiner.addMeshedPatch
+                        (
+                            regNames[i],
+                            patchInfo
+                        );
+                    }
+
+                    Info<< patchI << '\t' << mesh.boundaryMesh()[patchI].type()
+                        << '\t' << regNames[i] << nl;
+
+                    globalToMasterPatch[globalRegionI] = patchI;
+                    globalToSlavePatch[globalRegionI] = patchI;
                 }
-                else
+            }
+            else
+            {
+                // Zoned surface
+                forAll(regNames, i)
                 {
-                    dictionary patchInfo;
-                    patchInfo.set("type", wallPolyPatch::typeName);
-
-                    patchI = meshRefiner.addMeshedPatch
-                    (
-                        regNames[i],
-                        patchInfo
-                    );
+                    label globalRegionI = surfaces.globalRegion(surfI, i);
+
+                    // Add master side patch
+                    {
+                        label patchI;
+
+                        if (surfacePatchInfo.set(globalRegionI))
+                        {
+                            patchI = meshRefiner.addMeshedPatch
+                            (
+                                regNames[i],
+                                surfacePatchInfo[globalRegionI]
+                            );
+                        }
+                        else
+                        {
+                            dictionary patchInfo;
+                            patchInfo.set("type", wallPolyPatch::typeName);
+
+                            patchI = meshRefiner.addMeshedPatch
+                            (
+                                regNames[i],
+                                patchInfo
+                            );
+                        }
+
+                        Info<< patchI << '\t'
+                            << mesh.boundaryMesh()[patchI].type()
+                            << '\t' << regNames[i] << nl;
+
+                        globalToMasterPatch[globalRegionI] = patchI;
+                    }
+                    // Add slave side patch
+                    {
+                        const word slaveName = regNames[i] + "_slave";
+                        label patchI;
+
+                        if (surfacePatchInfo.set(globalRegionI))
+                        {
+                            patchI = meshRefiner.addMeshedPatch
+                            (
+                                slaveName,
+                                surfacePatchInfo[globalRegionI]
+                            );
+                        }
+                        else
+                        {
+                            dictionary patchInfo;
+                            patchInfo.set("type", wallPolyPatch::typeName);
+
+                            patchI = meshRefiner.addMeshedPatch
+                            (
+                                slaveName,
+                                patchInfo
+                            );
+                        }
+
+                        Info<< patchI << '\t'
+                            << mesh.boundaryMesh()[patchI].type()
+                            << '\t' << slaveName << nl;
+
+                        globalToSlavePatch[globalRegionI] = patchI;
+                    }
                 }
-
-                Info<< patchI << '\t' << mesh.boundaryMesh()[patchI].type()
-                    << '\t' << regNames[i] << nl;
-
-                globalToPatch[globalRegionI] = patchI;
             }
 
             Info<< nl;
@@ -479,7 +558,8 @@ int main(int argc, char *argv[])
             meshRefiner,
             decomposer,
             distributor,
-            globalToPatch
+            globalToMasterPatch,
+            globalToSlavePatch
         );
 
         // Refinement parameters
@@ -510,7 +590,8 @@ int main(int argc, char *argv[])
         autoSnapDriver snapDriver
         (
             meshRefiner,
-            globalToPatch
+            globalToMasterPatch,
+            globalToSlavePatch
         );
 
         // Snap parameters
@@ -544,7 +625,12 @@ int main(int argc, char *argv[])
     {
         cpuTime timer;
 
-        autoLayerDriver layerDriver(meshRefiner, globalToPatch);
+        autoLayerDriver layerDriver
+        (
+            meshRefiner,
+            globalToMasterPatch,
+            globalToSlavePatch
+        );
 
         // Layer addition parameters
         layerParameters layerParams(layerDict, mesh.boundaryMesh());
diff --git a/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C b/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C
index c2e2a06ebb9422481f4b0ef4688a77dbc798748a..89beec32efee04e612c4ace9eab43c561032f1c5 100644
--- a/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C
+++ b/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C
@@ -117,14 +117,9 @@ int main(int argc, char *argv[])
         "Makes internal faces into boundary faces.\n"
         "Does not duplicate points."
     );
-
+    #include "addDictOption.H"
     #include "addOverwriteOption.H"
-    argList::addOption
-    (
-        "dict",
-        "file",
-        "specify alternative dictionary for the createBaffles description"
-    );
+    #include "addDictOption.H"
     #include "addRegionOption.H"
     #include "setRootCase.H"
     #include "createTime.H"
@@ -136,14 +131,8 @@ int main(int argc, char *argv[])
 
     const word oldInstance = mesh.pointsInstance();
 
-    const word dictName
-    (
-        args.optionLookupOrDefault<word>
-        (
-            "dict",
-            "createBafflesDict"
-        )
-    );
+    const word dictName("createBafflesDict");
+    #include "setSystemMeshDictionaryIO.H"
 
     Switch internalFacesOnly(false);
 
@@ -152,17 +141,7 @@ int main(int argc, char *argv[])
     PtrList<faceSelection> selectors;
     {
         Info<< "Reading baffle criteria from " << dictName << nl << endl;
-        IOdictionary dict
-        (
-            IOobject
-            (
-                dictName,
-                mesh.time().system(),
-                mesh,
-                IOobject::MUST_READ,
-                IOobject::NO_WRITE
-            )
-        );
+        IOdictionary dict(dictIO);
 
         dict.lookup("internalFacesOnly") >> internalFacesOnly;
         noFields = dict.lookupOrDefault("noFields", false);
diff --git a/applications/utilities/mesh/manipulation/createPatch/createPatch.C b/applications/utilities/mesh/manipulation/createPatch/createPatch.C
index 7a969e15d16ffdf7c952a608e3c5780c999b7b38..9e89c8d4dfc67f57522ba2ac516db98ccfe480b3 100644
--- a/applications/utilities/mesh/manipulation/createPatch/createPatch.C
+++ b/applications/utilities/mesh/manipulation/createPatch/createPatch.C
@@ -505,13 +505,7 @@ int main(int argc, char *argv[])
 {
     #include "addOverwriteOption.H"
     #include "addRegionOption.H"
-    argList::addOption
-    (
-        "dict",
-        "word",
-        "name of dictionary to provide patch information"
-    );
-
+    #include "addDictOption.H"
     #include "setRootCase.H"
     #include "createTime.H"
     runTime.functionObjects().off();
@@ -521,38 +515,20 @@ int main(int argc, char *argv[])
 
     const bool overwrite = args.optionFound("overwrite");
 
-    word dictName
-    (
-        args.optionLookupOrDefault<word>("dict", "createPatchDict")
-    );
+    #include "createNamedPolyMesh.H"
 
-    Info<< "Reading " << dictName << nl << endl;
+    const word oldInstance = mesh.pointsInstance();
 
-    IOdictionary dict
-    (
-        IOobject
-        (
-            dictName,
-            runTime.system(),
-            (
-                meshRegionName != polyMesh::defaultRegion
-              ? meshRegionName
-              : word::null
-            ),
-            runTime,
-            IOobject::MUST_READ_IF_MODIFIED,
-            IOobject::NO_WRITE,
-            false
-        )
-    );
+    const word dictName("createPatchDict");
+    #include "setSystemMeshDictionaryIO.H"
 
+    Info<< "Reading " << dictName << nl << endl;
+
+    IOdictionary dict(dictIO);
 
     // Whether to synchronise points
     const Switch pointSync(dict.lookup("pointSync"));
 
-    #include "createNamedPolyMesh.H"
-
-    const word oldInstance = mesh.pointsInstance();
 
     const polyBoundaryMesh& patches = mesh.boundaryMesh();
 
diff --git a/applications/utilities/mesh/manipulation/refineMesh/refineMesh.C b/applications/utilities/mesh/manipulation/refineMesh/refineMesh.C
index f8a206e651cee834f7b39288bd2d22955ad47ef6..098864102d65185e290f572a5a50fcc2dca57b9a 100644
--- a/applications/utilities/mesh/manipulation/refineMesh/refineMesh.C
+++ b/applications/utilities/mesh/manipulation/refineMesh/refineMesh.C
@@ -298,12 +298,7 @@ int main(int argc, char *argv[])
 
     #include "addOverwriteOption.H"
     #include "addRegionOption.H"
-    argList::addBoolOption
-    (
-        "dict",
-        "refine according to system/refineMeshDict"
-    );
-
+    #include "addDictOption.H"
     #include "setRootCase.H"
     #include "createTime.H"
     runTime.functionObjects().off();
@@ -327,19 +322,12 @@ int main(int argc, char *argv[])
 
     if (readDict)
     {
-        Info<< "Refining according to refineMeshDict" << nl << endl;
+        const word dictName("refineMeshDict");
+        #include "setSystemMeshDictionaryIO.H"
 
-        refineDict = IOdictionary
-        (
-            IOobject
-            (
-                "refineMeshDict",
-                runTime.system(),
-                mesh,
-                IOobject::MUST_READ_IF_MODIFIED,
-                IOobject::NO_WRITE
-            )
-        );
+        Info<< "Refining according to " << dictName << nl << endl;
+
+        refineDict = IOdictionary(dictIO);
 
         const word setName(refineDict.lookup("set"));
 
diff --git a/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C b/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C
index 7eede94626c2d1359869252e3be2e3d8e939f945..d03f24cd7c2e4f442f2143b95c0ba59028420f28 100644
--- a/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C
+++ b/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C
@@ -614,11 +614,7 @@ int main(int argc, char *argv[])
 #   include "addRegionOption.H"
 #   include "addOverwriteOption.H"
 #   include "addTimeOptions.H"
-    argList::addBoolOption
-    (
-        "dict",
-        "renumber according to system/renumberMeshDict"
-    );
+#   include "addDictOption.H"
     argList::addBoolOption
     (
         "frontWidth",
@@ -700,23 +696,13 @@ int main(int argc, char *argv[])
 
     if (readDict)
     {
-        Info<< "Renumber according to renumberMeshDict." << nl << endl;
+        const word dictName("renumberMeshDict");
+        #include "setSystemMeshDictionaryIO.H"
 
-        renumberDictPtr.reset
-        (
-            new IOdictionary
-            (
-                IOobject
-                (
-                    "renumberMeshDict",
-                    runTime.system(),
-                    mesh,
-                    IOobject::MUST_READ_IF_MODIFIED,
-                    IOobject::NO_WRITE
-                )
-            )
-        );
-        const IOdictionary renumberDict = renumberDictPtr();
+        Info<< "Renumber according to " << dictName << nl << endl;
+
+        renumberDictPtr.reset(new IOdictionary(dictIO));
+        const IOdictionary& renumberDict = renumberDictPtr();
 
         renumberPtr = renumberMethod::New(renumberDict);
 
diff --git a/applications/utilities/mesh/manipulation/subsetMesh/cellSelection/outsideCellSelection.C b/applications/utilities/mesh/manipulation/subsetMesh/cellSelection/outsideCellSelection.C
index 556ae4e07e5d9553aa0d0e571c6cd70f9f793e8b..7cb4eec5181b8f43711986ba6c84ecf8ebfd769a 100644
--- a/applications/utilities/mesh/manipulation/subsetMesh/cellSelection/outsideCellSelection.C
+++ b/applications/utilities/mesh/manipulation/subsetMesh/cellSelection/outsideCellSelection.C
@@ -156,10 +156,21 @@ Foam::boolList Foam::cellSelections::outsideCellSelection::findRegions
         reduce(keepRegionI, maxOp<label>());
         keepRegion[keepRegionI] = true;
 
-        if (verbose)
+        reduce(keepProcI, maxOp<label>());
+
+        if (keepProcI == -1)
         {
-            reduce(keepProcI, maxOp<label>());
+            FatalErrorIn
+            (
+                "outsideCellSelection::findRegions"
+                "(const bool, const regionSplit&)"
+            )   << "Did not find " << locationsInMesh_[i]
+                << " in mesh." << " Mesh bounds are " << mesh_.bounds()
+                << exit(FatalError);
+        }
 
+        if (verbose)
+        {
             Info<< "Found location " << locationsInMesh_[i]
                 << " in cell " << cellI << " on processor " << keepProcI
                 << " in global region " << keepRegionI
diff --git a/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C b/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C
index e1cc69aa7e22f6c8a4ad0999b3ced2b1d1689c8c..f4f1250cb1af9c7691ebdcf273aae546fd9e0d7f 100644
--- a/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C
+++ b/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C
@@ -155,12 +155,7 @@ int main(int argc, char *argv[])
         "select a mesh subset based on a provided cellSet and/or"
         " selection criteria"
     );
-    argList::addBoolOption
-    (
-        "dict",
-        "read mesh subset selection criteria"
-        " from system/subsetMeshDict"
-    );
+    #include "addDictOption.H"
     argList::addOption
     (
         "cellSet",
@@ -210,18 +205,10 @@ int main(int argc, char *argv[])
     PtrList<cellSelection> selectors;
     if (useDict)
     {
-        Info<< "Reading selection criteria from subsetMeshDict" << nl << endl;
-        IOdictionary dict
-        (
-            IOobject
-            (
-                "subsetMeshDict",
-                mesh.time().system(),
-                mesh,
-                IOobject::MUST_READ,
-                IOobject::NO_WRITE
-            )
-        );
+        const word dictName("subsetMeshDict");
+        #include "setSystemMeshDictionaryIO.H"
+        Info<< "Reading selection criteria from " << dictName << nl << endl;
+        IOdictionary dict(dictIO);
 
         const dictionary& selectionsDict = dict.subDict("selections");
 
diff --git a/applications/utilities/mesh/manipulation/subsetMesh/subsetMeshDict b/applications/utilities/mesh/manipulation/subsetMesh/subsetMeshDict
index 0f725142a36ee97658d07a6001b1c08bd32a26b1..93280bb30574cf16e7d7e601eb1a30d6026aa15e 100644
--- a/applications/utilities/mesh/manipulation/subsetMesh/subsetMeshDict
+++ b/applications/utilities/mesh/manipulation/subsetMesh/subsetMeshDict
@@ -27,7 +27,7 @@ selections
         // used by snappyHexMesh, cvMesh.
         type    badQuality;
         // Use the quality criteria from the snappyHexMeshDict
-        ${.meshQualityControls}
+        ${:meshQualityControls}
     }
 
     outside
@@ -42,7 +42,7 @@ selections
         //- Define mesh location for keeping.
         //  In this case use the one from snappyHexMeshDict. This can
         //  optionally be a list of locations.
-        locationsInMesh (${.castellatedMeshControls.locationInMesh});
+        locationsInMesh (${:castellatedMeshControls.locationInMesh});
     }
 }
 
diff --git a/applications/utilities/mesh/manipulation/topoSet/topoSet.C b/applications/utilities/mesh/manipulation/topoSet/topoSet.C
index c124ca3992358d225aee566436968ed93fb80ee0..6dee4fd0b509ff679245d5ed4f31b440bc4a1f4d 100644
--- a/applications/utilities/mesh/manipulation/topoSet/topoSet.C
+++ b/applications/utilities/mesh/manipulation/topoSet/topoSet.C
@@ -193,12 +193,7 @@ polyMesh::readUpdateState meshReadUpdate(polyMesh& mesh)
 int main(int argc, char *argv[])
 {
     timeSelector::addOptions(true, false);
-    argList::addOption
-    (
-        "dict",
-        "file",
-        "specify an alternative dictionary for the topoSet dictionary"
-    );
+    #include "addDictOption.H"
     #include "addRegionOption.H"
     argList::addBoolOption
     (
@@ -216,41 +211,11 @@ int main(int argc, char *argv[])
     const bool noSync = args.optionFound("noSync");
 
     const word dictName("topoSetDict");
-
-    fileName dictPath = dictName;
-    if (args.optionFound("dict"))
-    {
-        dictPath = args["dict"];
-        if (isDir(dictPath))
-        {
-            dictPath = dictPath / dictName;
-        }
-    }
+    #include "setSystemMeshDictionaryIO.H"
 
     Info<< "Reading " << dictName << "\n" << endl;
 
-    IOdictionary topoSetDict
-    (
-        (
-            args.optionFound("dict")
-          ? IOobject
-            (
-                dictPath,
-                mesh,
-                IOobject::MUST_READ_IF_MODIFIED,
-                IOobject::NO_WRITE
-            )
-          : IOobject
-            (
-                dictName,
-                runTime.system(),
-                mesh,
-                IOobject::MUST_READ_IF_MODIFIED,
-                IOobject::NO_WRITE
-            )
-        )
-    );
-
+    IOdictionary topoSetDict(dictIO);
 
     // Read set construct info from dictionary
     PtrList<dictionary> actions(topoSetDict.lookup("actions"));
diff --git a/applications/utilities/miscellaneous/foamInfoExec/foamInfoExec.C b/applications/utilities/miscellaneous/foamInfoExec/foamInfoExec.C
index 5b85aee0771e769ba869076b6ede2c878d9d5839..49c70eb1c355747cc611092d4b295f36edec694c 100644
--- a/applications/utilities/miscellaneous/foamInfoExec/foamInfoExec.C
+++ b/applications/utilities/miscellaneous/foamInfoExec/foamInfoExec.C
@@ -51,12 +51,7 @@ int main(int argc, char *argv[])
         "keywords",
         "report keywords for the specified dictionary"
     );
-    argList::addOption
-    (
-        "dict",
-        "file",
-        "specify a dictionary to interrogate"
-    );
+    #include "addDictOption.H"
     argList::addOption
     (
         "entry",
@@ -81,9 +76,12 @@ int main(int argc, char *argv[])
 
     if (args.optionFound("dict"))
     {
+        fileName dictPath = args["dict"];
         const fileName dictFileName
         (
-            args.rootPath()/args.caseName()/args["dict"]
+            dictPath.isAbsolute()
+          ? dictPath
+          : args.rootPath()/args.caseName()/args["dict"]
         );
 
         IFstream dictFile(dictFileName);
diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/getTimeIndex.H b/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/getTimeIndex.H
index 491ada9a43d9c628d295b70555ccec2c2dee0d84..53e234939e22d7bdb310e85ff92e4aa414f66988 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/getTimeIndex.H
+++ b/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/getTimeIndex.H
@@ -9,7 +9,7 @@
     }
     else if
     (
-        runTime.timeName() != "constant"
+        runTime.timeName() != runTime.constant()
      && runTime.timeName() != "0"
     )
     {
diff --git a/applications/utilities/postProcessing/foamCalc/foamCalcApp.C b/applications/utilities/postProcessing/foamCalc/foamCalcApp.C
index 39d0a581d509bc84a2dd95a7f6310f72c97d6b64..3e5c99f3e43835fe6bff33583b5561823aecdee9 100644
--- a/applications/utilities/postProcessing/foamCalc/foamCalcApp.C
+++ b/applications/utilities/postProcessing/foamCalc/foamCalcApp.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -49,12 +49,7 @@ int main(int argc, char *argv[])
         "noWrite",
         "suppress writing results"
     );
-    Foam::argList::addOption
-    (
-        "dict",
-        "name",
-        "dictionary to use"
-    );
+#   include "addDictOption.H"
 
     if (argc < 2)
     {
diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C
index 1e49db7505d92ce4844129e1c33d6a72db9ca272..cf0ca1314a9a7a6326953c5d7fab69f0fb5df910 100644
--- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C
+++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -575,7 +575,7 @@ double* Foam::vtkPV3Foam::findTimes(int& nTimeSteps)
         // skip "constant" time whenever possible
         if (timeI == 0 && nTimes > 1)
         {
-            if (timeLst[timeI].name() == "constant")
+            if (timeLst[timeI].name() == runTime.constant())
             {
                 ++timeI;
                 --nTimes;
diff --git a/applications/utilities/postProcessing/lagrangian/steadyParticleTracks/createFields.H b/applications/utilities/postProcessing/lagrangian/steadyParticleTracks/createFields.H
index 24854ab6b60d038d41997f97de85c4433d0cddde..309d7718f6682283ce980002cf146e94c49c5d3a 100644
--- a/applications/utilities/postProcessing/lagrangian/steadyParticleTracks/createFields.H
+++ b/applications/utilities/postProcessing/lagrangian/steadyParticleTracks/createFields.H
@@ -1,16 +1,9 @@
-word dictName(args.optionLookupOrDefault<word>("dict", "particleTrackDict"));
+const word dictName("particleTrackDict");
 
-IOdictionary propsDict
-(
-    IOobject
-    (
-        dictName,
-        runTime.constant(),
-        mesh,
-        IOobject::MUST_READ_IF_MODIFIED
-    )
-);
+#include "setConstantMeshDictionaryIO.H"
+
+IOdictionary propsDict(dictIO);
 
 word cloudName(propsDict.lookup("cloudName"));
 
-List<word> userFields(propsDict.lookup("fields"));
\ No newline at end of file
+List<word> userFields(propsDict.lookup("fields"));
diff --git a/applications/utilities/postProcessing/lagrangian/steadyParticleTracks/steadyParticleTracks.C b/applications/utilities/postProcessing/lagrangian/steadyParticleTracks/steadyParticleTracks.C
index 4c1bea3c2d0e89f6334602523a6f215d2304ccdf..5a6fad75a696b5a8554012ace76107dd2f337ec5 100644
--- a/applications/utilities/postProcessing/lagrangian/steadyParticleTracks/steadyParticleTracks.C
+++ b/applications/utilities/postProcessing/lagrangian/steadyParticleTracks/steadyParticleTracks.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -113,7 +113,7 @@ int main(int argc, char *argv[])
     argList::noParallel();
     timeSelector::addOptions();
     #include "addRegionOption.H"
-    argList::validOptions.insert("dict", "");
+    #include "addDictOption.H"
 
     #include "setRootCase.H"
 
diff --git a/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C b/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C
index b133509318af20c296c833c54ab8138119d5272b..e5c6735d8c8b52545c2efd19728131c0a6f3bfe7 100644
--- a/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C
+++ b/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C
@@ -65,7 +65,6 @@ namespace Foam
                 IOobject
                 (
                     args["dict"],
-                    runTime.system(),
                     runTime,
                     IOobject::MUST_READ_IF_MODIFIED
                 )
diff --git a/applications/utilities/postProcessing/sampling/probeLocations/probeLocations.C b/applications/utilities/postProcessing/sampling/probeLocations/probeLocations.C
index 5c02fe31e715bc9160b0c9d8519c9bc34fbf9a64..59c73ffc60d8cff7c586f294ebea851ec4e84d0c 100644
--- a/applications/utilities/postProcessing/sampling/probeLocations/probeLocations.C
+++ b/applications/utilities/postProcessing/sampling/probeLocations/probeLocations.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -49,7 +49,7 @@ int main(int argc, char *argv[])
     (
         probes::typeName,
         mesh,
-        "probesDict",
+        word("probesDict"), // force the use of the system directory
         IOobject::MUST_READ,
         true
     );
diff --git a/applications/utilities/postProcessing/sampling/sample/sample.C b/applications/utilities/postProcessing/sampling/sample/sample.C
index 6b09aa19b9b6777f8e42b599ff260526f65e5249..6641508a573946fbf394db86662bcd97d38eb1b2 100644
--- a/applications/utilities/postProcessing/sampling/sample/sample.C
+++ b/applications/utilities/postProcessing/sampling/sample/sample.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -97,37 +97,82 @@ int main(int argc, char *argv[])
 {
     timeSelector::addOptions();
     #include "addRegionOption.H"
-    argList::addOption
-    (
-        "dict",
-        "word",
-        "name of dictionary to provide sample information"
-    );
-
+    #include "addDictOption.H"
     #include "setRootCase.H"
     #include "createTime.H"
     instantList timeDirs = timeSelector::select0(runTime, args);
     #include "createNamedMesh.H"
 
-    word sampleDict(args.optionLookupOrDefault<word>("dict", "sampleDict"));
-
-    IOsampledSets sSets
-    (
-        sampledSets::typeName,
-        mesh,
-        sampleDict,
-        IOobject::MUST_READ_IF_MODIFIED,
-        true
-    );
-
-    IOsampledSurfaces sSurfs
-    (
-        sampledSurfaces::typeName,
-        mesh,
-        sampleDict,
-        IOobject::MUST_READ_IF_MODIFIED,
-        true
-    );
+    const word dictName("sampleDict");
+
+    autoPtr<IOsampledSets> sSetsPtr;
+    autoPtr<IOsampledSurfaces> sSurfsPtr;
+
+    if (args.optionFound("dict"))
+    {
+        // Construct from fileName
+
+        fileName dictPath = args["dict"];
+        if (isDir(dictPath))
+        {
+            dictPath = dictPath / dictName;
+        }
+
+        sSetsPtr.reset
+        (
+            new IOsampledSets
+            (
+                sampledSets::typeName,
+                mesh,
+                dictPath,
+                IOobject::MUST_READ_IF_MODIFIED,
+                true
+            )
+        );
+
+        sSurfsPtr.reset
+        (
+            new IOsampledSurfaces
+            (
+                sampledSurfaces::typeName,
+                mesh,
+                dictPath,
+                IOobject::MUST_READ_IF_MODIFIED,
+                true
+            )
+        );
+    }
+    else
+    {
+        // Construct from name in system() directory
+
+        sSetsPtr.reset
+        (
+            new IOsampledSets
+            (
+                sampledSets::typeName,
+                mesh,
+                dictName,
+                IOobject::MUST_READ_IF_MODIFIED,
+                true
+            )
+        );
+
+        sSurfsPtr.reset
+        (
+            new IOsampledSurfaces
+            (
+                sampledSurfaces::typeName,
+                mesh,
+                dictName,
+                IOobject::MUST_READ_IF_MODIFIED,
+                true
+            )
+        );
+    }
+
+    IOsampledSets& sSets = sSetsPtr();
+    IOsampledSurfaces& sSurfs = sSurfsPtr();
 
     forAll(timeDirs, timeI)
     {
diff --git a/applications/utilities/postProcessing/sampling/sample/sampleDict b/applications/utilities/postProcessing/sampling/sample/sampleDict
index 58bdc7c59cee694920619d7192288cf813c7fed6..86ba1b4849f442f22d78b2ec6e1b2f67d30b85c8 100644
--- a/applications/utilities/postProcessing/sampling/sample/sampleDict
+++ b/applications/utilities/postProcessing/sampling/sample/sampleDict
@@ -140,6 +140,7 @@ sets
 
     patchSeed
     {
+        type        patchSeed;
         patches     (".*Wall.*");
         // Number of points to seed. Divided amongst all processors according
         // to fraction of patches they hold.
diff --git a/applications/utilities/preProcessing/changeDictionary/changeDictionary.C b/applications/utilities/preProcessing/changeDictionary/changeDictionary.C
index 3c664cfc3b29297010cd924cc15dfd75d398d422..4bb711880a309c5c51c39be36ace7ae95abcb576 100644
--- a/applications/utilities/preProcessing/changeDictionary/changeDictionary.C
+++ b/applications/utilities/preProcessing/changeDictionary/changeDictionary.C
@@ -385,12 +385,7 @@ bool merge
 
 int main(int argc, char *argv[])
 {
-    argList::addOption
-    (
-        "dict",
-        "file",
-        "specify an alternative to system/changeDictionaryDict"
-    );
+    #include "addDictOption.H"
     argList::addOption
     (
         "instance",
@@ -432,21 +427,8 @@ int main(int argc, char *argv[])
     runTime.setTime(times[0], 0);
     word instance = args.optionLookupOrDefault("instance", runTime.timeName());
 
-
     #include "createNamedMesh.H"
 
-    const word dictName("changeDictionaryDict");
-
-    fileName dictPath = dictName;
-    if (args.optionFound("dict"))
-    {
-        dictPath = args["dict"];
-        if (isDir(dictPath))
-        {
-            dictPath = dictPath / dictName;
-        }
-    }
-
     const bool literalRE = args.optionFound("literalRE");
     if (literalRE)
     {
@@ -493,27 +475,10 @@ int main(int argc, char *argv[])
 
 
     // Get the replacement rules from a dictionary
-    IOdictionary dict
-    (
-        (
-            args.optionFound("dict")
-          ? IOobject
-            (
-                dictPath,
-                mesh,
-                IOobject::MUST_READ_IF_MODIFIED,
-                IOobject::NO_WRITE
-            )
-          : IOobject
-            (
-                dictName,
-                runTime.system(),
-                mesh,
-                IOobject::MUST_READ_IF_MODIFIED,
-                IOobject::NO_WRITE
-            )
-        )
-    );
+
+    const word dictName("changeDictionaryDict");
+    #include "setSystemMeshDictionaryIO.H"
+    IOdictionary dict(dictIO);
 
     const dictionary& replaceDicts = dict.subDict("dictionaryReplacement");
     Info<< "Read dictionary " << dict.name()
diff --git a/applications/utilities/preProcessing/faceAgglomerate/faceAgglomerate.C b/applications/utilities/preProcessing/faceAgglomerate/faceAgglomerate.C
index 39b6572ef11640e5df8ed0d470058b95987404fe..2e3a56007b22561df858fd9675a9534e928b3c9a 100644
--- a/applications/utilities/preProcessing/faceAgglomerate/faceAgglomerate.C
+++ b/applications/utilities/preProcessing/faceAgglomerate/faceAgglomerate.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -48,22 +48,22 @@ using namespace Foam;
 int main(int argc, char *argv[])
 {
     #include "addRegionOption.H"
-    argList::addOption
-    (
-        "dict",
-        "word",
-        "name of dictionary to provide patch agglomeration controls"
-    );
+    #include "addDictOption.H"
     #include "setRootCase.H"
     #include "createTime.H"
     #include "createNamedMesh.H"
 
-    word agglomDictName
-    (
-        args.optionLookupOrDefault<word>("dict", "faceAgglomerateDict")
-    );
+    const word dictName("faceAgglomerateDict");
+
+    #include "setConstantMeshDictionaryIO.H"
+
+    // Read control dictionary
+    const IOdictionary agglomDict(dictIO);
+
+    bool writeAgglom = readBool(agglomDict.lookup("writeFacesAgglomeration"));
 
-    const polyBoundaryMesh& patches = mesh.boundaryMesh();
+
+    const polyBoundaryMesh& boundary = mesh.boundaryMesh();
 
     labelListIOList finalAgglom
     (
@@ -76,27 +76,9 @@ int main(int argc, char *argv[])
             IOobject::NO_WRITE,
             false
         ),
-        patches.size()
-    );
-
-
-    // Read control dictionary
-    IOdictionary agglomDict
-    (
-        IOobject
-        (
-            agglomDictName,
-            runTime.constant(),
-            mesh,
-            IOobject::MUST_READ,
-            IOobject::NO_WRITE
-        )
+        boundary.size()
     );
 
-    bool writeAgglom = readBool(agglomDict.lookup("writeFacesAgglomeration"));
-
-    const polyBoundaryMesh& boundary = mesh.boundaryMesh();
-
     forAll(boundary, patchId)
     {
         const polyPatch& pp = boundary[patchId];
@@ -178,7 +160,6 @@ int main(int argc, char *argv[])
 
         forAll(boundary, patchId)
         {
-
             fvPatchScalarField& bFacesAgglomeration =
                 facesAgglomeration.boundaryField()[patchId];
 
@@ -188,7 +169,7 @@ int main(int argc, char *argv[])
             }
         }
 
-        Info << "\nWriting  facesAgglomeration" << endl;
+        Info<< "\nWriting facesAgglomeration" << endl;
         facesAgglomeration.write();
     }
 
diff --git a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/constant/MRFProperties b/applications/utilities/preProcessing/faceAgglomerate/faceAgglomerateDict
similarity index 74%
rename from tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/constant/MRFProperties
rename to applications/utilities/preProcessing/faceAgglomerate/faceAgglomerateDict
index c4c20f18d00832f8078eca66c760dfd069ef9282..9c164f15092a651ef06fa0b1f871dbee69d2fa82 100644
--- a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/constant/MRFProperties
+++ b/applications/utilities/preProcessing/faceAgglomerate/faceAgglomerateDict
@@ -10,23 +10,19 @@ FoamFile
     version     2.0;
     format      ascii;
     class       dictionary;
-    location    "constant";
-    object      MRFProperties;
+    object      viewFactorsDict;
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-zone1
-{
-    cellZone    rotor;
-
-    active      on;
-
-    // Fixed patches (by default they 'move' with the MRF zone)
-    nonRotatingPatches ();
+// Write agglomeration as a volScalarField with calculated boundary values
+writeFacesAgglomeration   true;
 
-    origin    (0 0 0);
-    axis      (0 0 1);
-    omega     constant 1047.2;
+// Per patch (wildcard possible) the coarsening level
+bottomAir_to_heater
+{
+    nFacesInCoarsestLevel     30;
+    featureAngle              10;
 }
 
+
 // ************************************************************************* //
diff --git a/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.C b/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.C
index b3b390af515122423aaf6a99116a267366cd1da2..03d1ba874d1edf9045ada1f7958bf7bb92d4ded0 100644
--- a/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.C
+++ b/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.C
@@ -680,35 +680,17 @@ int main(int argc, char *argv[])
     );
     argList::noParallel();
 
-    argList::addOption
-    (
-        "dict",
-        "word",
-        "specify alternative dictionary for the feature extraction information"
-    );
+#   include "addDictOption.H"
 
 #   include "setRootCase.H"
 #   include "createTime.H"
 
-    word dictName
-    (
-        args.optionLookupOrDefault<word>("dict", "surfaceFeatureExtractDict")
-    );
+    const word dictName("surfaceFeatureExtractDict");
+#   include "setSystemRunTimeDictionaryIO.H"
 
     Info<< "Reading " << dictName << nl << endl;
 
-    IOdictionary dict
-    (
-        IOobject
-        (
-            dictName,
-            runTime.system(),
-            runTime,
-            IOobject::MUST_READ,
-            IOobject::NO_WRITE,
-            false
-        )
-    );
+    const IOdictionary dict(dictIO);
 
     forAllConstIter(dictionary, dict, iter)
     {
diff --git a/applications/utilities/surface/surfaceMeshConvert/surfaceMeshConvert.C b/applications/utilities/surface/surfaceMeshConvert/surfaceMeshConvert.C
index 305786f963dbc8fd30ecac409b5e451bcc396ac8..ea30c2dd55d4631fb3e6a2f1aacb6d24f9a4bb3c 100644
--- a/applications/utilities/surface/surfaceMeshConvert/surfaceMeshConvert.C
+++ b/applications/utilities/surface/surfaceMeshConvert/surfaceMeshConvert.C
@@ -96,12 +96,7 @@ int main(int argc, char *argv[])
         "factor",
         "geometry scaling factor on output"
     );
-    argList::addOption
-    (
-        "dict",
-        "file",
-        "specify alternative dictionary for the coordinateSystems descriptions"
-    );
+    #include "addDictOption.H"
     argList::addOption
     (
         "from",
@@ -154,19 +149,28 @@ int main(int argc, char *argv[])
     {
         autoPtr<IOobject> csDictIoPtr;
 
+        const word dictName("coordinateSystems::typeName");
+
+        // Note: cannot use setSystemRunTimeDictionaryIO.H since dictionary
+        //       is in constant
+
+        fileName dictPath = "";
         if (args.optionFound("dict"))
         {
-            const fileName dictPath = args["dict"];
+            dictPath = args["dict"];
+            if (isDir(dictPath))
+            {
+                dictPath = dictPath / dictName;
+            }
+        }
 
+        if (dictPath.size())
+        {
             csDictIoPtr.set
             (
                 new IOobject
                 (
-                    (
-                        isDir(dictPath)
-                      ? dictPath/coordinateSystems::typeName
-                      : dictPath
-                    ),
+                    dictPath,
                     runTime,
                     IOobject::MUST_READ,
                     IOobject::NO_WRITE,
@@ -180,7 +184,7 @@ int main(int argc, char *argv[])
             (
                 new IOobject
                 (
-                    coordinateSystems::typeName,
+                    dictName,
                     runTime.constant(),
                     runTime,
                     IOobject::MUST_READ,
diff --git a/applications/utilities/surface/surfaceMeshExport/surfaceMeshExport.C b/applications/utilities/surface/surfaceMeshExport/surfaceMeshExport.C
index 7c9b3be904d7989160b98d77602da3c2564efb9b..f8a5ebf57a25ad8cd4dafa325b265203e459f1e3 100644
--- a/applications/utilities/surface/surfaceMeshExport/surfaceMeshExport.C
+++ b/applications/utilities/surface/surfaceMeshExport/surfaceMeshExport.C
@@ -103,12 +103,7 @@ int main(int argc, char *argv[])
         "factor",
         "geometry scaling factor on output - default is 1"
     );
-    argList::addOption
-    (
-        "dict",
-        "file",
-        "specify an alternative dictionary for constant/coordinateSystems"
-    );
+    #include "addDictOption.H"
     argList::addOption
     (
         "from",
diff --git a/applications/utilities/surface/surfaceMeshImport/surfaceMeshImport.C b/applications/utilities/surface/surfaceMeshImport/surfaceMeshImport.C
index 3a14ac63c42371d6e4dd20c69cfaa570b57596d3..87ff39d182edceabeeb8a6555a3b0ff31f641258 100644
--- a/applications/utilities/surface/surfaceMeshImport/surfaceMeshImport.C
+++ b/applications/utilities/surface/surfaceMeshImport/surfaceMeshImport.C
@@ -103,12 +103,7 @@ int main(int argc, char *argv[])
         "factor",
         "geometry scaling factor on output - default is 1"
     );
-    argList::addOption
-    (
-        "dict",
-        "file",
-        "specify an alternative dictionary for constant/coordinateSystems"
-    );
+    #include "addDictOption.H"
     argList::addOption
     (
         "from",
diff --git a/etc/config/scotch.sh b/etc/config/scotch.sh
index df1dce8256a37aa91cda4cd3d4e0488b9beda4a9..1ee06e80b87b298f1b7bea4497422d42d7ed32d6 100644
--- a/etc/config/scotch.sh
+++ b/etc/config/scotch.sh
@@ -2,7 +2,7 @@
 # =========                 |
 # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
 #  \\    /   O peration     |
-#   \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+#   \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
 #    \\/     M anipulation  |
 #------------------------------------------------------------------------------
 # License
@@ -33,7 +33,7 @@
 #     during the wmake process
 #------------------------------------------------------------------------------
 
-export SCOTCH_VERSION=scotch_5.1.11
+export SCOTCH_VERSION=scotch_6.0.0
 export SCOTCH_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$SCOTCH_VERSION
 
 # -----------------------------------------------------------------------------
diff --git a/src/OpenFOAM/db/IOobject/IOobject.C b/src/OpenFOAM/db/IOobject/IOobject.C
index e9e48e95540f87158fa7aa56c5923bdd41b1a9f3..47e14b0577693049e73ac92827d06edc2482e5cc 100644
--- a/src/OpenFOAM/db/IOobject/IOobject.C
+++ b/src/OpenFOAM/db/IOobject/IOobject.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -40,7 +40,7 @@ defineTypeNameAndDebug(Foam::IOobject, 0);
 //    -----               ------
 //    "foo"               ("", "", "foo")
 //    "foo/bar"           ("foo", "", "bar")
-//    "/XXX"              ERROR - no absolute path
+//    "/XXX/bar"          ("/XXX", "", "bar")
 //    "foo/bar/"          ERROR - no name
 //    "foo/xxx/bar"       ("foo", "xxx", "bar")
 //    "foo/xxx/yyy/bar"   ("foo", "xxx/yyy", "bar")
@@ -64,14 +64,6 @@ bool Foam::IOobject::IOobject::fileNameComponents
         return false;
     }
 
-    if (path.isAbsolute())
-    {
-        // called with absolute path
-        WarningIn("IOobject::fileNameComponents(const fileName&, ...)")
-            << "called with absolute path: " << path << "\n";
-        return false;
-    }
-
     string::size_type first = path.find('/');
 
     if (first == string::npos)
@@ -81,6 +73,15 @@ bool Foam::IOobject::IOobject::fileNameComponents
         // check afterwards
         name.string::operator=(path);
     }
+    else if (first == 0)
+    {
+        // Leading '/'. Absolute fileName
+        string::size_type last = path.rfind('/');
+        instance = path.substr(0, last);
+
+        // check afterwards
+        name.string::operator=(path.substr(last+1));
+    }
     else
     {
         instance = path.substr(0, first);
@@ -246,7 +247,14 @@ const Foam::fileName& Foam::IOobject::rootPath() const
 
 Foam::fileName Foam::IOobject::path() const
 {
-    return rootPath()/caseName()/instance()/db_.dbDir()/local();
+    if (instance().isAbsolute())
+    {
+        return instance();
+    }
+    else
+    {
+        return rootPath()/caseName()/instance()/db_.dbDir()/local();
+    }
 }
 
 
@@ -256,61 +264,80 @@ Foam::fileName Foam::IOobject::path
     const fileName& local
 ) const
 {
+    //Note: can only be called with relative instance since is word type
     return rootPath()/caseName()/instance/db_.dbDir()/local;
 }
 
 
 Foam::fileName Foam::IOobject::filePath() const
 {
-    fileName path = this->path();
-    fileName objectPath = path/name();
-
-    if (isFile(objectPath))
+    if (instance().isAbsolute())
     {
-        return objectPath;
+        fileName objectPath = instance()/name();
+        if (isFile(objectPath))
+        {
+            return objectPath;
+        }
+        else
+        {
+            return fileName::null;
+        }
     }
     else
     {
-        if
-        (
-            time().processorCase()
-         && (
-                instance() == time().system()
-             || instance() == time().constant()
-            )
-        )
-        {
-            fileName parentObjectPath =
-                rootPath()/caseName()
-               /".."/instance()/db_.dbDir()/local()/name();
+        fileName path = this->path();
+        fileName objectPath = path/name();
 
-            if (isFile(parentObjectPath))
-            {
-                return parentObjectPath;
-            }
+        if (isFile(objectPath))
+        {
+            return objectPath;
         }
-
-        if (!isDir(path))
+        else
         {
-            word newInstancePath = time().findInstancePath(instant(instance()));
+            if
+            (
+                time().processorCase()
+             && (
+                    instance() == time().system()
+                 || instance() == time().constant()
+                )
+            )
+            {
+                fileName parentObjectPath =
+                    rootPath()/caseName()
+                   /".."/instance()/db_.dbDir()/local()/name();
+
+                if (isFile(parentObjectPath))
+                {
+                    return parentObjectPath;
+                }
+            }
 
-            if (newInstancePath.size())
+            if (!isDir(path))
             {
-                fileName fName
+                word newInstancePath = time().findInstancePath
                 (
-                    rootPath()/caseName()
-                   /newInstancePath/db_.dbDir()/local()/name()
+                    instant(instance())
                 );
 
-                if (isFile(fName))
+                if (newInstancePath.size())
                 {
-                    return fName;
+                    fileName fName
+                    (
+                        rootPath()/caseName()
+                       /newInstancePath/db_.dbDir()/local()/name()
+                    );
+
+                    if (isFile(fName))
+                    {
+                        return fName;
+                    }
                 }
             }
         }
-    }
 
-    return fileName::null;
+        return fileName::null;
+    }
 }
 
 
diff --git a/src/OpenFOAM/db/Time/Time.C b/src/OpenFOAM/db/Time/Time.C
index 8619e2da91669622d1a06bba18bdc9415368e234..b589dfc883704190b17ba174d102e3d5648e611a 100644
--- a/src/OpenFOAM/db/Time/Time.C
+++ b/src/OpenFOAM/db/Time/Time.C
@@ -148,7 +148,7 @@ void Foam::Time::setControls()
     else
     {
         // Search directory for valid time directories
-        instantList timeDirs = findTimes(path());
+        instantList timeDirs = findTimes(path(), constant());
 
         if (startFrom == "firstTime")
         {
@@ -694,13 +694,13 @@ Foam::word Foam::Time::timeName() const
 // Search the construction path for times
 Foam::instantList Foam::Time::times() const
 {
-    return findTimes(path());
+    return findTimes(path(), constant());
 }
 
 
 Foam::word Foam::Time::findInstancePath(const instant& t) const
 {
-    instantList timeDirs = findTimes(path());
+    instantList timeDirs = findTimes(path(), constant());
 
     forAllReverse(timeDirs, timeI)
     {
@@ -716,7 +716,7 @@ Foam::word Foam::Time::findInstancePath(const instant& t) const
 
 Foam::instant Foam::Time::findClosestTime(const scalar t) const
 {
-    instantList timeDirs = findTimes(path());
+    instantList timeDirs = findTimes(path(), constant());
 
     // there is only one time (likely "constant") so return it
     if (timeDirs.size() == 1)
@@ -755,15 +755,16 @@ Foam::instant Foam::Time::findClosestTime(const scalar t) const
 //
 // Foam::instant Foam::Time::findClosestTime(const scalar t) const
 // {
-//     instantList timeDirs = findTimes(path());
-//     label timeIndex = min(findClosestTimeIndex(timeDirs, t), 0);
+//     instantList timeDirs = findTimes(path(), constant());
+//     label timeIndex = min(findClosestTimeIndex(timeDirs, t), 0, constant());
 //     return timeDirs[timeIndex];
 // }
 
 Foam::label Foam::Time::findClosestTimeIndex
 (
     const instantList& timeDirs,
-    const scalar t
+    const scalar t,
+    const word& constantName
 )
 {
     label nearestIndex = -1;
@@ -771,7 +772,7 @@ Foam::label Foam::Time::findClosestTimeIndex
 
     forAll(timeDirs, timeI)
     {
-        if (timeDirs[timeI].name() == "constant") continue;
+        if (timeDirs[timeI].name() == constantName) continue;
 
         scalar diff = mag(timeDirs[timeI].value() - t);
         if (diff < deltaT)
diff --git a/src/OpenFOAM/db/Time/Time.H b/src/OpenFOAM/db/Time/Time.H
index 1e761cd73eaaff3d81b4a27d15c996d885bbd19c..695f666c2e9d08e8a5b3f84023547ef39faee052 100644
--- a/src/OpenFOAM/db/Time/Time.H
+++ b/src/OpenFOAM/db/Time/Time.H
@@ -374,7 +374,12 @@ public:
             instant findClosestTime(const scalar) const;
 
             //- Search instantList for the time index closest to the given time
-            static label findClosestTimeIndex(const instantList&, const scalar);
+            static label findClosestTimeIndex
+            (
+                const instantList&,
+                const scalar,
+                const word& constantName = "constant"
+            );
 
             //- Write using given format, version and compression
             virtual bool writeObject
@@ -404,7 +409,11 @@ public:
             virtual word timeName() const;
 
             //- Search a given directory for valid time directories
-            static instantList findTimes(const fileName&);
+            static instantList findTimes
+            (
+                const fileName&,
+                const word& constantName = "constant"
+            );
 
             //- Return start time index
             virtual label startTimeIndex() const;
diff --git a/src/OpenFOAM/db/Time/findTimes.C b/src/OpenFOAM/db/Time/findTimes.C
index 87b3669fd6bd89ed0107995fd4133ea40f2dda9d..3384916737a8374d012ad20c9c529ac3742cb570 100644
--- a/src/OpenFOAM/db/Time/findTimes.C
+++ b/src/OpenFOAM/db/Time/findTimes.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -34,7 +34,11 @@ Description
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-Foam::instantList Foam::Time::findTimes(const fileName& directory)
+Foam::instantList Foam::Time::findTimes
+(
+    const fileName& directory,
+    const word& constantName
+)
 {
     if (debug)
     {
@@ -53,7 +57,7 @@ Foam::instantList Foam::Time::findTimes(const fileName& directory)
     bool haveConstant = false;
     forAll(dirEntries, i)
     {
-        if (dirEntries[i] == "constant")
+        if (dirEntries[i] == constantName)
         {
             Times[nTimes].value() = 0;
             Times[nTimes].name() = dirEntries[i];
diff --git a/src/OpenFOAM/db/Time/timeSelector.C b/src/OpenFOAM/db/Time/timeSelector.C
index 60b589a347478408fc08fbb026f468da0e6db971..7a8bcc5eb4efecceee540aeec5e597c4d5c27a7e 100644
--- a/src/OpenFOAM/db/Time/timeSelector.C
+++ b/src/OpenFOAM/db/Time/timeSelector.C
@@ -155,7 +155,8 @@ void Foam::timeSelector::addOptions
 Foam::List<Foam::instant> Foam::timeSelector::select
 (
     const instantList& timeDirs,
-    const argList& args
+    const argList& args,
+    const word& constantName
 )
 {
     if (timeDirs.size())
@@ -168,7 +169,7 @@ Foam::List<Foam::instant> Foam::timeSelector::select
 
         forAll(timeDirs, timeI)
         {
-            if (timeDirs[timeI].name() == "constant")
+            if (timeDirs[timeI].name() == constantName)
             {
                 constantIdx = timeI;
             }
@@ -250,7 +251,12 @@ Foam::List<Foam::instant> Foam::timeSelector::select0
     const argList& args
 )
 {
-    instantList timeDirs = timeSelector::select(runTime.times(), args);
+    instantList timeDirs = timeSelector::select
+    (
+        runTime.times(),
+        args,
+        runTime.constant()
+    );
 
     if (timeDirs.empty())
     {
diff --git a/src/OpenFOAM/db/Time/timeSelector.H b/src/OpenFOAM/db/Time/timeSelector.H
index 88255cac0695c27523474e01399bf09587d1772c..ce22d83fcea5f3e1328370658ebfe22481683a32 100644
--- a/src/OpenFOAM/db/Time/timeSelector.H
+++ b/src/OpenFOAM/db/Time/timeSelector.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -138,7 +138,8 @@ public:
         static instantList select
         (
             const instantList&,
-            const argList& args
+            const argList& args,
+            const word& constantName = "constant"
         );
 
         //- Return the set of times selected based on the argList options
diff --git a/src/OpenFOAM/db/dictionary/entry/entryIO.C b/src/OpenFOAM/db/dictionary/entry/entryIO.C
index c958b8f94961999611ed53e64edc63395107c1e0..bc0ffb9c09bbb0cc068072180ee72282bac25b1a 100644
--- a/src/OpenFOAM/db/dictionary/entry/entryIO.C
+++ b/src/OpenFOAM/db/dictionary/entry/entryIO.C
@@ -117,11 +117,12 @@ bool Foam::entry::New(dictionary& parentDict, Istream& is)
             if (keyword.size() > 2 && keyword[1] == token::BEGIN_BLOCK)
             {
                 // Recursive substitution mode. Replace between {} with
-                // expansion.
+                // expansion and then let standard variable expansion deal
+                // with rest.
                 string s(keyword(2, keyword.size()-3));
-                // Substitute dictionary and environment variables. Allow
+                // Substitute dictionary and environment variables. Do not allow
                 // empty substitutions.
-                stringOps::inplaceExpand(s, parentDict, true, true);
+                stringOps::inplaceExpand(s, parentDict, true, false);
                 keyword.std::string::replace(1, keyword.size()-1, s);
             }
             parentDict.substituteScopedKeyword(keyword);
diff --git a/src/OpenFOAM/db/dictionary/primitiveEntry/primitiveEntry.C b/src/OpenFOAM/db/dictionary/primitiveEntry/primitiveEntry.C
index 0566b8f350463d8cf0873f8c3c831a5156f10aad..779709e4a06b326abd2bc549e05045e79615adbc 100644
--- a/src/OpenFOAM/db/dictionary/primitiveEntry/primitiveEntry.C
+++ b/src/OpenFOAM/db/dictionary/primitiveEntry/primitiveEntry.C
@@ -47,13 +47,11 @@ bool Foam::primitiveEntry::expandVariable
 {
     if (w.size() > 2 && w[0] == '$' && w[1] == token::BEGIN_BLOCK)
     {
-        // Recursive substitution mode. Replace between {} with
-        // expansion.
+        // Recursive substitution mode. Replace between {} with expansion.
         string s(w(2, w.size()-3));
-        // Substitute dictionary and environment variables. Allow
+        // Substitute dictionary and environment variables. Do not allow
         // empty substitutions.
-        stringOps::inplaceExpand(s, dict, true, true);
-
+        stringOps::inplaceExpand(s, dict, true, false);
         string newW(w);
         newW.std::string::replace(1, newW.size()-1, s);
 
@@ -83,6 +81,15 @@ bool Foam::primitiveEntry::expandVariable
 
             if (envStr.empty())
             {
+                FatalIOErrorIn
+                (
+                    "primitiveEntry::expandVariable"
+                    "(const string&, const dictionary&",
+                    dict
+                )   << "Illegal dictionary entry or environment variable name "
+                    << varName << endl << "Valid dictionary entries are "
+                    << dict.toc() << exit(FatalIOError);
+
                 return false;
             }
             append(tokenList(IStringStream('(' + envStr + ')')()));
diff --git a/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.C b/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.C
index 92991b1b1d0b9378b1026608d4fc149e27c731df..18b46f29af8e445d94ac97faf68c950e9f305792 100644
--- a/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.C
+++ b/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -46,7 +46,7 @@ Foam::IOOutputFilter<OutputFilter>::IOOutputFilter
 (
     const word& outputFilterName,
     const objectRegistry& obr,
-    const fileName& dictName,
+    const word& dictName,
     const IOobject::readOption rOpt,
     const bool readFromFiles
 )
@@ -66,6 +66,30 @@ Foam::IOOutputFilter<OutputFilter>::IOOutputFilter
 {}
 
 
+template<class OutputFilter>
+Foam::IOOutputFilter<OutputFilter>::IOOutputFilter
+(
+    const word& outputFilterName,
+    const objectRegistry& obr,
+    const fileName& dictName,
+    const IOobject::readOption rOpt,
+    const bool readFromFiles
+)
+:
+    IOdictionary
+    (
+        IOobject
+        (
+            dictName,
+            obr,
+            rOpt,
+            IOobject::NO_WRITE
+        )
+    ),
+    OutputFilter(outputFilterName, obr, *this, readFromFiles)
+{}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
 template<class OutputFilter>
diff --git a/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.H b/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.H
index ebddc142cb2fb17d4422e5d8e7b785ea328a922a..c115023a63593f1d12404894c86527111f7b10ae 100644
--- a/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.H
+++ b/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -89,7 +89,19 @@ public:
         (
             const word& outputFilterName,
             const objectRegistry&,
-            const fileName& dictName = OutputFilter::typeName() + "Dict",
+            const word& dictName = OutputFilter::typeName() + "Dict",
+            const IOobject::readOption rOpt = IOobject::MUST_READ_IF_MODIFIED,
+            const bool loadFromFile = false
+        );
+
+        //- Construct for given objectRegistry and dictionary
+        //  Dictionary read from full path.
+        //  Allow the possibility to load fields from files
+        IOOutputFilter
+        (
+            const word& outputFilterName,
+            const objectRegistry&,
+            const fileName& dictName,
             const IOobject::readOption rOpt = IOobject::MUST_READ_IF_MODIFIED,
             const bool loadFromFile = false
         );
diff --git a/src/OpenFOAM/include/addDictOption.H b/src/OpenFOAM/include/addDictOption.H
new file mode 100644
index 0000000000000000000000000000000000000000..f538e572948c95a5e9e47f85f08bfcd4ab66b366
--- /dev/null
+++ b/src/OpenFOAM/include/addDictOption.H
@@ -0,0 +1,10 @@
+//
+// addDictOption.H
+// ~~~~~~~~~~~~~~~~~
+
+    Foam::argList::addOption
+    (
+        "dict",
+        "file",
+        "read control dictionary from specified location"
+    );
diff --git a/src/OpenFOAM/include/setConstantMeshDictionaryIO.H b/src/OpenFOAM/include/setConstantMeshDictionaryIO.H
new file mode 100644
index 0000000000000000000000000000000000000000..4f97cf16940800ddfcf6168f5584496e342edb64
--- /dev/null
+++ b/src/OpenFOAM/include/setConstantMeshDictionaryIO.H
@@ -0,0 +1,33 @@
+//
+// setConstantMeshDictionaryIO.H
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    fileName dictPath = "";
+    if (args.optionFound("dict"))
+    {
+        dictPath = args["dict"];
+        if (isDir(dictPath))
+        {
+            dictPath = dictPath / dictName;
+        }
+    }
+
+    IOobject dictIO
+    (
+        dictName,
+        runTime.constant(),
+        mesh,
+        IOobject::MUST_READ_IF_MODIFIED,
+        IOobject::NO_WRITE
+    );
+
+    if (dictPath.size())
+    {
+        dictIO = IOobject
+        (
+            dictPath,
+            mesh,
+            IOobject::MUST_READ_IF_MODIFIED,
+            IOobject::NO_WRITE
+        );
+    }
diff --git a/src/OpenFOAM/include/setSystemMeshDictionaryIO.H b/src/OpenFOAM/include/setSystemMeshDictionaryIO.H
new file mode 100644
index 0000000000000000000000000000000000000000..6e89f94c33fb2b1ec344d3c47a8bfcfc84369d87
--- /dev/null
+++ b/src/OpenFOAM/include/setSystemMeshDictionaryIO.H
@@ -0,0 +1,33 @@
+//
+// setSystemMeshDictionaryIO.H
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    fileName dictPath = "";
+    if (args.optionFound("dict"))
+    {
+        dictPath = args["dict"];
+        if (isDir(dictPath))
+        {
+            dictPath = dictPath / dictName;
+        }
+    }
+
+    IOobject dictIO
+    (
+        dictName,
+        runTime.system(),
+        mesh,
+        IOobject::MUST_READ_IF_MODIFIED,
+        IOobject::NO_WRITE
+    );
+
+    if (dictPath.size())
+    {
+        dictIO = IOobject
+        (
+            dictPath,
+            mesh,
+            IOobject::MUST_READ_IF_MODIFIED,
+            IOobject::NO_WRITE
+        );
+    }
diff --git a/src/OpenFOAM/include/setSystemRunTimeDictionaryIO.H b/src/OpenFOAM/include/setSystemRunTimeDictionaryIO.H
new file mode 100644
index 0000000000000000000000000000000000000000..e594e83d960110735ddf042462655c2d46318756
--- /dev/null
+++ b/src/OpenFOAM/include/setSystemRunTimeDictionaryIO.H
@@ -0,0 +1,33 @@
+//
+// setSystemRunTimeDictionaryIO.H
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    fileName dictPath = "";
+    if (args.optionFound("dict"))
+    {
+        dictPath = args["dict"];
+        if (isDir(dictPath))
+        {
+            dictPath = dictPath / dictName;
+        }
+    }
+
+    IOobject dictIO
+    (
+        dictName,
+        runTime.system(),
+        runTime,
+        IOobject::MUST_READ_IF_MODIFIED,
+        IOobject::NO_WRITE
+    );
+
+    if (dictPath.size())
+    {
+        dictIO = IOobject
+        (
+            dictPath,
+            runTime,
+            IOobject::MUST_READ_IF_MODIFIED,
+            IOobject::NO_WRITE
+        );
+    }
diff --git a/src/OpenFOAM/primitives/strings/stringOps/stringOps.C b/src/OpenFOAM/primitives/strings/stringOps/stringOps.C
index b7e11d644fed2cc622e40beeb174e453c05c0d48..feabf361096502db97ae9d189d2487b81ce9571e 100644
--- a/src/OpenFOAM/primitives/strings/stringOps/stringOps.C
+++ b/src/OpenFOAM/primitives/strings/stringOps/stringOps.C
@@ -312,7 +312,7 @@ Foam::string Foam::stringOps::getVariable
             "    const bool\n"
             ")\n",
             dict
-        )   << "Cannot find environment variable "
+        )   << "Cannot find dictionary variable "
             << name << exit(FatalIOError);
     }
 
diff --git a/src/conversion/meshReader/meshReader.C b/src/conversion/meshReader/meshReader.C
index b6f50c24525da948890767078f08283e2406bb49..851492229dd4730e4ebfa1a0461f11a2587871d0 100644
--- a/src/conversion/meshReader/meshReader.C
+++ b/src/conversion/meshReader/meshReader.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -138,7 +138,7 @@ Foam::autoPtr<Foam::polyMesh> Foam::meshReader::mesh
             IOobject
             (
                 polyMesh::defaultRegion,
-                "constant",
+                registry.time().constant(),
                 registry
             ),
             xferMove(points_),
diff --git a/src/conversion/meshReader/meshReaderAux.C b/src/conversion/meshReader/meshReaderAux.C
index 91708d8055734358c7823121d9fd59743b4081de..95360dba1e71965d77dd330fd367cb57a6c45e40 100644
--- a/src/conversion/meshReader/meshReaderAux.C
+++ b/src/conversion/meshReader/meshReaderAux.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -26,7 +26,7 @@ License
 #include "meshReader.H"
 #include "IOMap.H"
 #include "OFstream.H"
-
+#include "Time.H"
 
 // * * * * * * * * * * * * * * * Static Functions  * * * * * * * * * * * * * //
 
@@ -80,7 +80,7 @@ void Foam::meshReader::writeInterfaces(const objectRegistry& registry) const
         IOobject
         (
             "interfaces",
-            "constant",
+            registry.time().constant(),
             polyMesh::meshSubDir,
             registry,
             IOobject::NO_READ,
@@ -115,7 +115,7 @@ void Foam::meshReader::writeMeshLabelList
         IOobject
         (
             propertyName,
-            "constant",
+            registry.time().constant(),
             polyMesh::meshSubDir,
             registry,
             IOobject::NO_READ,
diff --git a/src/conversion/meshWriter/starcd/STARCDMeshWriter.C b/src/conversion/meshWriter/starcd/STARCDMeshWriter.C
index 2df70059e2ae8224989b88d148b823d5d8f49752..08383060e144ff41ccf1d526f079ee186ba36ef1 100644
--- a/src/conversion/meshWriter/starcd/STARCDMeshWriter.C
+++ b/src/conversion/meshWriter/starcd/STARCDMeshWriter.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -72,7 +72,7 @@ void Foam::meshWriters::STARCD::getCellTable()
         IOobject
         (
             "cellTableId",
-            "constant",
+            mesh_.time().constant(),
             polyMesh::meshSubDir,
             mesh_,
             IOobject::READ_IF_PRESENT,
@@ -506,7 +506,7 @@ bool Foam::meshWriters::STARCD::write(const fileName& meshName) const
         if
         (
             mesh_.time().timeName() != "0"
-         && mesh_.time().timeName() != "constant"
+         && mesh_.time().timeName() != mesh_.time().constant()
         )
         {
             baseName += "_" + mesh_.time().timeName();
diff --git a/src/edgeMesh/edgeMeshFormats/edgeMeshFormatsCore.C b/src/edgeMesh/edgeMeshFormats/edgeMeshFormatsCore.C
index f87d6f7d38f01cc6bbee45899027a72a1c21af5a..9cd5e35fda2cdaae80c1eddb04204f834b791643 100644
--- a/src/edgeMesh/edgeMeshFormats/edgeMeshFormatsCore.C
+++ b/src/edgeMesh/edgeMeshFormats/edgeMeshFormatsCore.C
@@ -105,7 +105,7 @@ Foam::fileName Foam::fileFormats::edgeMeshFormatsCore::findMeshInstance
         }
     }
 
-    return "constant";
+    return t.constant();
 }
 
 
@@ -148,7 +148,7 @@ Foam::fileName Foam::fileFormats::edgeMeshFormatsCore::findMeshFile
     }
 
     // fallback to "constant"
-    return t.path()/"constant"/localName;
+    return t.path()/t.constant()/localName;
 }
 #endif
 
diff --git a/src/fieldSources/Make/files b/src/fieldSources/Make/files
index 11f91ff58ad4e2d3a5429e9ac793043e6de4726c..a81d39f8f2fe3a2e94bd7c38082a3b79a6d8d618 100644
--- a/src/fieldSources/Make/files
+++ b/src/fieldSources/Make/files
@@ -3,13 +3,17 @@ basicSource/basicSourceIO.C
 basicSource/basicSourceList.C
 basicSource/IObasicSourceList.C
 
-general/semiImplicitSource/semiImplicitSource.C
-general/explicitSetValue/explicitSetValue.C
 general/codedSource/codedSource.C
+general/explicitSetValue/explicitSetValue.C
+general/semiImplicitSource/semiImplicitSource.C
 
+derived/actuationDiskSource/actuationDiskSource.C
+derived/explicitPorositySource/explicitPorositySource.C
+derived/fixedTemperatureSource/fixedTemperatureSource.C
+derived/MRFSource/MRFSource.C
 derived/pressureGradientExplicitSource/pressureGradientExplicitSource.C
 derived/pressureGradientExplicitSource/pressureGradientExplicitSourceIO.C
-
+derived/radialActuationDiskSource/radialActuationDiskSource.C
 derived/rotorDiskSource/rotorDiskSource.C
 derived/rotorDiskSource/bladeModel/bladeModel.C
 derived/rotorDiskSource/profileModel/profileModel.C
@@ -21,15 +25,11 @@ derived/rotorDiskSource/trimModel/trimModel/trimModelNew.C
 derived/rotorDiskSource/trimModel/fixed/fixedTrim.C
 derived/rotorDiskSource/trimModel/targetCoeff/targetCoeffTrim.C
 
-derived/actuationDiskSource/actuationDiskSource.C
-derived/radialActuationDiskSource/radialActuationDiskSource.C
-
 interRegion = derived/interRegionHeatTransferModel
-$(interRegion)/interRegionHeatTransferModel/interRegionHeatTransferModel.C
 $(interRegion)/constantHeatTransfer/constantHeatTransfer.C
+$(interRegion)/interRegionHeatTransferModel/interRegionHeatTransferModel.C
 $(interRegion)/tabulatedHeatTransfer/tabulatedHeatTransfer.C
 $(interRegion)/variableHeatTransfer/variableHeatTransfer.C
 
-derived/fixedTemperatureSource/fixedTemperatureSource.C
 
 LIB = $(FOAM_LIBBIN)/libfieldSources
diff --git a/src/fieldSources/basicSource/basicSource.C b/src/fieldSources/basicSource/basicSource.C
index 9ebcdc5834f30cf42cab164395a404db33206693..64be60fa84e8adf9b81f2e67b630992c587fa9f9 100644
--- a/src/fieldSources/basicSource/basicSource.C
+++ b/src/fieldSources/basicSource/basicSource.C
@@ -481,4 +481,36 @@ void Foam::basicSource::setValue(fvMatrix<tensor>& eqn, const label fieldI)
 }
 
 
+void Foam::basicSource::relativeFlux(surfaceScalarField& phi) const
+{
+    // do nothing
+}
+
+
+void Foam::basicSource::relativeFlux
+(
+    const surfaceScalarField& rho,
+    surfaceScalarField& phi
+) const
+{
+    // do nothing
+}
+
+
+void Foam::basicSource::absoluteFlux(surfaceScalarField& phi) const
+{
+    // do nothing
+}
+
+
+void Foam::basicSource::absoluteFlux
+(
+    const surfaceScalarField& rho,
+    surfaceScalarField& phi
+) const
+{
+    // do nothing
+}
+
+
 // ************************************************************************* //
diff --git a/src/fieldSources/basicSource/basicSource.H b/src/fieldSources/basicSource/basicSource.H
index 69e9dcf408b9588b8ef24eea9007afca51bb7e42..3e4740cead022cd494f98923cb7afc88b7af399e 100644
--- a/src/fieldSources/basicSource/basicSource.H
+++ b/src/fieldSources/basicSource/basicSource.H
@@ -427,6 +427,29 @@ public:
                 );
 
 
+            // Flux manipulations
+
+                //- Make the given absolute flux relative
+                virtual void relativeFlux(surfaceScalarField& phi) const;
+
+                //- Make the given absolute mass-flux relative
+                virtual void relativeFlux
+                (
+                    const surfaceScalarField& rho,
+                    surfaceScalarField& phi
+                ) const;
+
+                //- Make the given relative flux absolute
+                virtual void absoluteFlux(surfaceScalarField& phi) const;
+
+                //- Make the given relative mass-flux absolute
+                virtual void absoluteFlux
+                (
+                    const surfaceScalarField& rho,
+                    surfaceScalarField& phi
+                ) const;
+
+
         // I-O
 
             //- Write the source header information
diff --git a/src/fieldSources/basicSource/basicSourceList.C b/src/fieldSources/basicSource/basicSourceList.C
index 2d484868a44c969dd66d9539e07fa08d206c0b40..a7224e9a6c08bcf12ac72fa4e4e1b63908ff17c5 100644
--- a/src/fieldSources/basicSource/basicSourceList.C
+++ b/src/fieldSources/basicSource/basicSourceList.C
@@ -108,6 +108,50 @@ void Foam::basicSourceList::reset(const dictionary& dict)
 }
 
 
+void Foam::basicSourceList::relativeFlux(surfaceScalarField& phi) const
+{
+    forAll(*this, i)
+    {
+        this->operator[](i).relativeFlux(phi);
+    }
+}
+
+
+void Foam::basicSourceList::relativeFlux
+(
+    const surfaceScalarField& rho,
+    surfaceScalarField& phi
+) const
+{
+    forAll(*this, i)
+    {
+        this->operator[](i).relativeFlux(rho, phi);
+    }
+}
+
+
+void Foam::basicSourceList::absoluteFlux(surfaceScalarField& phi) const
+{
+    forAll(*this, i)
+    {
+        this->operator[](i).absoluteFlux(phi);
+    }
+}
+
+
+void Foam::basicSourceList::absoluteFlux
+(
+    const surfaceScalarField& rho,
+    surfaceScalarField& phi
+) const
+{
+    forAll(*this, i)
+    {
+        this->operator[](i).absoluteFlux(rho, phi);
+    }
+}
+
+
 bool Foam::basicSourceList::read(const dictionary& dict)
 {
     checkTimeIndex_ = mesh_.time().timeIndex() + 2;
diff --git a/src/fieldSources/basicSource/basicSourceList.H b/src/fieldSources/basicSource/basicSourceList.H
index 5f5e053a942ece384be0b04617e7ccec75a042e0..002d23b1fb37ee0ae3dfa981465a48fb82295bdf 100644
--- a/src/fieldSources/basicSource/basicSourceList.H
+++ b/src/fieldSources/basicSource/basicSourceList.H
@@ -152,6 +152,29 @@ public:
             void constrain(fvMatrix<Type>& eqn, const word& fieldName);
 
 
+        // Flux manipulations
+
+            //- Make the given absolute flux relative
+            void relativeFlux(surfaceScalarField& phi) const;
+
+            //- Make the given absolute mass-flux relative
+            void relativeFlux
+            (
+                const surfaceScalarField& rho,
+                surfaceScalarField& phi
+            ) const;
+
+            //- Make the given relative flux absolute
+            void absoluteFlux(surfaceScalarField& phi) const;
+
+            //- Make the given relative mass-flux absolute
+            void absoluteFlux
+            (
+                const surfaceScalarField& rho,
+                surfaceScalarField& phi
+            ) const;
+
+
         // I-O
 
             //- Read dictionary
diff --git a/src/fieldSources/derived/MRFSource/MRFSource.C b/src/fieldSources/derived/MRFSource/MRFSource.C
new file mode 100644
index 0000000000000000000000000000000000000000..3b0582a2327f881a08174e07d429cd06bf18d238
--- /dev/null
+++ b/src/fieldSources/derived/MRFSource/MRFSource.C
@@ -0,0 +1,176 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 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, write to the Free Software Foundation,
+    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+\*----------------------------------------------------------------------------*/
+
+#include "MRFSource.H"
+#include "fvMesh.H"
+#include "fvMatrices.H"
+#include "MRFZone.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+    defineTypeNameAndDebug(MRFSource, 0);
+    addToRunTimeSelectionTable
+    (
+        basicSource,
+        MRFSource,
+        dictionary
+    );
+}
+
+// * * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * //
+
+void Foam::MRFSource::initialise()
+{
+    if (selectionMode_ != smCellZone)
+    {
+        FatalErrorIn("void Foam::MRFSource::initialise()")
+            << "The porosity region must be specified as a cellZone.  Current "
+            << "selection mode is " << selectionModeTypeNames_[selectionMode_]
+            << exit(FatalError);
+    }
+
+    mrfPtr_.reset
+    (
+        new MRFZone
+        (
+            name_,
+            mesh_,
+            coeffs_,
+            cellSetName_
+        )
+    );
+
+    const volVectorField& U = mesh_.lookupObject<volVectorField>(UName_);
+
+    mrfPtr_->correctBoundaryVelocity(const_cast<volVectorField&>(U));
+
+    fieldNames_.setSize(1, UName_);
+    applied_.setSize(1, false);
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::MRFSource::MRFSource
+(
+    const word& name,
+    const word& modelType,
+    const dictionary& dict,
+    const fvMesh& mesh
+)
+:
+    basicSource(name, modelType, dict, mesh),
+    mrfPtr_(NULL),
+    UName_(coeffs_.lookupOrDefault<word>("UName", "U")),
+    rhoName_(coeffs_.lookupOrDefault<word>("rhoName", "rho"))
+{
+    initialise();
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+void Foam::MRFSource::addSup
+(
+    fvMatrix<vector>& eqn,
+    const label fieldI
+)
+{
+    if (eqn.dimensions() == dimForce)
+    {
+        const volScalarField& rho =
+            mesh_.lookupObject<volScalarField>(rhoName_);
+
+        // use 'true' flag to add to rhs of equation
+        mrfPtr_->addCoriolis(rho, eqn, true);
+    }
+    else
+    {
+        // use 'true' flag to add to rhs of equation
+        mrfPtr_->addCoriolis(eqn, true);
+    }
+}
+
+
+void Foam::MRFSource::relativeFlux(surfaceScalarField& phi) const
+{
+    mrfPtr_->relativeFlux(phi);
+}
+
+
+void Foam::MRFSource::relativeFlux
+(
+    const surfaceScalarField& rho,
+    surfaceScalarField& phi
+) const
+{
+    mrfPtr_->relativeFlux(rho, phi);
+}
+
+
+void Foam::MRFSource::absoluteFlux(surfaceScalarField& phi) const
+{
+    mrfPtr_->absoluteFlux(phi);
+}
+
+
+void Foam::MRFSource::absoluteFlux
+(
+    const surfaceScalarField& rho,
+    surfaceScalarField& phi
+) const
+{
+    mrfPtr_->absoluteFlux(rho, phi);
+}
+
+
+void Foam::MRFSource::writeData(Ostream& os) const
+{
+    os  << indent << name_ << endl;
+    dict_.write(os);
+}
+
+
+bool Foam::MRFSource::read(const dictionary& dict)
+{
+    if (basicSource::read(dict))
+    {
+        coeffs_.readIfPresent("UName", UName_);
+        coeffs_.readIfPresent("rhoName", rhoName_);
+
+        return true;
+    }
+    else
+    {
+        return false;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/src/fieldSources/derived/MRFSource/MRFSource.H b/src/fieldSources/derived/MRFSource/MRFSource.H
new file mode 100644
index 0000000000000000000000000000000000000000..1742ac301104e65ce5343b3733fb538715f2ea76
--- /dev/null
+++ b/src/fieldSources/derived/MRFSource/MRFSource.H
@@ -0,0 +1,173 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 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, write to the Free Software Foundation,
+    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+Class
+    Foam::MRFSource
+
+Description
+    Multiple Reference Frame (MRF) source
+
+    Example usage:
+
+        MRFSourceCoeffs
+        {
+            origin      (0 0 0);
+            axis        (0 0 1);
+            omega       104.72;
+        }
+
+SourceFiles
+    MRFSource.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef MRFSource_H
+#define MRFSource_H
+
+#include "basicSource.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+class MRFZone;
+
+/*---------------------------------------------------------------------------*\
+                          Class MRFSource Declaration
+\*---------------------------------------------------------------------------*/
+
+class MRFSource
+:
+    public basicSource
+{
+
+protected:
+
+    // Protected data
+
+        //- Run-time selectable porosity model
+        autoPtr<MRFZone> mrfPtr_;
+
+        //- Velocity field name, default = U
+        word UName_;
+
+        //- Density field name, default = rho
+        word rhoName_;
+
+
+    // Protected Member Functions
+
+        //- Initialise
+        void initialise();
+
+
+private:
+
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        MRFSource(const MRFSource&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const MRFSource&);
+
+
+public:
+
+    //- Runtime type information
+    TypeName("MRFSource");
+
+
+    // Constructors
+
+        //- Construct from components
+        MRFSource
+        (
+            const word& name,
+            const word& modelType,
+            const dictionary& dict,
+            const fvMesh& mesh
+        );
+
+
+    //- Destructor
+    virtual ~MRFSource()
+    {}
+
+
+    // Member Functions
+
+        // Add explicit and implicit contributions
+
+            //- Vector
+            virtual void addSup
+            (
+                fvMatrix<vector>& eqn,
+                const label fieldI
+            );
+
+
+        // Flux manipulations
+
+            //- Make the given absolute flux relative
+            virtual void relativeFlux(surfaceScalarField& phi) const;
+
+            //- Make the given absolute mass-flux relative
+            virtual void relativeFlux
+            (
+                const surfaceScalarField& rho,
+                surfaceScalarField& phi
+            ) const;
+
+            //- Make the given relative flux absolute
+            virtual void absoluteFlux(surfaceScalarField& phi) const;
+
+            //- Make the given relative mass-flux absolute
+            virtual void absoluteFlux
+            (
+                const surfaceScalarField& rho,
+                surfaceScalarField& phi
+            ) const;
+
+
+        // I-O
+
+            //- Write data
+            virtual void writeData(Ostream&) const;
+
+            //- Read dictionary
+            virtual bool read(const dictionary& dict);
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/fieldSources/derived/explicitPorositySource/explicitPorositySource.C b/src/fieldSources/derived/explicitPorositySource/explicitPorositySource.C
new file mode 100644
index 0000000000000000000000000000000000000000..9c5eeb17ca6d63d2a0fd2a442fca9d5d9b39968c
--- /dev/null
+++ b/src/fieldSources/derived/explicitPorositySource/explicitPorositySource.C
@@ -0,0 +1,145 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 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, write to the Free Software Foundation,
+    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+\*----------------------------------------------------------------------------*/
+
+#include "explicitPorositySource.H"
+#include "fvMesh.H"
+#include "fvMatrices.H"
+#include "porosityModel.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+    defineTypeNameAndDebug(explicitPorositySource, 0);
+    addToRunTimeSelectionTable
+    (
+        basicSource,
+        explicitPorositySource,
+        dictionary
+    );
+}
+
+// * * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * //
+
+void Foam::explicitPorositySource::initialise()
+{
+    if (selectionMode_ != smCellZone)
+    {
+        FatalErrorIn("void Foam::explicitPorositySource::initialise()")
+            << "The porosity region must be specified as a cellZone.  Current "
+            << "selection mode is " << selectionModeTypeNames_[selectionMode_]
+            << exit(FatalError);
+    }
+
+    porosityPtr_.reset
+    (
+        porosityModel::New
+        (
+            name_,
+            mesh_,
+            coeffs_,
+            cellSetName_
+        ).ptr()
+    ),
+
+    fieldNames_.setSize(1, UName_);
+    applied_.setSize(1, false);
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::explicitPorositySource::explicitPorositySource
+(
+    const word& name,
+    const word& modelType,
+    const dictionary& dict,
+    const fvMesh& mesh
+)
+:
+    basicSource(name, modelType, dict, mesh),
+    porosityPtr_(NULL),
+    UName_(coeffs_.lookupOrDefault<word>("UName", "U")),
+    rhoName_(coeffs_.lookupOrDefault<word>("rhoName", "rho")),
+    muName_(coeffs_.lookupOrDefault<word>("muName", "thermo:mu"))
+{
+    initialise();
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+void Foam::explicitPorositySource::addSup
+(
+    fvMatrix<vector>& eqn,
+    const label fieldI
+)
+{
+    fvMatrix<vector> porosityEqn(eqn.psi(), eqn.dimensions());
+
+    if (eqn.dimensions() == dimForce)
+    {
+        const volScalarField& rho =
+            mesh_.lookupObject<volScalarField>(rhoName_);
+        const volScalarField& mu = mesh_.lookupObject<volScalarField>(muName_);
+
+        porosityPtr_->addResistance(porosityEqn, rho, mu);
+    }
+    else
+    {
+        porosityPtr_->addResistance(porosityEqn);
+    }
+
+    eqn -= porosityEqn;
+}
+
+
+void Foam::explicitPorositySource::writeData(Ostream& os) const
+{
+    os  << indent << name_ << endl;
+    dict_.write(os);
+}
+
+
+bool Foam::explicitPorositySource::read(const dictionary& dict)
+{
+    if (basicSource::read(dict))
+    {
+        coeffs_.readIfPresent("UName", UName_);
+        coeffs_.readIfPresent("rhoName", rhoName_);
+        coeffs_.readIfPresent("muName", muName_);
+
+        return true;
+    }
+    else
+    {
+        return false;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/src/fieldSources/derived/explicitPorositySource/explicitPorositySource.H b/src/fieldSources/derived/explicitPorositySource/explicitPorositySource.H
new file mode 100644
index 0000000000000000000000000000000000000000..30fc6c90da7bf0757fc4387201969bb90a5ead6a
--- /dev/null
+++ b/src/fieldSources/derived/explicitPorositySource/explicitPorositySource.H
@@ -0,0 +1,166 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 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, write to the Free Software Foundation,
+    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+Class
+    Foam::explicitPorositySource
+
+Description
+    Explicit porosity source
+
+    Sources described by, for example using the DarcyForchheimer model:
+
+        explicitPorositySourceCoeffs
+        {
+            type            DarcyForchheimer;
+            DarcyForchheimerCoeffs
+            {
+                d   d [0 -2 0 0 0 0 0] (5e7 -1000 -1000);
+                f   f [0 -1 0 0 0 0 0] (0 0 0);
+
+                coordinateSystem
+                {
+                    e1  (0.70710678 0.70710678 0);
+                    e2  (0 0 1);
+                }
+            }
+        }
+
+Note:
+    The porous region must be selected as a cellZone.
+
+SourceFiles
+    explicitPorositySource.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef explicitPorositySource_H
+#define explicitPorositySource_H
+
+#include "basicSource.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+class porosityModel;
+
+/*---------------------------------------------------------------------------*\
+                   Class explicitPorositySource Declaration
+\*---------------------------------------------------------------------------*/
+
+class explicitPorositySource
+:
+    public basicSource
+{
+
+protected:
+
+    // Protected data
+
+        //- Run-time selectable porosity model
+        autoPtr<porosityModel> porosityPtr_;
+
+        //- Velocity field name, default = U
+        word UName_;
+
+        //- Density field name (compressible case only), default = rho
+        word rhoName_;
+
+        //- Dynamic viscosity field name (compressible case only)
+        //  default = thermo:mu
+        word muName_;
+
+
+    // Protected Member Functions
+
+        //- Initialise
+        void initialise();
+
+
+private:
+
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        explicitPorositySource(const explicitPorositySource&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const explicitPorositySource&);
+
+
+public:
+
+    //- Runtime type information
+    TypeName("explicitPorositySource");
+
+
+    // Constructors
+
+        //- Construct from components
+        explicitPorositySource
+        (
+            const word& name,
+            const word& modelType,
+            const dictionary& dict,
+            const fvMesh& mesh
+        );
+
+
+    //- Destructor
+    virtual ~explicitPorositySource()
+    {}
+
+
+    // Member Functions
+
+        // Add explicit and implicit contributions
+
+            //- Vector
+            virtual void addSup
+            (
+                fvMatrix<vector>& eqn,
+                const label fieldI
+            );
+
+
+        // I-O
+
+            //- Write data
+            virtual void writeData(Ostream&) const;
+
+            //- Read dictionary
+            virtual bool read(const dictionary& dict);
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/fieldSources/derived/fixedTemperatureSource/fixedTemperatureSource.H b/src/fieldSources/derived/fixedTemperatureSource/fixedTemperatureSource.H
index 755293403823bc4be733b9bca90f3ba483217a6c..05789b808dfb1757109ee948be51a34d2ee74f3f 100644
--- a/src/fieldSources/derived/fixedTemperatureSource/fixedTemperatureSource.H
+++ b/src/fieldSources/derived/fixedTemperatureSource/fixedTemperatureSource.H
@@ -32,13 +32,12 @@ Description
 
         fixedTemperatureSourceCoeffs
         {
-            fieldNames      (h e hs);   // names of fields to apply source
-            mode            uniform;    // constant or lookup
+            mode            uniform;    // uniform or lookup
 
             // uniform option
-            temperature     constant 500; // fixed temperature [K]
+            temperature     constant 500; // fixed temperature with time [K]
 
-            // loolup option
+            // lookup option
             // TName        T;          // optional temperature field name
         }
 
diff --git a/src/finiteVolume/cfdTools/general/MRF/MRFZone.C b/src/finiteVolume/cfdTools/general/MRF/MRFZone.C
index f09f38d4ee7450d7bdf56559d0e949d08144815c..c9de2ad6a51ce2bc5bc56b3322a6249c51c3a02f 100644
--- a/src/finiteVolume/cfdTools/general/MRF/MRFZone.C
+++ b/src/finiteVolume/cfdTools/general/MRF/MRFZone.C
@@ -230,15 +230,16 @@ Foam::MRFZone::MRFZone
 (
     const word& name,
     const fvMesh& mesh,
-    const dictionary& dict
+    const dictionary& dict,
+    const word& cellZoneName
 )
 :
     mesh_(mesh),
     name_(name),
     coeffs_(dict),
-    active_(readBool(coeffs_.lookup("active"))),
-    cellZoneName_(coeffs_.lookup("cellZone")),
-    cellZoneID_(mesh_.cellZones().findZoneID(cellZoneName_)),
+    active_(true),
+    cellZoneName_(cellZoneName),
+    cellZoneID_(),
     excludedPatchNames_
     (
         coeffs_.lookupOrDefault("nonRotatingPatches", wordList(0))
@@ -247,12 +248,20 @@ Foam::MRFZone::MRFZone
     axis_(coeffs_.lookup("axis")),
     omega_(DataEntry<scalar>::New("omega", coeffs_))
 {
+    if (cellZoneName_ == word::null)
+    {
+        coeffs_.lookup("active") >> active_;
+        coeffs_.lookup("cellZone") >> cellZoneName_;
+    }
+
     if (!active_)
     {
         cellZoneID_ = -1;
     }
     else
     {
+        cellZoneID_ = mesh_.cellZones().findZoneID(cellZoneName_);
+
         const polyBoundaryMesh& patches = mesh_.boundaryMesh();
 
         axis_ = axis_/mag(axis_);
@@ -268,7 +277,13 @@ Foam::MRFZone::MRFZone
             {
                 FatalErrorIn
                 (
-                    "MRFZone(const word&, const fvMesh&, const dictionary&)"
+                    "MRFZone"
+                    "("
+                        "const word&, "
+                        "const fvMesh&, "
+                        "const dictionary&, "
+                        "const word&"
+                    ")"
                 )
                     << "cannot find MRF patch " << excludedPatchNames_[i]
                     << exit(FatalError);
@@ -283,7 +298,13 @@ Foam::MRFZone::MRFZone
         {
             FatalErrorIn
             (
-                "MRFZone(const word&, const fvMesh&, const dictionary&)"
+                "MRFZone"
+                "("
+                    "const word&, "
+                    "const fvMesh&, "
+                    "const dictionary&, "
+                    "const word&"
+                ")"
             )
                 << "cannot find MRF cellZone " << cellZoneName_
                 << exit(FatalError);
@@ -328,7 +349,7 @@ void Foam::MRFZone::addCoriolis
 }
 
 
-void Foam::MRFZone::addCoriolis(fvVectorMatrix& UEqn) const
+void Foam::MRFZone::addCoriolis(fvVectorMatrix& UEqn, const bool rhs) const
 {
     if (cellZoneID_ == -1)
     {
@@ -342,10 +363,21 @@ void Foam::MRFZone::addCoriolis(fvVectorMatrix& UEqn) const
 
     const vector Omega = this->Omega();
 
-    forAll(cells, i)
+    if (rhs)
     {
-        label celli = cells[i];
-        Usource[celli] -= V[celli]*(Omega ^ U[celli]);
+        forAll(cells, i)
+        {
+            label celli = cells[i];
+            Usource[celli] += V[celli]*(Omega ^ U[celli]);
+        }
+    }
+    else
+    {
+        forAll(cells, i)
+        {
+            label celli = cells[i];
+            Usource[celli] -= V[celli]*(Omega ^ U[celli]);
+        }
     }
 }
 
@@ -353,7 +385,8 @@ void Foam::MRFZone::addCoriolis(fvVectorMatrix& UEqn) const
 void Foam::MRFZone::addCoriolis
 (
     const volScalarField& rho,
-    fvVectorMatrix& UEqn
+    fvVectorMatrix& UEqn,
+    const bool rhs
 ) const
 {
     if (cellZoneID_ == -1)
@@ -368,10 +401,21 @@ void Foam::MRFZone::addCoriolis
 
     const vector Omega = this->Omega();
 
-    forAll(cells, i)
+    if (rhs)
     {
-        label celli = cells[i];
-        Usource[celli] -= V[celli]*rho[celli]*(Omega ^ U[celli]);
+        forAll(cells, i)
+        {
+            label celli = cells[i];
+            Usource[celli] += V[celli]*rho[celli]*(Omega ^ U[celli]);
+        }
+    }
+    else
+    {
+        forAll(cells, i)
+        {
+            label celli = cells[i];
+            Usource[celli] -= V[celli]*rho[celli]*(Omega ^ U[celli]);
+        }
     }
 }
 
diff --git a/src/finiteVolume/cfdTools/general/MRF/MRFZone.H b/src/finiteVolume/cfdTools/general/MRF/MRFZone.H
index 5c6e05e2d3988620e5f0f67b799e3004a3d0e6ff..5d379f2e40a8adb56fdd4613e6d9150d08d20b13 100644
--- a/src/finiteVolume/cfdTools/general/MRF/MRFZone.H
+++ b/src/finiteVolume/cfdTools/general/MRF/MRFZone.H
@@ -144,7 +144,13 @@ public:
     // Constructors
 
         //- Construct from fvMesh
-        MRFZone(const word& name, const fvMesh& mesh, const dictionary& dict);
+        MRFZone
+        (
+            const word& name,
+            const fvMesh& mesh,
+            const dictionary& dict,
+            const word& cellZoneName = word::null
+        );
 
         //- Return clone
         autoPtr<MRFZone> clone() const
@@ -185,13 +191,20 @@ public:
             ) const;
 
             //- Add the Coriolis force contribution to the momentum equation
-            void addCoriolis(fvVectorMatrix& UEqn) const;
+            //  Adds to the lhs of the equation; optionally add to rhs
+            void addCoriolis
+            (
+                fvVectorMatrix& UEqn,
+                const bool rhs = false
+            ) const;
 
             //- Add the Coriolis force contribution to the momentum equation
+            //  Adds to the lhs of the equation; optionally add to rhs
             void addCoriolis
             (
                 const volScalarField& rho,
-                fvVectorMatrix& UEqn
+                fvVectorMatrix& UEqn,
+                const bool rhs = false
             ) const;
 
             //- Make the given absolute velocity relative within the MRF region
diff --git a/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.C b/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.C
index 36a9ba7ada0bccd2e0af5e6bceb534580278835e..b0857fa78ed849978a61a5133c035dedf5352296 100644
--- a/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.C
+++ b/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.C
@@ -47,15 +47,16 @@ Foam::porosityModels::DarcyForchheimer::DarcyForchheimer
     const word& name,
     const word& modelType,
     const fvMesh& mesh,
-    const dictionary& dict
+    const dictionary& dict,
+    const word& cellZoneName
 )
 :
-    porosityModel(name, modelType, mesh, dict),
+    porosityModel(name, modelType, mesh, dict, cellZoneName),
     coordSys_(coeffs_, mesh),
     D_("D", dimless/sqr(dimLength), tensor::zero),
     F_("F", dimless/dimLength, tensor::zero),
     rhoName_(coeffs_.lookupOrDefault<word>("rho", "rho")),
-    muName_(coeffs_.lookupOrDefault<word>("mu", "mu")),
+    muName_(coeffs_.lookupOrDefault<word>("mu", "thermo:mu")),
     nuName_(coeffs_.lookupOrDefault<word>("nu", "nu"))
 {
     // local-to-global transformation tensor
diff --git a/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.H b/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.H
index a85fae7fc66af9352cc56867fdfe1de21b31c6fe..ab3007d204df0675ba4eb60e35a0b2d3540f2ad6 100644
--- a/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.H
+++ b/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.H
@@ -136,7 +136,8 @@ public:
         const word& name,
         const word& modelType,
         const fvMesh& mesh,
-        const dictionary& dict
+        const dictionary& dict,
+        const word& cellZoneName
     );
 
     //- Destructor
diff --git a/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.C b/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.C
index 55c4202d5a27c5466ce68593f4da8980cda39ae3..59cef7436869d4761b80f3a424b91db80c648da3 100644
--- a/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.C
+++ b/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.C
@@ -102,10 +102,11 @@ Foam::porosityModels::fixedCoeff::fixedCoeff
     const word& name,
     const word& modelType,
     const fvMesh& mesh,
-    const dictionary& dict
+    const dictionary& dict,
+    const word& cellZoneName
 )
 :
-    porosityModel(name, modelType, mesh, dict),
+    porosityModel(name, modelType, mesh, dict, cellZoneName),
     coordSys_(coeffs_, mesh),
     alpha_("alpha", dimless/dimTime, tensor::zero),
     beta_("beta", dimless/dimLength, tensor::zero)
diff --git a/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.H b/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.H
index c0e28ac87e31bec4a4ac20085b6562e2ae6e701d..61f4c36224db92adf8065daec6835f0703a0f424 100644
--- a/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.H
+++ b/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.H
@@ -113,7 +113,8 @@ public:
         const word& name,
         const word& modelType,
         const fvMesh& mesh,
-        const dictionary& dict
+        const dictionary& dict,
+        const word& cellZoneName
     );
 
     //- Destructor
diff --git a/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.C b/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.C
index f0997c822211a116787e1990364ad82955b952f0..77de5b1ffecd0ada7aa9ff1e50801b48f8d130e4 100644
--- a/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.C
+++ b/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.C
@@ -73,17 +73,26 @@ Foam::porosityModel::porosityModel
     const word& name,
     const word& modelType,
     const fvMesh& mesh,
-    const dictionary& dict
+    const dictionary& dict,
+    const word& cellZoneName
 )
 :
     name_(name),
     mesh_(mesh),
     dict_(dict),
     coeffs_(dict.subDict(modelType + "Coeffs")),
-    active_(readBool(dict_.lookup("active"))),
-    zoneName_(dict_.lookup("cellZone")),
-    cellZoneIds_(mesh_.cellZones().findIndices(zoneName_))
+    active_(true),
+    zoneName_(cellZoneName),
+    cellZoneIds_()
 {
+    if (zoneName_ == word::null)
+    {
+        dict.lookup("active") >> active_;
+        dict_.lookup("cellZone") >> zoneName_;
+    }
+
+    cellZoneIds_ = mesh_.cellZones().findIndices(zoneName_);
+
     Info<< "    creating porous zone: " << zoneName_ << endl;
 
     bool foundZone = !cellZoneIds_.empty();
@@ -99,6 +108,7 @@ Foam::porosityModel::porosityModel
                 "const word&, "
                 "const fvMesh&, "
                 "const dictionary&"
+                "const word&, "
             ")"
         )   << "cannot find porous cellZone " << zoneName_
             << exit(FatalError);
diff --git a/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.H b/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.H
index 56131ba3dd97cd5c287f699acc9eb3f9fcce153c..1c61e29f1812f77ed002260ce8db43e43aecb9f0 100644
--- a/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.H
+++ b/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.H
@@ -127,9 +127,10 @@ public:
             const word& modelName,
             const word& name,
             const fvMesh& mesh,
-            const dictionary& dict
+            const dictionary& dict,
+            const word& cellZoneName
         ),
-        (modelName, name, mesh, dict)
+        (modelName, name, mesh, dict, cellZoneName)
     );
 
     //- Constructor
@@ -138,7 +139,8 @@ public:
         const word& name,
         const word& modelType,
         const fvMesh& mesh,
-        const dictionary& dict
+        const dictionary& dict,
+        const word& cellZoneName = word::null
     );
 
     //- Return pointer to new porosityModel object created on the freestore
@@ -182,7 +184,8 @@ public:
     (
         const word& name,
         const fvMesh& mesh,
-        const dictionary& dict
+        const dictionary& dict,
+        const word& cellZoneName = word::null
     );
 
     //- Destructor
diff --git a/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModelNew.C b/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModelNew.C
index 1da8c91c4dfb583e022ce27059a0abaee880e63e..d0fe203537f3fe6ae7f79d61990ff35d49d8794d 100644
--- a/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModelNew.C
+++ b/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModelNew.C
@@ -31,7 +31,8 @@ Foam::autoPtr<Foam::porosityModel> Foam::porosityModel::New
 (
     const word& name,
     const fvMesh& mesh,
-    const dictionary& dict
+    const dictionary& dict,
+    const word& cellZoneName
 )
 {
     const word modelType(dict.lookup("type"));
@@ -48,9 +49,10 @@ Foam::autoPtr<Foam::porosityModel> Foam::porosityModel::New
         (
             "porosityModel::New"
             "("
-                "const word& name,"
+                "const word&, "
                 "const fvMesh&, "
-                "const dictionary&"
+                "const dictionary&, "
+                "const word&"
             ")"
         )
             << "Unknown " << typeName << " type " << modelType << nl << nl
@@ -59,7 +61,17 @@ Foam::autoPtr<Foam::porosityModel> Foam::porosityModel::New
             << exit(FatalError);
     }
 
-    return autoPtr<porosityModel>(cstrIter()(name, modelType, mesh, dict));
+    return autoPtr<porosityModel>
+    (
+        cstrIter()
+        (
+            name,
+            modelType,
+            mesh,
+            dict,
+            cellZoneName
+        )
+    );
 }
 
 
diff --git a/src/finiteVolume/cfdTools/general/porosityModel/powerLaw/powerLaw.C b/src/finiteVolume/cfdTools/general/porosityModel/powerLaw/powerLaw.C
index 15fbae39dfb78486fe133002bb94ef1990956ec1..2516c8c6b2010ac599bbec1dfc6237992f1df862 100644
--- a/src/finiteVolume/cfdTools/general/porosityModel/powerLaw/powerLaw.C
+++ b/src/finiteVolume/cfdTools/general/porosityModel/powerLaw/powerLaw.C
@@ -47,10 +47,11 @@ Foam::porosityModels::powerLaw::powerLaw
     const word& name,
     const word& modelType,
     const fvMesh& mesh,
-    const dictionary& dict
+    const dictionary& dict,
+    const word& cellZoneName
 )
 :
-    porosityModel(name, modelType, mesh, dict),
+    porosityModel(name, modelType, mesh, dict, cellZoneName),
     C0_(readScalar(coeffs_.lookup("C0"))),
     C1_(readScalar(coeffs_.lookup("C1"))),
     rhoName_(coeffs_.lookupOrDefault<word>("rho", "rho"))
diff --git a/src/finiteVolume/cfdTools/general/porosityModel/powerLaw/powerLaw.H b/src/finiteVolume/cfdTools/general/porosityModel/powerLaw/powerLaw.H
index 2c26946265728b207391fc08149704e160e1ca7d..fb0797aaa733edbabeccecc710b368b0958c98b3 100644
--- a/src/finiteVolume/cfdTools/general/porosityModel/powerLaw/powerLaw.H
+++ b/src/finiteVolume/cfdTools/general/porosityModel/powerLaw/powerLaw.H
@@ -117,7 +117,8 @@ public:
         const word& name,
         const word& modelType,
         const fvMesh& mesh,
-        const dictionary& dict
+        const dictionary& dict,
+        const word& cellZoneName
     );
 
     //- Destructor
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/supersonicFreestream/supersonicFreestreamFvPatchVectorField.C b/src/finiteVolume/fields/fvPatchFields/derived/supersonicFreestream/supersonicFreestreamFvPatchVectorField.C
index 56c1444262a40aac91ca10408a3f5a28ff602c1c..2f2195c8ff3863754a68d31180e94656fc96adbb 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/supersonicFreestream/supersonicFreestreamFvPatchVectorField.C
+++ b/src/finiteVolume/fields/fvPatchFields/derived/supersonicFreestream/supersonicFreestreamFvPatchVectorField.C
@@ -38,6 +38,9 @@ supersonicFreestreamFvPatchVectorField
 )
 :
     mixedFvPatchVectorField(p, iF),
+    TName_("T"),
+    pName_("p"),
+    psiName_("thermo:psi"),
     UInf_(vector::zero),
     pInf_(0),
     TInf_(0),
@@ -59,6 +62,9 @@ supersonicFreestreamFvPatchVectorField
 )
 :
     mixedFvPatchVectorField(ptf, p, iF, mapper),
+    TName_(ptf.TName_),
+    pName_(ptf.pName_),
+    psiName_(ptf.psiName_),
     UInf_(ptf.UInf_),
     pInf_(ptf.pInf_),
     TInf_(ptf.TInf_),
@@ -75,6 +81,9 @@ supersonicFreestreamFvPatchVectorField
 )
 :
     mixedFvPatchVectorField(p, iF),
+    TName_(dict.lookupOrDefault<word>("T", "T")),
+    pName_(dict.lookupOrDefault<word>("p", "p")),
+    psiName_(dict.lookupOrDefault<word>("psi", "thermo:psi")),
     UInf_(dict.lookup("UInf")),
     pInf_(readScalar(dict.lookup("pInf"))),
     TInf_(readScalar(dict.lookup("TInf"))),
@@ -120,6 +129,9 @@ supersonicFreestreamFvPatchVectorField
 )
 :
     mixedFvPatchVectorField(sfspvf),
+    TName_(sfspvf.TName_),
+    pName_(sfspvf.pName_),
+    psiName_(sfspvf.psiName_),
     UInf_(sfspvf.UInf_),
     pInf_(sfspvf.pInf_),
     TInf_(sfspvf.TInf_),
@@ -135,6 +147,9 @@ supersonicFreestreamFvPatchVectorField
 )
 :
     mixedFvPatchVectorField(sfspvf, iF),
+    TName_(sfspvf.TName_),
+    pName_(sfspvf.pName_),
+    psiName_(sfspvf.psiName_),
     UInf_(sfspvf.UInf_),
     pInf_(sfspvf.pInf_),
     TInf_(sfspvf.TInf_),
@@ -152,13 +167,13 @@ void Foam::supersonicFreestreamFvPatchVectorField::updateCoeffs()
     }
 
     const fvPatchField<scalar>& pT =
-        patch().lookupPatchField<volScalarField, scalar>("T");
+        patch().lookupPatchField<volScalarField, scalar>(TName_);
 
     const fvPatchField<scalar>& pp =
-        patch().lookupPatchField<volScalarField, scalar>("p");
+        patch().lookupPatchField<volScalarField, scalar>(pName_);
 
     const fvPatchField<scalar>& ppsi =
-        patch().lookupPatchField<volScalarField, scalar>("thermo:psi");
+        patch().lookupPatchField<volScalarField, scalar>(psiName_);
 
     // Need R of the free-stream flow.  Assume R is independent of location
     // along patch so use face 0
@@ -288,6 +303,9 @@ void Foam::supersonicFreestreamFvPatchVectorField::updateCoeffs()
 void Foam::supersonicFreestreamFvPatchVectorField::write(Ostream& os) const
 {
     fvPatchVectorField::write(os);
+    writeEntryIfDifferent<word>(os, "T", "T", TName_);
+    writeEntryIfDifferent<word>(os, "p", "p", pName_);
+    writeEntryIfDifferent<word>(os, "psi", "thermo:psi", psiName_);
     os.writeKeyword("UInf") << UInf_ << token::END_STATEMENT << nl;
     os.writeKeyword("pInf") << pInf_ << token::END_STATEMENT << nl;
     os.writeKeyword("TInf") << TInf_ << token::END_STATEMENT << nl;
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/supersonicFreestream/supersonicFreestreamFvPatchVectorField.H b/src/finiteVolume/fields/fvPatchFields/derived/supersonicFreestream/supersonicFreestreamFvPatchVectorField.H
index 402fc365f34fd746309db74c192931938c140603..6f6ea27bcb04d8ebaa379c8a22bae30404bf2705 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/supersonicFreestream/supersonicFreestreamFvPatchVectorField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/supersonicFreestream/supersonicFreestreamFvPatchVectorField.H
@@ -40,6 +40,9 @@ Description
 
     \table
         Property     | Description             | Required    | Default value
+        TName        | Temperature field name  | no          | T
+        pName        | Pressure field name     | no          | p
+        psiName      | Compressibility field name | no       | thermo:psi
         UInf         | free-stream velocity    | yes         |
         pInf         | free-stream pressure    | yes         |
         TInf         | free-stream temperature | yes         |
@@ -88,6 +91,15 @@ class supersonicFreestreamFvPatchVectorField
 {
     // Private data
 
+        //- Name of temperature field, default = "T"
+        word TName_;
+
+        //- Name of pressure field, default = "p"
+        word pName_;
+
+        //- Name of compressibility field field, default = "thermo:psi"
+        word psiName_;
+
         //- Velocity of the free stream
         vector UInf_;
 
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/totalTemperature/totalTemperatureFvPatchScalarField.C b/src/finiteVolume/fields/fvPatchFields/derived/totalTemperature/totalTemperatureFvPatchScalarField.C
index 55c7140f377428a9d1c25a88b34cd28011129ecd..f53442df8e6a06f4af3082a70817ff45d8d49366 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/totalTemperature/totalTemperatureFvPatchScalarField.C
+++ b/src/finiteVolume/fields/fvPatchFields/derived/totalTemperature/totalTemperatureFvPatchScalarField.C
@@ -40,7 +40,7 @@ Foam::totalTemperatureFvPatchScalarField::totalTemperatureFvPatchScalarField
     fixedValueFvPatchScalarField(p, iF),
     UName_("U"),
     phiName_("phi"),
-    psiName_("psi"),
+    psiName_("thermo:psi"),
     gamma_(0.0),
     T0_(p.size(), 0.0)
 {}
@@ -73,7 +73,7 @@ Foam::totalTemperatureFvPatchScalarField::totalTemperatureFvPatchScalarField
     fixedValueFvPatchScalarField(p, iF),
     UName_(dict.lookupOrDefault<word>("U", "U")),
     phiName_(dict.lookupOrDefault<word>("phi", "phi")),
-    psiName_(dict.lookupOrDefault<word>("psi", "psi")),
+    psiName_(dict.lookupOrDefault<word>("psi", "thermo:psi")),
     gamma_(readScalar(dict.lookup("gamma"))),
     T0_("T0", dict, p.size())
 {
@@ -179,7 +179,7 @@ void Foam::totalTemperatureFvPatchScalarField::write(Ostream& os) const
     fvPatchScalarField::write(os);
     writeEntryIfDifferent<word>(os, "U", "U", UName_);
     writeEntryIfDifferent<word>(os, "phi", "phi", phiName_);
-    writeEntryIfDifferent<word>(os, "psi", "psi", psiName_);
+    writeEntryIfDifferent<word>(os, "psi", "thermo:psi", psiName_);
     os.writeKeyword("gamma") << gamma_ << token::END_STATEMENT << nl;
     T0_.writeEntry("T0", os);
     writeEntry("value", os);
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/totalTemperature/totalTemperatureFvPatchScalarField.H b/src/finiteVolume/fields/fvPatchFields/derived/totalTemperature/totalTemperatureFvPatchScalarField.H
index d793696ade806c95a64d5c51c68eb10b85da952b..6a032dfee9547bf4bddd9e2b46aed246c1bcc27d 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/totalTemperature/totalTemperatureFvPatchScalarField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/totalTemperature/totalTemperatureFvPatchScalarField.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -36,7 +36,7 @@ Description
         Property     | Description             | Required    | Default value
         U            | Velocity field name     | no          | U
         phi          | Flux field name         | no          | phi
-        psi          | Compressibility field name | no       | psi
+        psi          | Compressibility field name | no       | thermo:psi
         gamma        | ratio of specific heats (Cp/Cv) | yes |
         T0           | reference temperature   | yes         |
     \endtable
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/waveTransmissive/waveTransmissiveFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/derived/waveTransmissive/waveTransmissiveFvPatchField.C
index ca19c5d8abc386d06b8313ff7971c82b9e00cc0a..a4a64c22d43776b6645ebee9698bb7c705371ddb 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/waveTransmissive/waveTransmissiveFvPatchField.C
+++ b/src/finiteVolume/fields/fvPatchFields/derived/waveTransmissive/waveTransmissiveFvPatchField.C
@@ -41,7 +41,7 @@ Foam::waveTransmissiveFvPatchField<Type>::waveTransmissiveFvPatchField
 )
 :
     advectiveFvPatchField<Type>(p, iF),
-    psiName_("psi"),
+    psiName_("thermo:psi"),
     gamma_(0.0)
 {}
 
@@ -70,7 +70,7 @@ Foam::waveTransmissiveFvPatchField<Type>::waveTransmissiveFvPatchField
 )
 :
     advectiveFvPatchField<Type>(p, iF, dict),
-    psiName_(dict.lookupOrDefault<word>("psi", "psi")),
+    psiName_(dict.lookupOrDefault<word>("psi", "thermo:psi")),
     gamma_(readScalar(dict.lookup("gamma")))
 {}
 
@@ -108,27 +108,21 @@ Foam::waveTransmissiveFvPatchField<Type>::advectionSpeed() const
 {
     // Lookup the velocity and compressibility of the patch
     const fvPatchField<scalar>& psip =
-        this->patch().template lookupPatchField<volScalarField, scalar>
-        (
-            psiName_
-        );
+        this->patch().template
+            lookupPatchField<volScalarField, scalar>(psiName_);
 
     const surfaceScalarField& phi =
         this->db().template lookupObject<surfaceScalarField>(this->phiName_);
 
     fvsPatchField<scalar> phip =
-        this->patch().template lookupPatchField<surfaceScalarField, scalar>
-        (
-            this->phiName_
-        );
+        this->patch().template
+            lookupPatchField<surfaceScalarField, scalar>(this->phiName_);
 
     if (phi.dimensions() == dimDensity*dimVelocity*dimArea)
     {
         const fvPatchScalarField& rhop =
-            this->patch().template lookupPatchField<volScalarField, scalar>
-            (
-                this->rhoName_
-            );
+            this->patch().template
+                lookupPatchField<volScalarField, scalar>(this->rhoName_);
 
         phip /= rhop;
     }
@@ -145,18 +139,12 @@ void Foam::waveTransmissiveFvPatchField<Type>::write(Ostream& os) const
 {
     fvPatchField<Type>::write(os);
 
-    if (this->phiName_ != "phi")
-    {
-        os.writeKeyword("phi") << this->phiName_ << token::END_STATEMENT << nl;
-    }
-    if (this->rhoName_ != "rho")
-    {
-        os.writeKeyword("rho") << this->rhoName_ << token::END_STATEMENT << nl;
-    }
-    if (psiName_ != "psi")
-    {
-        os.writeKeyword("psi") << psiName_ << token::END_STATEMENT << nl;
-    }
+    this->template
+        writeEntryIfDifferent<word>(os, "phi", "phi", this->phiName_);
+    this->template
+        writeEntryIfDifferent<word>(os, "rho", "rho", this->rhoName_);
+    this->template
+        writeEntryIfDifferent<word>(os, "psi", "thermo:psi", psiName_);
 
     os.writeKeyword("gamma") << gamma_ << token::END_STATEMENT << nl;
 
diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C
index 69c25178ed22a4d2839bbe521dd94be1029e62a4..d0e43dbb10efff738504cdee3cfcb43839a497b6 100644
--- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C
+++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C
@@ -2372,11 +2372,13 @@ void Foam::autoLayerDriver::getLayerCellsFaces
 Foam::autoLayerDriver::autoLayerDriver
 (
     meshRefinement& meshRefiner,
-    const labelList& globalToPatch
+    const labelList& globalToMasterPatch,
+    const labelList& globalToSlavePatch
 )
 :
     meshRefiner_(meshRefiner),
-    globalToPatch_(globalToPatch)
+    globalToMasterPatch_(globalToMasterPatch),
+    globalToSlavePatch_(globalToSlavePatch)
 {}
 
 
@@ -2435,7 +2437,12 @@ void Foam::autoLayerDriver::addLayers
     // Create baffles (pairs of faces that share the same points)
     // Baffles stored as owner and neighbour face that have been created.
     List<labelPair> baffles;
-    meshRefiner_.createZoneBaffles(globalToPatch_, baffles);
+    meshRefiner_.createZoneBaffles
+    (
+        globalToMasterPatch_,
+        globalToSlavePatch_,
+        baffles
+    );
 
     if (debug&meshRefinement::MESH)
     {
diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.H b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.H
index 272f1af09e8fd06083b641412c5fd356377991af..416544a7199de145d4400e14b2d71c58b8d1d9a0 100644
--- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.H
+++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.H
@@ -99,7 +99,10 @@ class autoLayerDriver
         meshRefinement& meshRefiner_;
 
         //- From surface region to patch
-        const labelList globalToPatch_;
+        const labelList globalToMasterPatch_;
+
+        //- From surface region to patch
+        const labelList globalToSlavePatch_;
 
 
 
@@ -518,7 +521,8 @@ public:
         autoLayerDriver
         (
             meshRefinement& meshRefiner,
-            const labelList& globalToPatch
+            const labelList& globalToMasterPatch,
+            const labelList& globalToSlavePatch
         );
 
 
diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriverShrink.C b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriverShrink.C
index 73d09f449ffbbf6980326229cf30b4e6da480b97..8ffcaa5f57874ef0ee7eb702dbf18cf8f35e801f 100644
--- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriverShrink.C
+++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriverShrink.C
@@ -1135,6 +1135,12 @@ void Foam::autoLayerDriver::medialAxisSmoothingInfo
             << "    " << medialRatio.name()
             << " : ratio of medial distance to wall distance" << nl
             << endl;
+        meshRefiner_.mesh().setInstance(meshRefiner_.timeName());
+        meshRefiner_.write
+        (
+            debug,
+            mesh.time().path()/meshRefiner_.timeName()
+        );
         dispVec.write();
         medialDist.write();
         medialVec.write();
@@ -1409,6 +1415,94 @@ void Foam::autoLayerDriver::shrinkMeshMedialDistance
             *dispVec[pointI];
     }
 
+
+
+//XXXXX
+//    // Smear displacement away from fixed values (medialRatio=0 or 1)
+//    {
+//        const edgeList& edges = mesh.edges();
+//        scalarField edgeWeight(edges.size(), 0.0);
+//        forAll(edges, edgeI)
+//        {
+//            if (isMasterEdge[edgeI])
+//            {
+//                scalar eMag = edges[edgeI].mag(mesh.points());
+//                if (eMag > VSMALL)
+//                {
+//                    edgeWeight[edgeI] = 1.0/eMag;
+//                }
+//                else
+//                {
+//                    edgeWeight[edgeI] = GREAT;
+//                }
+//            }
+//        }
+//        scalarField invSumWeight(mesh.nPoints());
+//        sumWeights(isMasterEdge, edgeWeight, invSumWeight);
+//
+//
+//        // Get smoothly varying patch field.
+//        Info<< "shrinkMeshDistance : Smoothing displacement ..." << endl;
+//
+//        const scalar lambda = 0.33;
+//        const scalar mu = -0.34;
+//
+//        pointField average(mesh.nPoints());
+//        for (label iter = 0; iter < 90; iter++)
+//        {
+//            // Calculate average of field
+//            averageNeighbours
+//            (
+//                mesh,
+//                edgeWeight,
+//                invSumWeight,
+//                displacement,
+//                average
+//            );
+//
+//            forAll(displacement, i)
+//            {
+//                if (medialRatio[i] > SMALL && medialRatio[i] < 1-SMALL)
+//                {
+//                    displacement[i] =
+//                        (1-lambda)*displacement[i]
+//                       +lambda*average[i];
+//                }
+//            }
+//
+//
+//            // Calculate average of field
+//            averageNeighbours
+//            (
+//                mesh,
+//                edgeWeight,
+//                invSumWeight,
+//                displacement,
+//                average
+//            );
+//
+//            forAll(displacement, i)
+//            {
+//                if (medialRatio[i] > SMALL && medialRatio[i] < 1-SMALL)
+//                {
+//                    displacement[i] = (1-mu)*displacement[i]+mu*average[i];
+//                }
+//            }
+//
+//
+//            // Do residual calculation every so often.
+//            if ((iter % 10) == 0)
+//            {
+//                Info<< "    Iteration " << iter << "   residual "
+//                    <<  gSum(mag(displacement-average))
+//                       /returnReduce(average.size(), sumOp<label>())
+//                    << endl;
+//            }
+//        }
+//    }
+//XXXXX
+
+
     if (debug&meshRefinement::MESH || debug&meshRefinement::LAYERINFO)
     {
         const_cast<Time&>(mesh.time())++;
diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C
index a5b663890c843ec1baa20abdbbca6102f07d5d37..3215e4b7e74e08dce463cea5b32c53498b602d33 100644
--- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C
+++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C
@@ -57,13 +57,15 @@ Foam::autoRefineDriver::autoRefineDriver
     meshRefinement& meshRefiner,
     decompositionMethod& decomposer,
     fvMeshDistribute& distributor,
-    const labelList& globalToPatch
+    const labelList& globalToMasterPatch,
+    const labelList& globalToSlavePatch
 )
 :
     meshRefiner_(meshRefiner),
     decomposer_(decomposer),
     distributor_(distributor),
-    globalToPatch_(globalToPatch)
+    globalToMasterPatch_(globalToMasterPatch),
+    globalToSlavePatch_(globalToSlavePatch)
 {}
 
 
@@ -313,7 +315,8 @@ void Foam::autoRefineDriver::removeInsideCells
     meshRefiner_.splitMesh
     (
         nBufferLayers,                  // nBufferLayers
-        globalToPatch_,
+        globalToMasterPatch_,
+        globalToSlavePatch_,
         refineParams.keepPoints()[0]
     );
 
@@ -521,7 +524,8 @@ void Foam::autoRefineDriver::baffleAndSplitMesh
         !handleSnapProblems,            // merge free standing baffles?
         motionDict,
         const_cast<Time&>(mesh.time()),
-        globalToPatch_,
+        globalToMasterPatch_,
+        globalToSlavePatch_,
         refineParams.keepPoints()[0]
     );
 }
@@ -606,7 +610,8 @@ void Foam::autoRefineDriver::splitAndMergeBaffles
         //true,                               // merge free standing baffles?
         motionDict,
         const_cast<Time&>(mesh.time()),
-        globalToPatch_,
+        globalToMasterPatch_,
+        globalToSlavePatch_,
         refineParams.keepPoints()[0]
     );
 
diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.H b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.H
index d75dd5daf5f840c5b22d6af6553465a72ba05422..37a0f6b10258fd7ed7a1d54b6a66c447720ee678 100644
--- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.H
+++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -65,7 +65,10 @@ class autoRefineDriver
         fvMeshDistribute& distributor_;
 
         //- From surface region to patch
-        const labelList globalToPatch_;
+        const labelList globalToMasterPatch_;
+
+        //- From surface region to patch
+        const labelList globalToSlavePatch_;
 
 
     // Private Member Functions
@@ -146,7 +149,8 @@ public:
             meshRefinement& meshRefiner,
             decompositionMethod& decomposer,
             fvMeshDistribute& distributor,
-            const labelList& globalToPatch
+            const labelList& globalToMasterPatch,
+            const labelList& globalToSlavePatch
         );
 
 
diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.C b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.C
index 54a78f477c6a5e7170572da5c8867654c564c543..b7b79d715e3e71cd3ca2656d511ff86b46ac3282 100644
--- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.C
+++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.C
@@ -573,11 +573,13 @@ bool Foam::autoSnapDriver::outwardsDisplacement
 Foam::autoSnapDriver::autoSnapDriver
 (
     meshRefinement& meshRefiner,
-    const labelList& globalToPatch
+    const labelList& globalToMasterPatch,
+    const labelList& globalToSlavePatch
 )
 :
     meshRefiner_(meshRefiner),
-    globalToPatch_(globalToPatch)
+    globalToMasterPatch_(globalToMasterPatch),
+    globalToSlavePatch_(globalToSlavePatch)
 {}
 
 
@@ -1191,7 +1193,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::autoSnapDriver::repatchToSurface
 
             if (hitSurface[i] != -1 && !isZonedFace.get(faceI))
             {
-                closestPatch[i] = globalToPatch_
+                closestPatch[i] = globalToMasterPatch_
                 [
                     surfaces.globalRegion
                     (
@@ -1265,7 +1267,12 @@ void Foam::autoSnapDriver::doSnap
     // Create baffles (pairs of faces that share the same points)
     // Baffles stored as owner and neighbour face that have been created.
     List<labelPair> baffles;
-    meshRefiner_.createZoneBaffles(globalToPatch_, baffles);
+    meshRefiner_.createZoneBaffles
+    (
+        globalToMasterPatch_,
+        globalToSlavePatch_,
+        baffles
+    );
 
 
     // Selectively 'forget' about the baffles, i.e. not check across them
diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.H b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.H
index e4cea95be28ea6efe80a06f044f96a678ef3b0a2..e6763bc084850a9150d726e7a880544093755f59 100644
--- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.H
+++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.H
@@ -59,8 +59,11 @@ class autoSnapDriver
         //- Mesh+surface
         meshRefinement& meshRefiner_;
 
-        //- From surface region to patch
-        const labelList globalToPatch_;
+        //- From global surface region to master side patch
+        const labelList globalToMasterPatch_;
+
+        //- From global surface region to slave side patch
+        const labelList globalToSlavePatch_;
 
 
     // Private Member Functions
@@ -390,7 +393,8 @@ public:
         autoSnapDriver
         (
             meshRefinement& meshRefiner,
-            const labelList& globalToPatch
+            const labelList& globalToMasterPatch,
+            const labelList& globalToSlavePatch
         );
 
 
diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriverFeature.C b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriverFeature.C
index b9990cb078b09ab7c927276aacec3a8fa9195dc1..7285c1ed003b3a3de61b1c54c38bed4f8acc6b54 100644
--- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriverFeature.C
+++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriverFeature.C
@@ -573,7 +573,7 @@ void Foam::autoSnapDriver::calcNearestFacePointProperties
             pFc[i] = pp.faceCentres()[faceI];
             //label meshFaceI = pp.addressing()[faceI];
             //pFid[i] = mesh.boundaryMesh().whichPatch(meshFaceI);
-            pFid[i] = globalToPatch_[faceSurfaceGlobalRegion[faceI]];
+            pFid[i] = globalToMasterPatch_[faceSurfaceGlobalRegion[faceI]];
         }
     }
 
diff --git a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.C b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.C
index 26a40327d6f610118c88c560b43419e7b8c86587..69cdf234cdb41828140af5bc4553d348a05f2de9 100644
--- a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.C
+++ b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.C
@@ -55,6 +55,7 @@ License
 #include "searchableSurfaces.H"
 #include "treeBoundBox.H"
 #include "zeroGradientFvPatchFields.H"
+#include "fvMeshTools.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
@@ -1700,7 +1701,7 @@ Foam::label Foam::meshRefinement::addPatch
     oldToNew[addedPatchI] = insertPatchI;
 
     // Shuffle into place
-    polyPatches.reorder(oldToNew);
+    polyPatches.reorder(oldToNew, true);
     fvPatches.reorder(oldToNew);
 
     reorderPatchFields<volScalarField>(mesh, oldToNew);
@@ -1736,6 +1737,28 @@ Foam::label Foam::meshRefinement::addMeshedPatch
         // Add patch
         label patchI = addPatch(mesh_, name, patchInfo);
 
+//        dictionary patchDict(patchInfo);
+//        patchDict.set("nFaces", 0);
+//        patchDict.set("startFace", 0);
+//        autoPtr<polyPatch> ppPtr
+//        (
+//            polyPatch::New
+//            (
+//                name,
+//                patchDict,
+//                0,
+//                mesh_.boundaryMesh()
+//            )
+//        );
+//        label patchI = fvMeshTools::addPatch
+//        (
+//            mesh_,
+//            ppPtr(),
+//            dictionary(),       // optional field values
+//            calculatedFvPatchField<scalar>::typeName,
+//            true
+//        );
+
         // Store
         label sz = meshedPatches_.size();
         meshedPatches_.setSize(sz+1);
diff --git a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H
index b98230e4122c925527c9158dbcc57b8bc8c8abc4..c265f05257568c8444f9562991ec6e6cf11c9c3a 100644
--- a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H
+++ b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H
@@ -330,10 +330,11 @@ private:
         // Baffle handling
 
             //- Get faces to repatch. Returns map from face to patch.
-            Map<label> getZoneBafflePatches
+            Map<labelPair> getZoneBafflePatches
             (
                 const bool allowBoundary,
-                const labelList& globalToPatch
+                const labelList& globalToMasterPatch,
+                const labelList& globalToSlavePatch
             ) const;
 
             //- Geometric test on see whether face needs to be baffled:
@@ -349,7 +350,7 @@ private:
             //- Determine patches for baffles
             void getBafflePatches
             (
-                const labelList& globalToPatch,
+                const labelList& globalToMasterPatch,
                 const labelList& neiLevel,
                 const pointField& neiCc,
                 labelList& ownPatch,
@@ -426,7 +427,7 @@ private:
                 const dictionary& motionDict,
                 const bool removeEdgeConnectedCells,
                 const scalarField& perpendicularAngle,
-                const labelList& globalToPatch
+                const labelList& globalToMasterPatch
             ) const;
 
 
@@ -707,7 +708,8 @@ public:
                 const bool mergeFreeStanding,
                 const dictionary& motionDict,
                 Time& runTime,
-                const labelList& globalToPatch,
+                const labelList& globalToMasterPatch,
+                const labelList& globalToSlavePatch,
                 const point& keepPoint
             );
 
@@ -716,7 +718,8 @@ public:
             autoPtr<mapPolyMesh> splitMesh
             (
                 const label nBufferLayers,
-                const labelList& globalToPatch,
+                const labelList& globalToMasterPatch,
+                const labelList& globalToSlavePatch,
                 const point& keepPoint
             );
 
@@ -741,7 +744,8 @@ public:
             //  baffles.
             autoPtr<mapPolyMesh> createZoneBaffles
             (
-                const labelList& globalToPatch,
+                const labelList& globalToMasterPatch,
+                const labelList& globalToSlavePatch,
                 List<labelPair>&
             );
 
diff --git a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C
index b9c189ffa070b5ac75036ba6e1ef00cffd0b5020..11dde360ebb20829b3bb2267be1246eb7d6a847b 100644
--- a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C
+++ b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C
@@ -259,7 +259,7 @@ bool Foam::meshRefinement::validBaffleTopology
 // Determine patches for baffles on all intersected unnamed faces
 void Foam::meshRefinement::getBafflePatches
 (
-    const labelList& globalToPatch,
+    const labelList& globalToMasterPatch,
     const labelList& neiLevel,
     const pointField& neiCc,
 
@@ -376,11 +376,11 @@ void Foam::meshRefinement::getBafflePatches
             }
 
             // Pick up the patches
-            ownPatch[faceI] = globalToPatch
+            ownPatch[faceI] = globalToMasterPatch
             [
                 surfaces_.globalRegion(surface1[i], region1[i])
             ];
-            neiPatch[faceI] = globalToPatch
+            neiPatch[faceI] = globalToMasterPatch
             [
                 surfaces_.globalRegion(surface2[i], region2[i])
             ];
@@ -406,14 +406,14 @@ void Foam::meshRefinement::getBafflePatches
 }
 
 
-// Get faces to repatch. Returns map from face to patch.
-Foam::Map<Foam::label> Foam::meshRefinement::getZoneBafflePatches
+Foam::Map<Foam::labelPair>  Foam::meshRefinement::getZoneBafflePatches
 (
     const bool allowBoundary,
-    const labelList& globalToPatch
+    const labelList& globalToMasterPatch,
+    const labelList& globalToSlavePatch
 ) const
 {
-    Map<label> bafflePatch(mesh_.nFaces()/1000);
+    Map<labelPair> bafflePatch(mesh_.nFaces()/1000);
 
     const wordList& faceZoneNames = surfaces_.faceZoneNames();
     const faceZoneMesh& fZones = mesh_.faceZones();
@@ -427,40 +427,39 @@ Foam::Map<Foam::label> Foam::meshRefinement::getZoneBafflePatches
 
             const faceZone& fZone = fZones[zoneI];
 
-            //// Get patch allocated for zone
-            //label patchI = surfaceToCyclicPatch_[surfI];
-            // Get patch of (first region) of surface
-            label patchI = globalToPatch[surfaces_.globalRegion(surfI, 0)];
+            // Get patch allocated for zone
+            label globalRegionI = surfaces_.globalRegion(surfI, 0);
+            labelPair zPatches
+            (
+                globalToMasterPatch[globalRegionI],
+                globalToSlavePatch[globalRegionI]
+            );
 
-            Info<< "For surface "
-                << surfaces_.names()[surfI]
-                << " found faceZone " << fZone.name()
-                << " and patch " << mesh_.boundaryMesh()[patchI].name()
+            Info<< "For zone " << fZone.name() << " found patches "
+                << mesh_.boundaryMesh()[zPatches[0]].name() << " and "
+                << mesh_.boundaryMesh()[zPatches[1]].name()
                 << endl;
 
-
             forAll(fZone, i)
             {
                 label faceI = fZone[i];
 
                 if (allowBoundary || mesh_.isInternalFace(faceI))
                 {
-                    if (!bafflePatch.insert(faceI, patchI))
+                    labelPair patches = zPatches;
+                    if (fZone.flipMap()[i])
                     {
-                        label oldPatchI = bafflePatch[faceI];
+                       patches = patches.reversePair();
+                    }
 
-                        if (oldPatchI != patchI)
-                        {
-                            FatalErrorIn("getZoneBafflePatches(const bool)")
-                                << "Face " << faceI
-                                << " fc:" << mesh_.faceCentres()[faceI]
-                                << " in zone " << fZone.name()
-                                << " is in patch "
-                                << mesh_.boundaryMesh()[oldPatchI].name()
-                                << " and in patch "
-                                << mesh_.boundaryMesh()[patchI].name()
-                                << abort(FatalError);
-                        }
+                    if (!bafflePatch.insert(faceI, patches))
+                    {
+                        FatalErrorIn("getZoneBafflePatches(..)")
+                            << "Face " << faceI
+                            << " fc:" << mesh_.faceCentres()[faceI]
+                            << " in zone " << fZone.name()
+                            << " is in multiple zones!"
+                            << abort(FatalError);
                     }
                 }
             }
@@ -698,7 +697,8 @@ Foam::List<Foam::labelPair> Foam::meshRefinement::getDuplicateFaces
 
 Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::createZoneBaffles
 (
-    const labelList& globalToPatch,
+    const labelList& globalToMasterPatch,
+    const labelList& globalToSlavePatch,
     List<labelPair>& baffles
 )
 {
@@ -714,20 +714,30 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::createZoneBaffles
 
         // Get faces (internal only) to be baffled. Map from face to patch
         // label.
-        Map<label> faceToPatch(getZoneBafflePatches(false, globalToPatch));
+        Map<labelPair> faceToPatch
+        (
+            getZoneBafflePatches
+            (
+                false,
+                globalToMasterPatch,
+                globalToSlavePatch
+            )
+        );
 
         label nZoneFaces = returnReduce(faceToPatch.size(), sumOp<label>());
         if (nZoneFaces > 0)
         {
             // Convert into labelLists
             labelList ownPatch(mesh_.nFaces(), -1);
-            forAllConstIter(Map<label>, faceToPatch, iter)
+            labelList neiPatch(mesh_.nFaces(), -1);
+            forAllConstIter(Map<labelPair>, faceToPatch, iter)
             {
-                ownPatch[iter.key()] = iter();
+                ownPatch[iter.key()] = iter().first();
+                neiPatch[iter.key()] = iter().second();
             }
 
             // Create baffles. both sides same patch.
-            map = createBaffles(ownPatch, ownPatch);
+            map = createBaffles(ownPatch, neiPatch);
 
             // Get pairs of faces created.
             // Just loop over faceMap and store baffle if we encounter a slave
@@ -744,7 +754,10 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::createZoneBaffles
                 label oldFaceI = faceMap[faceI];
 
                 // Does face originate from face-to-patch
-                Map<label>::const_iterator iter = faceToPatch.find(oldFaceI);
+                Map<labelPair>::const_iterator iter = faceToPatch.find
+                (
+                    oldFaceI
+                );
 
                 if (iter != faceToPatch.end())
                 {
@@ -1344,7 +1357,8 @@ void Foam::meshRefinement::findCellZoneGeometric
     // Sync
     syncTools::syncFaceList(mesh_, namedSurfaceIndex, maxEqOp<label>());
 }
-//XXXXXXXXX
+
+
 void Foam::meshRefinement::findCellZoneInsideWalk
 (
     const labelList& locationSurfaces,  // indices of surfaces with inside point
@@ -1446,7 +1460,6 @@ void Foam::meshRefinement::findCellZoneInsideWalk
         }
     }
 }
-//XXXXXXXXX
 
 
 bool Foam::meshRefinement::calcRegionToZone
@@ -1827,7 +1840,8 @@ void Foam::meshRefinement::baffleAndSplitMesh
     const bool mergeFreeStanding,
     const dictionary& motionDict,
     Time& runTime,
-    const labelList& globalToPatch,
+    const labelList& globalToMasterPatch,
+    const labelList& globalToSlavePatch,
     const point& keepPoint
 )
 {
@@ -1849,7 +1863,7 @@ void Foam::meshRefinement::baffleAndSplitMesh
     labelList ownPatch, neiPatch;
     getBafflePatches
     (
-        globalToPatch,
+        globalToMasterPatch,
         neiLevel,
         neiCc,
 
@@ -1899,7 +1913,7 @@ void Foam::meshRefinement::baffleAndSplitMesh
                 motionDict,
                 removeEdgeConnectedCells,
                 perpendicularAngle,
-                globalToPatch
+                globalToMasterPatch
             )
             //markFacesOnProblemCellsGeometric(motionDict)
         );
@@ -1917,7 +1931,7 @@ void Foam::meshRefinement::baffleAndSplitMesh
                     motionDict,
                     removeEdgeConnectedCells,
                     perpendicularAngle,
-                    globalToPatch
+                    globalToMasterPatch
                 )
             );
             forAll(facePatchTopo, faceI)
@@ -2051,7 +2065,8 @@ void Foam::meshRefinement::baffleAndSplitMesh
 Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::splitMesh
 (
     const label nBufferLayers,
-    const labelList& globalToPatch,
+    const labelList& globalToMasterPatch,
+    const labelList& globalToSlavePatch,
     const point& keepPoint
 )
 {
@@ -2066,7 +2081,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::splitMesh
     labelList ownPatch, neiPatch;
     getBafflePatches
     (
-        globalToPatch,
+        globalToMasterPatch,
         neiLevel,
         neiCc,
 
@@ -2129,9 +2144,9 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::splitMesh
 
     // Patch for exposed faces for lack of anything sensible.
     label defaultPatch = 0;
-    if (globalToPatch.size())
+    if (globalToMasterPatch.size())
     {
-        defaultPatch = globalToPatch[0];
+        defaultPatch = globalToMasterPatch[0];
     }
 
     for (label i = 0; i < nBufferLayers; i++)
diff --git a/src/meshTools/coordinateSystems/coordinateSystems.C b/src/meshTools/coordinateSystems/coordinateSystems.C
index fef44796e3c10d68830462450bf70ad08210ecf3..1739ecd8e2218ca429eb75b7819e95500c5af38f 100644
--- a/src/meshTools/coordinateSystems/coordinateSystems.C
+++ b/src/meshTools/coordinateSystems/coordinateSystems.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -85,7 +85,7 @@ const Foam::coordinateSystems& Foam::coordinateSystems::New
                 IOobject
                 (
                     typeName,
-                    "constant",
+                    obr.time().constant(),
                     obr,
                     IOobject::READ_IF_PRESENT,
                     IOobject::NO_WRITE
diff --git a/src/parallel/decompose/ptscotchDecomp/Make/options b/src/parallel/decompose/ptscotchDecomp/Make/options
index 1e34631aa1b218aa0ba7f2af1e1becd6a7bcdbd4..d4e551bcac5ed58e743887ded2c42234d28b99a0 100644
--- a/src/parallel/decompose/ptscotchDecomp/Make/options
+++ b/src/parallel/decompose/ptscotchDecomp/Make/options
@@ -9,4 +9,4 @@ EXE_INC = \
     -I../decompositionMethods/lnInclude
 
 LIB_LIBS = \
-    -L$(SCOTCH_ROOT)/lib -L$(FOAM_EXT_LIBBIN)/$(FOAM_MPI) -lptscotch -lptscotcherrexit -lrt
+    -L$(SCOTCH_ROOT)/lib -L$(FOAM_EXT_LIBBIN)/$(FOAM_MPI) -lptscotch -lptscotcherrexit -lscotch -lrt
diff --git a/src/postProcessing/postCalc/postCalc.C b/src/postProcessing/postCalc/postCalc.C
index ff2dd174e0781c46feeaddeab750da2bd0abab53..0dfb6bf95707c0d1fa3482827ee2288f43b6f3b3 100644
--- a/src/postProcessing/postCalc/postCalc.C
+++ b/src/postProcessing/postCalc/postCalc.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -68,12 +68,7 @@ int main(int argc, char *argv[])
         "noFlow",
         "suppress creating flow models (execFlowFunctionObjects only)"
     );
-    Foam::argList::addOption
-    (
-        "dict",
-        "name",
-        "dictionary to use"
-    );
+    #include "addDictOption.H"
 
     #include "setRootCase.H"
     #include "createTime.H"
diff --git a/src/regionModels/surfaceFilmModels/kinematicSingleLayer/kinematicSingleLayer.C b/src/regionModels/surfaceFilmModels/kinematicSingleLayer/kinematicSingleLayer.C
index 9d053dc3de8f5b9b7c0d888284cf47e66b333adb..d0a12c305c9f908322598e4cf9f8f4a962250e4c 100644
--- a/src/regionModels/surfaceFilmModels/kinematicSingleLayer/kinematicSingleLayer.C
+++ b/src/regionModels/surfaceFilmModels/kinematicSingleLayer/kinematicSingleLayer.C
@@ -765,7 +765,7 @@ kinematicSingleLayer::kinematicSingleLayer
     (
         IOobject
         (
-            "mu", // must have same name as mu to enable mapping
+            "thermo:mu", // must have same name as mu to enable mapping
             time().timeName(),
             regionMesh(),
             IOobject::NO_READ,
diff --git a/src/surfMesh/surfaceFormats/surfaceFormatsCore.C b/src/surfMesh/surfaceFormats/surfaceFormatsCore.C
index c1d1aac7acae2753ec2839ff61de09f10d92a668..c098eaf1b9114eb7df187633c0f77ca130010dc5 100644
--- a/src/surfMesh/surfaceFormats/surfaceFormatsCore.C
+++ b/src/surfMesh/surfaceFormats/surfaceFormatsCore.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -105,7 +105,7 @@ Foam::fileName Foam::fileFormats::surfaceFormatsCore::findMeshInstance
         }
     }
 
-    return "constant";
+    return t.constant();
 }
 
 
@@ -148,7 +148,7 @@ Foam::fileName Foam::fileFormats::surfaceFormatsCore::findMeshFile
     }
 
     // fallback to "constant"
-    return t.path()/"constant"/localName;
+    return t.path()/t.constant()/localName;
 }
 #endif
 
diff --git a/src/thermophysicalModels/radiationModels/radiationModel/noRadiation/noRadiation.C b/src/thermophysicalModels/radiationModels/radiationModel/noRadiation/noRadiation.C
index 604a5dbbe3843ca1348caf90b708a8663d5b5799..69666b7c63a0a591021ed049dc00e439bbc4bb4c 100644
--- a/src/thermophysicalModels/radiationModels/radiationModel/noRadiation/noRadiation.C
+++ b/src/thermophysicalModels/radiationModels/radiationModel/noRadiation/noRadiation.C
@@ -52,7 +52,7 @@ Foam::radiation::noRadiation::noRadiation
     const volScalarField& T
 )
 :
-    radiationModel(dict, T)
+    radiationModel(T)
 {}
 
 
diff --git a/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.C b/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.C
index 55e2e1fb53668ee06a9154ec9c506c27822a016d..5948101185c074bc1aa90c44b10bca28be2c7759 100644
--- a/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.C
+++ b/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.C
@@ -43,6 +43,33 @@ namespace Foam
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
+Foam::IOobject Foam::radiation::radiationModel::createIOobject
+(
+    const fvMesh& mesh
+) const
+{
+    IOobject io
+    (
+        "radiationProperties",
+        mesh.time().constant(),
+        mesh,
+        IOobject::MUST_READ,
+        IOobject::NO_WRITE
+    );
+
+    if (io.headerOk())
+    {
+        io.readOpt() = IOobject::MUST_READ_IF_MODIFIED;
+        return io;
+    }
+    else
+    {
+        io.readOpt() = IOobject::NO_READ;
+        return io;
+    }
+}
+
+
 void Foam::radiation::radiationModel::initialise()
 {
     if (radiation_)
@@ -62,35 +89,6 @@ void Foam::radiation::radiationModel::initialise()
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
 Foam::radiation::radiationModel::radiationModel(const volScalarField& T)
-:
-    IOdictionary
-    (
-        IOobject
-        (
-            "radiationProperties",
-            T.time().constant(),
-            T.mesh(),
-            IOobject::MUST_READ_IF_MODIFIED,
-            IOobject::NO_WRITE
-        )
-    ),
-    mesh_(T.mesh()),
-    time_(T.time()),
-    T_(T),
-    radiation_(false),
-    coeffs_(dictionary::null),
-    solverFreq_(0),
-    firstIter_(true),
-    absorptionEmission_(NULL),
-    scatter_(NULL)
-{}
-
-
-Foam::radiation::radiationModel::radiationModel
-(
-    const dictionary& dict,
-    const volScalarField& T
-)
 :
     IOdictionary
     (
@@ -101,8 +99,7 @@ Foam::radiation::radiationModel::radiationModel
             T.mesh(),
             IOobject::NO_READ,
             IOobject::NO_WRITE
-        ),
-        dict
+        )
     ),
     mesh_(T.mesh()),
     time_(T.time()),
@@ -122,17 +119,7 @@ Foam::radiation::radiationModel::radiationModel
     const volScalarField& T
 )
 :
-    IOdictionary
-    (
-        IOobject
-        (
-            "radiationProperties",
-            T.time().constant(),
-            T.mesh(),
-            IOobject::MUST_READ_IF_MODIFIED,
-            IOobject::NO_WRITE
-        )
-    ),
+    IOdictionary(createIOobject(T.mesh())),
     mesh_(T.mesh()),
     time_(T.time()),
     T_(T),
@@ -143,6 +130,11 @@ Foam::radiation::radiationModel::radiationModel
     absorptionEmission_(NULL),
     scatter_(NULL)
 {
+    if (readOpt() == IOobject::NO_READ)
+    {
+        radiation_ = false;
+    }
+
     initialise();
 }
 
diff --git a/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.H b/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.H
index 5f5a92887baea8fa00ccb07c4e0df30472636e08..1218dac9e9b72612be3a91984f2d08d52215ec88 100644
--- a/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.H
+++ b/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.H
@@ -109,6 +109,9 @@ private:
 
     // Private Member Functions
 
+        //- Create IO object if dictionary is present
+        IOobject createIOobject(const fvMesh& mesh) const;
+
         //- Initialise
         void initialise();
 
@@ -156,9 +159,6 @@ public:
         //- Null constructor
         radiationModel(const volScalarField& T);
 
-        //- Construct with dictionary
-        radiationModel(const dictionary& dict, const volScalarField& T);
-
         //- Construct from components
         radiationModel(const word& type, const volScalarField& T);
 
diff --git a/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModelNew.C b/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModelNew.C
index ae13f11d1a503f2d1838c78c4540dbd66c222ec7..0a4dd3730c8e47d264c38de8d4255444bdfdfec3 100644
--- a/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModelNew.C
+++ b/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModelNew.C
@@ -33,23 +33,27 @@ Foam::radiation::radiationModel::New
     const volScalarField& T
 )
 {
-    // get model name, but do not register the dictionary
-    const word modelType
+    IOobject radIO
     (
-        IOdictionary
-        (
-            IOobject
-            (
-                "radiationProperties",
-                T.time().constant(),
-                T.mesh(),
-                IOobject::MUST_READ_IF_MODIFIED,
-                IOobject::NO_WRITE,
-                false
-            )
-        ).lookup("radiationModel")
+        "radiationProperties",
+        T.time().constant(),
+        T.mesh(),
+        IOobject::MUST_READ_IF_MODIFIED,
+        IOobject::NO_WRITE,
+        false
     );
 
+    word modelType("none");
+    if (radIO.headerOk())
+    {
+        IOdictionary(radIO).lookup("radiationModel") >> modelType;
+    }
+    else
+    {
+        Info<< "Radiation model not active: radiationProperties not found"
+            << endl;
+    }
+
     Info<< "Selecting radiationModel " << modelType << endl;
 
     TConstructorTable::iterator cstrIter =
diff --git a/src/triSurface/triSurface/triSurface.C b/src/triSurface/triSurface/triSurface.C
index 1350653865ff03b4557c110307c2df1f7ba1605e..d8630cc77dbb21bf742cdca1e64f43821d118664 100644
--- a/src/triSurface/triSurface/triSurface.C
+++ b/src/triSurface/triSurface/triSurface.C
@@ -83,7 +83,7 @@ Foam::fileName Foam::triSurface::triSurfInstance(const Time& d)
             << "reading " << foamName
             << " from constant/" << endl;
     }
-    return "constant";
+    return d.constant();
 }
 
 
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allrun b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allrun
index ca4e9e4bd84db1274086f8d9521027c1ab0f93f7..6763873c72aa5f2e8a3c6face61c654817615293 100755
--- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allrun
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allrun
@@ -10,7 +10,7 @@ application=`getApplication`
 runApplication blockMesh
 
 runApplication topoSet -dict cRefine.topoSetDict
-runApplication refineMesh -overwrite -dict
+runApplication refineMesh -overwrite -dict system/refineMeshDict
 
 rm log.topoSet
 runApplication topoSet -dict f.topoSetDict
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSchemes b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSchemes
index e683569e7a4ff14a8dce39837c09a946d0f1cecb..ce5f53c2cf9759f169675321eb09bc0b59cbb59b 100644
--- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSchemes
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSchemes
@@ -50,7 +50,7 @@ laplacianSchemes
     default         Gauss linear corrected;
     laplacian(muEff,U) Gauss linear corrected;
     laplacian(DkEff,k) Gauss linear corrected;
-    laplacian(alphaEff,h) Gauss linear corrected;
+    laplacian(thermo:alpha,h) Gauss linear corrected;
     laplacian((((rho*(1|A(U)))*rho)*gh)) Gauss linear corrected;
     laplacian(interpolate((rho*(1|A(U)))),p) Gauss linear corrected;
     laplacian(gammaRad,G) Gauss linear corrected;
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/fvSchemes b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/fvSchemes
index ba8fe3450957cef74c51d40a8806c5b7fdc71181..afb9f402f103f655e60bcebdde33457f94302ce8 100644
--- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/fvSchemes
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/fvSchemes
@@ -32,7 +32,7 @@ divSchemes
 laplacianSchemes
 {
     default         none;
-    laplacian(alpha,h)  Gauss linear uncorrected;
+    laplacian(thermo:alpha,h) Gauss linear uncorrected;
 }
 
 interpolationSchemes
diff --git a/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/0.org/T b/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/0.org/T
index 85431492b2ff7f5527c6f82e582d533d8349fa63..3ddfa33af1cc4faa80700b3981855743bc50800d 100644
--- a/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/0.org/T
+++ b/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/0.org/T
@@ -39,7 +39,7 @@ boundaryField
         U               U;
         phi             phi;
         rho             none;
-        psi             psi;
+        psi             thermo:psi;
         gamma           1.4;
     }
 
diff --git a/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/0/T b/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/0/T
index 5361f751ed6c0641f80cd0af5082aef76c43190c..4fee89f86e76dba1287952d26dc7c97f80836833 100644
--- a/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/0/T
+++ b/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/0/T
@@ -1243,7 +1243,7 @@ boundaryField
         type            totalTemperature;
         U               U;
         phi             phi;
-        psi             psi;
+        psi             thermo:psi;
         gamma           1.4;
         T0              uniform 297;
         value           nonuniform List<scalar>
diff --git a/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/0/p b/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/0/p
index 982367ad38085aa13beae19a5ebe4ca1a6940fe4..9de87d0b3f89fddad04d3c5a42733512bf59c8d9 100644
--- a/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/0/p
+++ b/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/0/p
@@ -1235,7 +1235,7 @@ boundaryField
         field           p;
         phi             phi;
         rho             rho;
-        psi             psi;
+        psi             thermo:psi;
         gamma           1.4;
         fieldInf        101325;
         lInf            0.025;
@@ -1275,7 +1275,7 @@ boundaryField
         U               U;
         phi             phi;
         rho             none;
-        psi             psi;
+        psi             thermo:psi;
         gamma           1.4;
         p0              uniform 101325;
         value           nonuniform List<scalar>
diff --git a/tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/0/T b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/T
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/0/T
rename to tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/T
diff --git a/tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/0/U b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/U
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/0/U
rename to tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/U
diff --git a/tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/0/alphat b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/alphat
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/0/alphat
rename to tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/alphat
diff --git a/tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/0/epsilon b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/epsilon
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/0/epsilon
rename to tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/epsilon
diff --git a/tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/0/k b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/k
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/0/k
rename to tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/k
diff --git a/tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/0/mut b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/mut
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/0/mut
rename to tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/mut
diff --git a/tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/0/p b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/p
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/0/p
rename to tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/p
diff --git a/tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/Allrun b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/Allrun
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/Allrun
rename to tutorials/compressible/rhoLTSPimpleFoam/angledDuct/Allrun
diff --git a/tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/constant/RASProperties b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/constant/RASProperties
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/constant/RASProperties
rename to tutorials/compressible/rhoLTSPimpleFoam/angledDuct/constant/RASProperties
diff --git a/tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/constant/polyMesh/blockMeshDict.m4 b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/constant/polyMesh/blockMeshDict.m4
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/constant/polyMesh/blockMeshDict.m4
rename to tutorials/compressible/rhoLTSPimpleFoam/angledDuct/constant/polyMesh/blockMeshDict.m4
diff --git a/tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/constant/polyMesh/boundary b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/constant/polyMesh/boundary
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/constant/polyMesh/boundary
rename to tutorials/compressible/rhoLTSPimpleFoam/angledDuct/constant/polyMesh/boundary
diff --git a/tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/constant/porosityProperties b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/constant/sourcesProperties
similarity index 58%
rename from tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/constant/porosityProperties
rename to tutorials/compressible/rhoLTSPimpleFoam/angledDuct/constant/sourcesProperties
index 22add8ff299919833276bb7b4770c81785d1ace6..6137d5900e33a0f991e238e97b99a0ec3d1b0968 100644
--- a/tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/constant/porosityProperties
+++ b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/constant/sourcesProperties
@@ -11,27 +11,36 @@ FoamFile
     format      ascii;
     class       dictionary;
     location    "constant";
-    object      porosityProperties;
+    object      sourcesProperties;
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 porosity1
 {
-    type            DarcyForchheimer;
-    active          yes;
+    type            explicitPorositySource;
+    active          true;
+    timeStart       0;
+    duration        1000000;
+    selectionMode   cellZone;
     cellZone        porosity;
 
-    DarcyForchheimerCoeffs
+    explicitPorositySourceCoeffs
     {
-        d   d [0 -2 0 0 0 0 0] (5e7 -1000 -1000);
-        f   f [0 -1 0 0 0 0 0] (0 0 0);
+        type            DarcyForchheimer;
 
-        coordinateSystem
+        DarcyForchheimerCoeffs
         {
-            e1  (0.70710678 0.70710678 0);
-            e2  (0 0 1);
+            d   d [0 -2 0 0 0 0 0] (5e7 -1000 -1000);
+            f   f [0 -1 0 0 0 0 0] (0 0 0);
+
+            coordinateSystem
+            {
+                e1  (0.70710678 0.70710678 0);
+                e2  (0 0 1);
+            }
         }
     }
 }
 
-// ************************************************************************* //
+
+************************************************************************* //
diff --git a/tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/constant/thermophysicalProperties b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/constant/thermophysicalProperties
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/constant/thermophysicalProperties
rename to tutorials/compressible/rhoLTSPimpleFoam/angledDuct/constant/thermophysicalProperties
diff --git a/tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/constant/turbulenceProperties b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/constant/turbulenceProperties
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/constant/turbulenceProperties
rename to tutorials/compressible/rhoLTSPimpleFoam/angledDuct/constant/turbulenceProperties
diff --git a/tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/system/controlDict b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/system/controlDict
similarity index 96%
rename from tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/system/controlDict
rename to tutorials/compressible/rhoLTSPimpleFoam/angledDuct/system/controlDict
index 63886eda94d690ecdb5ec01e4b63198b2a91fed0..5a690b046ddce702ec81f2ed6c9aeba2b9bfaf56 100644
--- a/tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/system/controlDict
+++ b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/system/controlDict
@@ -15,7 +15,7 @@ FoamFile
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-application     rhoPorousMRFLTSPimpleFoam;
+application     rhoLTSPimpleFoam;
 
 startFrom       startTime;
 
diff --git a/tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/system/fvSchemes b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/system/fvSchemes
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/system/fvSchemes
rename to tutorials/compressible/rhoLTSPimpleFoam/angledDuct/system/fvSchemes
diff --git a/tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/system/fvSolution b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/system/fvSolution
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/system/fvSolution
rename to tutorials/compressible/rhoLTSPimpleFoam/angledDuct/system/fvSolution
diff --git a/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/0/p b/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/0/p
index fa4008822f40a122b52b124b049854df1dbc30fa..0f1e50b4b897813357996cc8f94848c3249d886f 100644
--- a/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/0/p
+++ b/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/0/p
@@ -31,7 +31,7 @@ boundaryField
         field           p;
         phi             phi;
         rho             rho;
-        psi             psi;
+        psi             thermo:psi;
         gamma           1.3;
         fieldInf        1e5;
         lInf            0.3;
diff --git a/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/constant/thermophysicalProperties b/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/constant/thermophysicalProperties
index 014d7ffc49fd2e1a0940f5c07d21a51c60c02310..955bebb2d53b720343f10ffdd98024b8131779b7 100644
--- a/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/constant/thermophysicalProperties
+++ b/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/constant/thermophysicalProperties
@@ -42,7 +42,7 @@ gasThermoTypes
 
 thermoType
 {
-    $.gasThermoTypes.constant;
+    ${:gasThermoTypes.constant};
 }
 
 mixture
diff --git a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/0/T b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/T
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/0/T
rename to tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/T
diff --git a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/0/U b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/U
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/0/U
rename to tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/U
diff --git a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/0/alphat b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/alphat
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/0/alphat
rename to tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/alphat
diff --git a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/0/epsilon b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/epsilon
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/0/epsilon
rename to tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/epsilon
diff --git a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/0/k b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/k
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/0/k
rename to tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/k
diff --git a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/0/mut b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/mut
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/0/mut
rename to tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/mut
diff --git a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/0/p b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/p
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/0/p
rename to tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/p
diff --git a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/Allrun b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/Allrun
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/Allrun
rename to tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/Allrun
diff --git a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/constant/RASProperties b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/RASProperties
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/constant/RASProperties
rename to tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/RASProperties
diff --git a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/constant/polyMesh/blockMeshDict.m4 b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/polyMesh/blockMeshDict.m4
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/constant/polyMesh/blockMeshDict.m4
rename to tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/polyMesh/blockMeshDict.m4
diff --git a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/constant/polyMesh/boundary b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/polyMesh/boundary
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/constant/polyMesh/boundary
rename to tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/polyMesh/boundary
diff --git a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/constant/porosityProperties b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/porosityProperties
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/constant/porosityProperties
rename to tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/porosityProperties
diff --git a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/constant/thermophysicalProperties b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/thermophysicalProperties
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/constant/thermophysicalProperties
rename to tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/thermophysicalProperties
diff --git a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/constant/transportProperties b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/transportProperties
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/constant/transportProperties
rename to tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/transportProperties
diff --git a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/constant/turbulenceProperties b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/turbulenceProperties
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/constant/turbulenceProperties
rename to tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/turbulenceProperties
diff --git a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/makeMesh b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/makeMesh
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/makeMesh
rename to tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/makeMesh
diff --git a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/system/controlDict b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/system/controlDict
similarity index 96%
rename from tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/system/controlDict
rename to tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/system/controlDict
index 2e2970fd6f11c72ec084b1f0c95d3923f24e88d9..3ee2c8f628a2690341bd46457ebce4821a6eebb2 100644
--- a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/system/controlDict
+++ b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/system/controlDict
@@ -15,7 +15,7 @@ FoamFile
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-application     rhoPorousMRFPimpleFoam;
+application     rhoPimpleFoam;
 
 startFrom       startTime;
 
diff --git a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/system/fvSchemes b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/system/fvSchemes
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/system/fvSchemes
rename to tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/system/fvSchemes
diff --git a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/system/fvSolution b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/system/fvSolution
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/system/fvSolution
rename to tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/system/fvSolution
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/0 b/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/0
deleted file mode 120000
index f1c4a884b51ae4171513426c3b7f5f585d0d889e..0000000000000000000000000000000000000000
--- a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/0
+++ /dev/null
@@ -1 +0,0 @@
-../angledDuctImplicit/0
\ No newline at end of file
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/Allrun b/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/Allrun
deleted file mode 120000
index 09efeaf930d72136d1edbe49a421bc368227ad21..0000000000000000000000000000000000000000
--- a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/Allrun
+++ /dev/null
@@ -1 +0,0 @@
-../angledDuctImplicit/Allrun
\ No newline at end of file
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/constant/MRFProperties b/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/constant/MRFProperties
deleted file mode 100644
index fd749d03963870c76ab4a9d85ad86bd95c33a71f..0000000000000000000000000000000000000000
--- a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/constant/MRFProperties
+++ /dev/null
@@ -1,20 +0,0 @@
-/*--------------------------------*- C++ -*----------------------------------*\
-| =========                 |                                                 |
-| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
-|  \\    /   O peration     | Version:  dev                                   |
-|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
-|    \\/     M anipulation  |                                                 |
-\*---------------------------------------------------------------------------*/
-FoamFile
-{
-    version     2.0;
-    format      ascii;
-    class       dictionary;
-    location    "constant";
-    object      MRFProperties;
-}
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-// none
-
-// ************************************************************************* //
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/constant/MRFProperties b/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/constant/MRFProperties
deleted file mode 100644
index fd749d03963870c76ab4a9d85ad86bd95c33a71f..0000000000000000000000000000000000000000
--- a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/constant/MRFProperties
+++ /dev/null
@@ -1,20 +0,0 @@
-/*--------------------------------*- C++ -*----------------------------------*\
-| =========                 |                                                 |
-| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
-|  \\    /   O peration     | Version:  dev                                   |
-|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
-|    \\/     M anipulation  |                                                 |
-\*---------------------------------------------------------------------------*/
-FoamFile
-{
-    version     2.0;
-    format      ascii;
-    class       dictionary;
-    location    "constant";
-    object      MRFProperties;
-}
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-// none
-
-// ************************************************************************* //
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicit/0 b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctExplicit/0
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicit/0
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctExplicit/0
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicit/Allrun b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctExplicit/Allrun
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicit/Allrun
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctExplicit/Allrun
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicit/constant b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctExplicit/constant
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicit/constant
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctExplicit/constant
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/system/controlDict b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctExplicit/system/controlDict
similarity index 96%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/system/controlDict
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctExplicit/system/controlDict
index 4208f0d7564a0dffee439962d23367206545fca6..4974079c9d7ff51a1f65a7ded878e7afb9eb2592 100644
--- a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/system/controlDict
+++ b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctExplicit/system/controlDict
@@ -15,7 +15,7 @@ FoamFile
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-application     rhoPorousMRFSimpleFoam;
+application     rhoPorousSimpleFoam;
 
 startFrom       startTime;
 
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicit/system/fvSchemes b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctExplicit/system/fvSchemes
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicit/system/fvSchemes
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctExplicit/system/fvSchemes
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicit/system/fvSolution b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctExplicit/system/fvSolution
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicit/system/fvSolution
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctExplicit/system/fvSolution
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/0/T b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/T
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/0/T
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/T
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/0/U b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/U
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/0/U
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/U
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/0/alphat b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/alphat
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/0/alphat
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/alphat
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/0/epsilon b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/epsilon
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/0/epsilon
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/epsilon
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/0/k b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/k
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/0/k
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/k
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/0/mut b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/mut
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/0/mut
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/mut
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/0/p b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/p
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/0/p
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/p
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/Allrun b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/Allrun
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/Allrun
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/Allrun
diff --git a/tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/constant/MRFProperties b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/MRFProperties
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFLTSPimpleFoam/angledDuct/constant/MRFProperties
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/MRFProperties
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/constant/RASProperties b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/RASProperties
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/constant/RASProperties
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/RASProperties
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/constant/polyMesh/blockMeshDict.m4 b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/polyMesh/blockMeshDict.m4
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/constant/polyMesh/blockMeshDict.m4
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/polyMesh/blockMeshDict.m4
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/constant/polyMesh/boundary b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/polyMesh/boundary
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/constant/polyMesh/boundary
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/polyMesh/boundary
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/constant/porosityProperties b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/porosityProperties
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/constant/porosityProperties
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/porosityProperties
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/constant/sourcesProperties b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/sourcesProperties
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/constant/sourcesProperties
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/sourcesProperties
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/constant/thermophysicalProperties b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/thermophysicalProperties
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/constant/thermophysicalProperties
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/thermophysicalProperties
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/system/controlDict b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/system/controlDict
similarity index 96%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/system/controlDict
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/system/controlDict
index 22f84576a10d2e942c9eb465ca7db3f3c0636d5d..ded00ba56989e5cf543268e42fa253de1208fb42 100644
--- a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/system/controlDict
+++ b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/system/controlDict
@@ -15,7 +15,7 @@ FoamFile
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-application     rhoPorousMRFSimpleFoam;
+application     rhoPorousSimpleFoam;
 
 startFrom       startTime;
 
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/system/fvSchemes b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/system/fvSchemes
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/system/fvSchemes
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/system/fvSchemes
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/system/fvSolution b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/system/fvSolution
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/system/fvSolution
rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/system/fvSolution
diff --git a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/T b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/T
new file mode 100644
index 0000000000000000000000000000000000000000..561ca236be3bbed252ef63b29c24063a3bea4c6b
--- /dev/null
+++ b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/T
@@ -0,0 +1,54 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      T;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 0 0 1 0 0 0];
+
+internalField   uniform 293;
+
+boundaryField
+{
+
+    front
+    {
+        type            zeroGradient;
+    }
+    back
+    {
+        type            zeroGradient;
+    }
+    wall
+    {
+        type            zeroGradient;
+    }
+    porosityWall
+    {
+        type            zeroGradient;
+    }
+
+    inlet
+    {
+        type            fixedValue;
+        value           $internalField;
+    }
+    outlet
+    {
+        type            inletOutlet;
+        value           $internalField;
+        inletValue      $internalField;
+    }
+}
+
+// ************************************************************************* //
diff --git a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/U b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/U
new file mode 100644
index 0000000000000000000000000000000000000000..20e25d12a8c318b8b0532714ad2919ed4068fe7c
--- /dev/null
+++ b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/U
@@ -0,0 +1,57 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volVectorField;
+    object      U;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 1 -1 0 0 0 0];
+
+internalField   uniform (0 0 0);
+
+boundaryField
+{
+    front
+    {
+        type            fixedValue;
+        value           uniform (0 0 0);
+    }
+    back
+    {
+        type            fixedValue;
+        value           uniform (0 0 0);
+    }
+    wall
+    {
+        type            fixedValue;
+        value           uniform (0 0 0);
+    }
+    porosityWall
+    {
+        type            slip;
+        value           uniform (0 0 0);
+    }
+    inlet
+    {
+        type            flowRateInletVelocity;
+        massFlowRate    constant 0.1;
+        value           uniform (0 0 0);
+    }
+    outlet
+    {
+        type            inletOutlet;
+        value           uniform (0 0 0);
+        inletValue      uniform (0 0 0);
+    }
+}
+
+// ************************************************************************* //
diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/alphat b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/alphat
similarity index 84%
rename from tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/alphat
rename to tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/alphat
index aefa32d852bcadeec8d59effb605a7a8182c6ee6..f609fa6c14c41bba0ec2726af2cf56a9ca8c949a 100644
--- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/alphat
+++ b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/alphat
@@ -21,32 +21,36 @@ internalField   uniform 0;
 
 boundaryField
 {
-    //- Set patchGroups for constraint patches
-    #include "${WM_PROJECT_DIR}/etc/caseDicts/setConstraintTypes"
-
-    ground
+    front
     {
         type            alphatWallFunction;
         value           uniform 0;
     }
-
-    igloo_region0
+    back
     {
         type            alphatWallFunction;
         value           uniform 0;
     }
-
-    twoFridgeFreezers_seal_0
+    wall
     {
         type            alphatWallFunction;
         value           uniform 0;
     }
-
-    twoFridgeFreezers_herring_1
+    porosityWall
     {
         type            alphatWallFunction;
         value           uniform 0;
     }
+    inlet
+    {
+        type            calculated;
+        value           uniform 0;
+    }
+    outlet
+    {
+        type            calculated;
+        value           uniform 0;
+    }
 }
 
 
diff --git a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/epsilon b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/epsilon
new file mode 100644
index 0000000000000000000000000000000000000000..7588e13063f38c366c8ffde4243960a54be45481
--- /dev/null
+++ b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/epsilon
@@ -0,0 +1,64 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    location    "0";
+    object      epsilon;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [ 0 2 -3 0 0 0 0 ];
+
+internalField   uniform 200;
+
+boundaryField
+{
+    front
+    {
+        type            compressible::epsilonWallFunction;
+        value           uniform 200;
+    }
+
+    back
+    {
+        type            compressible::epsilonWallFunction;
+        value           uniform 200;
+    }
+
+    wall
+    {
+        type            compressible::epsilonWallFunction;
+        value           uniform 200;
+    }
+
+    porosityWall
+    {
+        type            compressible::epsilonWallFunction;
+        value           uniform 200;
+    }
+
+    inlet
+    {
+        type            compressible::turbulentMixingLengthDissipationRateInlet;
+        mixingLength    0.005;
+        value           uniform 200;
+    }
+
+    outlet
+    {
+        type            inletOutlet;
+        inletValue      uniform 200;
+        value           uniform 200;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/k b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/k
new file mode 100644
index 0000000000000000000000000000000000000000..85df9b83c3bce148f8c7ac811acd0cf59387505a
--- /dev/null
+++ b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/k
@@ -0,0 +1,64 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    location    "0";
+    object      k;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [ 0 2 -2 0 0 0 0 ];
+
+internalField   uniform 1;
+
+boundaryField
+{
+    front
+    {
+        type            compressible::kqRWallFunction;
+        value           uniform 1;
+    }
+
+    back
+    {
+        type            compressible::kqRWallFunction;
+        value           uniform 1;
+    }
+
+    wall
+    {
+        type            compressible::kqRWallFunction;
+        value           uniform 1;
+    }
+
+    porosityWall
+    {
+        type            compressible::kqRWallFunction;
+        value           uniform 1;
+    }
+
+    inlet
+    {
+        type            turbulentIntensityKineticEnergyInlet;
+        intensity       0.05;
+        value           uniform 1;
+    }
+
+    outlet
+    {
+        type            inletOutlet;
+        inletValue      uniform 1;
+        value           uniform 1;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/mut b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/mut
new file mode 100644
index 0000000000000000000000000000000000000000..2ba718d5b53378d89430ecd57f631fb03f833a0f
--- /dev/null
+++ b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/mut
@@ -0,0 +1,62 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    location    "0";
+    object      mut;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [ 1 -1 -1 0 0 0 0 ];
+
+internalField   uniform 0;
+
+boundaryField
+{
+    front
+    {
+        type            mutkWallFunction;
+        value           uniform 0;
+    }
+
+    back
+    {
+        type            mutkWallFunction;
+        value           uniform 0;
+    }
+
+    wall
+    {
+        type            mutkWallFunction;
+        value           uniform 0;
+    }
+
+    porosityWall
+    {
+        type            mutkWallFunction;
+        value           uniform 0;
+    }
+
+    inlet
+    {
+        type            calculated;
+        value           uniform 0;
+    }
+
+    outlet
+    {
+        type            calculated;
+        value           uniform 0;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/constant/porosityProperties b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/p
similarity index 60%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/constant/porosityProperties
rename to tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/p
index adc5ef3cc2132d7cce9aa225dd447c2b99a9dac3..21db04d6109a0348229d019cb3a13d728044c86d 100644
--- a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/constant/porosityProperties
+++ b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/p
@@ -9,31 +9,43 @@ FoamFile
 {
     version     2.0;
     format      ascii;
-    class       dictionary;
-    location    "constant";
-    object      porosityProperties;
+    class       volScalarField;
+    object      p;
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-porosity1
-{
-    type            fixedCoeff;
-    active          yes;
-    cellZone        porosity;
+dimensions      [1 -1 -2 0 0 0 0];
+
+internalField   uniform 1.0e5;
 
-    fixedCoeffCoeffs
+boundaryField
+{
+    front
+    {
+        type            zeroGradient;
+    }
+    back
+    {
+        type            zeroGradient;
+    }
+    wall
     {
-        alpha       alpha [0 0 -1 0 0 0 0] (500 -1000 -1000);
-        beta        beta  [0 -1 0 0 0 0 0] (0 0 0);
-        rhoRef      1;
+        type            zeroGradient;
+    }
+    porosityWall
+    {
+        type            zeroGradient;
+    }
 
-        coordinateSystem
-        {
-            e1  (0.70710678 0.70710678 0);
-            e2  (0 0 1);
-        }
+    inlet
+    {
+        type            zeroGradient;
+    }
+    outlet
+    {
+        type            fixedValue;
+        value           $internalField;
     }
 }
 
-
 // ************************************************************************* //
diff --git a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/Allrun b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/Allrun
new file mode 100755
index 0000000000000000000000000000000000000000..e51c24da589a43cad82e0ee61b0940f550f0a880
--- /dev/null
+++ b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/Allrun
@@ -0,0 +1,14 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+m4 constant/polyMesh/blockMeshDict.m4 > constant/polyMesh/blockMeshDict
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+application=`getApplication`
+
+runApplication blockMesh
+runApplication $application
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/constant/RASProperties b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/RASProperties
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/constant/RASProperties
rename to tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/RASProperties
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/constant/polyMesh/blockMeshDict.m4 b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/polyMesh/blockMeshDict.m4
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/constant/polyMesh/blockMeshDict.m4
rename to tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/polyMesh/blockMeshDict.m4
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/constant/polyMesh/boundary b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/polyMesh/boundary
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/constant/polyMesh/boundary
rename to tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/polyMesh/boundary
diff --git a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/sourcesProperties b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/sourcesProperties
new file mode 100644
index 0000000000000000000000000000000000000000..d4d41da47fb2d7077329e33cd6c8b1248a299def
--- /dev/null
+++ b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/sourcesProperties
@@ -0,0 +1,66 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      sourcesProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+fixedTemperaure1
+{
+    type            fixedTemperatureSource;
+    active          true;
+    timeStart       0;
+    duration        1000000;
+    selectionMode   cellZone;
+    cellZone        porosity;
+
+    fixedTemperatureSourceCoeffs
+    {
+        mode            uniform;
+        temperature     350;
+    }
+}
+
+
+porosity1
+{
+    type            explicitPorositySource;
+    active          true;
+    timeStart       0;
+    duration        1000000;
+    selectionMode   cellZone;
+    cellZone        porosity;
+
+    explicitPorositySourceCoeffs
+    {
+        type            fixedCoeff;
+        active          yes;
+        cellZone        porosity;
+
+        fixedCoeffCoeffs
+        {
+            alpha       alpha [0 0 -1 0 0 0 0] (500 -1000 -1000);
+            beta        beta  [0 -1 0 0 0 0 0] (0 0 0);
+            rhoRef      1;
+
+            coordinateSystem
+            {
+                e1  (0.70710678 0.70710678 0);
+                e2  (0 0 1);
+            }
+        }
+    }
+}
+
+
+************************************************************************* //
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/constant/thermophysicalProperties b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/thermophysicalProperties
similarity index 97%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/constant/thermophysicalProperties
rename to tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/thermophysicalProperties
index 920fff435c7b6e2c8b72b0af9f9e5e27324dbb6b..db1f5947af089c7ad50aba3b9b07cbfb10d2f643 100644
--- a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/constant/thermophysicalProperties
+++ b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/thermophysicalProperties
@@ -17,7 +17,7 @@ FoamFile
 
 thermoType
 {
-    type            heRhoThermo;
+    type            hePsiThermo;
     mixture         pureMixture;
     transport       sutherland;
     thermo          hConst;
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicit/system/controlDict b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/system/controlDict
similarity index 96%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicit/system/controlDict
rename to tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/system/controlDict
index 4208f0d7564a0dffee439962d23367206545fca6..2ec29c29a85d3870b10f2fb141af823cc4b8b31c 100644
--- a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicit/system/controlDict
+++ b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/system/controlDict
@@ -15,7 +15,7 @@ FoamFile
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-application     rhoPorousMRFSimpleFoam;
+application     rhoSimpleFoam;
 
 startFrom       startTime;
 
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/system/fvSchemes b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/system/fvSchemes
similarity index 94%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/system/fvSchemes
rename to tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/system/fvSchemes
index e106336cb2dd0a748f8d4dc499995db3c8067024..576b46fe86e27be61a028433c302cce09643ec89 100644
--- a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/system/fvSchemes
+++ b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/system/fvSchemes
@@ -39,10 +39,9 @@ laplacianSchemes
 {
     laplacian(muEff,U) Gauss linear corrected;
     laplacian(alphaEff,e) Gauss linear corrected;
-    laplacian((rho*rAU),p) Gauss linear corrected;
+    laplacian((rho*(1|A(U))),p) Gauss linear corrected;
     laplacian(DepsilonEff,epsilon) Gauss linear corrected;
     laplacian(DkEff,k) Gauss linear corrected;
-    laplacian(1,p)  Gauss linear corrected;
 }
 
 interpolationSchemes
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/system/fvSolution b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/system/fvSolution
similarity index 100%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctExplicitFixedCoeff/system/fvSolution
rename to tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/system/fvSolution
diff --git a/tutorials/compressible/sonicFoam/laminar/forwardStep/0/p b/tutorials/compressible/sonicFoam/laminar/forwardStep/0/p
index e4c6d1271167aeca841b9c31fc91d9eeb7f2ba59..bdbc4f96ce910e8e160544dd595aa116766e1bf5 100644
--- a/tutorials/compressible/sonicFoam/laminar/forwardStep/0/p
+++ b/tutorials/compressible/sonicFoam/laminar/forwardStep/0/p
@@ -32,7 +32,7 @@ boundaryField
         field           p;
         phi             phi;
         rho             rho;
-        psi             psi;
+        psi             thermo:psi;
         gamma           1.4;
         fieldInf        1;
         lInf            3;
diff --git a/tutorials/compressible/sonicFoam/ras/prism/0/p b/tutorials/compressible/sonicFoam/ras/prism/0/p
index a922f0a8a5c43d18acf88282bc9e5bdca2dcf5b0..c1cc7124ff9f8cf2012de0fa92a5cd1173939012 100644
--- a/tutorials/compressible/sonicFoam/ras/prism/0/p
+++ b/tutorials/compressible/sonicFoam/ras/prism/0/p
@@ -32,7 +32,7 @@ boundaryField
         field           p;
         phi             phi;
         rho             rho;
-        psi             psi;
+        psi             thermo:psi;
         gamma           1.3;
         fieldInf        100000;
         lInf            1;
diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/T b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/T
index dd74be1133a46b9ff97ad2064ed6cc089baf8d8d..7e8969b3078e2322a1a0b322509d596eb333ca63 100644
--- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/T
+++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/T
@@ -23,13 +23,7 @@ boundaryField
     //- Set patchGroups for constraint patches
     #include "${WM_PROJECT_DIR}/etc/caseDicts/setConstraintTypes"
 
-    ground
-    {
-        type            fixedValue;
-        value           uniform 265;
-    }
-
-    igloo_region0
+    wall
     {
         type            fixedValue;
         value           uniform 265;
@@ -43,8 +37,7 @@ boundaryField
 
     twoFridgeFreezers_herring_1
     {
-        type            fixedValue;
-        value           uniform 303;
+        $twoFridgeFreezers_seal_0;
     }
 }
 
diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/U b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/U
index f1a91fe9714a2a5299bc4a09327c18ac9df13324..03d53ee7ed6204637a49f2c048c169f6a52a7efb 100644
--- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/U
+++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/U
@@ -23,25 +23,7 @@ boundaryField
     //- Set patchGroups for constraint patches
     #include "${WM_PROJECT_DIR}/etc/caseDicts/setConstraintTypes"
 
-    ground
-    {
-        type            fixedValue;
-        value           uniform (0 0 0);
-    }
-
-    igloo_region0
-    {
-        type            fixedValue;
-        value           uniform (0 0 0);
-    }
-
-    twoFridgeFreezers_seal_0
-    {
-        type            fixedValue;
-        value           uniform (0 0 0);
-    }
-
-    twoFridgeFreezers_herring_1
+    wall
     {
         type            fixedValue;
         value           uniform (0 0 0);
diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/epsilon b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/epsilon
index b75802e0e81c67886d7640dda6eff85934947043..e36fe920fca9129567de3e086d9304c174333b7a 100644
--- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/epsilon
+++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/epsilon
@@ -24,25 +24,7 @@ boundaryField
     //- Set patchGroups for constraint patches
     #include "${WM_PROJECT_DIR}/etc/caseDicts/setConstraintTypes"
 
-    ground
-    {
-        type            epsilonWallFunction;
-        value           uniform 0.01;
-    }
-
-    igloo_region0
-    {
-        type            epsilonWallFunction;
-        value           uniform 0.01;
-    }
-
-    twoFridgeFreezers_seal_0
-    {
-        type            epsilonWallFunction;
-        value           uniform 0.01;
-    }
-
-    twoFridgeFreezers_herring_1
+    wall
     {
         type            epsilonWallFunction;
         value           uniform 0.01;
diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/k b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/k
index 04edc9d0d718ca3ad5d6c5030f7988a9571fde1a..0d889ec8f851f20eb41b7231500003ea9474167a 100644
--- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/k
+++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/k
@@ -24,25 +24,7 @@ boundaryField
     //- Set patchGroups for constraint patches
     #include "${WM_PROJECT_DIR}/etc/caseDicts/setConstraintTypes"
 
-    ground
-    {
-        type            kqRWallFunction;
-        value           uniform 0.1;
-    }
-
-    igloo_region0
-    {
-        type            kqRWallFunction;
-        value           uniform 0.1;
-    }
-
-    twoFridgeFreezers_seal_0
-    {
-        type            kqRWallFunction;
-        value           uniform 0.1;
-    }
-
-    twoFridgeFreezers_herring_1
+    wall
     {
         type            kqRWallFunction;
         value           uniform 0.1;
diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/kappat b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/kappat
index 5c82ad4a5580eb46a966f9a8bcc4b1030a435732..44f2524e7fe1831c0d373adcc6586c9fff364f8c 100644
--- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/kappat
+++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/kappat
@@ -24,28 +24,7 @@ boundaryField
     //- Set patchGroups for constraint patches
     #include "${WM_PROJECT_DIR}/etc/caseDicts/setConstraintTypes"
 
-    ground
-    {
-        type            kappatJayatillekeWallFunction;
-        Prt             0.85;
-        value           uniform 0;
-    }
-
-    igloo_region0
-    {
-        type            kappatJayatillekeWallFunction;
-        Prt             0.85;
-        value           uniform 0;
-    }
-
-    twoFridgeFreezers_seal_0
-    {
-        type            kappatJayatillekeWallFunction;
-        Prt             0.85;
-        value           uniform 0;
-    }
-
-    twoFridgeFreezers_herring_1
+    wall
     {
         type            kappatJayatillekeWallFunction;
         Prt             0.85;
diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/nut b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/nut
index b8dae4d50fbd4d2ede26b7377332d56ee79e78fd..42472f31f0e68965ee9a1ad13f6601fa5b0fccd3 100644
--- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/nut
+++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/nut
@@ -24,25 +24,7 @@ boundaryField
     //- Set patchGroups for constraint patches
     #include "${WM_PROJECT_DIR}/etc/caseDicts/setConstraintTypes"
 
-    ground
-    {
-        type            nutkWallFunction;
-        value           uniform 0;
-    }
-
-    igloo_region0
-    {
-        type            nutkWallFunction;
-        value           uniform 0;
-    }
-
-    twoFridgeFreezers_seal_0
-    {
-        type            nutkWallFunction;
-        value           uniform 0;
-    }
-
-    twoFridgeFreezers_herring_1
+    wall
     {
         type            nutkWallFunction;
         value           uniform 0;
diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/p b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/p
index 19bfa3d347bb90bc7845cd7e598947c04de99f63..5a2eb19619103fb42215271895f29e7570444dad 100644
--- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/p
+++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/p
@@ -23,25 +23,7 @@ boundaryField
     //- Set patchGroups for constraint patches
     #include "${WM_PROJECT_DIR}/etc/caseDicts/setConstraintTypes"
 
-    ground
-    {
-        type            calculated;
-        value           $internalField;
-    }
-
-    igloo_region0
-    {
-        type            calculated;
-        value           $internalField;
-    }
-
-    twoFridgeFreezers_seal_0
-    {
-        type            calculated;
-        value           $internalField;
-    }
-
-    twoFridgeFreezers_herring_1
+    wall
     {
         type            calculated;
         value           $internalField;
diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/p_rgh b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/p_rgh
index e39f2ab7cec1a5b80d80c8ba492fe66bf148105c..69ceeb45df80d6666aa57b7a0d5ace5a82eba0c2 100644
--- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/p_rgh
+++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/p_rgh
@@ -23,28 +23,7 @@ boundaryField
     //- Set patchGroups for constraint patches
     #include "${WM_PROJECT_DIR}/etc/caseDicts/setConstraintTypes"
 
-    ground
-    {
-        type            fixedFluxPressure;
-        rho             rhok;
-        value           uniform 0;
-    }
-
-    igloo_region0
-    {
-        type            fixedFluxPressure;
-        rho             rhok;
-        value           uniform 0;
-    }
-
-    twoFridgeFreezers_seal_0
-    {
-        type            fixedFluxPressure;
-        rho             rhok;
-        value           uniform 0;
-    }
-
-    twoFridgeFreezers_herring_1
+    wall
     {
         type            fixedFluxPressure;
         rho             rhok;
diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/polyMesh/blockMeshDict b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/polyMesh/blockMeshDict
index 57de714b2f21d69799a5ac2742c90c6cae941e47..c854ce532d428bb89c9389ccb5b1a3085f262077 100644
--- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/polyMesh/blockMeshDict
+++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/polyMesh/blockMeshDict
@@ -78,7 +78,8 @@ boundary
 
     ground
     {
-        type wall;
+        type        wall;
+        inGroups    (wall);
         faces
         (
             (0 3 2 1)
diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/controlDict b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/controlDict
index 590a482d4a0ab0771e23f9cf7b5f5c20c7c442c2..31ca07d47d105adc96770c8f2667ff9a10b655ea 100644
--- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/controlDict
+++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/controlDict
@@ -15,6 +15,13 @@ FoamFile
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+libs
+(
+    "libincompressibleTurbulenceModel.so"
+    "libincompressibleRASModels.so"
+    "libincompressibleTransportModels.so"
+);
+
 application     buoyantBoussinesqSimpleFoam;
 
 startFrom       startTime;
diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/decomposeParDict b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/decomposeParDict
index 09e2478dbb33706da812b761e393eb4e280df091..7c420218539e58612ac150f681086e87a7ed50c6 100644
--- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/decomposeParDict
+++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/decomposeParDict
@@ -15,9 +15,9 @@ FoamFile
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-numberOfSubdomains 6;
+numberOfSubdomains 2;
 
-method          hierarchical;
+method          scotch;
 
 simpleCoeffs
 {
diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/snappyHexMeshDict b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/snappyHexMeshDict
index bc90ed1c2b5ff900402f1dc5e704347fddf8f3f7..c5e80f8d1a3715a2600d25caa26d4fb32be862cf 100644
--- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/snappyHexMeshDict
+++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/snappyHexMeshDict
@@ -148,12 +148,28 @@ castellatedMeshControls
                     level (3 3);
                 }
             }
+
+            // Optional specification of patch type (default is wall). No
+            // constraint types (cyclic, symmetry) etc. are allowed.
+            patchInfo
+            {
+                type        wall;
+                inGroups    (wall);
+            }
         }
 
         "iglo.*"
         {
             // Surface-wise min and max refinement level
             level (1 1);
+
+            // Optional specification of patch type (default is wall). No
+            // constraint types (cyclic, symmetry) etc. are allowed.
+            patchInfo
+            {
+                type        wall;
+                inGroups    (wall);
+            }
         }
     }
 
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/G b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/G
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/G
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/G
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/T b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/T
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/T
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/T
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/U b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/U
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/U
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/U
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/alphat b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/alphat
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/alphat
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/alphat
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/epsilon b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/epsilon
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/epsilon
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/epsilon
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/k b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/k
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/k
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/k
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/mut b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/mut
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/mut
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/mut
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/p b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/p
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/p
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/p
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/p_rgh b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/p_rgh
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/p_rgh
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/p_rgh
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/Allclean b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/Allclean
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/Allclean
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/Allclean
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/Allrun b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/Allrun
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/Allrun
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/Allrun
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/constant/RASProperties b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/constant/RASProperties
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/constant/RASProperties
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/constant/RASProperties
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/constant/g b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/constant/g
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/constant/g
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/constant/g
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/constant/polyMesh/blockMeshDict b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/constant/polyMesh/blockMeshDict
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/constant/polyMesh/blockMeshDict
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/constant/polyMesh/blockMeshDict
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/constant/polyMesh/boundary b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/constant/polyMesh/boundary
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/constant/polyMesh/boundary
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/constant/polyMesh/boundary
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/constant/radiationProperties b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/constant/radiationProperties
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/constant/radiationProperties
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/constant/radiationProperties
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/constant/thermophysicalProperties b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/constant/thermophysicalProperties
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/constant/thermophysicalProperties
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/constant/thermophysicalProperties
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/system/controlDict b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/system/controlDict
similarity index 96%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/system/controlDict
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/system/controlDict
index 3a0f2f992fdd130a79a8399cf6de5c9130fe4ade..9e129840100693b9588d49189ad5637815be529a 100644
--- a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/system/controlDict
+++ b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/system/controlDict
@@ -15,7 +15,7 @@ FoamFile
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-application     buoyantSimpleRadiationFoam;
+application     buoyantSimpleFoam;
 
 startFrom       latestTime;
 
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/system/fvSchemes b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/system/fvSchemes
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/system/fvSchemes
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/system/fvSchemes
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/system/fvSolution b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/system/fvSolution
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/system/fvSolution
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/system/fvSolution
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/G b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/G
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/G
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/G
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/IDefault b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/IDefault
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/IDefault
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/IDefault
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/T b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/T
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/T
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/T
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/U b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/U
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/U
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/U
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/alphat b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/alphat
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/alphat
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/alphat
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/epsilon b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/epsilon
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/epsilon
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/epsilon
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/k b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/k
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/k
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/k
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/mut b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/mut
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/mut
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/mut
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/p b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/p
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/p
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/p
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/p_rgh b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/p_rgh
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/p_rgh
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/p_rgh
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/Allclean b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/Allclean
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/Allclean
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/Allclean
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/Allrun b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/Allrun
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/Allrun
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/Allrun
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/RASProperties b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/constant/RASProperties
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/RASProperties
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/constant/RASProperties
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/g b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/constant/g
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/g
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/constant/g
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/polyMesh/blockMeshDict b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/constant/polyMesh/blockMeshDict
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/polyMesh/blockMeshDict
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/constant/polyMesh/blockMeshDict
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/polyMesh/boundary b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/constant/polyMesh/boundary
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/polyMesh/boundary
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/constant/polyMesh/boundary
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/radiationProperties b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/constant/radiationProperties
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/radiationProperties
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/constant/radiationProperties
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/thermophysicalProperties b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/constant/thermophysicalProperties
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/thermophysicalProperties
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/constant/thermophysicalProperties
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/controlDict b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/system/controlDict
similarity index 96%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/controlDict
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/system/controlDict
index 95fff8df10f0e4b9049ce4b1826d90d5f0db9367..76e8fe4beff90b9a3ab183db020965f809f5023b 100644
--- a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/controlDict
+++ b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/system/controlDict
@@ -15,7 +15,7 @@ FoamFile
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-application     buoyantSimpleRadiationFoam;
+application     buoyantSimpleFoam;
 
 startFrom       latestTime;
 
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/fvSchemes b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/system/fvSchemes
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/fvSchemes
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/system/fvSchemes
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/fvSolution b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/system/fvSolution
similarity index 100%
rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/fvSolution
rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/system/fvSolution
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/Allrun b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/Allrun
index 61fd0e371bf42fa954a5f677fbfb6c239b342af2..ecc9459467659daa24afa9c8c32d84ed8a0d4169 100755
--- a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/Allrun
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/Allrun
@@ -23,7 +23,7 @@ done
 
 for i in bottomAir topAir
 do
-    faceAgglomerate -region $i -dict viewFactorsDict > log.faceAgglomerate.$i 2>&1
+    faceAgglomerate -region $i -dict constant/viewFactorsDict > log.faceAgglomerate.$i 2>&1
 done
 
 for i in bottomAir topAir
@@ -42,7 +42,7 @@ runApplication `getApplication`
 #
 #for i in bottomAir topAir
 #do
-#    mpirun -np 4 faceAgglomerate -region $i -dict viewFactorsDict -parallel>   log.faceAgglomerate.$i 2>&1
+#    mpirun -np 4 faceAgglomerate -region $i -dict constant/viewFactorsDict -parallel>   log.faceAgglomerate.$i 2>&1
 #done
 
 #for i in bottomAir topAir
diff --git a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/constant/MRFProperties b/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/constant/MRFProperties
deleted file mode 100644
index 3089e7d82686521503963e6587be23733db8d073..0000000000000000000000000000000000000000
--- a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/constant/MRFProperties
+++ /dev/null
@@ -1,28 +0,0 @@
-/*--------------------------------*- C++ -*----------------------------------*\
-| =========                 |                                                 |
-| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
-|  \\    /   O peration     | Version:  dev                                   |
-|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
-|    \\/     M anipulation  |                                                 |
-\*---------------------------------------------------------------------------*/
-FoamFile
-{
-    version     2.0;
-    format      ascii;
-    class       dictionary;
-    location    "constant";
-    object      MRFProperties;
-}
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-zone1
-{
-    cellZone    rotor;
-    active      yes;
-    origin      (0 0 0);
-    axis        (0 0 1);
-    omega       104.72;
-}
-
-
-// ************************************************************************* //
diff --git a/tutorials/incompressible/pimpleFoam/TJunctionFan/system/createBafflesDict b/tutorials/incompressible/pimpleFoam/TJunctionFan/system/createBafflesDict
index 92c3f3dd82835d3c571d49dacbc7a0f8b57fbae2..544288617fb6712ce5406f73102526af3e589111 100644
--- a/tutorials/incompressible/pimpleFoam/TJunctionFan/system/createBafflesDict
+++ b/tutorials/incompressible/pimpleFoam/TJunctionFan/system/createBafflesDict
@@ -85,43 +85,7 @@ baffles
                 name            baffles;
                 type            wall;
 
-                patchFields
-                {
-                    epsilon
-                    {
-                        type            epsilonWallFunction;
-                        Cmu             0.09;
-                        kappa           0.41;
-                        E               9.8;
-                        value           uniform 0;
-                    }
-                    k
-                    {
-                        type            kqRWallFunction;
-                        value           uniform 0;
-                    }
-                    nut
-                    {
-                        type            nutkWallFunction;
-                        Cmu             0.09;
-                        kappa           0.41;
-                        E               9.8;
-                        value           uniform 0;
-                    }
-                    nuTilda
-                    {
-                        type            zeroGradient;
-                    }
-                    p
-                    {
-                        type            zeroGradient;
-                    }
-                    U
-                    {
-                        type            fixedValue;
-                        value           uniform (0 0 0);
-                    }
-                }
+                ${..master.patchFields}
             }
         }
     }
diff --git a/tutorials/incompressible/pimpleFoam/elipsekkLOmega/Allrun b/tutorials/incompressible/pimpleFoam/elipsekkLOmega/Allrun
index 656b92f3addbd931034a7f844bb2f46dffce0a97..f4d2c06b9412ae0029ac96b15ad8bb187fb0dd48 100755
--- a/tutorials/incompressible/pimpleFoam/elipsekkLOmega/Allrun
+++ b/tutorials/incompressible/pimpleFoam/elipsekkLOmega/Allrun
@@ -15,7 +15,7 @@ runApplication mirrorMesh -overwrite
 rm log.mirrorMesh
 
 rm log.changeDictionary
-runApplication changeDictionary -instance system -dict  system/changeDictionaryDict.Y
+runApplication changeDictionary -instance system -dict system/changeDictionaryDict.Y
 
 runApplication mirrorMesh -overwrite
 
diff --git a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/0/U b/tutorials/incompressible/simpleFoam/mixerVessel2D/0/U
similarity index 100%
rename from tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/0/U
rename to tutorials/incompressible/simpleFoam/mixerVessel2D/0/U
diff --git a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/0/epsilon b/tutorials/incompressible/simpleFoam/mixerVessel2D/0/epsilon
similarity index 100%
rename from tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/0/epsilon
rename to tutorials/incompressible/simpleFoam/mixerVessel2D/0/epsilon
diff --git a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/0/k b/tutorials/incompressible/simpleFoam/mixerVessel2D/0/k
similarity index 100%
rename from tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/0/k
rename to tutorials/incompressible/simpleFoam/mixerVessel2D/0/k
diff --git a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/0/nut b/tutorials/incompressible/simpleFoam/mixerVessel2D/0/nut
similarity index 100%
rename from tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/0/nut
rename to tutorials/incompressible/simpleFoam/mixerVessel2D/0/nut
diff --git a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/0/p b/tutorials/incompressible/simpleFoam/mixerVessel2D/0/p
similarity index 100%
rename from tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/0/p
rename to tutorials/incompressible/simpleFoam/mixerVessel2D/0/p
diff --git a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/Allrun b/tutorials/incompressible/simpleFoam/mixerVessel2D/Allrun
similarity index 100%
rename from tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/Allrun
rename to tutorials/incompressible/simpleFoam/mixerVessel2D/Allrun
diff --git a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/constant/RASProperties b/tutorials/incompressible/simpleFoam/mixerVessel2D/constant/RASProperties
similarity index 100%
rename from tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/constant/RASProperties
rename to tutorials/incompressible/simpleFoam/mixerVessel2D/constant/RASProperties
diff --git a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/constant/polyMesh/blockMeshDict.m4 b/tutorials/incompressible/simpleFoam/mixerVessel2D/constant/polyMesh/blockMeshDict.m4
similarity index 100%
rename from tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/constant/polyMesh/blockMeshDict.m4
rename to tutorials/incompressible/simpleFoam/mixerVessel2D/constant/polyMesh/blockMeshDict.m4
diff --git a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/constant/polyMesh/boundary b/tutorials/incompressible/simpleFoam/mixerVessel2D/constant/polyMesh/boundary
similarity index 100%
rename from tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/constant/polyMesh/boundary
rename to tutorials/incompressible/simpleFoam/mixerVessel2D/constant/polyMesh/boundary
diff --git a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/constant/sourcesProperties b/tutorials/incompressible/simpleFoam/mixerVessel2D/constant/sourcesProperties
similarity index 82%
rename from tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/constant/sourcesProperties
rename to tutorials/incompressible/simpleFoam/mixerVessel2D/constant/sourcesProperties
index ddd2bf9c9faaa53e07e1835ad4a289e8a38e8495..8b7fb7bcf238ea417a80bcea72015643d29f94c1 100644
--- a/tutorials/compressible/rhoPorousMRFSimpleFoam/angledDuctImplicit/constant/sourcesProperties
+++ b/tutorials/incompressible/simpleFoam/mixerVessel2D/constant/sourcesProperties
@@ -15,19 +15,20 @@ FoamFile
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-source1
+MRF1
 {
-    type            fixedTemperatureSource;
+    type            MRFSource;
     active          true;
     timeStart       0;
-    duration        1000000;
+    duration        1e100;
     selectionMode   cellZone;
-    cellZone        porosity;
+    cellZone        rotor;
 
-    fixedTemperatureSourceCoeffs
+    MRFSourceCoeffs
     {
-        mode            uniform;
-        temperature     350;
+        origin      (0 0 0);
+        axis        (0 0 1);
+        omega       104.72;
     }
 }
 
diff --git a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/constant/transportProperties b/tutorials/incompressible/simpleFoam/mixerVessel2D/constant/transportProperties
similarity index 100%
rename from tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/constant/transportProperties
rename to tutorials/incompressible/simpleFoam/mixerVessel2D/constant/transportProperties
diff --git a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/makeMesh b/tutorials/incompressible/simpleFoam/mixerVessel2D/makeMesh
similarity index 100%
rename from tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/makeMesh
rename to tutorials/incompressible/simpleFoam/mixerVessel2D/makeMesh
diff --git a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/system/controlDict b/tutorials/incompressible/simpleFoam/mixerVessel2D/system/controlDict
similarity index 100%
rename from tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/system/controlDict
rename to tutorials/incompressible/simpleFoam/mixerVessel2D/system/controlDict
diff --git a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/system/fvSchemes b/tutorials/incompressible/simpleFoam/mixerVessel2D/system/fvSchemes
similarity index 100%
rename from tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/system/fvSchemes
rename to tutorials/incompressible/simpleFoam/mixerVessel2D/system/fvSchemes
diff --git a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/system/fvSolution b/tutorials/incompressible/simpleFoam/mixerVessel2D/system/fvSolution
similarity index 100%
rename from tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/system/fvSolution
rename to tutorials/incompressible/simpleFoam/mixerVessel2D/system/fvSolution
diff --git a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/constant/reactingCloud1Properties b/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/constant/reactingCloud1Properties
index 5c93f36555fb23d2470c0721fae62da403190349..aa8b02241a5b7ed42e112ad151f2340bb5ea59db 100644
--- a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/constant/reactingCloud1Properties
+++ b/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/constant/reactingCloud1Properties
@@ -44,7 +44,7 @@ solution
     {
         rho             cell;
         U               cellPoint;
-        mu              cell;
+        thermo:mu       cell;
         T               cell;
         Cp              cell;
         p               cell;
diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/coalCloud1Properties b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/coalCloud1Properties
index fc5042f2c19d9695cc92d7c9d3c51753f976172d..bc122d0a3791682a799e6ab51be69453dafc5428 100644
--- a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/coalCloud1Properties
+++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/coalCloud1Properties
@@ -38,7 +38,7 @@ solution
     {
         rho             cell;
         U               cellPoint;
-        mu              cell;
+        thermo:mu       cell;
         T               cell;
         Cp              cell;
         p               cell;
diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/limestoneCloud1Properties b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/limestoneCloud1Properties
index 29cfd8d563a15366018ca647af8ac59556abec4b..0517933f4d4b7470debddaedb58196a8662a04ad 100644
--- a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/limestoneCloud1Properties
+++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/limestoneCloud1Properties
@@ -35,7 +35,7 @@ solution
     interpolationSchemes
     {
         rho             cell;
-        mu              cell;
+        thermo:mu       cell;
         U               cellPoint;
         Cp              cell;
         T               cell;
diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/constant/reactingCloud1Properties b/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/constant/reactingCloud1Properties
index 875e31a59c626d8f66982de456cb801c56dbf372..68e6be961fcf77de5a29026e74b7ae2c5f7d9773 100644
--- a/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/constant/reactingCloud1Properties
+++ b/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/constant/reactingCloud1Properties
@@ -38,7 +38,7 @@ solution
     {
         rho             cell;
         U               cellPoint;
-        mu              cell;
+        thermo:mu       cell;
         T               cell;
         Cp              cell;
         p               cell;
diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/constant/reactingCloud1Properties b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/constant/reactingCloud1Properties
index 78f4e7bb5dcc06fec98d6f6521d26a7fef98091f..a4d326c0411c0f9831860b14739a1294fa5cac6d 100644
--- a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/constant/reactingCloud1Properties
+++ b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/constant/reactingCloud1Properties
@@ -38,7 +38,7 @@ solution
     {
         rho             cell;
         U               cellPoint;
-        mu              cell;
+        thermo:mu       cell;
         T               cell;
         Cp              cell;
         p               cell;
diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/constant/reactingCloud1Properties b/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/constant/reactingCloud1Properties
index 6704aad9146ee24c13108ef2749e2349ec9eb112..42ddef823562d0f19e64ba22fa74c97fc5496bfb 100644
--- a/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/constant/reactingCloud1Properties
+++ b/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/constant/reactingCloud1Properties
@@ -38,7 +38,7 @@ solution
     {
         rho             cell;
         U               cellPoint;
-        mu              cell;
+        thermo:mu       cell;
         T               cell;
         Cp              cell;
         p               cell;
diff --git a/tutorials/lagrangian/reactingParcelFoam/filter/constant/reactingCloud1Properties b/tutorials/lagrangian/reactingParcelFoam/filter/constant/reactingCloud1Properties
index 613b407de15bd9dd5ca7257a66ed3818d232ce5a..cb6c2dd3becd14a73d94c1392f5671307b8e7898 100644
--- a/tutorials/lagrangian/reactingParcelFoam/filter/constant/reactingCloud1Properties
+++ b/tutorials/lagrangian/reactingParcelFoam/filter/constant/reactingCloud1Properties
@@ -38,7 +38,7 @@ solution
     {
         rho             cell;
         U               cellPoint;
-        mu              cell;
+        thermo:mu       cell;
         T               cell;
         Cp              cell;
         p               cell;
diff --git a/tutorials/lagrangian/reactingParcelFoam/parcelInBox/constant/reactingCloud1Properties b/tutorials/lagrangian/reactingParcelFoam/parcelInBox/constant/reactingCloud1Properties
index 10bb7ccc333cd1af3293421a91f8815c849185fd..56b0a2d3e7c473f1316a983cbfa0e1aed79c467d 100644
--- a/tutorials/lagrangian/reactingParcelFoam/parcelInBox/constant/reactingCloud1Properties
+++ b/tutorials/lagrangian/reactingParcelFoam/parcelInBox/constant/reactingCloud1Properties
@@ -38,7 +38,7 @@ solution
     {
         rho             cell;
         U               cellPoint;
-        mu              cell;
+        thermo:mu       cell;
         T               cell;
         Cp              cell;
         p               cell;
diff --git a/tutorials/lagrangian/reactingParcelFoam/verticalChannel/constant/reactingCloud1Properties b/tutorials/lagrangian/reactingParcelFoam/verticalChannel/constant/reactingCloud1Properties
index aac578722d8a63635cf9afd4869a7755edd1d948..b4d1d9abdf50879e95417c9dbe5aac5e873ca786 100644
--- a/tutorials/lagrangian/reactingParcelFoam/verticalChannel/constant/reactingCloud1Properties
+++ b/tutorials/lagrangian/reactingParcelFoam/verticalChannel/constant/reactingCloud1Properties
@@ -38,7 +38,7 @@ solution
     {
         rho             cell;
         U               cellPoint;
-        mu              cell;
+        thermo:mu       cell;
         T               cell;
         Cp              cell;
         p               cell;
diff --git a/tutorials/lagrangian/sprayFoam/aachenBomb/constant/sprayCloudProperties b/tutorials/lagrangian/sprayFoam/aachenBomb/constant/sprayCloudProperties
index 153a5fc0b2bd83c346589193ad9b8d783199c74a..0ce1e3bbc8a22230ffde01e1393f55c4e6c05deb 100644
--- a/tutorials/lagrangian/sprayFoam/aachenBomb/constant/sprayCloudProperties
+++ b/tutorials/lagrangian/sprayFoam/aachenBomb/constant/sprayCloudProperties
@@ -38,7 +38,7 @@ solution
     {
         rho             cell;
         U               cellPoint;
-        mu              cell;
+        thermo:mu       cell;
         T               cell;
         Cp              cell;
         p               cell;
diff --git a/tutorials/multiphase/cavitatingFoam/les/throttle/Allrun b/tutorials/multiphase/cavitatingFoam/les/throttle/Allrun
index bdeacd7831d2a2c15696477e68478f10fb58ff2c..8d214a96af50508e27d18d8fe09993d254b2383e 100755
--- a/tutorials/multiphase/cavitatingFoam/les/throttle/Allrun
+++ b/tutorials/multiphase/cavitatingFoam/les/throttle/Allrun
@@ -18,7 +18,7 @@ refineMeshByCellSet()
           topoSet > log.topoSet.$1 2>&1
 
           echo "refining primary zone - $1"
-          refineMesh -dict -overwrite > log.refineMesh.$1 2>&1
+          refineMesh -dict system/refineMeshDict -overwrite > log.refineMesh.$1 2>&1
       fi
       shift
    done
diff --git a/tutorials/multiphase/cavitatingFoam/les/throttle3D/Allrun b/tutorials/multiphase/cavitatingFoam/les/throttle3D/Allrun
index 213a2a5ecf094bfac092971663a6d716f15d619c..a6b927d81adf7694873d4a22e48a6447fb9d7d18 100755
--- a/tutorials/multiphase/cavitatingFoam/les/throttle3D/Allrun
+++ b/tutorials/multiphase/cavitatingFoam/les/throttle3D/Allrun
@@ -18,7 +18,7 @@ refineMeshByCellSet()
           topoSet > log.topoSet.$1 2>&1
 
           echo "refining primary zone - $1"
-          refineMesh -dict -overwrite > log.refineMesh.$1 2>&1
+          refineMesh -dict sytem/refineMeshDict -overwrite > log.refineMesh.$1 2>&1
       fi
       shift
    done
diff --git a/tutorials/multiphase/cavitatingFoam/ras/throttle/Allrun b/tutorials/multiphase/cavitatingFoam/ras/throttle/Allrun
index 37600b5049bfd7d7ba5f66902446f4fe9df287cf..fb8009740b73608e7fe5994fef71b25e63915a9d 100755
--- a/tutorials/multiphase/cavitatingFoam/ras/throttle/Allrun
+++ b/tutorials/multiphase/cavitatingFoam/ras/throttle/Allrun
@@ -17,7 +17,7 @@ refineMeshByCellSet()
           topoSet > log.topoSet.$1 2>&1
 
           echo "refining primary zone - $1"
-          refineMesh -dict -overwrite > log.refineMesh.$1 2>&1
+          refineMesh -dict system/refineMeshDict -overwrite > log.refineMesh.$1 2>&1
       fi
       shift
    done
diff --git a/tutorials/multiphase/interFoam/les/nozzleFlow2D/Allrun b/tutorials/multiphase/interFoam/les/nozzleFlow2D/Allrun
index a66f56c1a7d5e33a012d58d0ae648d98715b26be..bdd17ed03350834cc6921cb53e2555ce1cf305fd 100755
--- a/tutorials/multiphase/interFoam/les/nozzleFlow2D/Allrun
+++ b/tutorials/multiphase/interFoam/les/nozzleFlow2D/Allrun
@@ -10,7 +10,7 @@ application=`getApplication`
 runRefineMesh ()
 {
     echo "Running refineMesh on $PWD"
-    refineMesh -dict > log.refineMesh 2>&1
+    refineMesh -dict system/refineMeshDict > log.refineMesh 2>&1
 }
 
 runApplication blockMesh
diff --git a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/system/createBafflesDict b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/system/createBafflesDict
index 46e0c66bf817f5a8ee41f406537d8e130e9ad627..c127ff67d25c8e2175277ec631ffa86c6f6f7730 100644
--- a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/system/createBafflesDict
+++ b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/system/createBafflesDict
@@ -65,10 +65,7 @@ baffles
                 type            cyclic;
                 neighbourPatch  porous_half0;
 
-                patchFields
-                {
-                    ${...master.patchFields}
-                }
+                ${..master.patchFields}
             }
         }
     }