diff --git a/applications/solvers/DNS/DNSSolversDoc.H b/applications/solvers/DNS/DNSSolversDoc.H
new file mode 100644
index 0000000000000000000000000000000000000000..307be76cc596653af942b333275334f4540d434b
--- /dev/null
+++ b/applications/solvers/DNS/DNSSolversDoc.H
@@ -0,0 +1,30 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 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/>.
+
+\defgroup grpDNSSolvers Direct Numerical Simulation solvers
+@{
+    \ingroup grpSolvers
+    This group contains Direct Numerical Simulation (DNS) solvers.
+@}
+
+\*---------------------------------------------------------------------------*/
diff --git a/applications/solvers/DNS/dnsFoam/dnsFoam.C b/applications/solvers/DNS/dnsFoam/dnsFoam.C
index 38c5b7be8f042ec96344564dd73ae7e8b61a14f3..444874c82f963a41e26173ecc7fa6c83444f39ea 100644
--- a/applications/solvers/DNS/dnsFoam/dnsFoam.C
+++ b/applications/solvers/DNS/dnsFoam/dnsFoam.C
@@ -24,6 +24,9 @@ License
 Application
     dnsFoam
 
+Group
+    grpDNSSolvers
+
 Description
     Direct numerical simulation solver for boxes of isotropic turbulence
 
diff --git a/applications/solvers/basic/basicSolversDoc.H b/applications/solvers/basic/basicSolversDoc.H
new file mode 100644
index 0000000000000000000000000000000000000000..c8bb86db95e29c1c068c6d896a9bf4a8e8082f2f
--- /dev/null
+++ b/applications/solvers/basic/basicSolversDoc.H
@@ -0,0 +1,30 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 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/>.
+
+\defgroup grpBasicSolvers Basic solvers
+@{
+    \ingroup grpSolvers
+    This group contains basic solvers.
+@}
+
+\*---------------------------------------------------------------------------*/
diff --git a/applications/solvers/basic/laplacianFoam/laplacianFoam.C b/applications/solvers/basic/laplacianFoam/laplacianFoam.C
index 218d91ac447bca7da2114145d2627ccb0baebb99..846a4b00a032e4eb4140af22630e44fa152a26be 100644
--- a/applications/solvers/basic/laplacianFoam/laplacianFoam.C
+++ b/applications/solvers/basic/laplacianFoam/laplacianFoam.C
@@ -24,8 +24,30 @@ License
 Application
     laplacianFoam
 
+Group
+    grpBasicSolvers
+
 Description
-    Solves a simple Laplace equation, e.g. for thermal diffusion in a solid.
+    Laplace equation solver for a scalar quantity.
+
+    \heading Solver details
+    The solver is applicable to, e.g. for thermal diffusion in a solid.  The
+    equation is given by:
+
+    \f[
+        \ddt{T}  = \div \left( D_T \grad T \right)
+    \f]
+
+    Where:
+    \vartable
+        T     | Scalar field which is solved for, e.g. temperature
+        D_T   | Diffusion coefficient
+    \endvartable
+
+    \heading Required fields
+    \plaintable
+        T     | Scalar field which is solved for, e.g. temperature
+    \endplaintable
 
 \*---------------------------------------------------------------------------*/
 
diff --git a/applications/solvers/basic/scalarTransportFoam/scalarTransportFoam.C b/applications/solvers/basic/scalarTransportFoam/scalarTransportFoam.C
index bef592370055aeaa1ee34286d80cce50f997877e..f98225586fcc4be81aca136a4e17b5dc3c8ed0a2 100644
--- a/applications/solvers/basic/scalarTransportFoam/scalarTransportFoam.C
+++ b/applications/solvers/basic/scalarTransportFoam/scalarTransportFoam.C
@@ -24,8 +24,32 @@ License
 Application
     scalarTransportFoam
 
+Group
+    grpBasicSolvers
+
 Description
-    Solves a transport equation for a passive scalar
+    Passive scalar transport equation solver.
+
+    \heading Solver details
+    The equation is given by:
+
+    \f[
+        \ddt{T} + \div \left(\vec{U} T\right) - \div \left(D_T \grad T \right)
+        = S_{T}
+    \f]
+
+    Where:
+    \vartable
+        T       | Passive scalar
+        D_T     | Diffusion coefficient
+        S_T     | Source
+    \endvartable
+
+    \heading Required fields
+    \plaintable
+        T       | Passive scalar
+        U       | Velocity [m/s]
+    \endplaintable
 
 \*---------------------------------------------------------------------------*/
 
diff --git a/applications/solvers/combustion/PDRFoam/PDRFoam.C b/applications/solvers/combustion/PDRFoam/PDRFoam.C
index f2a659ba1e3e32bb0943cb95a4e1fea2ff2375d1..7e2ed0b63e3fd7d91cd73e9146c7a61bc36c8f8f 100644
--- a/applications/solvers/combustion/PDRFoam/PDRFoam.C
+++ b/applications/solvers/combustion/PDRFoam/PDRFoam.C
@@ -24,6 +24,9 @@ License
 Application
     PDRFoam
 
+Group
+    grpCombustionSolvers
+
 Description
     Solver for compressible premixed/partially-premixed combustion with
     turbulence modelling.
@@ -54,16 +57,17 @@ Description
     regions containing blockages which cannot be resolved by the mesh.
 
     The fields used by this solver are:
-
-    betav:  Volume porosity
-    Lobs:   Average diameter of obstacle in cell (m)
-    Aw:     Obstacle surface area per unit volume (1/m)
-    CR:     Drag tensor (1/m)
-    CT:     Turbulence generation parameter (1/m)
-    Nv:     Number of obstacles in cell per unit volume (m^-2)
-    nsv:    Tensor whose diagonal indicates the number to substract from
-            Nv to get the number of obstacles crossing the flow in each
-            direction.
+    \plaintable
+    betav  | Volume porosity
+    Lobs   | Average diameter of obstacle in cell (m)
+    Aw     | Obstacle surface area per unit volume (1/m)
+    CR     | Drag tensor (1/m)
+    CT     | Turbulence generation parameter (1/m)
+    Nv     | Number of obstacles in cell per unit volume (m^-2)
+    nsv    | Tensor whose diagonal indicates the number to substract from
+           | Nv to get the number of obstacles crossing the flow in each
+           | direction.
+    \endplaintable
 
 \*---------------------------------------------------------------------------*/
 
diff --git a/applications/solvers/combustion/XiFoam/XiDyMFoam/XiDyMFoam.C b/applications/solvers/combustion/XiFoam/XiDyMFoam/XiDyMFoam.C
index 0fa0f9618a4dac9c6c73c4caa245deb20f05efdd..0f6f2976f10617b34c652d09a11235975757991d 100644
--- a/applications/solvers/combustion/XiFoam/XiDyMFoam/XiDyMFoam.C
+++ b/applications/solvers/combustion/XiFoam/XiDyMFoam/XiDyMFoam.C
@@ -24,6 +24,9 @@ License
 Application
     XiFoam
 
+Group
+    grpCombustionSolvers grpMovingMeshSolvers
+
 Description
     Solver for compressible premixed/partially-premixed combustion with
     turbulence modelling.
diff --git a/applications/solvers/combustion/XiFoam/XiFoam.C b/applications/solvers/combustion/XiFoam/XiFoam.C
index 0b90884ad10c0391bdb5640a309ed84f7bd1cd32..a336810139a964da9a10cc7aabed66b826c48033 100644
--- a/applications/solvers/combustion/XiFoam/XiFoam.C
+++ b/applications/solvers/combustion/XiFoam/XiFoam.C
@@ -24,6 +24,9 @@ License
 Application
     XiFoam
 
+Group
+    grpCombustionSolvers
+
 Description
     Solver for compressible premixed/partially-premixed combustion with
     turbulence modelling.
diff --git a/applications/solvers/combustion/chemFoam/chemFoam.C b/applications/solvers/combustion/chemFoam/chemFoam.C
index 7a3f5e0b84552ce621435ffae800ce38f78d4999..388234b67455e7c92f14841164ea95179f6020b1 100644
--- a/applications/solvers/combustion/chemFoam/chemFoam.C
+++ b/applications/solvers/combustion/chemFoam/chemFoam.C
@@ -24,6 +24,9 @@ License
 Application
     chemFoam
 
+Group
+    grpCombustionSolvers
+
 Description
     Solver for chemistry problems
     - designed for use on single cell cases to provide comparison against
diff --git a/applications/solvers/combustion/coldEngineFoam/coldEngineFoam.C b/applications/solvers/combustion/coldEngineFoam/coldEngineFoam.C
index 654c59f1bc12026814f6a885e020fcd9986dbded..14e35856f3847d5602dd144538c71777f68ec6af 100644
--- a/applications/solvers/combustion/coldEngineFoam/coldEngineFoam.C
+++ b/applications/solvers/combustion/coldEngineFoam/coldEngineFoam.C
@@ -22,7 +22,10 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Application
-    engineFoam
+    coldEngineFoam
+
+Group
+    grpCombustionSolvers grpMovingMeshSolvers
 
 Description
     Solver for cold-flow in internal combustion engines.
diff --git a/applications/solvers/combustion/combustionSolversDoc.H b/applications/solvers/combustion/combustionSolversDoc.H
new file mode 100644
index 0000000000000000000000000000000000000000..bc68bdb7fefd4607ace55689d24a3e87ef412d70
--- /dev/null
+++ b/applications/solvers/combustion/combustionSolversDoc.H
@@ -0,0 +1,30 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 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/>.
+
+\defgroup grpCombustionSolvers Combustion solvers
+@{
+    \ingroup grpSolvers
+    This group contains combustion solvers.
+@}
+
+\*---------------------------------------------------------------------------*/
diff --git a/applications/solvers/combustion/engineFoam/engineFoam.C b/applications/solvers/combustion/engineFoam/engineFoam.C
index f72e111a2a66bf09b3ae6a9e919960f24598d51f..a13df4cea3aeb3ad95116b76ca074b2c1e5bbe39 100644
--- a/applications/solvers/combustion/engineFoam/engineFoam.C
+++ b/applications/solvers/combustion/engineFoam/engineFoam.C
@@ -24,6 +24,9 @@ License
 Application
     engineFoam
 
+Group
+    grpCombustionSolvers
+
 Description
     Solver for internal combustion engines.
 
diff --git a/applications/solvers/combustion/fireFoam/fireFoam.C b/applications/solvers/combustion/fireFoam/fireFoam.C
index 34e97b634e382f3ddb62536a0cac87902dedffbe..4d8c59a297e6b31a185afe78d16f85fd38fdf3b7 100644
--- a/applications/solvers/combustion/fireFoam/fireFoam.C
+++ b/applications/solvers/combustion/fireFoam/fireFoam.C
@@ -24,8 +24,11 @@ License
 Application
     fireFoam
 
+Group
+    grpCombustionSolvers
+
 Description
-    Transient PIMPLE solver for Fires and turbulent diffusion flames with
+    Transient PIMPLE solver for fires and turbulent diffusion flames with
     reacting Lagrangian parcels, surface film and pyrolysis modelling.
 
 \*---------------------------------------------------------------------------*/
diff --git a/applications/solvers/combustion/reactingFoam/reactingFoam.C b/applications/solvers/combustion/reactingFoam/reactingFoam.C
index 34e4265fc4b04dd1b5873d739c4c6b650eea668f..dab20b2ed6c1d4d9063651201f395c5fb668752c 100644
--- a/applications/solvers/combustion/reactingFoam/reactingFoam.C
+++ b/applications/solvers/combustion/reactingFoam/reactingFoam.C
@@ -24,6 +24,9 @@ License
 Application
     reactingFoam
 
+Group
+    grpCombustionSolvers
+
 Description
     Solver for combustion with chemical reactions.
 
diff --git a/applications/solvers/combustion/reactingFoam/rhoReactingBuoyantFoam/rhoReactingBuoyantFoam.C b/applications/solvers/combustion/reactingFoam/rhoReactingBuoyantFoam/rhoReactingBuoyantFoam.C
index 11c028d166cfe030703142630725f926f5588e57..63b7b8a61ff0c8a5b7ec9ba42045f0e9a1499263 100644
--- a/applications/solvers/combustion/reactingFoam/rhoReactingBuoyantFoam/rhoReactingBuoyantFoam.C
+++ b/applications/solvers/combustion/reactingFoam/rhoReactingBuoyantFoam/rhoReactingBuoyantFoam.C
@@ -24,6 +24,9 @@ License
 Application
     rhoReactingBuoyantFoam
 
+Group
+    grpCombustionSolvers
+
 Description
     Solver for combustion with chemical reactions using density based
     thermodynamics package, using enahanced buoyancy treatment.
diff --git a/applications/solvers/combustion/reactingFoam/rhoReactingFoam/rhoReactingFoam.C b/applications/solvers/combustion/reactingFoam/rhoReactingFoam/rhoReactingFoam.C
index 3db03fc454a5ba833379aac06fd2378475b35bb4..610bf3a136ea7eca973626d4f77168a456553f92 100644
--- a/applications/solvers/combustion/reactingFoam/rhoReactingFoam/rhoReactingFoam.C
+++ b/applications/solvers/combustion/reactingFoam/rhoReactingFoam/rhoReactingFoam.C
@@ -24,6 +24,9 @@ License
 Application
     rhoReactingFoam
 
+Group
+    grpCombustionSolvers
+
 Description
     Solver for combustion with chemical reactions using density based
     thermodynamics package.
diff --git a/applications/solvers/compressible/compressibleSolvers.H b/applications/solvers/compressible/compressibleSolvers.H
new file mode 100644
index 0000000000000000000000000000000000000000..85ab71f517723fc670ef20b0fd0b6bc64ef5f43c
--- /dev/null
+++ b/applications/solvers/compressible/compressibleSolvers.H
@@ -0,0 +1,30 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 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/>.
+
+\defgroup grpCompressibleSolvers Compressible flow solvers
+@{
+    \ingroup grpSolvers
+    This group contains compressible flow solvers.
+@}
+
+\*---------------------------------------------------------------------------*/
diff --git a/applications/solvers/compressible/rhoCentralFoam/rhoCentralDyMFoam/rhoCentralDyMFoam.C b/applications/solvers/compressible/rhoCentralFoam/rhoCentralDyMFoam/rhoCentralDyMFoam.C
index 922aa72a95c13a926aa24e6a35acc204fe6b45f6..dea76502f1bf5f1a6ce539c84b97a2bb32314238 100644
--- a/applications/solvers/compressible/rhoCentralFoam/rhoCentralDyMFoam/rhoCentralDyMFoam.C
+++ b/applications/solvers/compressible/rhoCentralFoam/rhoCentralDyMFoam/rhoCentralDyMFoam.C
@@ -24,6 +24,9 @@ License
 Application
     rhoCentralDyMFoam
 
+Group
+    grpCompressibleSolvers grpMovingMeshSolvers
+
 Description
     Density-based compressible flow solver based on central-upwind schemes of
     Kurganov and Tadmor with support for mesh-motion and topology changes
diff --git a/applications/solvers/compressible/rhoCentralFoam/rhoCentralFoam.C b/applications/solvers/compressible/rhoCentralFoam/rhoCentralFoam.C
index 7b85b5b11bdc8730e262a6c02cb39a7156e32565..1b71f42b94493a121f92f4c8447530e20811b52e 100644
--- a/applications/solvers/compressible/rhoCentralFoam/rhoCentralFoam.C
+++ b/applications/solvers/compressible/rhoCentralFoam/rhoCentralFoam.C
@@ -24,6 +24,9 @@ License
 Application
     rhoCentralFoam
 
+Group
+    grpCompressibleSolvers
+
 Description
     Density-based compressible flow solver based on central-upwind schemes of
     Kurganov and Tadmor
diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleFoam.C b/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleFoam.C
index dd05b57895742ac732f5152ef34de5c0a6f7ffdd..0ff153263fb498d4c9acd14bfbe2375949af778f 100644
--- a/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleFoam.C
+++ b/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleFoam.C
@@ -24,6 +24,9 @@ License
 Application
     rhoPimpleFoam
 
+Group
+    grpCompressibleSolvers
+
 Description
     Transient solver for laminar or turbulent flow of compressible fluids
     for HVAC and similar applications.
diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C
index 38ed77a2bd8320e7085139a4fdb776b8a6af7499..bc9b2d67cd065589f4d617298b8f29eaa33dff49 100644
--- a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C
+++ b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C
@@ -24,6 +24,9 @@ License
 Application
     rhoPorousSimpleFoam
 
+Group
+    grpCompressibleSolvers
+
 Description
     Steady-state solver for turbulent flow of compressible fluids with
     RANS turbulence modelling, implicit or explicit porosity treatment
diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoSimpleFoam.C b/applications/solvers/compressible/rhoSimpleFoam/rhoSimpleFoam.C
index fc4dc8cee8a352c7b1e52b8727e644fb04b61521..07a4ca7d0fd0dae42ddb90bdf22843a9a6dbc798 100644
--- a/applications/solvers/compressible/rhoSimpleFoam/rhoSimpleFoam.C
+++ b/applications/solvers/compressible/rhoSimpleFoam/rhoSimpleFoam.C
@@ -24,6 +24,9 @@ License
 Application
     rhoSimpleFoam
 
+Group
+    grpCompressibleSolvers
+
 Description
     Steady-state SIMPLE solver for laminar or turbulent RANS flow of
     compressible fluids.
diff --git a/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/sonicLiquidFoam.C b/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/sonicLiquidFoam.C
index c60a331b2d6e117c8873cf74765c6c4bdbb7cf9a..9fda46121184c6ce8e700a8cf5ea17c7e8a38f45 100644
--- a/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/sonicLiquidFoam.C
+++ b/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/sonicLiquidFoam.C
@@ -21,6 +21,9 @@ License
     You should have received a copy of the GNU General Public License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
+Group
+    grpCompressibleSolvers
+
 Application
     sonicLiquidFoam
 
diff --git a/applications/solvers/discreteMethods/discreteMethodsSolversDoc.H b/applications/solvers/discreteMethods/discreteMethodsSolversDoc.H
new file mode 100644
index 0000000000000000000000000000000000000000..06c67407aa7fe91c57c12576c0516314bb408b45
--- /dev/null
+++ b/applications/solvers/discreteMethods/discreteMethodsSolversDoc.H
@@ -0,0 +1,30 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 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/>.
+
+\defgroup grpDiscreteMethodsSolvers Discrete method solvers
+@{
+    \ingroup grpSolvers
+    This group contains discrete method solvers.
+@}
+
+\*---------------------------------------------------------------------------*/
diff --git a/applications/solvers/discreteMethods/dsmc/dsmcFoam/dsmcFoam.C b/applications/solvers/discreteMethods/dsmc/dsmcFoam/dsmcFoam.C
index a5e0562155e53c2d9dcc92b5169dae7fc4831e82..edf3691fb4075fea8fd4a2275b369d680268f3a3 100644
--- a/applications/solvers/discreteMethods/dsmc/dsmcFoam/dsmcFoam.C
+++ b/applications/solvers/discreteMethods/dsmc/dsmcFoam/dsmcFoam.C
@@ -24,6 +24,9 @@ License
 Application
     dsmcFoam
 
+Group
+    grpDiscreteMethodsSolvers
+
 Description
     Direct simulation Monte Carlo (DSMC) solver for 3D, transient, multi-
     species flows
diff --git a/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C b/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C
index 50c7f66085a36bc32ce72e1933a3c60a17ab4734..fa2b04f563b124fc4430d039eb4cb954ac9c2251 100644
--- a/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C
+++ b/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C
@@ -24,6 +24,9 @@ License
 Application
     mdEquilibrationFoam
 
+Group
+    grpDiscreteMethodsSolvers
+
 Description
     Equilibrates and/or preconditions molecular dynamics systems
 
diff --git a/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C b/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C
index 68f6530c95f08e3b4f3624b37d7abfb503f490da..f06436c603f4f9163477cebae6cb183a72392765 100644
--- a/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C
+++ b/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C
@@ -24,6 +24,9 @@ License
 Application
     mdFoam
 
+Group
+    grpDiscreteMethodsSolvers
+
 Description
     Molecular dynamics solver for fluid dynamics
 
diff --git a/applications/solvers/doc/solver.dox b/applications/solvers/doc/solver.dox
new file mode 100644
index 0000000000000000000000000000000000000000..4c829de1624d52d0307283a1009276b5dacc06b3
--- /dev/null
+++ b/applications/solvers/doc/solver.dox
@@ -0,0 +1,44 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 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/>.
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+\page pageSolvers Solvers
+
+\section secSolvers Overview
+The available solvers are grouped into the following categories:
+  - \ref grpBasicSolvers
+  - \ref grpCombustionSolvers
+  - \ref grpCompressibleSolvers
+  - \ref grpDiscreteMethodsSolvers
+  - \ref grpDNSSolvers
+  - \ref grpElectroMagneticsSolvers
+  - \ref grpFinancialSolvers
+  - \ref grpHeatTransferSolvers
+  - \ref grpIncompressibleSolvers
+  - \ref grpLagrangianSolvers
+  - \ref grpMultiphaseSolvers
+  - \ref grpStressAnalysisSolvers
+
+
+\*---------------------------------------------------------------------------*/
diff --git a/applications/solvers/doc/solversDoc.H b/applications/solvers/doc/solversDoc.H
new file mode 100644
index 0000000000000000000000000000000000000000..da58bc0ce33e8431dec1105e7c61bdeb62bbc3da
--- /dev/null
+++ b/applications/solvers/doc/solversDoc.H
@@ -0,0 +1,37 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 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/>.
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+\defgroup grpSolvers Solvers
+@{
+    This group contains solvers
+@}
+
+\defgroup grpMovingMeshSolvers Moving mesh solvers
+@{
+    \ingroup grpSolvers
+    This group contains moving mesh solvers solvers
+@}
+
+\*---------------------------------------------------------------------------*/
diff --git a/applications/solvers/electromagnetics/electromagneticsSolversDoc.H b/applications/solvers/electromagnetics/electromagneticsSolversDoc.H
new file mode 100644
index 0000000000000000000000000000000000000000..773733f5bb3581a55628764a721116bd1b6ec747
--- /dev/null
+++ b/applications/solvers/electromagnetics/electromagneticsSolversDoc.H
@@ -0,0 +1,30 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 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/>.
+
+\defgroup grpElectroMagneticsSolvers Electro-magnetics solvers
+@{
+    \ingroup grpSolvers
+    This group contains electro-magnetics solvers.
+@}
+
+\*---------------------------------------------------------------------------*/
diff --git a/applications/solvers/electromagnetics/electrostaticFoam/electrostaticFoam.C b/applications/solvers/electromagnetics/electrostaticFoam/electrostaticFoam.C
index 94cd1f0ca76d1b282f6e445c556bb2565d076f70..5c4a248df0a6f389351b0956feb56fbb7ff2e035 100644
--- a/applications/solvers/electromagnetics/electrostaticFoam/electrostaticFoam.C
+++ b/applications/solvers/electromagnetics/electrostaticFoam/electrostaticFoam.C
@@ -24,6 +24,9 @@ License
 Application
     electrostaticFoam
 
+Group
+    grpElectroMagneticsSolvers
+
 Description
     Solver for electrostatics.
 
diff --git a/applications/solvers/electromagnetics/magneticFoam/magneticFoam.C b/applications/solvers/electromagnetics/magneticFoam/magneticFoam.C
index 1b7d4f4f948bee2a542e6162a0097f67bb5a0c64..6613d2f206ef088ebb14326de703adbe665d7d80 100644
--- a/applications/solvers/electromagnetics/magneticFoam/magneticFoam.C
+++ b/applications/solvers/electromagnetics/magneticFoam/magneticFoam.C
@@ -24,6 +24,9 @@ License
 Application
     magneticFoam
 
+Group
+    grpElectroMagneticsSolvers
+
 Description
     Solver for the magnetic field generated by permanent magnets.
 
diff --git a/applications/solvers/electromagnetics/mhdFoam/mhdFoam.C b/applications/solvers/electromagnetics/mhdFoam/mhdFoam.C
index c9cb0242bd1393b17b1b7787ca9354e9a3d31be2..497e977e85a1bd60f1bd5ccd5cc16d5a58616c01 100644
--- a/applications/solvers/electromagnetics/mhdFoam/mhdFoam.C
+++ b/applications/solvers/electromagnetics/mhdFoam/mhdFoam.C
@@ -24,6 +24,9 @@ License
 Application
     mhdFoam
 
+Group
+    grpElectroMagneticsSolvers
+
 Description
     Solver for magnetohydrodynamics (MHD): incompressible, laminar flow of a
     conducting fluid under the influence of a magnetic field.
diff --git a/applications/solvers/financial/financialFoam/financialFoam.C b/applications/solvers/financial/financialFoam/financialFoam.C
index 16640d7ce7ed614dff3c54fa757e66facc89ac2c..2c912c7b93c58c0d380f23243922538760d22536 100644
--- a/applications/solvers/financial/financialFoam/financialFoam.C
+++ b/applications/solvers/financial/financialFoam/financialFoam.C
@@ -24,6 +24,9 @@ License
 Application
     financialFoam
 
+Group
+    grpFinancialSolvers
+
 Description
     Solves the Black-Scholes equation to price commodities.
 
diff --git a/applications/solvers/financial/financialSolversDoc.H b/applications/solvers/financial/financialSolversDoc.H
new file mode 100644
index 0000000000000000000000000000000000000000..02197d5e375bffdb67431385bdafafb1d9b40f50
--- /dev/null
+++ b/applications/solvers/financial/financialSolversDoc.H
@@ -0,0 +1,30 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 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/>.
+
+\defgroup grpFinancialSolvers Financial solvers
+@{
+    \ingroup grpSolvers
+    This group contains financial solvers.
+@}
+
+\*---------------------------------------------------------------------------*/
diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/buoyantBoussinesqPimpleFoam.C b/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/buoyantBoussinesqPimpleFoam.C
index cead654669b9bed65db65d4fb4eee44daa477098..bc348b840e704f619ab162832a1c5af02983d35c 100644
--- a/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/buoyantBoussinesqPimpleFoam.C
+++ b/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/buoyantBoussinesqPimpleFoam.C
@@ -24,6 +24,9 @@ License
 Application
     buoyantBoussinesqPimpleFoam
 
+Group
+    grpHeatTransferSolvers
+
 Description
     Transient solver for buoyant, turbulent flow of incompressible fluids
 
diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/buoyantBoussinesqSimpleFoam.C b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/buoyantBoussinesqSimpleFoam.C
index 35b49c8b8b25702bf1075b78f0f74d5b44202eb8..8547f274fa52cb1786f66adf43e3b1e6265f689a 100644
--- a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/buoyantBoussinesqSimpleFoam.C
+++ b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/buoyantBoussinesqSimpleFoam.C
@@ -24,6 +24,9 @@ License
 Application
     buoyantBoussinesqSimpleFoam
 
+Group
+    grpHeatTransferSolvers
+
 Description
     Steady-state solver for buoyant, turbulent flow of incompressible fluids
 
diff --git a/applications/solvers/heatTransfer/buoyantPimpleFoam/buoyantPimpleFoam.C b/applications/solvers/heatTransfer/buoyantPimpleFoam/buoyantPimpleFoam.C
index d683e8fbeb2ab40ea70501973c15905b849596c8..5437e7f6259775b787fcc4ebeb8955a9aaaeea29 100644
--- a/applications/solvers/heatTransfer/buoyantPimpleFoam/buoyantPimpleFoam.C
+++ b/applications/solvers/heatTransfer/buoyantPimpleFoam/buoyantPimpleFoam.C
@@ -24,6 +24,9 @@ License
 Application
     buoyantPimpleFoam
 
+Group
+    grpHeatTransferSolvers
+
 Description
     Transient solver for buoyant, turbulent flow of compressible fluids for
     ventilation and heat-transfer.
diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleFoam.C b/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleFoam.C
index 21a9ed95255aa919d45e9f7d12edb3d1f9ca76cc..6aa339f56eab22a5588d386b15313a6636c24adc 100644
--- a/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleFoam.C
+++ b/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleFoam.C
@@ -24,6 +24,9 @@ License
 Application
     buoyantSimpleFoam
 
+Group
+    grpHeatTransferSolvers
+
 Description
     Steady-state solver for buoyant, turbulent flow of compressible fluids,
     including radiation, for ventilation and heat-transfer.
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C
index ec0532c11bb3c1b6e71f998d9f3a9bb00526a000..620d60cf64626f302643a57d21273ac2c1a5a9c3 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C
@@ -24,6 +24,9 @@ License
 Application
     chtMultiRegionFoam
 
+Group
+    grpHeatTransferSolvers
+
 Description
     Combination of heatConductionFoam and buoyantFoam for conjugate heat
     transfer between solid regions and fluid regions. Both regions include
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C
index 625737aed17f3f66cef445cde2da2c23879cfa5b..263dae535e2bdb96defd7314cce5569449cbb2de 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C
@@ -24,6 +24,9 @@ License
 Application
     chtMultiRegionSimpleFoam
 
+Group
+    grpHeatTransferSolvers
+
 Description
     Steady-state version of chtMultiRegionFoam
 
diff --git a/applications/solvers/heatTransfer/heatTransferSolversDoc.H b/applications/solvers/heatTransfer/heatTransferSolversDoc.H
new file mode 100644
index 0000000000000000000000000000000000000000..e85a79b97ce42159aff572a42297b68afd462446
--- /dev/null
+++ b/applications/solvers/heatTransfer/heatTransferSolversDoc.H
@@ -0,0 +1,30 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 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/>.
+
+\defgroup grpHeatTransferSolvers Heat transfer solvers
+@{
+    \ingroup grpSolvers
+    This group contains heat transfer solvers.
+@}
+
+\*---------------------------------------------------------------------------*/
diff --git a/applications/solvers/heatTransfer/thermoFoam/thermoFoam.C b/applications/solvers/heatTransfer/thermoFoam/thermoFoam.C
index a3687213df6556d596a1fa4965e82cc579e7d7bf..a9f906e84cf89b3f72efb5b33ce89a61f6ea8587 100644
--- a/applications/solvers/heatTransfer/thermoFoam/thermoFoam.C
+++ b/applications/solvers/heatTransfer/thermoFoam/thermoFoam.C
@@ -24,6 +24,9 @@ License
 Application
     thermoFoam
 
+Group
+    grpHeatTransferSolvers
+
 Description
     Evolves the thermodynamics on a frozen flow field
 
diff --git a/applications/solvers/incompressible/adjointShapeOptimizationFoam/adjointShapeOptimizationFoam.C b/applications/solvers/incompressible/adjointShapeOptimizationFoam/adjointShapeOptimizationFoam.C
index baf2518aa15cf924f08bb4d99553a67664b3fe10..74fcec0eb3950a48c53229a59aa6ce07878dcaee 100644
--- a/applications/solvers/incompressible/adjointShapeOptimizationFoam/adjointShapeOptimizationFoam.C
+++ b/applications/solvers/incompressible/adjointShapeOptimizationFoam/adjointShapeOptimizationFoam.C
@@ -24,6 +24,9 @@ License
 Application
     ajointShapeOptimizationFoam
 
+Group
+    grpIncompressibleSolvers
+
 Description
     Steady-state solver for incompressible, turbulent flow of non-Newtonian
     fluids with optimisation of duct shape by applying "blockage" in regions
diff --git a/applications/solvers/incompressible/boundaryFoam/boundaryFoam.C b/applications/solvers/incompressible/boundaryFoam/boundaryFoam.C
index ff72dd93ddf5afb31d9d0fdab3dd472379fa6ea9..fd5f26403aae20739feacc59587e23512384912b 100644
--- a/applications/solvers/incompressible/boundaryFoam/boundaryFoam.C
+++ b/applications/solvers/incompressible/boundaryFoam/boundaryFoam.C
@@ -24,6 +24,9 @@ License
 Application
     boundaryFoam
 
+Group
+    grpIncompressibleSolvers
+
 Description
     Steady-state solver for incompressible, 1D turbulent flow, typically to
     generate boundary layer conditions at an inlet, for use in a simulation.
diff --git a/applications/solvers/incompressible/icoFoam/icoFoam.C b/applications/solvers/incompressible/icoFoam/icoFoam.C
index 80e13faa8df406eb1ecb7ac1ad9919b6d43f3904..a7d0da4a8a2f5ba4731a2ac8cf2cae05e144efca 100644
--- a/applications/solvers/incompressible/icoFoam/icoFoam.C
+++ b/applications/solvers/incompressible/icoFoam/icoFoam.C
@@ -24,9 +24,40 @@ License
 Application
     icoFoam
 
+Group
+    grpIncompressibleSolvers
+
 Description
     Transient solver for incompressible, laminar flow of Newtonian fluids.
 
+    \heading Solver details
+    The solver uses the PISO algorithm to solve the continuity equation:
+
+        \f[
+            \div \vec{U} = 0
+        \f]
+
+    and momentum equation:
+
+        \f[
+            \ddt{\vec{U}}
+          + \div \left( \vec{U} \vec{U} \right)
+          - \div \left(\nu \grad \vec{U} \right)
+          = - \grad p
+        \f]
+
+    Where:
+    \vartable
+        \vec{U} | Velocity
+        p       | Pressure
+    \endvartable
+
+    \heading Required fields
+    \plaintable
+        U       | Velocity [m/s]
+        p       | Kinematic pressure, p/rho [m2/s2]
+    \endplaintable
+
 \*---------------------------------------------------------------------------*/
 
 #include "fvCFD.H"
diff --git a/applications/solvers/incompressible/incompressibleSolversDoc.H b/applications/solvers/incompressible/incompressibleSolversDoc.H
new file mode 100644
index 0000000000000000000000000000000000000000..1ae50df0346eed555ae6cfe2e8d3961e9d08945a
--- /dev/null
+++ b/applications/solvers/incompressible/incompressibleSolversDoc.H
@@ -0,0 +1,30 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 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/>.
+
+\defgroup grpIncompressibleSolvers Incompressible flow solvers
+@{
+    \ingroup grpSolvers
+    This group contains incompressible flow solvers.
+@}
+
+\*---------------------------------------------------------------------------*/
diff --git a/applications/solvers/incompressible/nonNewtonianIcoFoam/nonNewtonianIcoFoam.C b/applications/solvers/incompressible/nonNewtonianIcoFoam/nonNewtonianIcoFoam.C
index 9d3b567d3bffb4221d1fc3e979053d1a13264dc5..e1153a2772a855fa572340e5cd23f56e3af03161 100644
--- a/applications/solvers/incompressible/nonNewtonianIcoFoam/nonNewtonianIcoFoam.C
+++ b/applications/solvers/incompressible/nonNewtonianIcoFoam/nonNewtonianIcoFoam.C
@@ -24,6 +24,9 @@ License
 Application
     nonNewtonianIcoFoam
 
+Group
+    grpIncompressibleSolvers
+
 Description
     Transient solver for incompressible, laminar flow of non-Newtonian fluids.
 
diff --git a/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/SRFPimpleFoam.C b/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/SRFPimpleFoam.C
index 94d7657b255278d4b91eb873692702e89f53412b..f31dace8fe934e7889d3f05e360c641aa85cad80 100644
--- a/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/SRFPimpleFoam.C
+++ b/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/SRFPimpleFoam.C
@@ -24,6 +24,9 @@ License
 Application
     SRFPimpleFoam
 
+Group
+    grpIncompressibleSolvers
+
 Description
     Large time-step transient solver for incompressible, flow in a single
     rotating frame using the PIMPLE (merged PISO-SIMPLE) algorithm.
diff --git a/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/pimpleDyMFoam.C b/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/pimpleDyMFoam.C
index 54c94d9c7223d3e0abf29a59a5c0968014dced60..deb266dd3d0553a71eadb731b5b8c20dd4b28ef7 100644
--- a/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/pimpleDyMFoam.C
+++ b/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/pimpleDyMFoam.C
@@ -24,6 +24,9 @@ License
 Application
     pimpleDyMFoam.C
 
+Group
+    grpIncompressibleSolvers grpMovingMeshSolvers
+
 Description
     Transient solver for incompressible, flow of Newtonian fluids
     on a moving mesh using the PIMPLE (merged PISO-SIMPLE) algorithm.
diff --git a/applications/solvers/incompressible/pimpleFoam/pimpleFoam.C b/applications/solvers/incompressible/pimpleFoam/pimpleFoam.C
index feeeaa000edf195ce4af69b65a92143b62926a5e..5a56b2b0ef0b04b58bc2edf59edcfcac47c1ea72 100644
--- a/applications/solvers/incompressible/pimpleFoam/pimpleFoam.C
+++ b/applications/solvers/incompressible/pimpleFoam/pimpleFoam.C
@@ -24,14 +24,47 @@ License
 Application
     pimpleFoam
 
+Group
+    grpIncompressibleSolvers
+
 Description
     Large time-step transient solver for incompressible, flow using the PIMPLE
     (merged PISO-SIMPLE) algorithm.
 
+    \heading Solver details
+    The solver uses the PIMPLE (merged PISO-SIMPLE) algorithm to solve the
+    continuity equation:
+
+        \f[
+            \div \vec{U} = 0
+        \f]
+
+    and momentum equation:
+
+        \f[
+            \ddt{\vec{U}} + \div \left( \vec{U} \vec{U} \right) - \div \gvec{R}
+          = - \grad p + \vec{S}_U
+        \f]
+
+    Where:
+    \vartable
+        \vec{U} | Velocity
+        p       | Pressure
+        \vec{R} | Stress tensor
+        \vec{S}_U | Momentum source
+    \endvartable
+
     Sub-models include:
     - turbulence modelling, i.e. laminar, RAS or LES
     - run-time selectable MRF and finite volume options, e.g. explicit porosity
 
+    \heading Required fields
+    \plaintable
+        U       | Velocity [m/s]
+        p       | Kinematic pressure, p/rho [m2/s2]
+        \<turbulence fields\> | As required by user selection
+    \endplaintable
+
 \*---------------------------------------------------------------------------*/
 
 #include "fvCFD.H"
diff --git a/applications/solvers/incompressible/pisoFoam/pisoFoam.C b/applications/solvers/incompressible/pisoFoam/pisoFoam.C
index 7d18261528ee1bf6c373a961c48ea7a9d53cbd6b..24e99aba739a386c5829e7a49aab5f261af34765 100644
--- a/applications/solvers/incompressible/pisoFoam/pisoFoam.C
+++ b/applications/solvers/incompressible/pisoFoam/pisoFoam.C
@@ -24,13 +24,44 @@ License
 Application
     pisoFoam
 
+Group
+    grpIncompressibleSolvers
+
 Description
     Transient solver for incompressible flow.
 
+    \heading Solver details
+    The solver uses the PISO algorithm to solve the continuity equation:
+
+        \f[
+            \div \vec{U} = 0
+        \f]
+
+    and momentum equation:
+
+        \f[
+            \ddt{\vec{U}} + \div \left( \vec{U} \vec{U} \right) - \div \gvec{R}
+          = - \grad p
+        \f]
+
+    Where:
+    \vartable
+        \vec{U} | Velocity
+        p       | Pressure
+        \vec{R} | Stress tensor
+    \endvartable
+
     Sub-models include:
     - turbulence modelling, i.e. laminar, RAS or LES
     - run-time selectable MRF and finite volume options, e.g. explicit porosity
 
+    \heading Required fields
+    \plaintable
+        U       | Velocity [m/s]
+        p       | Kinematic pressure, p/rho [m2/s2]
+        \<turbulence fields\> | As required by user selection
+    \endplaintable
+
 \*---------------------------------------------------------------------------*/
 
 #include "fvCFD.H"
diff --git a/applications/solvers/incompressible/shallowWaterFoam/shallowWaterFoam.C b/applications/solvers/incompressible/shallowWaterFoam/shallowWaterFoam.C
index 47ec8ac9f63448dd1844c5db6311776cba23a95a..e7693a073edd0f184f3c347e653f7b40a295fd6b 100644
--- a/applications/solvers/incompressible/shallowWaterFoam/shallowWaterFoam.C
+++ b/applications/solvers/incompressible/shallowWaterFoam/shallowWaterFoam.C
@@ -24,6 +24,9 @@ License
 Application
     shallowWaterFoam
 
+Group
+    grpIncompressibleSolvers
+
 Description
     Transient solver for inviscid shallow-water equations with rotation.
 
diff --git a/applications/solvers/incompressible/simpleFoam/SRFSimpleFoam/SRFSimpleFoam.C b/applications/solvers/incompressible/simpleFoam/SRFSimpleFoam/SRFSimpleFoam.C
index 89e54c378397153e4a267affcb59296e3c779055..ea791c8868a0f567628dbbe3190037cf7fa3aca5 100644
--- a/applications/solvers/incompressible/simpleFoam/SRFSimpleFoam/SRFSimpleFoam.C
+++ b/applications/solvers/incompressible/simpleFoam/SRFSimpleFoam/SRFSimpleFoam.C
@@ -24,6 +24,9 @@ License
 Application
     SRFSimpleFoam
 
+Group
+    grpIncompressibleSolvers
+
 Description
     Steady-state solver for incompressible, turbulent flow of non-Newtonian
     fluids in a single rotating frame.
diff --git a/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/porousSimpleFoam.C b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/porousSimpleFoam.C
index cfb93bd92b6511a10ea08173c2cf8cbb2151bae8..8010a7325ea0712ed9c362f58e94fa7eaf226734 100644
--- a/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/porousSimpleFoam.C
+++ b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/porousSimpleFoam.C
@@ -24,6 +24,9 @@ License
 Application
     porousSimpleFoam
 
+Group
+    grpIncompressibleSolvers
+
 Description
     Steady-state solver for incompressible, turbulent flow with
     implicit or explicit porosity treatment and support for multiple reference
diff --git a/applications/solvers/incompressible/simpleFoam/simpleFoam.C b/applications/solvers/incompressible/simpleFoam/simpleFoam.C
index f2fc0e8e6edabd63f8b1df28bb70676973ff4f66..1b84b48f7b56469964be5ba14bebb43234a012cd 100644
--- a/applications/solvers/incompressible/simpleFoam/simpleFoam.C
+++ b/applications/solvers/incompressible/simpleFoam/simpleFoam.C
@@ -24,8 +24,40 @@ License
 Application
     simpleFoam
 
+Group
+    grpIncompressibleSolvers
+
 Description
-    Steady-state solver for incompressible, turbulent flow
+    Steady-state solver for incompressible flows with turbulence modelling.
+
+    \heading Solver details
+    The solver uses the SIMPLE algorithm to solve the continuity equation:
+
+        \f[
+            \div \vec{U} = 0
+        \f]
+
+    and momentum equation:
+
+        \f[
+            \div \left( \vec{U} \vec{U} \right) - \div \gvec{R}
+          = - \grad p + \vec{S}_U
+        \f]
+
+    Where:
+    \vartable
+        \vec{U} | Velocity
+        p       | Pressure
+        \vec{R} | Stress tensor
+        \vec{S}_U | Momentum source
+    \endvartable
+
+    \heading Required fields
+    \plaintable
+        U       | Velocity [m/s]
+        p       | Kinematic pressure, p/rho [m2/s2]
+        \<turbulence fields\> | As required by user selection
+    \endplaintable
 
 \*---------------------------------------------------------------------------*/
 
diff --git a/applications/solvers/lagrangian/DPMFoam/DPMFoam.C b/applications/solvers/lagrangian/DPMFoam/DPMFoam.C
index 8999e03663d6e72a5995b25c07802faac561194e..22c16b4c80e4c88ed8aa0abc21b2b5c346fc5c30 100644
--- a/applications/solvers/lagrangian/DPMFoam/DPMFoam.C
+++ b/applications/solvers/lagrangian/DPMFoam/DPMFoam.C
@@ -24,6 +24,9 @@ License
 Application
     DPMFoam
 
+Group
+    grpLagrangianSolvers
+
 Description
     Transient solver for the coupled transport of a single kinematic particle
     cloud including the effect of the volume fraction of particles on the
diff --git a/applications/solvers/lagrangian/DPMFoam/MPPICFoam/MPPICFoam.C b/applications/solvers/lagrangian/DPMFoam/MPPICFoam/MPPICFoam.C
index 69048cf5a6feffbe10dbe7d94bd2baa658921dbc..4bb369f11b4d110580b059dfca2477d6d4437cc7 100644
--- a/applications/solvers/lagrangian/DPMFoam/MPPICFoam/MPPICFoam.C
+++ b/applications/solvers/lagrangian/DPMFoam/MPPICFoam/MPPICFoam.C
@@ -24,6 +24,9 @@ License
 Application
     MPPICFoam
 
+Group
+    grpLagrangianSolvers
+
 Description
     Transient solver for the coupled transport of a single kinematic particle
     cloud including the effect of the volume fraction of particles on the
diff --git a/applications/solvers/lagrangian/coalChemistryFoam/coalChemistryFoam.C b/applications/solvers/lagrangian/coalChemistryFoam/coalChemistryFoam.C
index 7a67cb8cf2d8b65760870d348c4236cdefed1b75..198b3c2a438a4631152790eeecb51a2182847c6b 100644
--- a/applications/solvers/lagrangian/coalChemistryFoam/coalChemistryFoam.C
+++ b/applications/solvers/lagrangian/coalChemistryFoam/coalChemistryFoam.C
@@ -24,6 +24,9 @@ License
 Application
     coalChemistryFoam
 
+Group
+    grpLagrangianSolvers
+
 Description
     Transient solver for:
     - compressible,
diff --git a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelDyMFoam/icoUncoupledKinematicParcelDyMFoam.C b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelDyMFoam/icoUncoupledKinematicParcelDyMFoam.C
index b355148a94c14d78df0c69978a44a063f401a2bf..0110832f2d7083a3430d60d1cfb083758f7456c1 100644
--- a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelDyMFoam/icoUncoupledKinematicParcelDyMFoam.C
+++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelDyMFoam/icoUncoupledKinematicParcelDyMFoam.C
@@ -24,6 +24,9 @@ License
 Application
     uncoupledKinematicParcelDyMFoam
 
+Group
+    grpLagrangianSolvers grpMovingMeshSolvers
+
 Description
     Transient solver for the passive transport of a single kinematic
     particle cloud.
diff --git a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelFoam.C b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelFoam.C
index befcb57d02b84a929d17a1dc8ec30d724c6f4aed..42273c1be5be07a2b4a825cd30aa213396098bf7 100644
--- a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelFoam.C
+++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelFoam.C
@@ -24,6 +24,9 @@ License
 Application
     icoUncoupledKinematicParcelFoam
 
+Group
+    grpLagrangianSolvers
+
 Description
     Transient solver for the passive transport of a single kinematic
     particle cloud.
diff --git a/applications/solvers/lagrangian/lagrangianSolversDoc.H b/applications/solvers/lagrangian/lagrangianSolversDoc.H
new file mode 100644
index 0000000000000000000000000000000000000000..7eb88c4f3f94c391477b046da142de683e9b89e7
--- /dev/null
+++ b/applications/solvers/lagrangian/lagrangianSolversDoc.H
@@ -0,0 +1,30 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 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/>.
+
+\defgroup grpLagrangianSolvers Lagrangian solvers
+@{
+    \ingroup grpSolvers
+    This group contains Lagrangian solvers.
+@}
+
+\*---------------------------------------------------------------------------*/
diff --git a/applications/solvers/lagrangian/reactingParcelFilmFoam/reactingParcelFilmFoam.C b/applications/solvers/lagrangian/reactingParcelFilmFoam/reactingParcelFilmFoam.C
index 220e2f28a846b97bda0e50bfca6438c5d63f68c6..8014596ae6d796e5712977d5129be9ada9e8c883 100644
--- a/applications/solvers/lagrangian/reactingParcelFilmFoam/reactingParcelFilmFoam.C
+++ b/applications/solvers/lagrangian/reactingParcelFilmFoam/reactingParcelFilmFoam.C
@@ -24,6 +24,9 @@ License
 Application
     reactingParcelFilmFoam
 
+Group
+    grpLagrangianSolvers
+
 Description
     Transient PIMPLE solver for compressible, laminar or turbulent flow with
     reacting Lagrangian parcels, and surface film modelling.
diff --git a/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C b/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C
index 46a8e0ab93d4672401329880c15f9a2f77d3edda..3b078b4f75d081a80a2deaace7054362208b1829 100644
--- a/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C
+++ b/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C
@@ -24,6 +24,9 @@ License
 Application
     reactingParcelFoam
 
+Group
+    grpLagrangianSolvers
+
 Description
     Transient PIMPLE solver for compressible, laminar or turbulent flow with
     reacting multiphase Lagrangian parcels, including run-time selectable
diff --git a/applications/solvers/lagrangian/reactingParcelFoam/simpleReactingParcelFoam/simpleReactingParcelFoam.C b/applications/solvers/lagrangian/reactingParcelFoam/simpleReactingParcelFoam/simpleReactingParcelFoam.C
index a74cbabe6cf41f7cb01fe962b70fc7f2f10fafda..a04bc4aa5ec137b98afc06ce493bc0b5d3b0241f 100644
--- a/applications/solvers/lagrangian/reactingParcelFoam/simpleReactingParcelFoam/simpleReactingParcelFoam.C
+++ b/applications/solvers/lagrangian/reactingParcelFoam/simpleReactingParcelFoam/simpleReactingParcelFoam.C
@@ -24,6 +24,9 @@ License
 Application
     simpleReactingParcelFoam
 
+Group
+    grpLagrangianSolvers
+
 Description
     Steady state SIMPLE solver for compressible, laminar or turbulent flow with
     reacting multiphase Lagrangian parcels, including run-time selectable
diff --git a/applications/solvers/lagrangian/sprayFoam/sprayDyMFoam/sprayDyMFoam.C b/applications/solvers/lagrangian/sprayFoam/sprayDyMFoam/sprayDyMFoam.C
index 0f19b4ecf18c13bd474efd59aa9a05cd6732548a..ff36ee4c4809c6b15d79292c109a8ff03b7aaa09 100644
--- a/applications/solvers/lagrangian/sprayFoam/sprayDyMFoam/sprayDyMFoam.C
+++ b/applications/solvers/lagrangian/sprayFoam/sprayDyMFoam/sprayDyMFoam.C
@@ -24,6 +24,9 @@ License
 Application
     sprayDyMFoam
 
+Group
+    grpLagrangianSolvers grpMovingMeshSolvers
+
 Description
     Transient PIMPLE solver for compressible, laminar or turbulent flow with
     spray parcels and support for moving meshes.
diff --git a/applications/solvers/lagrangian/sprayFoam/sprayEngineFoam/sprayEngineFoam.C b/applications/solvers/lagrangian/sprayFoam/sprayEngineFoam/sprayEngineFoam.C
index 5b6a75993a0e6d0c1c9635579adbd08c560d1a58..7d2b3b21000e9f294d7013f2729c3d06c771a6e7 100644
--- a/applications/solvers/lagrangian/sprayFoam/sprayEngineFoam/sprayEngineFoam.C
+++ b/applications/solvers/lagrangian/sprayFoam/sprayEngineFoam/sprayEngineFoam.C
@@ -24,6 +24,9 @@ License
 Application
     sprayEngineFoam
 
+Group
+    grpLagrangianSolvers grpMovingMeshSolvers
+
 Description
     Transient PIMPLE solver for compressible, laminar or turbulent engine
     flow swith spray parcels.
diff --git a/applications/solvers/lagrangian/sprayFoam/sprayFoam.C b/applications/solvers/lagrangian/sprayFoam/sprayFoam.C
index f670f388b18aac66dd1df23d6a9ab3e37c37ea16..28e6caa581b1957816dc60b3e65e45fe073dd312 100644
--- a/applications/solvers/lagrangian/sprayFoam/sprayFoam.C
+++ b/applications/solvers/lagrangian/sprayFoam/sprayFoam.C
@@ -24,6 +24,9 @@ License
 Application
     sprayFoam
 
+Group
+    grpLagrangianSolvers
+
 Description
     Transient PIMPLE solver for compressible, laminar or turbulent flow with
     spray parcels.
diff --git a/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C
index 6545c4d72b415ff258cdadbbcb6579ef8d1c9ea9..c6b592fb45fff1d37adb54eb5f96055fcc6ff5c6 100644
--- a/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C
+++ b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C
@@ -24,6 +24,9 @@ License
 Application
     uncoupledKinematicParcelFoam
 
+Group
+    grpLagrangianSolvers
+
 Description
     Transient solver for the passive transport of a single kinematic
     particle cloud.
diff --git a/applications/solvers/multiphase/cavitatingFoam/cavitatingDyMFoam/cavitatingDyMFoam.C b/applications/solvers/multiphase/cavitatingFoam/cavitatingDyMFoam/cavitatingDyMFoam.C
index 58c1483b2409fe3a5ca4c7e28afb1ec7669f4134..e2305c4f708ef385c3ebe719a85f1e0e1cab9ada 100644
--- a/applications/solvers/multiphase/cavitatingFoam/cavitatingDyMFoam/cavitatingDyMFoam.C
+++ b/applications/solvers/multiphase/cavitatingFoam/cavitatingDyMFoam/cavitatingDyMFoam.C
@@ -24,6 +24,9 @@ License
 Application
     cavitatingFoam
 
+Group
+    grpMultiphaseSolvers grpMovingMeshSolvers
+
 Description
     Transient cavitation code based on the homogeneous equilibrium model
     from which the compressibility of the liquid/vapour "mixture" is obtained.
diff --git a/applications/solvers/multiphase/cavitatingFoam/cavitatingFoam.C b/applications/solvers/multiphase/cavitatingFoam/cavitatingFoam.C
index e40105aab7015527807bd84958ec16d6935c17e1..3fd2ea3780e52b578bf081eeb0754a947c764044 100644
--- a/applications/solvers/multiphase/cavitatingFoam/cavitatingFoam.C
+++ b/applications/solvers/multiphase/cavitatingFoam/cavitatingFoam.C
@@ -24,6 +24,9 @@ License
 Application
     cavitatingFoam
 
+Group
+    grpMultiphaseSolvers
+
 Description
     Transient cavitation code based on the homogeneous equilibrium model
     from which the compressibility of the liquid/vapour "mixture" is obtained.
diff --git a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C
index 410bb604bbc00d49f0b7c989b06b5c378b860326..0f6bf83172799d819c9aea2816ca8f995e4aadd7 100644
--- a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C
+++ b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C
@@ -24,6 +24,9 @@ License
 Application
     compressibleInterDyMFoam
 
+Group
+    grpMultiphaseSolvers grpMovingMeshSolvers
+
 Description
     Solver for 2 compressible, non-isothermal immiscible fluids using a VOF
     (volume of fluid) phase-fraction based interface capturing approach,
diff --git a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C
index 1db6fc06f2f69d28e7fb407815f89a32b63d6d0b..bb7548164b02a44383426f4b67e133d0cda68178 100644
--- a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C
+++ b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C
@@ -24,6 +24,9 @@ License
 Application
     compressibleInterFoam
 
+Group
+    grpMultiphaseSolvers
+
 Description
     Solver for 2 compressible, non-isothermal immiscible fluids using a VOF
     (volume of fluid) phase-fraction based interface capturing approach.
diff --git a/applications/solvers/multiphase/compressibleMultiphaseInterFoam/compressibleMultiphaseInterFoam.C b/applications/solvers/multiphase/compressibleMultiphaseInterFoam/compressibleMultiphaseInterFoam.C
index c968a4e3130f99a993837847818c79b6454753d5..667941ecc59b12acb030573407ee9d932b481f69 100644
--- a/applications/solvers/multiphase/compressibleMultiphaseInterFoam/compressibleMultiphaseInterFoam.C
+++ b/applications/solvers/multiphase/compressibleMultiphaseInterFoam/compressibleMultiphaseInterFoam.C
@@ -24,6 +24,9 @@ License
 Application
     compressibleMultiphaseInterFoam
 
+Group
+    grpMultiphaseSolvers
+
 Description
     Solver for n compressible, non-isothermal immiscible fluids using a VOF
     (volume of fluid) phase-fraction based interface capturing approach.
diff --git a/applications/solvers/multiphase/driftFluxFoam/driftFluxFoam.C b/applications/solvers/multiphase/driftFluxFoam/driftFluxFoam.C
index a026a32faf93d8e95f5c690c86a87211a76f33d7..d35c3a262b5eef292cdcbfd2d696fc9f1b8d96ca 100644
--- a/applications/solvers/multiphase/driftFluxFoam/driftFluxFoam.C
+++ b/applications/solvers/multiphase/driftFluxFoam/driftFluxFoam.C
@@ -24,6 +24,9 @@ License
 Application
     driftFluxFoam
 
+Group
+    grpMultiphaseSolvers
+
 Description
     Solver for 2 incompressible fluids using the mixture approach with the
     drift-flux approximation for relative motion of the phases.
diff --git a/applications/solvers/multiphase/interFoam/interDyMFoam/interDyMFoam.C b/applications/solvers/multiphase/interFoam/interDyMFoam/interDyMFoam.C
index af6c779a0ce2cc75e8358c0c16baec922e671469..7f3f677349e03e887f680b2df49d8c63d4c1d2cb 100644
--- a/applications/solvers/multiphase/interFoam/interDyMFoam/interDyMFoam.C
+++ b/applications/solvers/multiphase/interFoam/interDyMFoam/interDyMFoam.C
@@ -24,6 +24,9 @@ License
 Application
     interDyMFoam
 
+Group
+    grpMultiphaseSolvers grpMovingMeshSolvers
+
 Description
     Solver for 2 incompressible, isothermal immiscible fluids using a VOF
     (volume of fluid) phase-fraction based interface capturing approach,
diff --git a/applications/solvers/multiphase/interFoam/interFoam.C b/applications/solvers/multiphase/interFoam/interFoam.C
index 63d9a344e8fcddc3ffb88d30906b6e34d7ebc4b9..c6dc2f47e455151eacee11cff25f94b479f10667 100644
--- a/applications/solvers/multiphase/interFoam/interFoam.C
+++ b/applications/solvers/multiphase/interFoam/interFoam.C
@@ -24,6 +24,9 @@ License
 Application
     interFoam
 
+Group
+    grpMultiphaseSolvers
+
 Description
     Solver for 2 incompressible, isothermal immiscible fluids using a VOF
     (volume of fluid) phase-fraction based interface capturing approach.
diff --git a/applications/solvers/multiphase/interFoam/interMixingFoam/interMixingFoam.C b/applications/solvers/multiphase/interFoam/interMixingFoam/interMixingFoam.C
index 19afacf2e1296a4ae0ac2fc9b9e1abf32671e663..201b6bb926b8c84c383f272f36f101c32d8d7a73 100644
--- a/applications/solvers/multiphase/interFoam/interMixingFoam/interMixingFoam.C
+++ b/applications/solvers/multiphase/interFoam/interMixingFoam/interMixingFoam.C
@@ -24,6 +24,9 @@ License
 Application
     interMixingFoam
 
+Group
+    grpMultiphaseSolvers
+
 Description
     Solver for 3 incompressible fluids, two of which are miscible,
     using a VOF method to capture the interface.
diff --git a/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeDyMFoam/interPhaseChangeDyMFoam.C b/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeDyMFoam/interPhaseChangeDyMFoam.C
index cf7ffd887415d83a2912458c27bec2f9ce71d368..a3b3e64cbc53f854d26042f2458812a4e31fcde4 100644
--- a/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeDyMFoam/interPhaseChangeDyMFoam.C
+++ b/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeDyMFoam/interPhaseChangeDyMFoam.C
@@ -24,6 +24,9 @@ License
 Application
     interPhaseChangeDyMFoam
 
+Group
+    grpMultiphaseSolvers grpMovingMeshSolvers
+
 Description
     Solver for 2 incompressible, isothermal immiscible fluids with phase-change
     (e.g. cavitation).  Uses a VOF (volume of fluid) phase-fraction based
diff --git a/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeFoam.C b/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeFoam.C
index 003d9a58a09f6d43212b3e50b2bff2b677f7b9f0..525efbc3aba8eaa9525c758a2e8ad7d82d4446fa 100644
--- a/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeFoam.C
+++ b/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeFoam.C
@@ -24,6 +24,9 @@ License
 Application
     interPhaseChangeFoam
 
+Group
+    grpMultiphaseSolvers
+
 Description
     Solver for 2 incompressible, isothermal immiscible fluids with phase-change
     (e.g. cavitation).  Uses a VOF (volume of fluid) phase-fraction based
diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseEulerFoam.C b/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseEulerFoam.C
index 61cc90547d1360a3f5acfd341163d9fa861f8a87..2ec41b40f87fa200f329a2860935a943d523c336 100644
--- a/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseEulerFoam.C
+++ b/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseEulerFoam.C
@@ -24,6 +24,9 @@ License
 Application
     multiphaseEulerFoam
 
+Group
+    grpMultiphaseSolvers
+
 Description
     Solver for a system of many compressible fluid phases including
     heat-transfer.
diff --git a/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterDyMFoam/multiphaseInterDyMFoam.C b/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterDyMFoam/multiphaseInterDyMFoam.C
index c93056f329f4fb85cb11980bb356ec006dac18ee..a4413f6295726a3edd3a1f61dac7199d806abaf2 100644
--- a/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterDyMFoam/multiphaseInterDyMFoam.C
+++ b/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterDyMFoam/multiphaseInterDyMFoam.C
@@ -24,6 +24,9 @@ License
 Application
     multiphaseInterFoam
 
+Group
+    grpMultiphaseSolvers grpMovingMeshSolvers
+
 Description
     Solver for n incompressible fluids which captures the interfaces and
     includes surface-tension and contact-angle effects for each phase.
diff --git a/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterFoam.C b/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterFoam.C
index 4bc2f55c4e7ae5678f549bba45ac2ee11f5ac2a7..130c9f1cb6dece886888a7f21ca3045bd15b293d 100644
--- a/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterFoam.C
+++ b/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterFoam.C
@@ -24,6 +24,9 @@ License
 Application
     multiphaseInterFoam
 
+Group
+    grpMultiphaseSolvers
+
 Description
     Solver for n incompressible fluids which captures the interfaces and
     includes surface-tension and contact-angle effects for each phase.
diff --git a/applications/solvers/multiphase/multiphaseSolversDoc.H b/applications/solvers/multiphase/multiphaseSolversDoc.H
new file mode 100644
index 0000000000000000000000000000000000000000..1efb73e01bf4a8d678334bc0474866af5ebab59d
--- /dev/null
+++ b/applications/solvers/multiphase/multiphaseSolversDoc.H
@@ -0,0 +1,30 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 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/>.
+
+\defgroup grpMultiphaseSolvers Multiphase solvers
+@{
+    \ingroup grpSolvers
+    This group contains multiphase solvers.
+@}
+
+\*---------------------------------------------------------------------------*/
diff --git a/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceDyMFoam/potentialFreeSurfaceDyMFoam.C b/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceDyMFoam/potentialFreeSurfaceDyMFoam.C
index 9b1a8db083c82e964c993071fd65484cdfef8e3f..7687ba6aab21ffa0b3afd6ad8e619ba1f2365f09 100644
--- a/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceDyMFoam/potentialFreeSurfaceDyMFoam.C
+++ b/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceDyMFoam/potentialFreeSurfaceDyMFoam.C
@@ -24,6 +24,9 @@ License
 Application
     potentialFreeSurfaceDyMFoam
 
+Group
+    grpMultiphaseSolvers grpMovingMeshSolvers
+
 Description
     Incompressible Navier-Stokes solver with inclusion of a wave height field
     to enable single-phase free-surface approximations.
diff --git a/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceFoam.C b/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceFoam.C
index 2db15eb8308aeb0d44e532f8dd9c317ee725f977..0bbb2c18071c9a6eaf6436b778a36426469da0e1 100644
--- a/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceFoam.C
+++ b/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceFoam.C
@@ -24,6 +24,9 @@ License
 Application
     potentialFreeSurfaceFoam
 
+Group
+    grpMultiphaseSolvers
+
 Description
     Incompressible Navier-Stokes solver with inclusion of a wave height field
     to enable single-phase free-surface approximations
diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/reactingMultiphaseEulerFoam.C b/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/reactingMultiphaseEulerFoam.C
index d5c48d47aa1e0e2cb53457c199f9e505e47e4229..f23b5649fcedb2c4830a786d1017602705bbb4c4 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/reactingMultiphaseEulerFoam.C
+++ b/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/reactingMultiphaseEulerFoam.C
@@ -24,6 +24,9 @@ License
 Application
     reactingMultiphaseEulerFoam
 
+Group
+    grpMultiphaseSolvers
+
 Description
     Solver for a system of any number of compressible fluid phases with a
     common pressure, but otherwise separate properties. The type of phase model
diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/reactingTwoPhaseEulerFoam.C b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/reactingTwoPhaseEulerFoam.C
index 00672f2f016413e66b2b711b41589c0720dadc65..04c3d2e20635732f833302e2112034867d97715d 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/reactingTwoPhaseEulerFoam.C
+++ b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/reactingTwoPhaseEulerFoam.C
@@ -24,6 +24,9 @@ License
 Application
     reactingTwoPhaseEulerFoam
 
+Group
+    grpMultiphaseSolvers
+
 Description
     Solver for a system of 2 compressible fluid phases with a common pressure,
     but otherwise separate properties. The type of phase model is run time
diff --git a/applications/solvers/multiphase/twoLiquidMixingFoam/twoLiquidMixingFoam.C b/applications/solvers/multiphase/twoLiquidMixingFoam/twoLiquidMixingFoam.C
index 298d5366caa9dd827a20ff2cd82d503a3d7cc597..02b05c03d6a190ebb6f9f1ed483c57d8f218d285 100644
--- a/applications/solvers/multiphase/twoLiquidMixingFoam/twoLiquidMixingFoam.C
+++ b/applications/solvers/multiphase/twoLiquidMixingFoam/twoLiquidMixingFoam.C
@@ -24,6 +24,9 @@ License
 Application
     twoLiquidMixingFoam
 
+Group
+    grpMultiphaseSolvers
+
 Description
     Solver for mixing 2 incompressible fluids.
 
diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseEulerFoam.C b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseEulerFoam.C
index 3027ae88b39347666fb47c02478d58dff235414d..b367381a8429f35bf3f74bedd06e7de9d01e5603 100644
--- a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseEulerFoam.C
+++ b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseEulerFoam.C
@@ -24,6 +24,9 @@ License
 Application
     twoPhaseEulerFoam
 
+Group
+    grpMultiphaseSolvers
+
 Description
     Solver for a system of 2 compressible fluid phases with one phase
     dispersed, e.g. gas bubbles in a liquid including heat-transfer.
diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementFoam.C b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementFoam.C
index f79242dcf03b8947c9133160f4ff543fe1b2cefe..a52d35ae0fe86dceab5cba2035ebdde3f7df0414 100644
--- a/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementFoam.C
+++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementFoam.C
@@ -24,6 +24,9 @@ License
 Application
     solidDisplacementFoam
 
+Group
+    grpStressAnalysisSolvers
+
 Description
     Transient segregated finite-volume solver of linear-elastic,
     small-strain deformation of a solid body, with optional thermal
diff --git a/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/solidEquilibriumDisplacementFoam.C b/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/solidEquilibriumDisplacementFoam.C
index 240593d81468da18b81068caccbb9e1dca0f0d05..4abd493e2f41e9d10dbf5b2d3913fd8ef27fd571 100644
--- a/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/solidEquilibriumDisplacementFoam.C
+++ b/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/solidEquilibriumDisplacementFoam.C
@@ -24,6 +24,9 @@ License
 Application
     solidEquilibriumDisplacementFoam
 
+Group
+    grpStressAnalysisSolvers
+
 Description
     Steady-state segregated finite-volume solver of linear-elastic,
     small-strain deformation of a solid body, with optional thermal
diff --git a/applications/solvers/stressAnalysis/stressAnalysisSolversDoc.H b/applications/solvers/stressAnalysis/stressAnalysisSolversDoc.H
new file mode 100644
index 0000000000000000000000000000000000000000..fe3e73b0d4d34baf358f05d09bd4ee057f84bf07
--- /dev/null
+++ b/applications/solvers/stressAnalysis/stressAnalysisSolversDoc.H
@@ -0,0 +1,30 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 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/>.
+
+\defgroup grpStressAnalysisSolvers Stress analysis solvers
+@{
+    \ingroup grpSolvers
+    This group contains stress analysis solvers.
+@}
+
+\*---------------------------------------------------------------------------*/
diff --git a/applications/utilities/mesh/advanced/PDRMesh/PDRMesh.C b/applications/utilities/mesh/advanced/PDRMesh/PDRMesh.C
index e6df9ed9d4c87a78be5fa4c4412a9591bcaba3db..ea342de863c1fb3c00fe0bed3264a759c5f9452d 100644
--- a/applications/utilities/mesh/advanced/PDRMesh/PDRMesh.C
+++ b/applications/utilities/mesh/advanced/PDRMesh/PDRMesh.C
@@ -34,7 +34,8 @@ Description
     NOTE: To avoid exposing wrong fields values faceSets should include
     faces contained in the blockedCells cellset.
 
-    - coupledFaces reads coupledFacesSet to introduces mixe-coupled baffles
+    - coupledFaces reads coupledFacesSet to introduces mixed-coupled
+      duplicate baffles
 
     Subsets out the blocked cells and splits the blockedFaces and updates
     fields.
diff --git a/applications/utilities/mesh/advanced/PDRMesh/PDRMeshDict b/applications/utilities/mesh/advanced/PDRMesh/PDRMeshDict
index 94fb1d6b8cc50e15a1859586453f4fa9620545ff..62471e0ec6fbf5042983d5c7758e4563facf4af7 100644
--- a/applications/utilities/mesh/advanced/PDRMesh/PDRMeshDict
+++ b/applications/utilities/mesh/advanced/PDRMesh/PDRMeshDict
@@ -17,7 +17,8 @@ FoamFile
 //- Per faceSet the patch the faces should go into blocked baffles
 blockedFaces ((blockedFacesSet blockedFaces));
 
-//- Per faceSet the patch the faces should go into coupled baffles
+//- Per faceSet the duplicate baffles to generate (one 'normal', wall baffle,
+//  one cyclic baffle). For use with active baffle boundary conditions.
 coupledFaces
 {
     coupledFacesSet
diff --git a/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C b/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C
index b53d29c836f430896a73074269527224678dd082..d0d1439b852e10e34f5ffdb9c83016dbf00a3662 100644
--- a/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C
+++ b/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C
@@ -525,7 +525,7 @@ int main(int argc, char *argv[])
 
         Info<< "Created zone " << name
             << " at index " << zoneID
-            << " with " << n << " faces" << endl;
+            << " with " << returnReduce(n, sumOp<label>()) << " faces" << endl;
 
         mesh.faceZones().set
         (
diff --git a/applications/utilities/mesh/manipulation/createPatch/createPatch.C b/applications/utilities/mesh/manipulation/createPatch/createPatch.C
index da6b2ec09c676a73a5a095ddac8eee382d5d9646..eb89288a30327a2f0b0e41f09960b00997fe4b9d 100644
--- a/applications/utilities/mesh/manipulation/createPatch/createPatch.C
+++ b/applications/utilities/mesh/manipulation/createPatch/createPatch.C
@@ -504,6 +504,11 @@ int main(int argc, char *argv[])
     #include "addOverwriteOption.H"
     #include "addRegionOption.H"
     #include "addDictOption.H"
+    Foam::argList::addBoolOption
+    (
+        "writeObj",
+        "write obj files showing the cyclic matching process"
+    );
     #include "setRootCase.H"
     #include "createTime.H"
     runTime.functionObjects().off();
@@ -515,12 +520,13 @@ int main(int argc, char *argv[])
 
     #include "createNamedPolyMesh.H"
 
+    const bool writeObj = args.optionFound("writeObj");
+
     const word oldInstance = mesh.pointsInstance();
 
     const word dictName("createPatchDict");
     #include "setSystemMeshDictionaryIO.H"
-
-    Info<< "Reading " << dictName << nl << endl;
+    Info<< "Reading " << dictIO.instance()/dictIO.name() << nl << endl;
 
     IOdictionary dict(dictIO);
 
@@ -534,7 +540,10 @@ int main(int argc, char *argv[])
     patches.checkParallelSync(true);
 
 
-    dumpCyclicMatch("initial_", mesh);
+    if (writeObj)
+    {
+        dumpCyclicMatch("initial_", mesh);
+    }
 
     // Read patch construct info from dictionary
     PtrList<dictionary> patchSources(dict.lookup("patches"));
@@ -753,7 +762,10 @@ int main(int argc, char *argv[])
     autoPtr<mapPolyMesh> map = meshMod.changeMesh(mesh, true);
     mesh.movePoints(map().preMotionPoints());
 
-    dumpCyclicMatch("coupled_", mesh);
+    if (writeObj)
+    {
+        dumpCyclicMatch("coupled_", mesh);
+    }
 
     // Synchronise points.
     if (!pointSync)
@@ -864,7 +876,10 @@ int main(int argc, char *argv[])
     filterPatches(mesh, addedPatchNames);
 
 
-    dumpCyclicMatch("final_", mesh);
+    if (writeObj)
+    {
+        dumpCyclicMatch("final_", mesh);
+    }
 
 
     // Set the precision of the points data to 10
diff --git a/applications/utilities/mesh/manipulation/flattenMesh/flattenMesh.C b/applications/utilities/mesh/manipulation/flattenMesh/flattenMesh.C
index 6aed660ed8b9359b1ab8877ba8b23d964e48594e..1f9480a5c45ee071061c85b96a31d32b744b6598 100644
--- a/applications/utilities/mesh/manipulation/flattenMesh/flattenMesh.C
+++ b/applications/utilities/mesh/manipulation/flattenMesh/flattenMesh.C
@@ -96,6 +96,8 @@ int main(int argc, char *argv[])
     Info<< "Writing points into directory " << points.path() << nl << endl;
     points.write();
 
+    Info<< nl << "End" << nl << endl;
+
     return 0;
 }
 
diff --git a/applications/utilities/mesh/manipulation/mergeMeshes/mergeMeshes.C b/applications/utilities/mesh/manipulation/mergeMeshes/mergeMeshes.C
index 46f59e91e8e63ac669a7d72d33776eebd0a61bed..62ef9e13fde805a7b5262e9b72cb707709bef4d1 100644
--- a/applications/utilities/mesh/manipulation/mergeMeshes/mergeMeshes.C
+++ b/applications/utilities/mesh/manipulation/mergeMeshes/mergeMeshes.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -62,7 +62,6 @@ int main(int argc, char *argv[])
         "merge two meshes"
     );
 
-    argList::noParallel();
     #include "addOverwriteOption.H"
 
     argList::validArgs.append("masterCase");
@@ -97,6 +96,18 @@ int main(int argc, char *argv[])
     word addRegion = polyMesh::defaultRegion;
     args.optionReadIfPresent("addRegion", addRegion);
 
+    // Since we don't use argList processor directory detection, add it to
+    // the casename ourselves so it triggers the logic inside TimePath.
+    const fileName& cName = args.caseName();
+    std::string::size_type pos = cName.find("processor");
+    if (pos != string::npos && pos != 0)
+    {
+        fileName processorName = cName.substr(pos, cName.size()-pos);
+        masterCase += '/' + processorName;
+        addCase += '/' + processorName;
+    }
+
+
     getRootCase(masterCase);
     getRootCase(addCase);
 
diff --git a/applications/utilities/mesh/manipulation/mirrorMesh/mirrorFvMesh.C b/applications/utilities/mesh/manipulation/mirrorMesh/mirrorFvMesh.C
index c52953e196f01544d87c8741b3bdb917920e349b..ffbcf01cf1feea07b5eadd3d19d9598ef36438d6 100644
--- a/applications/utilities/mesh/manipulation/mirrorMesh/mirrorFvMesh.C
+++ b/applications/utilities/mesh/manipulation/mirrorMesh/mirrorFvMesh.C
@@ -242,8 +242,6 @@ Foam::mirrorFvMesh::mirrorFvMesh(const IOobject& io)
     }
 
     // Mirror boundary faces patch by patch
-
-
     labelList newToOldPatch(boundary().size(), -1);
     labelList newPatchSizes(boundary().size(), -1);
     labelList newPatchStarts(boundary().size(), -1);
diff --git a/applications/utilities/mesh/manipulation/mirrorMesh/mirrorMesh.C b/applications/utilities/mesh/manipulation/mirrorMesh/mirrorMesh.C
index f90ed99eef87a9c0af81444ad529e51044d51ec7..f7383289cb8bfa8fd58c89c8777abc33ba3a60d7 100644
--- a/applications/utilities/mesh/manipulation/mirrorMesh/mirrorMesh.C
+++ b/applications/utilities/mesh/manipulation/mirrorMesh/mirrorMesh.C
@@ -67,7 +67,7 @@ int main(int argc, char *argv[])
     Info<< "Writing mirrored mesh" << endl;
     mesh.mirrorMesh().write();
 
-    Info<< "End" << endl;
+    Info<< "End" << nl << endl;
 
     return 0;
 }
diff --git a/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C b/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C
index 65f1f25b45792f9b52997da7434e54ff033706f5..7fcfa3b59b587cfaaa0d21669d904f122f2868e3 100644
--- a/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C
+++ b/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C
@@ -877,6 +877,55 @@ int main(int argc, char *argv[])
     ReadFields(pointMesh::New(mesh), objects, ptFlds);
 
 
+    // Read sets
+    PtrList<cellSet> cellSets;
+    PtrList<faceSet> faceSets;
+    PtrList<pointSet> pointSets;
+    if (renumberSets)
+    {
+        // Read sets
+        IOobjectList objects(mesh, mesh.facesInstance(), "polyMesh/sets");
+        {
+            IOobjectList cSets(objects.lookupClass(cellSet::typeName));
+            if (cSets.size())
+            {
+                Info<< "Reading cellSets:" << endl;
+                forAllConstIter(IOobjectList, cSets, iter)
+                {
+                    cellSets.append(new cellSet(*iter()));
+                    Info<< "    " << cellSets.last().name() << endl;
+                }
+            }
+        }
+        {
+            IOobjectList fSets(objects.lookupClass(faceSet::typeName));
+            if (fSets.size())
+            {
+                Info<< "Reading faceSets:" << endl;
+                forAllConstIter(IOobjectList, fSets, iter)
+                {
+                    faceSets.append(new faceSet(*iter()));
+                    Info<< "    " << faceSets.last().name() << endl;
+                }
+            }
+        }
+        {
+            IOobjectList pSets(objects.lookupClass(pointSet::typeName));
+            if (pSets.size())
+            {
+                Info<< "Reading pointSets:" << endl;
+                forAllConstIter(IOobjectList, pSets, iter)
+                {
+                    pointSets.append(new pointSet(*iter()));
+                    Info<< "    " << pointSets.last().name() << endl;
+                }
+            }
+        }
+    }
+
+
+>>>>>>> develop
+
     Info<< endl;
 
     // From renumbering:
@@ -1387,61 +1436,25 @@ int main(int argc, char *argv[])
         ).write();
     }
 
-
-    // Renumber sets if required
     if (renumberSets)
     {
-        Info<< endl;
-
-        // Read sets
-        IOobjectList objects(mesh, mesh.facesInstance(), "polyMesh/sets");
-
+        forAll(cellSets, i)
         {
-            IOobjectList cSets(objects.lookupClass(cellSet::typeName));
-            if (cSets.size())
-            {
-                Info<< "Renumbering cellSets:" << endl;
-                forAllConstIter(IOobjectList, cSets, iter)
-                {
-                    cellSet cs(*iter());
-                    Info<< "    " << cs.name() << endl;
-                    cs.updateMesh(map());
-                    cs.instance() = mesh.facesInstance();
-                    cs.write();
-                }
-            }
+            cellSets[i].updateMesh(map());
+            cellSets[i].instance() = mesh.facesInstance();
+            cellSets[i].write();
         }
-
+        forAll(faceSets, i)
         {
-            IOobjectList fSets(objects.lookupClass(faceSet::typeName));
-            if (fSets.size())
-            {
-                Info<< "Renumbering faceSets:" << endl;
-                forAllConstIter(IOobjectList, fSets, iter)
-                {
-                    faceSet fs(*iter());
-                    Info<< "    " << fs.name() << endl;
-                    fs.updateMesh(map());
-                    fs.instance() = mesh.facesInstance();
-                    fs.write();
-                }
-            }
+            faceSets[i].updateMesh(map());
+            faceSets[i].instance() = mesh.facesInstance();
+            faceSets[i].write();
         }
-
+        forAll(pointSets, i)
         {
-            IOobjectList pSets(objects.lookupClass(pointSet::typeName));
-            if (pSets.size())
-            {
-                Info<< "Renumbering pointSets:" << endl;
-                forAllConstIter(IOobjectList, pSets, iter)
-                {
-                    pointSet ps(*iter());
-                    Info<< "    " << ps.name() << endl;
-                    ps.updateMesh(map());
-                    ps.instance() = mesh.facesInstance();
-                    ps.write();
-                }
-            }
+            pointSets[i].updateMesh(map());
+            pointSets[i].instance() = mesh.facesInstance();
+            pointSets[i].write();
         }
     }
 
diff --git a/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C b/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C
index 7d40e2449a671d96fb546a9f15281e888838c593..3171ed5e8610919a7001cd1d67e0701a2b121c82 100644
--- a/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C
+++ b/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C
@@ -285,7 +285,8 @@ int main(int argc, char *argv[])
             << exit(FatalError);
     }
 
-    Info<< nl << "end" << endl;
+    Info<< nl << "End" << nl << endl;
+
     return 0;
 }
 
diff --git a/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C b/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C
index c6409dbf9880b0a6ca8a089b03de047a389e41c9..2e1fc21747efeef21ee0f72514a80a4bf767e6cb 100644
--- a/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C
+++ b/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C
@@ -499,7 +499,7 @@ int main(int argc, char *argv[])
     // Write fields
     runTime.write();
 
-    Info<< nl << "end" << endl;
+    Info<< nl << "End" << nl <<  endl;
 
     return 0;
 }
diff --git a/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C b/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C
index 180c736b92d50c84b94bcc1b8ef9baa933292746..25435828546712037d93014ee7c91170d71a2db5 100644
--- a/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C
+++ b/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C
@@ -41,11 +41,86 @@ Description
 #include "cellSet.H"
 #include "IOobjectList.H"
 #include "volFields.H"
+#include "topoDistanceData.H"
+#include "FaceCellWave.H"
 
 using namespace Foam;
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+labelList nearestPatch(const polyMesh& mesh, const labelList& patchIDs)
+{
+    const polyBoundaryMesh& pbm = mesh.boundaryMesh();
+
+    // Count number of faces in exposedPatchIDs
+    label nFaces = 0;
+    forAll(patchIDs, i)
+    {
+        const polyPatch& pp = pbm[patchIDs[i]];
+        nFaces += pp.size();
+    }
+
+    // Field on cells and faces.
+    List<topoDistanceData> cellData(mesh.nCells());
+    List<topoDistanceData> faceData(mesh.nFaces());
+
+    // Start of changes
+    labelList patchFaces(nFaces);
+    List<topoDistanceData> patchData(nFaces);
+    nFaces = 0;
+    forAll(patchIDs, i)
+    {
+        label patchI = patchIDs[i];
+        const polyPatch& pp = pbm[patchI];
+
+        forAll(pp, i)
+        {
+            patchFaces[nFaces] = pp.start()+i;
+            patchData[nFaces] = topoDistanceData(patchI, 0);
+            nFaces++;
+        }
+    }
+
+    // Propagate information inwards
+    FaceCellWave<topoDistanceData> deltaCalc
+    (
+        mesh,
+        patchFaces,
+        patchData,
+        faceData,
+        cellData,
+        mesh.globalData().nTotalCells()+1
+    );
+
+    // And extract
+
+    labelList nearest(mesh.nFaces());
+
+    bool haveWarned = false;
+    forAll(faceData, faceI)
+    {
+        if (!faceData[faceI].valid(deltaCalc.data()))
+        {
+            if (!haveWarned)
+            {
+                WarningIn("meshRefinement::nearestPatch(..)")
+                    << "Did not visit some faces, e.g. face " << faceI
+                    << " at " << mesh.faceCentres()[faceI] << endl
+                    << "Using patch " << patchIDs[0] << " as nearest"
+                    << endl;
+                haveWarned = true;
+            }
+            nearest[faceI] = patchIDs[0];
+        }
+        else
+        {
+            nearest[faceI] = faceData[faceI].data();
+        }
+    }
+
+    return nearest;
+}
+
 
 template<class Type>
 void subsetVolFields
@@ -150,6 +225,40 @@ void subsetPointFields
 }
 
 
+template<class Type>
+void subsetDimensionedFields
+(
+    const fvMeshSubset& subsetter,
+    const wordList& fieldNames,
+    PtrList<DimensionedField<Type, volMesh> >& subFields
+)
+{
+    const fvMesh& baseMesh = subsetter.baseMesh();
+
+    forAll(fieldNames, i)
+    {
+        const word& fieldName = fieldNames[i];
+
+        Info<< "Subsetting field " << fieldName << endl;
+
+        DimensionedField<Type, volMesh> fld
+        (
+            IOobject
+            (
+                fieldName,
+                baseMesh.time().timeName(),
+                baseMesh,
+                IOobject::MUST_READ,
+                IOobject::NO_WRITE
+            ),
+            baseMesh
+        );
+
+        subFields.set(i, subsetter.interpolate(fld));
+    }
+}
+
+
 
 int main(int argc, char *argv[])
 {
@@ -169,6 +278,13 @@ int main(int argc, char *argv[])
         "'oldInternalFaces'"
     );
     argList::addOption
+    (
+        "patches",
+        "names",
+        "add exposed internal faces to nearest of specified patches"
+        " instead of to 'oldInternalFaces'"
+    );
+    argList::addOption
     (
         "resultTime",
         "time",
@@ -207,15 +323,19 @@ int main(int argc, char *argv[])
     // Create mesh subsetting engine
     fvMeshSubset subsetter(mesh);
 
-    label patchI = -1;
+    labelList exposedPatchIDs;
 
     if (args.optionFound("patch"))
     {
         const word patchName = args["patch"];
 
-        patchI = mesh.boundaryMesh().findPatchID(patchName);
+        exposedPatchIDs = labelList
+        (
+            1,
+            mesh.boundaryMesh().findPatchID(patchName)
+        );
 
-        if (patchI == -1)
+        if (exposedPatchIDs[0] == -1)
         {
             FatalErrorInFunction
                 << nl << "Valid patches are " << mesh.boundaryMesh().names()
@@ -225,17 +345,53 @@ int main(int argc, char *argv[])
         Info<< "Adding exposed internal faces to patch " << patchName << endl
             << endl;
     }
+    else if (args.optionFound("patches"))
+    {
+        const wordReList patchNames(args.optionRead<wordReList>("patches"));
+
+        exposedPatchIDs = mesh.boundaryMesh().patchSet(patchNames).sortedToc();
+
+        Info<< "Adding exposed internal faces to nearest of patches "
+            << patchNames << endl << endl;
+    }
     else
     {
         Info<< "Adding exposed internal faces to a patch called"
             << " \"oldInternalFaces\" (created if necessary)" << endl
             << endl;
+        exposedPatchIDs = labelList(1, label(-1));
     }
 
 
     cellSet currentSet(mesh, setName);
 
-    subsetter.setLargeCellSubset(currentSet, patchI, true);
+    if (exposedPatchIDs.size() == 1)
+    {
+        subsetter.setLargeCellSubset(currentSet, exposedPatchIDs[0], true);
+    }
+    else
+    {
+
+        // Find per face the nearest patch
+        labelList nearestExposedPatch(nearestPatch(mesh, exposedPatchIDs));
+
+        labelList region(mesh.nCells(), 0);
+        forAllConstIter(cellSet, currentSet, iter)
+        {
+            region[iter.key()] = 1;
+        }
+
+        labelList exposedFaces(subsetter.getExposedFaces(region, 1, true));
+        subsetter.setLargeCellSubset
+        (
+            region,
+            1,
+            exposedFaces,
+            UIndirectList<label>(nearestExposedPatch, exposedFaces)(),
+            true
+        );
+    }
+
 
     IOobjectList objects(mesh, runTime.timeName());
 
@@ -361,6 +517,42 @@ int main(int argc, char *argv[])
     subsetPointFields(subsetter, pMesh, pointTensorNames, pointTensorFlds);
 
 
+    // Read dimensioned fields and subset
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    typedef volScalarField::DimensionedInternalField dimScalType;
+    wordList scalarDimNames(objects.names(dimScalType::typeName));
+    PtrList<dimScalType> scalarDimFlds(scalarDimNames.size());
+    subsetDimensionedFields(subsetter, scalarDimNames, scalarDimFlds);
+
+    typedef volVectorField::DimensionedInternalField dimVecType;
+    wordList vectorDimNames(objects.names(dimVecType::typeName));
+    PtrList<dimVecType> vectorDimFlds(vectorDimNames.size());
+    subsetDimensionedFields(subsetter, vectorDimNames, vectorDimFlds);
+
+    typedef volSphericalTensorField::DimensionedInternalField dimSphereType;
+    wordList sphericalTensorDimNames(objects.names(dimSphereType::typeName));
+    PtrList<dimSphereType> sphericalTensorDimFlds
+    (
+        sphericalTensorDimNames.size()
+    );
+    subsetDimensionedFields
+    (
+        subsetter,
+        sphericalTensorDimNames,
+        sphericalTensorDimFlds
+    );
+
+    typedef volSymmTensorField::DimensionedInternalField dimSymmTensorType;
+    wordList symmTensorDimNames(objects.names(dimSymmTensorType::typeName));
+    PtrList<dimSymmTensorType> symmTensorDimFlds(symmTensorDimNames.size());
+    subsetDimensionedFields(subsetter, symmTensorDimNames, symmTensorDimFlds);
+
+    typedef volTensorField::DimensionedInternalField dimTensorType;
+    wordList tensorDimNames(objects.names(dimTensorType::typeName));
+    PtrList<dimTensorType> tensorDimFlds(tensorDimNames.size());
+    subsetDimensionedFields(subsetter, tensorDimNames, tensorDimFlds);
+
 
     // Write mesh and fields to new time
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -461,6 +653,33 @@ int main(int argc, char *argv[])
         pointTensorFlds[i].write();
     }
 
+    // DimensionedFields
+    forAll(scalarDimFlds, i)
+    {
+        scalarDimFlds[i].rename(scalarDimNames[i]);
+        scalarDimFlds[i].write();
+    }
+    forAll(vectorDimFlds, i)
+    {
+        vectorDimFlds[i].rename(vectorDimNames[i]);
+        vectorDimFlds[i].write();
+    }
+    forAll(sphericalTensorDimFlds, i)
+    {
+        sphericalTensorDimFlds[i].rename(sphericalTensorDimNames[i]);
+        sphericalTensorDimFlds[i].write();
+    }
+    forAll(symmTensorDimFlds, i)
+    {
+        symmTensorDimFlds[i].rename(symmTensorDimNames[i]);
+        symmTensorDimFlds[i].write();
+    }
+    forAll(tensorDimFlds, i)
+    {
+        tensorDimFlds[i].rename(tensorDimNames[i]);
+        tensorDimFlds[i].write();
+    }
+
 
     Info<< "\nEnd\n" << endl;
 
diff --git a/applications/utilities/mesh/manipulation/topoSet/topoSetDict b/applications/utilities/mesh/manipulation/topoSet/topoSetDict
index 5f0e5c0b39df3b00054a35303fab1e9bad40f819..045486fc217a1af988242d40a4ac5e4a53372eb5 100644
--- a/applications/utilities/mesh/manipulation/topoSet/topoSetDict
+++ b/applications/utilities/mesh/manipulation/topoSet/topoSetDict
@@ -372,19 +372,22 @@ FoamFile
 //                          //           is the master side)
 //    }
 //
+//    // Select based on faceSet, using supplied normal to determine orientation
+//    source setAndNormalToFaceZone;
+//    sourceInfo
+//    {
+//        faceSet f0;       // name of faceSet
+//        normal (1 0 0);   // normal orientation
+//    }
+//
 //    // Select based on surface. Orientation from normals on surface
+//    source  searchableSurfaceToFaceZone;
+//    sourceInfo
 //    {
-//        name    fz0;
-//        type    faceZoneSet;
-//        action  new;
-//        source  searchableSurfaceToFaceZone;
-//        sourceInfo
-//        {
-//            surface searchableSphere;
-//            centre  (0.05 0.05 0.005);
-//            radius  0.025;
-//            //name  sphere.stl; // Optional name if surface triSurfaceMesh
-//        }
+//        surface searchableSphere;
+//        centre  (0.05 0.05 0.005);
+//        radius  0.025;
+//        //name  sphere.stl; // Optional name if surface triSurfaceMesh
 //    }
 //
 //
@@ -413,7 +416,7 @@ actions
         name    c0;
         type    cellSet;
         action  new;
-        source labelToCell;
+        source  labelToCell;
         sourceInfo
         {
             value (12 13 56);
diff --git a/applications/utilities/mesh/manipulation/transformPoints/transformPoints.C b/applications/utilities/mesh/manipulation/transformPoints/transformPoints.C
index aa946b1e562828304c34ad53645d95c4600853ce..21d4770b4998799be5b129001e8f80505d7ca6ee 100644
--- a/applications/utilities/mesh/manipulation/transformPoints/transformPoints.C
+++ b/applications/utilities/mesh/manipulation/transformPoints/transformPoints.C
@@ -308,6 +308,8 @@ int main(int argc, char *argv[])
     Info<< "Writing points into directory " << points.path() << nl << endl;
     points.write();
 
+    Info<< nl << "End" << nl << endl;
+
     return 0;
 }
 
diff --git a/applications/utilities/miscellaneous/foamDebugSwitches/foamDebugSwitches.C b/applications/utilities/miscellaneous/foamDebugSwitches/foamDebugSwitches.C
index 1943b7d631b49ce7503f7429c5238b96e2e5ece1..1b5670fc83cd767d22cf7b4dec189333e8b11c3f 100644
--- a/applications/utilities/miscellaneous/foamDebugSwitches/foamDebugSwitches.C
+++ b/applications/utilities/miscellaneous/foamDebugSwitches/foamDebugSwitches.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -158,9 +158,7 @@ int main(int argc, char *argv[])
         Info<< "OptimisationSwitches: " << currOpt << endl;
     }
 
-
-
-    Info<< "done" << endl;
+    Info<< nl << "End" << nl << endl;
 
     return 0;
 }
diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C
index b11a5c9c68544ed092816953b1c3a032cd8382ee..1b747f5498ba08e54d211649ba3a6f2b1dfe8752 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C
+++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C
@@ -429,7 +429,7 @@ int main(int argc, char *argv[])
     mkDir(fvPath);
 
 
-    // mesh wrapper; does subsetting and decomposition
+    // Mesh wrapper; does subsetting and decomposition
     vtkMesh vMesh(mesh, cellSetName);
 
 
@@ -601,6 +601,53 @@ int main(int argc, char *argv[])
               + vtf.size();
 
 
+        // Construct dimensioned fields
+        PtrList<volScalarField::DimensionedInternalField> dsf;
+        PtrList<volVectorField::DimensionedInternalField> dvf;
+        PtrList<volSphericalTensorField::DimensionedInternalField> dSpheretf;
+        PtrList<volSymmTensorField::DimensionedInternalField> dSymmtf;
+        PtrList<volTensorField::DimensionedInternalField> dtf;
+
+        if (!specifiedFields || selectedFields.size())
+        {
+            readFields(vMesh, vMesh.baseMesh(), objects, selectedFields, dsf);
+            print("    volScalarFields::Internal          :", Info, dsf);
+
+            readFields(vMesh, vMesh.baseMesh(), objects, selectedFields, dvf);
+            print("    volVectorFields::Internal          :", Info, dvf);
+
+            readFields
+            (
+                vMesh,
+                vMesh.baseMesh(),
+                objects,
+                selectedFields,
+                dSpheretf
+            );
+            print("    volSphericalTensorFields::Internal :", Info, dSpheretf);
+
+            readFields
+            (
+                vMesh,
+                vMesh.baseMesh(),
+                objects,
+                selectedFields,
+                dSymmtf
+            );
+            print("    volSymmTensorFields::Internal      :", Info, dSymmtf);
+
+            readFields(vMesh, vMesh.baseMesh(), objects, selectedFields, dtf);
+            print("    volTensorFields::Internal          :", Info, dtf);
+        }
+
+        label nDimFields =
+                dsf.size()
+              + dvf.size()
+              + dSpheretf.size()
+              + dSymmtf.size()
+              + dtf.size();
+
+
         // Construct pointMesh only if nessecary since constructs edge
         // addressing (expensive on polyhedral meshes)
         if (noPointValues)
@@ -701,7 +748,7 @@ int main(int argc, char *argv[])
             (
                 writer.os(),
                 vMesh.nFieldCells(),
-                1+nVolFields
+                1 + nVolFields + nDimFields
             );
 
             // Write cellID field
@@ -714,13 +761,20 @@ int main(int argc, char *argv[])
             writer.write(vSymmtf);
             writer.write(vtf);
 
+            // Write dimensionedFields
+            writer.write<scalar, volMesh>(dsf);
+            writer.write<vector, volMesh>(dvf);
+            writer.write<sphericalTensor, volMesh>(dSpheretf);
+            writer.write<symmTensor, volMesh>(dSymmtf);
+            writer.write<tensor, volMesh>(dtf);
+
             if (!noPointValues)
             {
                 writeFuns::writePointDataHeader
                 (
                     writer.os(),
                     vMesh.nFieldPoints(),
-                    nVolFields+nPointFields
+                    nVolFields + nDimFields + nPointFields
                 );
 
                 // pointFields
@@ -737,6 +791,12 @@ int main(int argc, char *argv[])
                 writer.write(pInterp, vSpheretf);
                 writer.write(pInterp, vSymmtf);
                 writer.write(pInterp, vtf);
+
+                writer.write<scalar, volMesh>(pInterp, dsf);
+                writer.write<vector, volMesh>(pInterp, dvf);
+                writer.write<sphericalTensor, volMesh>(pInterp, dSpheretf);
+                writer.write<symmTensor, volMesh>(pInterp, dSymmtf);
+                writer.write<tensor, volMesh>(pInterp, dtf);
             }
         }
 
diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/internalWriter.H b/applications/utilities/postProcessing/dataConversion/foamToVTK/internalWriter.H
index 9c456f843c7920d70d92d02aebe6027bbdac94c3..fa805c37b7cdbc5b6cf45b0fc6ed953694e93b60 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToVTK/internalWriter.H
+++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/internalWriter.H
@@ -94,6 +94,13 @@ public:
             const PtrList<GeometricField<Type, PatchField, GeoMesh> >&
         );
 
+        //- Write generic internal fields
+        template<class Type, class GeoMesh>
+        void write
+        (
+            const PtrList<DimensionedField<Type, volMesh> >& flds
+        );
+
         //- Interpolate and write volFields
         template<class Type>
         void write
@@ -101,6 +108,14 @@ public:
             const volPointInterpolation&,
             const PtrList<GeometricField<Type, fvPatchField, volMesh> >&
         );
+
+        //- Interpolate and internal fields
+        template<class Type, class GeoMesh>
+        void write
+        (
+            const volPointInterpolation&,
+            const PtrList<DimensionedField<Type, volMesh> >&
+        );
 };
 
 
diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/internalWriterTemplates.C b/applications/utilities/postProcessing/dataConversion/foamToVTK/internalWriterTemplates.C
index 853caca75bad51e58b8c369efc7454e40f33c45f..797f2d5661bcf36e85d073ab57a1554011a69aab 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToVTK/internalWriterTemplates.C
+++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/internalWriterTemplates.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-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -41,6 +41,19 @@ void Foam::internalWriter::write
 }
 
 
+template<class Type, class GeoMesh>
+void Foam::internalWriter::write
+(
+    const PtrList<DimensionedField<Type, volMesh> >& flds
+)
+{
+    forAll(flds, i)
+    {
+        writeFuns::write(os_, binary_, flds[i], vMesh_);
+    }
+}
+
+
 template<class Type>
 void Foam::internalWriter::write
 (
@@ -62,4 +75,25 @@ void Foam::internalWriter::write
 }
 
 
+template<class Type, class GeoMesh>
+void Foam::internalWriter::write
+(
+    const volPointInterpolation& pInterp,
+    const PtrList<DimensionedField<Type, volMesh> >& flds
+)
+{
+    forAll(flds, i)
+    {
+        writeFuns::write
+        (
+            os_,
+            binary_,
+            flds[i],
+            pInterp.interpolate(flds[i])(),
+            vMesh_
+        );
+    }
+}
+
+
 // ************************************************************************* //
diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/writeFuns.H b/applications/utilities/postProcessing/dataConversion/foamToVTK/writeFuns.H
index 11f18b3d764cab397493cb5e5a18e4a6514f1529..56df1d5237d3690611c62c9046b76a3fc8375390 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToVTK/writeFuns.H
+++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/writeFuns.H
@@ -113,7 +113,7 @@ public:
     (
         std::ostream&,
         const bool binary,
-        const GeometricField<Type, fvPatchField, volMesh>&,
+        const DimensionedField<Type, volMesh>&,
         const vtkMesh&
     );
 
@@ -135,8 +135,8 @@ public:
     (
         std::ostream&,
         const bool binary,
-        const GeometricField<Type, fvPatchField, volMesh>&,
-        const GeometricField<Type, pointPatchField, pointMesh>&,
+        const DimensionedField<Type, volMesh>&,
+        const DimensionedField<Type, pointMesh>&,
         const vtkMesh&
     );
 
@@ -150,6 +150,16 @@ public:
         const vtkMesh&
     );
 
+    //- Write generic dimensioned internal fields
+    template<class Type>
+    static void write
+    (
+        std::ostream&,
+        const bool binary,
+        const PtrList<DimensionedField<Type, volMesh> >&,
+        const vtkMesh&
+    );
+
     //- Interpolate and write volFields
     template<class Type>
     static void write
diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/writeFunsTemplates.C b/applications/utilities/postProcessing/dataConversion/foamToVTK/writeFunsTemplates.C
index 5fe5d076dd03668b9be15251598d1ba84dae236e..3082da1e6199bc454e75c848049c937e1724d613 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToVTK/writeFunsTemplates.C
+++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/writeFunsTemplates.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-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -64,7 +64,7 @@ void Foam::writeFuns::write
 (
     std::ostream& os,
     const bool binary,
-    const GeometricField<Type, fvPatchField, volMesh>& vvf,
+    const DimensionedField<Type, volMesh>& vvf,
     const vtkMesh& vMesh
 )
 {
@@ -79,7 +79,7 @@ void Foam::writeFuns::write
 
     DynamicList<floatScalar> fField(pTraits<Type>::nComponents*nValues);
 
-    insert(vvf.internalField(), fField);
+    insert(vvf, fField);
 
     forAll(superCells, superCellI)
     {
@@ -128,8 +128,8 @@ void Foam::writeFuns::write
 (
     std::ostream& os,
     const bool binary,
-    const GeometricField<Type, fvPatchField, volMesh>& vvf,
-    const GeometricField<Type, pointPatchField, pointMesh>& pvf,
+    const DimensionedField<Type, volMesh>& vvf,
+    const DimensionedField<Type, pointMesh>& pvf,
     const vtkMesh& vMesh
 )
 {
@@ -164,6 +164,22 @@ void Foam::writeFuns::write
     const PtrList<GeometricField<Type, PatchField, GeoMesh> >& flds,
     const vtkMesh& vMesh
 )
+{
+    forAll(flds, i)
+    {
+        write(os, binary, flds[i].dimensionedInternalField(), vMesh);
+    }
+}
+
+
+template<class Type>
+void Foam::writeFuns::write
+(
+    std::ostream& os,
+    const bool binary,
+    const PtrList<DimensionedField<Type, volMesh> >& flds,
+    const vtkMesh& vMesh
+)
 {
     forAll(flds, i)
     {
diff --git a/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4Foam.H b/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4Foam.H
index 0bd35573e1d9a0b14caf09034c4d618742366f41..78e4496f176dfc6692e7aa0f1143dd25563a0c39 100644
--- a/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4Foam.H
+++ b/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4Foam.H
@@ -390,15 +390,6 @@ class vtkPV4Foam
             //- Reduce memory footprint after conversion
             void reduceMemory();
 
-            //- Volume fields
-            void updateVolFields(vtkMultiBlockDataSet*);
-
-            //- Point fields
-            void updatePointFields(vtkMultiBlockDataSet*);
-
-            //- Lagrangian fields
-            void updateLagrangianFields(vtkMultiBlockDataSet*);
-
 
         // Mesh conversion functions
 
@@ -492,6 +483,16 @@ class vtkPV4Foam
 
         // Convert OpenFOAM fields
 
+            //- Volume field - all types
+            template<class Type>
+            void convertVolField
+            (
+                const PtrList<PrimitivePatchInterpolation<primitivePatch> >&,
+                const GeometricField<Type, fvPatchField, volMesh>&,
+                const bool interpFields,
+                vtkMultiBlockDataSet* output
+            );
+
             //- Volume fields - all types
             template<class Type>
             void convertVolFields
@@ -503,6 +504,17 @@ class vtkPV4Foam
                 vtkMultiBlockDataSet* output
             );
 
+            //- Volume internal fields (DimensionedField)- all types
+            template<class Type>
+            void convertDimFields
+            (
+                const fvMesh&,
+                const PtrList<PrimitivePatchInterpolation<primitivePatch> >&,
+                const IOobjectList&,
+                const bool interpFields,
+                vtkMultiBlockDataSet* output
+            );
+
             //- Volume field - all selected parts
             template<class Type>
             void convertVolFieldBlock
diff --git a/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamFields.C b/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamFields.C
index 127f49d30614c8b62fa288b40c5a1cc78c3b2cbe..ec28f4dfe85d98de20951c62774d82177eca3e4d 100644
--- a/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamFields.C
+++ b/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamFields.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -143,6 +143,27 @@ void Foam::vtkPV4Foam::convertVolFields
         mesh, ppInterpList, objects, interpFields, output
     );
 
+    convertDimFields<scalar>
+    (
+        mesh, ppInterpList, objects, interpFields, output
+    );
+    convertDimFields<vector>
+    (
+        mesh, ppInterpList, objects, interpFields, output
+    );
+    convertDimFields<sphericalTensor>
+    (
+        mesh, ppInterpList, objects, interpFields, output
+    );
+    convertDimFields<symmTensor>
+    (
+        mesh, ppInterpList, objects, interpFields, output
+    );
+    convertDimFields<tensor>
+    (
+        mesh, ppInterpList, objects, interpFields, output
+    );
+
     if (debug)
     {
         Info<< "<end> Foam::vtkPV4Foam::convertVolFields" << endl;
diff --git a/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamUpdateInfoFields.H b/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamUpdateInfoFields.H
index b191e1c52bc5e969e87ea260f3ab3f1c69e649eb..784432ea4b1d1801d8500ffb57826d86902242c3 100644
--- a/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamUpdateInfoFields.H
+++ b/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamUpdateInfoFields.H
@@ -99,6 +99,34 @@ void Foam::vtkPV4Foam::updateInfoFields
         objects
     );
 
+    //- Add dimensioned fields to GUI
+    addToSelection<DimensionedField<scalar, meshType> >
+    (
+        select,
+        objects
+    );
+    addToSelection<DimensionedField<vector, meshType> >
+    (
+        select,
+        objects
+    );
+    addToSelection<DimensionedField<sphericalTensor, meshType> >
+    (
+        select,
+        objects
+    );
+    addToSelection<DimensionedField<symmTensor, meshType> >
+    (
+        select,
+        objects
+    );
+    addToSelection<DimensionedField<tensor, meshType> >
+    (
+        select,
+        objects
+    );
+
+
     // restore the enabled selections
     setSelectedArrayEntries(select, enabledEntries);
 
diff --git a/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamVolFields.H b/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamVolFields.H
index f4757a613732a9c38d14f46c9b18b21bfa28c6ab..fbc51aeaa1c159759f83dc9d28a697126d18705c 100644
--- a/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamVolFields.H
+++ b/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamVolFields.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -34,6 +34,7 @@ InClass
 #include "wallPolyPatch.H"
 #include "faceSet.H"
 #include "volPointInterpolation.H"
+#include "zeroGradientFvPatchField.H"
 
 #include "vtkPV4FoamFaceField.H"
 #include "vtkPV4FoamPatchField.H"
@@ -43,239 +44,315 @@ InClass
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 template<class Type>
-void Foam::vtkPV4Foam::convertVolFields
+void Foam::vtkPV4Foam::convertVolField
 (
-    const fvMesh& mesh,
     const PtrList<PrimitivePatchInterpolation<primitivePatch> >& ppInterpList,
-    const IOobjectList& objects,
+    const GeometricField<Type, fvPatchField, volMesh>& tf,
     const bool interpFields,
     vtkMultiBlockDataSet* output
 )
 {
+    const fvMesh& mesh = tf.mesh();
     const polyBoundaryMesh& patches = mesh.boundaryMesh();
 
-    forAllConstIter(IOobjectList, objects, iter)
+    // Interpolated field (demand driven)
+    autoPtr<GeometricField<Type, pointPatchField, pointMesh> > ptfPtr;
+    if (interpFields)
     {
-        // restrict to GeometricField<Type, ...>
-        if
-        (
-            iter()->headerClassName()
-         != GeometricField<Type, fvPatchField, volMesh>::typeName
-        )
+        if (debug)
         {
-            continue;
+            Info<< "convertVolFieldBlock interpolating:" << tf.name()
+                << endl;
         }
 
-        // Load field
-        GeometricField<Type, fvPatchField, volMesh> tf
+        ptfPtr.reset
         (
-            *iter(),
-            mesh
+            volPointInterpolation::New(mesh).interpolate(tf).ptr()
         );
-
-        // Interpolated field (demand driven)
-        autoPtr<GeometricField<Type, pointPatchField, pointMesh> > ptfPtr;
-        if (interpFields)
-        {
-            if (debug)
-            {
-                Info<< "convertVolFieldBlock interpolating:" << tf.name()
-                    << endl;
-            }
-
-            ptfPtr.reset
-            (
-                volPointInterpolation::New(tf.mesh()).interpolate(tf).ptr()
-            );
-        }
+    }
 
 
-        // Convert activated internalMesh regions
-        convertVolFieldBlock
-        (
-            tf,
-            ptfPtr,
-            output,
-            arrayRangeVolume_,
-            regionPolyDecomp_
-        );
-
-        // Convert activated cellZones
-        convertVolFieldBlock
-        (
-            tf,
-            ptfPtr,
-            output,
-            arrayRangeCellZones_,
-            zonePolyDecomp_
-        );
+    // Convert activated internalMesh regions
+    convertVolFieldBlock
+    (
+        tf,
+        ptfPtr,
+        output,
+        arrayRangeVolume_,
+        regionPolyDecomp_
+    );
+
+    // Convert activated cellZones
+    convertVolFieldBlock
+    (
+        tf,
+        ptfPtr,
+        output,
+        arrayRangeCellZones_,
+        zonePolyDecomp_
+    );
+
+    // Convert activated cellSets
+    convertVolFieldBlock
+    (
+        tf,
+        ptfPtr,
+        output,
+        arrayRangeCellSets_,
+        csetPolyDecomp_
+    );
+
+
+    //
+    // Convert patches - if activated
+    //
+    for
+    (
+        int partId = arrayRangePatches_.start();
+        partId < arrayRangePatches_.end();
+        ++partId
+    )
+    {
+        const word patchName = getPartName(partId);
+        const label datasetNo = partDataset_[partId];
+        const label patchId = patches.findPatchID(patchName);
 
-        // Convert activated cellSets
-        convertVolFieldBlock
-        (
-            tf,
-            ptfPtr,
-            output,
-            arrayRangeCellSets_,
-            csetPolyDecomp_
-        );
+        if (!partStatus_[partId] || datasetNo < 0 || patchId < 0)
+        {
+            continue;
+        }
 
+        const fvPatchField<Type>& ptf = tf.boundaryField()[patchId];
 
-        //
-        // Convert patches - if activated
-        //
-        for
+        if
         (
-            int partId = arrayRangePatches_.start();
-            partId < arrayRangePatches_.end();
-            ++partId
+            isType<emptyFvPatchField<Type> >(ptf)
+         ||
+            (
+                reader_->GetExtrapolatePatches()
+            && !polyPatch::constraintType(patches[patchId].type())
+            )
         )
         {
-            const word patchName = getPartName(partId);
-            const label datasetNo = partDataset_[partId];
-            const label patchId = patches.findPatchID(patchName);
+            fvPatch p(ptf.patch().patch(), mesh.boundary());
 
-            if (!partStatus_[partId] || datasetNo < 0 || patchId < 0)
-            {
-                continue;
-            }
-
-            const fvPatchField<Type>& ptf = tf.boundaryField()[patchId];
-
-            if
+            tmp<Field<Type> > tpptf
             (
-                isType<emptyFvPatchField<Type> >(ptf)
-             ||
-                (
-                    reader_->GetExtrapolatePatches()
-                && !polyPatch::constraintType(patches[patchId].type())
-                )
-            )
-            {
-                fvPatch p(ptf.patch().patch(), tf.mesh().boundary());
+                fvPatchField<Type>(p, tf).patchInternalField()
+            );
 
-                tmp<Field<Type> > tpptf
-                (
-                    fvPatchField<Type>(p, tf).patchInternalField()
-                );
+            convertPatchField
+            (
+                tf.name(),
+                tpptf(),
+                output,
+                arrayRangePatches_,
+                datasetNo
+            );
 
-                convertPatchField
+            if (interpFields)
+            {
+                convertPatchPointField
                 (
                     tf.name(),
-                    tpptf(),
+                    ppInterpList[patchId].faceToPointInterpolate(tpptf)(),
                     output,
                     arrayRangePatches_,
                     datasetNo
                 );
-
-                if (interpFields)
-                {
-                    convertPatchPointField
-                    (
-                        tf.name(),
-                        ppInterpList[patchId].faceToPointInterpolate(tpptf)(),
-                        output,
-                        arrayRangePatches_,
-                        datasetNo
-                    );
-                }
             }
-            else
+        }
+        else
+        {
+            convertPatchField
+            (
+                tf.name(),
+                ptf,
+                output,
+                arrayRangePatches_,
+                datasetNo
+            );
+
+            if (interpFields)
             {
-                convertPatchField
+                convertPatchPointField
                 (
                     tf.name(),
-                    ptf,
+                    ppInterpList[patchId].faceToPointInterpolate(ptf)(),
                     output,
                     arrayRangePatches_,
                     datasetNo
                 );
-
-                if (interpFields)
-                {
-                    convertPatchPointField
-                    (
-                        tf.name(),
-                        ppInterpList[patchId].faceToPointInterpolate(ptf)(),
-                        output,
-                        arrayRangePatches_,
-                        datasetNo
-                    );
-                }
             }
         }
+    }
+
+    //
+    // Convert face zones - if activated
+    //
+    for
+    (
+        int partId = arrayRangeFaceZones_.start();
+        partId < arrayRangeFaceZones_.end();
+        ++partId
+    )
+    {
+        const word zoneName = getPartName(partId);
+        const label datasetNo = partDataset_[partId];
+
+        if (!partStatus_[partId] || datasetNo < 0)
+        {
+            continue;
+        }
+
+        const faceZoneMesh& zMesh = mesh.faceZones();
+        const label zoneId = zMesh.findZoneID(zoneName);
 
-        //
-        // Convert face zones - if activated
-        //
-        for
+        if (zoneId < 0)
+        {
+            continue;
+        }
+
+        convertFaceField
         (
-            int partId = arrayRangeFaceZones_.start();
-            partId < arrayRangeFaceZones_.end();
-            ++partId
-        )
+            tf,
+            output,
+            arrayRangeFaceZones_,
+            datasetNo,
+            mesh,
+            zMesh[zoneId]
+        );
+
+        // TODO: points
+    }
+
+    //
+    // Convert face sets - if activated
+    //
+    for
+    (
+        int partId = arrayRangeFaceSets_.start();
+        partId < arrayRangeFaceSets_.end();
+        ++partId
+    )
+    {
+        const word selectName = getPartName(partId);
+        const label datasetNo = partDataset_[partId];
+
+        if (!partStatus_[partId] || datasetNo < 0)
         {
-            const word zoneName = getPartName(partId);
-            const label datasetNo = partDataset_[partId];
+            continue;
+        }
 
-            if (!partStatus_[partId] || datasetNo < 0)
-            {
-                continue;
-            }
+        const faceSet fSet(mesh, selectName);
 
-            const faceZoneMesh& zMesh = mesh.faceZones();
-            const label zoneId = zMesh.findZoneID(zoneName);
+        convertFaceField
+        (
+            tf,
+            output,
+            arrayRangeFaceSets_,
+            datasetNo,
+            mesh,
+            fSet.toc()
+        );
 
-            if (zoneId < 0)
-            {
-                continue;
-            }
+        // TODO: points
+    }
+}
 
-            convertFaceField
-            (
-                tf,
-                output,
-                arrayRangeFaceZones_,
-                datasetNo,
-                mesh,
-                zMesh[zoneId]
-            );
 
-            // TODO: points
+template<class Type>
+void Foam::vtkPV4Foam::convertVolFields
+(
+    const fvMesh& mesh,
+    const PtrList<PrimitivePatchInterpolation<primitivePatch> >& ppInterpList,
+    const IOobjectList& objects,
+    const bool interpFields,
+    vtkMultiBlockDataSet* output
+)
+{
+    forAllConstIter(IOobjectList, objects, iter)
+    {
+        // restrict to GeometricField<Type, ...>
+        if
+        (
+            iter()->headerClassName()
+         != GeometricField<Type, fvPatchField, volMesh>::typeName
+        )
+        {
+            continue;
         }
 
-        //
-        // Convert face sets - if activated
-        //
-        for
+        // Load field
+        GeometricField<Type, fvPatchField, volMesh> tf
+        (
+            *iter(),
+            mesh
+        );
+
+        // Convert
+        convertVolField(ppInterpList, tf, interpFields, output);
+    }
+}
+
+
+template<class Type>
+void Foam::vtkPV4Foam::convertDimFields
+(
+    const fvMesh& mesh,
+    const PtrList<PrimitivePatchInterpolation<primitivePatch> >& ppInterpList,
+    const IOobjectList& objects,
+    const bool interpFields,
+    vtkMultiBlockDataSet* output
+)
+{
+    forAllConstIter(IOobjectList, objects, iter)
+    {
+        // restrict to DimensionedField<Type, ...>
+        if
         (
-            int partId = arrayRangeFaceSets_.start();
-            partId < arrayRangeFaceSets_.end();
-            ++partId
+            iter()->headerClassName()
+         != DimensionedField<Type, volMesh>::typeName
         )
         {
-            const word selectName = getPartName(partId);
-            const label datasetNo = partDataset_[partId];
+            continue;
+        }
 
-            if (!partStatus_[partId] || datasetNo < 0)
-            {
-                continue;
-            }
+        // Load field
+        DimensionedField<Type, volMesh> dimFld(*iter(), mesh);
+
+
+        // Construct volField with zero-gradient patch fields
 
-            const faceSet fSet(mesh, selectName);
+        IOobject io(dimFld);
+        io.readOpt() = IOobject::NO_READ;
 
-            convertFaceField
+        PtrList<fvPatchField<Type> > patchFields(mesh.boundary().size());
+        forAll(patchFields, patchI)
+        {
+            patchFields.set
             (
-                tf,
-                output,
-                arrayRangeFaceSets_,
-                datasetNo,
-                mesh,
-                fSet.toc()
+                patchI,
+                fvPatchField<Type>::New
+                (
+                    zeroGradientFvPatchField<scalar>::typeName,
+                    mesh.boundary()[patchI],
+                    dimFld
+                )
             );
-
-            // TODO: points
         }
+
+        GeometricField<Type, fvPatchField, volMesh> volFld
+        (
+            io,
+            dimFld.mesh(),
+            dimFld.dimensions(),
+            dimFld,
+            patchFields
+        );
+        volFld.correctBoundaryConditions();
+
+        convertVolField(ppInterpList, volFld, interpFields, output);
     }
 }
 
diff --git a/applications/utilities/postProcessing/lagrangian/particleTracks/particleTracks.C b/applications/utilities/postProcessing/lagrangian/particleTracks/particleTracks.C
index 4988fc969f871553df55c3e3f5c36ab1ba092845..83f9bc2ebb92a5c33e650e7dd43f189ee41856a5 100644
--- a/applications/utilities/postProcessing/lagrangian/particleTracks/particleTracks.C
+++ b/applications/utilities/postProcessing/lagrangian/particleTracks/particleTracks.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -247,6 +247,8 @@ int main(int argc, char *argv[])
         );
     }
 
+    Info<< "End\n" << endl;
+
     return 0;
 }
 
diff --git a/applications/utilities/postProcessing/lagrangian/steadyParticleTracks/steadyParticleTracks.C b/applications/utilities/postProcessing/lagrangian/steadyParticleTracks/steadyParticleTracks.C
index 4d2ab943acab92eacfedb38d57d1bb1c0e472c28..2941df5d5a0c2166bbf55c01dbbb0e5893e67d33 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-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -331,7 +331,7 @@ int main(int argc, char *argv[])
         Info<< endl;
     }
 
-    Info<< "\ndone" << endl;
+    Info<< "End" << nl << endl;
 
     return 0;
 }
diff --git a/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C b/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C
index 9f2f03dc54f2a38e151087fdf0a82a35a4737415..6882b0f7eebc9e023177274164acadb9fbf1904a 100644
--- a/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C
+++ b/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C
@@ -148,7 +148,11 @@ void calc
     functionObjectList& fol
 )
 {
-    if (args.optionFound("noFlow"))
+    if (args.optionFound("noRead"))
+    {
+        fol.execute(true);
+    }
+    else if (args.optionFound("noFlow"))
     {
         Info<< "    Operating in no-flow mode; no models will be loaded."
             << " All vol, surface and point fields will be loaded." << endl;
diff --git a/applications/utilities/postProcessing/miscellaneous/ptot/ptot.C b/applications/utilities/postProcessing/miscellaneous/ptot/ptot.C
index 41ca2101798370bdb5957412309acb2a9725b529..3f3213cd3e46bf13c6daf2961788651a0a1a2549 100644
--- a/applications/utilities/postProcessing/miscellaneous/ptot/ptot.C
+++ b/applications/utilities/postProcessing/miscellaneous/ptot/ptot.C
@@ -138,6 +138,8 @@ int main(int argc, char *argv[])
         Info<< endl;
     }
 
+    Info<< "End" << nl << endl;
+
     return 0;
 }
 
diff --git a/applications/utilities/postProcessing/miscellaneous/wdot/wdot.C b/applications/utilities/postProcessing/miscellaneous/wdot/wdot.C
index e670d9150f9a9b681c784192af0a19c86dc9e306..873bb53a72ce1cdb2fe5710de453e94da21e0d12 100644
--- a/applications/utilities/postProcessing/miscellaneous/wdot/wdot.C
+++ b/applications/utilities/postProcessing/miscellaneous/wdot/wdot.C
@@ -49,6 +49,8 @@ int main(int argc, char *argv[])
     {
         runTime.setTime(timeDirs[timeI], timeI);
 
+        Info<< "Time = " << runTime.timeName() << endl;
+
         mesh.readUpdate();
 
         volScalarField mgb
@@ -114,8 +116,12 @@ int main(int argc, char *argv[])
         );
 
         wdot.write();
+
+        Info<< endl;
     }
 
+    Info<< "End" << nl << endl;
+
     return 0;
 }
 
diff --git a/applications/utilities/postProcessing/scalarField/pPrime2/pPrime2.C b/applications/utilities/postProcessing/scalarField/pPrime2/pPrime2.C
index 7848679a25bac75289980a2776971957e883129d..f03ed13570035c3016eb024c7400406c71c6e66e 100644
--- a/applications/utilities/postProcessing/scalarField/pPrime2/pPrime2.C
+++ b/applications/utilities/postProcessing/scalarField/pPrime2/pPrime2.C
@@ -105,6 +105,8 @@ int main(int argc, char *argv[])
         Info<< endl;
     }
 
+    Info<< nl << "End" << nl << endl;
+
     return 0;
 }
 
diff --git a/applications/utilities/postProcessing/velocityField/Mach/Mach.C b/applications/utilities/postProcessing/velocityField/Mach/Mach.C
index 39136a389b2547360a721adffad3f6b5e4a6da4d..a65eb0a07ccb22e0b92c206ecf0d40128a9b6845 100644
--- a/applications/utilities/postProcessing/velocityField/Mach/Mach.C
+++ b/applications/utilities/postProcessing/velocityField/Mach/Mach.C
@@ -144,7 +144,7 @@ void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh)
         Info<< "    Missing U or T" << endl;
     }
 
-    Info<< "\nEnd\n" << endl;
+    Info<< nl << "End" << nl << endl;
 }
 
 
diff --git a/applications/utilities/postProcessing/velocityField/Pe/Pe.C b/applications/utilities/postProcessing/velocityField/Pe/Pe.C
index 999e287d946bd46586466cb2f259f2b8603e6945..9c115c078d21c4b7a97e7c199eeb0fa06eaf2eda 100644
--- a/applications/utilities/postProcessing/velocityField/Pe/Pe.C
+++ b/applications/utilities/postProcessing/velocityField/Pe/Pe.C
@@ -274,6 +274,8 @@ void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh)
     {
         Info<< "    No phi" << endl;
     }
+
+    Info<< "End" << nl << endl;
 }
 
 
diff --git a/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C b/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C
index d9ec3ef4630b5781f0865211fa4262c913c7aba9..94c7f53f840a00cb15a964bf0a96b66089ba0a84 100644
--- a/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C
+++ b/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -33,6 +33,10 @@ Description
     the thickness coefficient supplied via the option -Cbl.  If both options
     are provided -ybl is used.
 
+    Compressible modes is automatically selected based on the existence of the
+    "thermophysicalProperties" dictionary required to construct the
+    thermodynamics package.
+
 \*---------------------------------------------------------------------------*/
 
 #include "fvCFD.H"
@@ -331,11 +335,6 @@ int main(int argc, char *argv[])
         "scalar",
         "boundary-layer thickness as Cbl * mean distance to wall"
     );
-    argList::addBoolOption
-    (
-        "compressible",
-        "apply to compressible case"
-    );
 
     #include "setRootCase.H"
 
@@ -360,8 +359,6 @@ int main(int argc, char *argv[])
     #include "createNamedMesh.H"
     #include "createFields.H"
 
-    const bool compressible = args.optionFound("compressible");
-
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
     // Modify velocity by applying a 1/7th power law boundary-layer
@@ -384,7 +381,15 @@ int main(int argc, char *argv[])
     U.write();
 
 
-    if (compressible)
+    if
+    (
+        IOobject
+        (
+            basicThermo::dictName,
+            runTime.constant(),
+            mesh
+        ).headerOk()
+    )
     {
         calcCompressible(mesh, mask, U, y, ybl);
     }
diff --git a/applications/utilities/preProcessing/boxTurb/boxTurb.C b/applications/utilities/preProcessing/boxTurb/boxTurb.C
index 55a35322abad886d8ba68dea721168ca2027fe8e..4ed0356e1cc1976078d4d7c8c7a2931c1ff49322 100644
--- a/applications/utilities/preProcessing/boxTurb/boxTurb.C
+++ b/applications/utilities/preProcessing/boxTurb/boxTurb.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -74,7 +74,7 @@ int main(int argc, char *argv[])
         runTime.graphFormat()
     );
 
-    Info<< "end" << endl;
+    Info<< "End" << nl << endl;
 
     return 0;
 }
diff --git a/applications/utilities/preProcessing/changeDictionary/changeDictionary.C b/applications/utilities/preProcessing/changeDictionary/changeDictionary.C
index 98906f927d1a4d16b1b08757bb6e6dc4fe536a36..849ef9e7792363740e051c242b8b90074f95cbfa 100644
--- a/applications/utilities/preProcessing/changeDictionary/changeDictionary.C
+++ b/applications/utilities/preProcessing/changeDictionary/changeDictionary.C
@@ -612,41 +612,51 @@ int main(int argc, char *argv[])
         }
         else
         {
-            // Read dictionary. (disable class type checking so we can load
-            // field)
+            // Read dictionary
+            // Note: disable class type checking so we can load field
             Info<< "Loading dictionary " << fieldName << endl;
             const word oldTypeName = IOdictionary::typeName;
             const_cast<word&>(IOdictionary::typeName) = word::null;
 
-            IOdictionary fieldDict
+            IOobject fieldHeader
             (
-                IOobject
-                (
-                    fieldName,
-                    instance,
-                    mesh,
-                    IOobject::MUST_READ_IF_MODIFIED,
-                    IOobject::NO_WRITE,
-                    false
-                )
+                fieldName,
+                instance,
+                mesh,
+                IOobject::MUST_READ_IF_MODIFIED,
+                IOobject::NO_WRITE,
+                false
             );
 
-            const_cast<word&>(IOdictionary::typeName) = oldTypeName;
-            // Fake type back to what was in field
-            const_cast<word&>(fieldDict.type()) = fieldDict.headerClassName();
+            if (fieldHeader.headerOk())
+            {
+                IOdictionary fieldDict(fieldHeader);
 
-            Info<< "Loaded dictionary " << fieldName
-                << " with entries " << fieldDict.toc() << endl;
+                const_cast<word&>(IOdictionary::typeName) = oldTypeName;
 
-            // Get the replacement dictionary for the field
-            const dictionary& replaceDict = fieldIter().dict();
-            Info<< "Merging entries from " << replaceDict.toc() << endl;
+                // Fake type back to what was in field
+                const_cast<word&>(fieldDict.type()) =
+                    fieldDict.headerClassName();
 
-            // Merge the replacements in
-            merge(fieldDict, replaceDict, literalRE, patchGroups);
+                Info<< "Loaded dictionary " << fieldName
+                    << " with entries " << fieldDict.toc() << endl;
+
+                // Get the replacement dictionary for the field
+                const dictionary& replaceDict = fieldIter().dict();
+                Info<< "Merging entries from " << replaceDict.toc() << endl;
 
-            Info<< "Writing modified fieldDict " << fieldName << endl;
-            fieldDict.regIOobject::write();
+                // Merge the replacements in
+                merge(fieldDict, replaceDict, literalRE, patchGroups);
+
+                Info<< "Writing modified fieldDict " << fieldName << endl;
+                fieldDict.regIOobject::write();
+            }
+            else
+            {
+                WarningIn(args.executable())
+                    << "Requested field to change " << fieldName
+                    << " does not exist in " << fieldHeader.path() << endl;
+            }
         }
     }
 
diff --git a/applications/utilities/preProcessing/engineSwirl/engineSwirl.C b/applications/utilities/preProcessing/engineSwirl/engineSwirl.C
index 43e86814c39bb039d56185b8db3cf16d0ee01ac5..4652cb2afd9c5f6a54b43dc10e32c757d688b592 100644
--- a/applications/utilities/preProcessing/engineSwirl/engineSwirl.C
+++ b/applications/utilities/preProcessing/engineSwirl/engineSwirl.C
@@ -72,7 +72,7 @@ int main(int argc, char *argv[])
 
     U.write();
 
-    Info<< "\n end\n";
+    Info<< nl << "End" << nl << endl;
 
     return 0;
 }
diff --git a/applications/utilities/surface/surfaceBooleanFeatures/CGAL3DKernel.H b/applications/utilities/surface/surfaceBooleanFeatures/CGAL3DKernel.H
index e753060ce0f161ee68bdc4e2c5fd29eb53ada8ea..7fda691d056ad88b3ec156aadf77217e4e461126 100644
--- a/applications/utilities/surface/surfaceBooleanFeatures/CGAL3DKernel.H
+++ b/applications/utilities/surface/surfaceBooleanFeatures/CGAL3DKernel.H
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2015 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
+     \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
diff --git a/applications/utilities/surface/surfaceBooleanFeatures/CGALIndexedPolyhedron.H b/applications/utilities/surface/surfaceBooleanFeatures/CGALIndexedPolyhedron.H
index 0eba1bee2f3511207ae228de722e73f686e9c78b..e17039cd03407bad863e3ff2ad513ebbf46d20da 100644
--- a/applications/utilities/surface/surfaceBooleanFeatures/CGALIndexedPolyhedron.H
+++ b/applications/utilities/surface/surfaceBooleanFeatures/CGALIndexedPolyhedron.H
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2015 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
+     \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
diff --git a/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReader.C b/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReader.C
index 462b9a6f05ab278d1cc76188cf930b6bb6a94bda..693237a7eafcca9dfa5bdff001c7916f41f1cf0c 100644
--- a/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReader.C
+++ b/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReader.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2015 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
+     \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
diff --git a/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReader.H b/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReader.H
index ef3e88a0ac3ecce27e3e27306807c80754d411df..bf1abc1e2aa4932797d2a58c4a3e68a500cd8b64 100644
--- a/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReader.H
+++ b/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReader.H
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2015 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
+     \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
diff --git a/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReaderTemplates.C b/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReaderTemplates.C
index 53ea3b1b87b5349f578cb7f622121ad1404e0ac6..76a192c10863b859a8b56918b008a5ef105e27bd 100644
--- a/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReaderTemplates.C
+++ b/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReaderTemplates.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2015 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
+     \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
diff --git a/applications/utilities/surface/surfaceBooleanFeatures/surfaceBooleanFeatures.C b/applications/utilities/surface/surfaceBooleanFeatures/surfaceBooleanFeatures.C
index 7c3fa7eeb12ee6fe9c92005cfafc4889e4d898e5..ee587c503c4270f99b7378ddd150c4ae5640c1c3 100644
--- a/applications/utilities/surface/surfaceBooleanFeatures/surfaceBooleanFeatures.C
+++ b/applications/utilities/surface/surfaceBooleanFeatures/surfaceBooleanFeatures.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
+     \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
diff --git a/applications/utilities/surface/surfaceCheck/surfaceCheck.C b/applications/utilities/surface/surfaceCheck/surfaceCheck.C
index 4a2a4a372d4b3a6dec77fef8f30c6454d436fc03..16989e477150fc943b8823dc5f67121cf3d143c3 100644
--- a/applications/utilities/surface/surfaceCheck/surfaceCheck.C
+++ b/applications/utilities/surface/surfaceCheck/surfaceCheck.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
+     \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
diff --git a/applications/utilities/surface/surfaceFeatureConvert/surfaceFeatureConvert.C b/applications/utilities/surface/surfaceFeatureConvert/surfaceFeatureConvert.C
index a28efdf7dbf9f865fc2b1bdf2fb626d6e00f5396..1263b7813a510f27a18c3d728399c6e3952a14cf 100644
--- a/applications/utilities/surface/surfaceFeatureConvert/surfaceFeatureConvert.C
+++ b/applications/utilities/surface/surfaceFeatureConvert/surfaceFeatureConvert.C
@@ -61,7 +61,7 @@ int main(int argc, char *argv[])
     const fileName importName = args[1];
     const fileName exportName = args[2];
 
-    // disable inplace editing
+    // Disable inplace editing
     if (importName == exportName)
     {
         FatalErrorInFunction
@@ -69,7 +69,7 @@ int main(int argc, char *argv[])
             << exit(FatalError);
     }
 
-    // check that reading/writing is supported
+    // Check that reading/writing is supported
     if
     (
         !edgeMesh::canReadType(importName.ext(), true)
diff --git a/applications/utilities/surface/surfaceInflate/surfaceInflate.C b/applications/utilities/surface/surfaceInflate/surfaceInflate.C
index 008e6789a23047546a6b9434f8cf677820638739..aeb9b87d1c42548bd987871ad5cbd394e4bf6a8f 100644
--- a/applications/utilities/surface/surfaceInflate/surfaceInflate.C
+++ b/applications/utilities/surface/surfaceInflate/surfaceInflate.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2015 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
+     \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
diff --git a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/autoPatch.C b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/autoPatch.C
index e8ca9a0125c5906bb12e58053eedab8fd8f2cc2e..5ff45cecc0b1b92b0b300b1e96cf536259ac9e6a 100644
--- a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/autoPatch.C
+++ b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/autoPatch.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2014 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
+     \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
diff --git a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/autoPatch.H b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/autoPatch.H
index 92c376611f3a6792714b4c8f4379a194ff24c5c4..6c27cc1e1003bedbd051ec0de8d3581e5071cc25 100644
--- a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/autoPatch.H
+++ b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/autoPatch.H
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2014 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
+     \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
diff --git a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/cut.C b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/cut.C
index 944c2465557ead274ad210e440cb6d91f32bb0e4..39e3a2e29affe4e5d350f0010869431990a27580 100644
--- a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/cut.C
+++ b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/cut.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2014 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
+     \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
diff --git a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/cut.H b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/cut.H
index fdc7ed1bd7a4c5f00e05fdc010280cf7d71b3450..f794d5e87bda74f0f6bcdb5bf256a1570ecbac3d 100644
--- a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/cut.H
+++ b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/cut.H
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2014 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
+     \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
diff --git a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/searchableSurfaceModifier.C b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/searchableSurfaceModifier.C
index dab502db72d18844bf918d01b24e1ea5bee9e284..d62fb05927eb1f62420f8f73894da37d9ec51e98 100644
--- a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/searchableSurfaceModifier.C
+++ b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/searchableSurfaceModifier.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2014 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
+     \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
diff --git a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/searchableSurfaceModifier.H b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/searchableSurfaceModifier.H
index c53eab8ac0f28c2005ee5517b513b4a2c5ca3e3f..effe81d2a8878d31e3cee1ac4f307059acee0d47 100644
--- a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/searchableSurfaceModifier.H
+++ b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/searchableSurfaceModifier.H
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2014 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
+     \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
diff --git a/applications/utilities/thermophysical/equilibriumCO/equilibriumCO.C b/applications/utilities/thermophysical/equilibriumCO/equilibriumCO.C
index 7af84242b9c3f5490c9187baa8d7eb5ec956dd28..7f7994bdf1ee9254092488033f3bfdc08afcdfd5 100644
--- a/applications/utilities/thermophysical/equilibriumCO/equilibriumCO.C
+++ b/applications/utilities/thermophysical/equilibriumCO/equilibriumCO.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -127,7 +127,7 @@ int main(int argc, char *argv[])
         Info<< "Kc(EQreactions) = " << iter().Kc(P, T) << endl;
     }
 
-    Info<< nl << "end" << endl;
+    Info<< nl << "End" << nl << endl;
 
     return 0;
 }
diff --git a/applications/utilities/thermophysical/equilibriumFlameT/equilibriumFlameT.C b/applications/utilities/thermophysical/equilibriumFlameT/equilibriumFlameT.C
index 4642bde45f519387963b1cb27ec3228533dc2148..424cdc629e63c9c6745bcfa40116ba08eba5e1b4 100644
--- a/applications/utilities/thermophysical/equilibriumFlameT/equilibriumFlameT.C
+++ b/applications/utilities/thermophysical/equilibriumFlameT/equilibriumFlameT.C
@@ -273,7 +273,7 @@ int main(int argc, char *argv[])
     }
     }
 
-    Info<< nl << "end" << endl;
+    Info<< nl << "End" << nl << endl;
 
     return 0;
 }
diff --git a/src/OpenFOAM/db/Time/Time.C b/src/OpenFOAM/db/Time/Time.C
index da9a9807c376d7f5efea7246e151fe60ac4fadf2..c0a867c01f8530bb3b5ebafaab162da0ad9cffca 100644
--- a/src/OpenFOAM/db/Time/Time.C
+++ b/src/OpenFOAM/db/Time/Time.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -891,7 +891,10 @@ bool Foam::Time::run() const
         // ie, when exiting the control loop
         if (!running && timeIndex_ != startTimeIndex_)
         {
-            // Note, end() also calls an indirect start() as required
+            // Ensure functionObjects execute on last time step
+            // (and hence write uptodate functionObjectProperties)
+            functionObjects_.execute();
+
             functionObjects_.end();
         }
     }
diff --git a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C
index 9590eb153c5849beffc8d21c3dd317a5c8862452..35ad1428d0b0e55f2ea46f34afc70f211c1b1db4 100644
--- a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C
+++ b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -207,14 +207,6 @@ bool Foam::OutputFilterFunctionObject<OutputFilter>::end()
 
         ptr_->end();
 
-        // Only write if
-        // - time within timeStart_ and timeEnd_
-        // - it is an output time
-        if (active() && outputControl_.output())
-        {
-            ptr_->write();
-        }
-
         if (!storeFilter_)
         {
             destroyFilter();
diff --git a/src/OpenFOAM/db/objectRegistry/objectRegistry.C b/src/OpenFOAM/db/objectRegistry/objectRegistry.C
index 716717c387c6b247bfc12cc52c74c7f567087895..b592d7f7ee3f08dde7f3f7018fd63628ae22506e 100644
--- a/src/OpenFOAM/db/objectRegistry/objectRegistry.C
+++ b/src/OpenFOAM/db/objectRegistry/objectRegistry.C
@@ -195,21 +195,9 @@ Foam::label Foam::objectRegistry::getEvent() const
         curEvent = 1;
         event_ = 2;
 
-        for (const_iterator iter = begin(); iter != end(); ++iter)
-        {
-            const regIOobject& io = *iter();
-
-            if (objectRegistry::debug)
-            {
-                Pout<< "objectRegistry::getEvent() : "
-                    << "resetting count on " << iter.key() << endl;
-            }
 
-            if (io.eventNo() != 0)
-            {
-                const_cast<regIOobject&>(io).eventNo() = curEvent;
-            }
-        }
+        // No need to reset dependent objects; overflow is now handled
+        // in regIOobject::upToDate
     }
 
     return curEvent;
diff --git a/src/OpenFOAM/db/regIOobject/regIOobject.C b/src/OpenFOAM/db/regIOobject/regIOobject.C
index c3f86da318f75627c74c3ca236a23dcbc6f9399c..3b3f8a7f17d15e23dca5777fdd5be085c24e0e22 100644
--- a/src/OpenFOAM/db/regIOobject/regIOobject.C
+++ b/src/OpenFOAM/db/regIOobject/regIOobject.C
@@ -325,14 +325,42 @@ bool Foam::regIOobject::checkOut()
 
 bool Foam::regIOobject::upToDate(const regIOobject& a) const
 {
-    if (a.eventNo() >= eventNo_)
+    label da = a.eventNo()-eventNo_;
+
+    // In case of overflow *this.event() might be 2G but a.event() might
+    // have overflowed to 0.
+    // Detect this by detecting a massive difference (labelMax/2) between
+    // the two events.
+    //
+    //  a       *this   return
+    //  -       -----   ------
+    // normal operation:
+    //  11      10      false
+    //  11      11      false
+    //  10      11      true
+    // overflow situation:
+    //  0       big     false
+    //  big     0       true
+
+    if (da > labelMax/2)
     {
+        // *this.event overflowed but a.event not yet
+        return true;
+    }
+    else if (da < -labelMax/2)
+    {
+        // a.event overflowed but *this not yet
         return false;
     }
-    else
+    else if (da < 0)
     {
+        // My event number higher than a
         return true;
     }
+    else
+    {
+        return false;
+    }
 }
 
 
@@ -342,18 +370,7 @@ bool Foam::regIOobject::upToDate
     const regIOobject& b
 ) const
 {
-    if
-    (
-        a.eventNo() >= eventNo_
-     || b.eventNo() >= eventNo_
-    )
-    {
-        return false;
-    }
-    else
-    {
-        return true;
-    }
+    return upToDate(a) && upToDate(b);
 }
 
 
@@ -364,19 +381,7 @@ bool Foam::regIOobject::upToDate
     const regIOobject& c
 ) const
 {
-    if
-    (
-        a.eventNo() >= eventNo_
-     || b.eventNo() >= eventNo_
-     || c.eventNo() >= eventNo_
-    )
-    {
-        return false;
-    }
-    else
-    {
-        return true;
-    }
+    return upToDate(a) && upToDate(b) && upToDate(c);
 }
 
 
@@ -388,20 +393,7 @@ bool Foam::regIOobject::upToDate
     const regIOobject& d
 ) const
 {
-    if
-    (
-        a.eventNo() >= eventNo_
-     || b.eventNo() >= eventNo_
-     || c.eventNo() >= eventNo_
-     || d.eventNo() >= eventNo_
-    )
-    {
-        return false;
-    }
-    else
-    {
-        return true;
-    }
+    return upToDate(a) && upToDate(b) && upToDate(c) && upToDate(d);
 }
 
 
diff --git a/src/combustionModels/FSD/FSD.C b/src/combustionModels/FSD/FSD.C
index 6d846b3d95e07d811ed4d1e539bc6a44f8749e94..ed3cdb602c4c42d51ae33d4042cbe1681e3f879f 100644
--- a/src/combustionModels/FSD/FSD.C
+++ b/src/combustionModels/FSD/FSD.C
@@ -56,7 +56,7 @@ FSD<CombThermoType, ThermoType>::FSD
         (
             this->coeffs(),
             this->mesh(),
-            *this
+           *this
         )
     ),
     ft_
@@ -188,21 +188,17 @@ void FSD<CombThermoType, ThermoType>::calculateSourceNorm()
     volScalarField& omegaFuelBar = tomegaFuel();
 
     // Calculation of the mixture fraction variance (ftVar)
-    const compressible::LESModel& lesModel =
-        YO2.db().lookupObject<compressible::LESModel>
-        (
-            turbulenceModel::propertiesName
-        );
+    // TODO: generalize delta for RAS and LES.
+    const volScalarField& delta =
+        refCast<const compressible::LESModel>(this->turbulence()).delta();
 
-    const volScalarField& delta = lesModel.delta();
     const volScalarField ftVar(Cv_*sqr(delta)*sqr(mgft));
 
     // Thickened flame (average flame thickness for counterflow configuration
     // is 1.5 mm)
-
     volScalarField  deltaF
     (
-        lesModel.delta()/dimensionedScalar("flame", dimLength, 1.5e-3)
+        delta/dimensionedScalar("flame", dimLength, 1.5e-3)
     );
 
     // Linear correlation between delta and flame thickness
diff --git a/src/combustionModels/FSD/reactionRateFlameAreaModels/relaxation/relaxation.C b/src/combustionModels/FSD/reactionRateFlameAreaModels/relaxation/relaxation.C
index f26b698b6fec6614f95ea27a700a1dca1ce252fe..2da8036f4443262203904f43aeee13339d6fb898 100644
--- a/src/combustionModels/FSD/reactionRateFlameAreaModels/relaxation/relaxation.C
+++ b/src/combustionModels/FSD/reactionRateFlameAreaModels/relaxation/relaxation.C
@@ -123,20 +123,20 @@ void Foam::reactionRateFlameAreaModels::relaxation::correct
        /(sqr(omega0 - omegaInf) + sqr(omegaMin))
     );
 
-    const volScalarField rho(combModel_.rho());
-    const surfaceScalarField phi(combModel_.phi());
+    tmp<surfaceScalarField> phi(combModel_.phi());
 
     solve
     (
-         fvm::ddt(rho, omega_)
+         fvm::ddt(omega_)
        + fvm::div(phi, omega_, "div(phi,omega)")
       ==
-         rho*Rc*omega0
-       - fvm::SuSp(rho*(tau + Rc), omega_)
+         Rc*omega0
+       - fvm::SuSp((tau + Rc), omega_)
     );
 
     omega_.min(omega0);
     omega_.max(0.0);
+
 }
 
 
diff --git a/src/combustionModels/Make/files b/src/combustionModels/Make/files
index b68fbb742f273498a2ad7a76f0436b7d665aa45e..f1f87e9cfbb9bb203a494940844d9c250ef49208 100644
--- a/src/combustionModels/Make/files
+++ b/src/combustionModels/Make/files
@@ -17,12 +17,15 @@ PaSR/PaSRs.C
 
 laminar/laminars.C
 
+/*
 FSD/reactionRateFlameAreaModels/consumptionSpeed/consumptionSpeed.C
 FSD/reactionRateFlameAreaModels/reactionRateFlameArea/reactionRateFlameArea.C
 FSD/reactionRateFlameAreaModels/reactionRateFlameArea/reactionRateFlameAreaNew.C
 FSD/reactionRateFlameAreaModels/relaxation/relaxation.C
-
 FSD/FSDs.C
+*/
+
+diffusionMulticomponent/diffusionMulticomponents.C
 
 noCombustion/noCombustions.C
 
diff --git a/src/combustionModels/combustionModel/combustionModel.H b/src/combustionModels/combustionModel/combustionModel.H
index 5368d1af801c6111f22e0580fd87eeac42c482c2..badd4848294db278c4d07cfd8f7f01a5c882d010 100644
--- a/src/combustionModels/combustionModel/combustionModel.H
+++ b/src/combustionModels/combustionModel/combustionModel.H
@@ -112,9 +112,9 @@ public:
             inline const fvMesh& mesh() const;
 
             //- Return const access to phi
-            inline const surfaceScalarField& phi() const;
+            inline tmp<surfaceScalarField> phi() const;
 
-            //- Return const access to rho
+            //- Returns rho
             virtual tmp<volScalarField> rho() const = 0;
 
             //- Return access to turbulence
diff --git a/src/combustionModels/combustionModel/combustionModelI.H b/src/combustionModels/combustionModel/combustionModelI.H
index e095c5f7e04baef8494ee541edf4c29490bc9f81..140f8c9bb5ed9b8e66ceead09630d4405ca88817 100644
--- a/src/combustionModels/combustionModel/combustionModelI.H
+++ b/src/combustionModels/combustionModel/combustionModelI.H
@@ -31,7 +31,7 @@ inline const Foam::fvMesh& Foam::combustionModel::mesh() const
 }
 
 
-inline const Foam::surfaceScalarField& Foam::combustionModel::phi() const
+inline Foam::tmp<Foam::surfaceScalarField> Foam::combustionModel::phi() const
 {
     if (turbulencePtr_)
     {
@@ -42,7 +42,7 @@ inline const Foam::surfaceScalarField& Foam::combustionModel::phi() const
         FatalErrorInFunction
             << "turbulencePtr_ is empty. Please use "
             << "combustionModel::setTurbulence "
-            << "(compressibleTurbulenceModel& )"
+            << "(compressibleTurbulenceModel&)"
             << abort(FatalError);
 
         return turbulencePtr_->phi();
diff --git a/src/combustionModels/diffusionMulticomponent/diffusionMulticomponent.C b/src/combustionModels/diffusionMulticomponent/diffusionMulticomponent.C
new file mode 100644
index 0000000000000000000000000000000000000000..bc60afe054adb6a1fcbd64e49871e2532dd0a9f3
--- /dev/null
+++ b/src/combustionModels/diffusionMulticomponent/diffusionMulticomponent.C
@@ -0,0 +1,515 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 OpenCFD Ltd
+     \\/     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/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "diffusionMulticomponent.H"
+#include "fvcGrad.H"
+#include "reactingMixture.H"
+#include "fvCFD.H"
+#include "mathematicalConstants.H"
+
+// * * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * //
+
+template<class CombThermoType, class ThermoType>
+void Foam::combustionModels::
+diffusionMulticomponent<CombThermoType, ThermoType>::init()
+{
+    // Load default values
+    if (this->coeffs().found("Ci"))
+    {
+        this->coeffs().lookup("Ci") >> Ci_;
+    }
+
+    if (this->coeffs().found("YoxStream"))
+    {
+        this->coeffs().lookup("YoxStream") >> YoxStream_;
+    }
+
+    if (this->coeffs().found("YfStream"))
+    {
+        this->coeffs().lookup("YfStream") >> YfStream_;
+    }
+
+    if (this->coeffs().found("sigma"))
+    {
+        this->coeffs().lookup("sigma") >> sigma_;
+    }
+
+    if (this->coeffs().found("ftCorr"))
+    {
+        this->coeffs().lookup("ftCorr") >> ftCorr_;
+    }
+
+    if (this->coeffs().found("alpha"))
+    {
+        alpha_ = readScalar(this->coeffs().lookup("alpha"));
+    }
+
+    if (this->coeffs().found("laminarIgn"))
+    {
+        this->coeffs().lookup("laminarIgn") >> laminarIgn_;
+    }
+
+    typedef typename Reaction<ThermoType>::specieCoeffs specieCoeffs;
+
+    const speciesTable& species = this->thermo().composition().species();
+
+    scalarList specieStoichCoeffs(species.size());
+    const label nReactions = reactions_.size();
+
+    for (label k=0; k < nReactions; k++)
+    {
+        RijPtr_.set
+        (
+            k,
+            new volScalarField
+            (
+                IOobject
+                (
+                    "Rijk" + name(k),
+                    this->mesh_.time().timeName(),
+                    this->mesh_,
+                    IOobject::NO_READ,
+                    IOobject::NO_WRITE,
+                    false
+                ),
+                this->mesh_,
+                dimensionedScalar("Rij", dimMass/dimTime/dimVolume, 0.0),
+                zeroGradientFvPatchScalarField::typeName
+            )
+        );
+
+        RijPtr_[k].storePrevIter();
+
+        const List<specieCoeffs>& lhs = reactions_[k].lhs();
+        const List<specieCoeffs>& rhs = reactions_[k].rhs();
+
+        const label fuelIndex = species[fuelNames_[k]];
+        const label oxydantIndex = species[oxydantNames_[k]];
+
+        const scalar Wu = specieThermo_[fuelIndex].W();
+        const scalar Wox = specieThermo_[oxydantIndex].W();
+
+        forAll(lhs, i)
+        {
+            const label specieI = lhs[i].index;
+            specieStoichCoeffs[specieI] = -lhs[i].stoichCoeff;
+            qFuel_[k] +=
+                specieThermo_[specieI].hc()*lhs[i].stoichCoeff/Wu;
+        }
+
+        forAll(rhs, i)
+        {
+            const label specieI = rhs[i].index;
+            specieStoichCoeffs[specieI] = rhs[i].stoichCoeff;
+            qFuel_[k] -=
+                specieThermo_[specieI].hc()*rhs[i].stoichCoeff/Wu;
+        }
+
+        Info << "Fuel heat of combustion : " << qFuel_[k] << endl;
+
+        s_[k] =
+            (Wox*mag(specieStoichCoeffs[oxydantIndex]))
+          / (Wu*mag(specieStoichCoeffs[fuelIndex]));
+
+        Info << "stoichiometric oxygen-fuel ratio : " << s_[k] << endl;
+
+        stoicRatio_[k] = s_[k]*YfStream_[k]/YoxStream_[k];
+
+        Info << "stoichiometric air-fuel ratio : " << stoicRatio_[k] << endl;
+
+        const scalar fStoich = 1.0/(1.0 + stoicRatio_[k]);
+
+        Info << "stoichiometric mixture fraction : " << fStoich << endl;
+
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+template<class CombThermoType, class ThermoType>
+Foam::combustionModels::diffusionMulticomponent<CombThermoType, ThermoType>::
+diffusionMulticomponent
+(
+    const word& modelType, const fvMesh& mesh, const word& phaseName
+)
+:
+    CombThermoType(modelType, mesh, phaseName),
+    reactions_
+    (
+        dynamic_cast<const reactingMixture<ThermoType>&>(this->thermo())
+    ),
+    specieThermo_
+    (
+        dynamic_cast<const reactingMixture<ThermoType>&>
+            (this->thermo()).speciesData()
+    ),
+    RijPtr_(reactions_.size()),
+    Ci_(reactions_.size(), 1.0),
+    fuelNames_(this->coeffs().lookup("fuels")),
+    oxydantNames_(this->coeffs().lookup("oxydants")),
+    qFuel_(reactions_.size()),
+    stoicRatio_(reactions_.size()),
+    s_(reactions_.size()),
+    YoxStream_(reactions_.size(), 0.23),
+    YfStream_(reactions_.size(), 1.0),
+    sigma_(reactions_.size(), 0.02),
+    oxydantRes_(this->coeffs().lookup("oxydantRes")),
+    ftCorr_(reactions_.size(), 0.0),
+    alpha_(1),
+    laminarIgn_(false)
+{
+    init();
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+template<class CombThermoType, class ThermoType>
+Foam::combustionModels::diffusionMulticomponent<CombThermoType, ThermoType>::
+~diffusionMulticomponent()
+{}
+
+
+// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
+
+template<class CombThermoType, class ThermoType>
+Foam::tmp<Foam::volScalarField> Foam::combustionModels::
+diffusionMulticomponent<CombThermoType, ThermoType>::tc() const
+{
+    return this->chemistryPtr_->tc();
+}
+
+
+template<class CombThermoType, class ThermoType>
+void Foam::combustionModels::
+diffusionMulticomponent<CombThermoType, ThermoType>::correct()
+{
+    if (this->active())
+    {
+        typedef typename Reaction<ThermoType>::specieCoeffs specieCoeffs;
+        const speciesTable& species = this->thermo().composition().species();
+
+        const label nReactions = reactions_.size();
+
+        PtrList<volScalarField> RijlPtr(nReactions);
+
+        for (label k=0; k < nReactions; k++)
+        {
+
+            RijlPtr.set
+            (
+                k,
+                new volScalarField
+                (
+                    IOobject
+                    (
+                        "Rijl" + word(k),
+                        this->mesh_.time().timeName(),
+                        this->mesh_,
+                        IOobject::NO_READ,
+                        IOobject::NO_WRITE,
+                        false
+                    ),
+                    this->mesh_,
+                    dimensionedScalar("Rijl", dimMass/dimTime/dimVolume, 0.0),
+                    zeroGradientFvPatchScalarField::typeName
+                )
+            );
+
+            volScalarField& Rijl = RijlPtr[k];
+
+            // Obtain individual reaction rates for each reaction
+            const label fuelIndex = species[fuelNames_[k]];
+
+            if (laminarIgn_)
+            {
+                Rijl.dimensionedInternalField() =
+                    -this->chemistryPtr_->calculateRR(k, fuelIndex);
+            }
+
+
+             // Look for the fuelStoic
+            const List<specieCoeffs>& rhs = reactions_[k].rhs();
+            const List<specieCoeffs>& lhs = reactions_[k].lhs();
+
+            // Set to zero RR's
+            forAll (lhs, l)
+            {
+                const label lIndex = lhs[l].index;
+                this->chemistryPtr_->RR(lIndex) =
+                    dimensionedScalar("zero", dimMass/dimTime/dimVolume, 0.0);
+            }
+
+            forAll (rhs, l)
+            {
+                const label rIndex = rhs[l].index;
+                this->chemistryPtr_->RR(rIndex) =
+                    dimensionedScalar("zero", dimMass/dimTime/dimVolume, 0.0);
+            }
+        }
+
+
+        for (label k=0; k < nReactions; k++)
+        {
+            const label fuelIndex = species[fuelNames_[k]];
+            const label oxydantIndex = species[oxydantNames_[k]];
+
+            const volScalarField& Yfuel =
+                this->thermo().composition().Y(fuelIndex);
+
+            const volScalarField& Yox =
+                this->thermo().composition().Y(oxydantIndex);
+
+            const volScalarField ft
+            (
+                "ft" + name(k),
+                (
+                    s_[k]*Yfuel
+                  - (Yox - YoxStream_[k])
+                )
+                /
+                (
+                    s_[k]*YfStream_[k] + YoxStream_[k]
+                )
+            );
+
+            const scalar sigma = sigma_[k];
+
+            const scalar fStoich = 1.0/(1.0 + stoicRatio_[k]) + ftCorr_[k];
+
+            const volScalarField OAvailScaled
+            (
+                "OAvailScaled",
+                Yox/max(oxydantRes_[k], 1e-3)
+            );
+
+            const volScalarField preExp
+            (
+                "preExp" + name(k),
+                 1.0  + sqr(OAvailScaled)
+            );
+
+            const volScalarField filter
+            (
+                (1.0/(sigma*sqrt(2.0*constant::mathematical::pi)))
+              * exp(-sqr(ft - fStoich)/(2*sqr(sigma)))
+            );
+
+            const volScalarField topHatFilter
+            (
+                pos(filter - 1e-3)
+            );
+
+            const volScalarField prob
+            (
+                "prob" + name(k), preExp*filter
+            );
+
+            const volScalarField RijkDiff
+            (
+               "RijkDiff",
+                Ci_[k]*this->turbulence().muEff()*prob*
+                (
+                    mag(fvc::grad(Yfuel) & fvc::grad(Yox))
+                )
+               *pos(Yox)*pos(Yfuel)
+            );
+
+            volScalarField& Rijk = RijPtr_[k];
+
+            if (laminarIgn_)
+            {
+                Rijk =
+                    min(RijkDiff, topHatFilter*RijlPtr[k]*pos(Yox)*pos(Yfuel));
+            }
+            else
+            {
+                Rijk = RijkDiff;
+            }
+
+            Rijk.relax(alpha_);
+
+            if (this->mesh_.time().outputTime() && debug)
+            {
+                Rijk.write();
+                ft.write();
+            }
+
+            // Look for the fuelStoic
+            const List<specieCoeffs>& rhs = reactions_[k].rhs();
+            const List<specieCoeffs>& lhs = reactions_[k].lhs();
+
+            scalar fuelStoic = 1.0;
+            forAll (lhs, l)
+            {
+                const label lIndex = lhs[l].index;
+                if (lIndex == fuelIndex)
+                {
+                    fuelStoic = lhs[l].stoichCoeff;
+                    break;
+                }
+            }
+
+            const scalar MwFuel = specieThermo_[fuelIndex].W();
+
+            // Update left hand side species
+            forAll (lhs, l)
+            {
+                const label lIndex = lhs[l].index;
+
+                const scalar stoichCoeff = lhs[l].stoichCoeff;
+
+                this->chemistryPtr_->RR(lIndex) +=
+                    -Rijk*stoichCoeff*specieThermo_[lIndex].W()
+                   /fuelStoic/MwFuel;
+
+            }
+
+            // Update right hand side species
+            forAll (rhs, r)
+            {
+                const label rIndex = rhs[r].index;
+
+                const scalar stoichCoeff = rhs[r].stoichCoeff;
+
+                this->chemistryPtr_->RR(rIndex) +=
+                    Rijk*stoichCoeff*specieThermo_[rIndex].W()
+                   /fuelStoic/MwFuel;
+            }
+        }
+    }
+}
+
+
+template<class CombThermoType, class ThermoType>
+Foam::tmp<Foam::fvScalarMatrix>
+Foam::combustionModels::diffusionMulticomponent<CombThermoType, ThermoType>::
+R(volScalarField& Y) const
+{
+    tmp<fvScalarMatrix> tSu(new fvScalarMatrix(Y, dimMass/dimTime));
+
+    fvScalarMatrix& Su = tSu();
+
+    if (this->active())
+    {
+        const label specieI = this->thermo().composition().species()[Y.name()];
+        Su += this->chemistryPtr_->RR(specieI);
+    }
+
+    return tSu;
+}
+
+
+template<class CombThermoType, class ThermoType>
+Foam::tmp<Foam::volScalarField>
+Foam::combustionModels::diffusionMulticomponent<CombThermoType, ThermoType>::
+dQ() const
+{
+    tmp<volScalarField> tdQ
+    (
+        new volScalarField
+        (
+            IOobject
+            (
+                "dQ",
+                this->mesh().time().timeName(),
+                this->mesh(),
+                IOobject::NO_READ,
+                IOobject::NO_WRITE,
+                false
+            ),
+            this->mesh(),
+            dimensionedScalar("dQ", dimEnergy/dimTime, 0.0),
+            zeroGradientFvPatchScalarField::typeName
+        )
+    );
+
+    if (this->active())
+    {
+        volScalarField& dQ = tdQ();
+        dQ = this->chemistryPtr_->dQ();
+    }
+
+    return tdQ;
+}
+
+
+template<class CombThermoType, class ThermoType>
+Foam::tmp<Foam::volScalarField>
+Foam::combustionModels::diffusionMulticomponent<CombThermoType, ThermoType>::
+Sh() const
+{
+    tmp<volScalarField> tSh
+    (
+        new volScalarField
+        (
+            IOobject
+            (
+                "Sh",
+                this->mesh().time().timeName(),
+                this->mesh(),
+                IOobject::NO_READ,
+                IOobject::NO_WRITE,
+                false
+            ),
+            this->mesh(),
+            dimensionedScalar("zero", dimEnergy/dimTime/dimVolume, 0.0),
+            zeroGradientFvPatchScalarField::typeName
+        )
+    );
+
+    if (this->active())
+    {
+        scalarField& Sh = tSh();
+        Sh = this->chemistryPtr_->Sh();
+    }
+
+    return tSh;
+}
+
+
+template<class CombThermoType, class ThermoType>
+bool Foam::combustionModels::
+diffusionMulticomponent<CombThermoType, ThermoType>::read()
+{
+    if (CombThermoType::read())
+    {
+        this->coeffs().readIfPresent("Ci", Ci_);
+        this->coeffs().readIfPresent("sigma", sigma_);
+        this->coeffs().readIfPresent("oxydantRes", oxydantRes_);
+        this->coeffs().readIfPresent("ftCorr", ftCorr_);
+        this->coeffs().readIfPresent("alpha", alpha_);
+        this->coeffs().readIfPresent("laminarIgn", laminarIgn_);
+        return true;
+    }
+    else
+    {
+        return false;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/src/combustionModels/diffusionMulticomponent/diffusionMulticomponent.H b/src/combustionModels/diffusionMulticomponent/diffusionMulticomponent.H
new file mode 100644
index 0000000000000000000000000000000000000000..2d6b9531f74f1b4c282e9c6d09e39165273c9af0
--- /dev/null
+++ b/src/combustionModels/diffusionMulticomponent/diffusionMulticomponent.H
@@ -0,0 +1,224 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 OpenCFD Ltd
+     \\/     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/>.
+
+Class
+    Foam::combustionModels::diffusionMulticomponent
+
+Description
+
+    Diffusion based turbulent combustion model for multicomponent species.
+
+    The model calculates the laminar finite rate source terms based on
+    the kinetic for each reaction in order to begin the combustion and
+    evaluates the minimum between this and the cross diffusion rate term
+    defined as D*prob*muEff*mag(grad(Yi)*grad(Yj)) if laminarIgn is true.
+
+    where:
+
+    D :     is a model constant.
+    muEff : is the effective turbulent diffusivity
+    prob :  is a Gaussian shaped distribution around the stoichiometric value
+            of each reaction. The distribtion has the input parameter 'sigma'
+            for standard deviation.
+
+    The variable prob is multiplied by the factor: 1  + pow2(O2/oxydantRes),
+    where oxydantRes is the residual oxydant specified for each reaction.
+
+    In the combustion properties dictionary:
+
+    diffusionMulticomponentCoeffs
+    {
+        Ci          (1.0 1.0);      // Default to 1
+        fuels       (CH4 CO);
+        oxydants    (O2 O2);
+        YoxStream   (0.23 0.23);    // Default to 0.23
+        YfStream    (1.0 1.0);      // Default to 1.0
+        sigma       (0.02 0.02);    // Default to 0.02
+        oxydantRes  (0.025 0.005);
+        ftCorr      (0.0 0.0);      // Default to 0.0
+        laminarIgn  false;          // Default false
+    }
+
+    ftCorr is used to shift the location of the flame and corrects the
+    stochimetric mixture value when the mesh resolution is not enough
+    to resolve the combustion zone.
+
+    NOTE: Optionally the switch 'laminarIgn' can be used to ignite the mixture
+    using laminar combustion.
+
+
+SourceFiles
+    diffusionMulticomponent.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef diffusionMulticomponent_H
+#define diffusionMulticomponent_H
+
+#include "scalarList.H"
+#include "tmp.H"
+#include "Reaction.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace combustionModels
+{
+
+/*---------------------------------------------------------------------------*\
+                    Class diffusionMulticomponent Declaration
+\*---------------------------------------------------------------------------*/
+
+template<class CombThermoType, class ThermoType>
+class diffusionMulticomponent
+:
+    public CombThermoType
+{
+    // Private data
+
+        //- Reactions
+        const PtrList<Reaction<ThermoType> >& reactions_;
+
+        //- Thermodynamic data of the species
+        const PtrList<ThermoType>& specieThermo_;
+
+        //- Pointer list of source terms
+        PtrList<volScalarField> RijPtr_;
+
+        //- Model constants
+        scalarList Ci_;
+
+        //- List of fuels for each reaction
+        wordList fuelNames_;
+
+        //- List of oxydants for each reaction
+        wordList oxydantNames_;
+
+        //- Heat of combustion [J/Kg]
+        scalarList qFuel_;
+
+        //- Stoichiometric air-fuel mass ratio
+        scalarList stoicRatio_;
+
+        //- Stoichiometric oxygen-fuel mass ratio
+        scalarList s_;
+
+        //- Oxydaser sream mass concentrations
+        scalarList YoxStream_;
+
+        //- Fuel stream mass concentrations
+        scalarList YfStream_;
+
+        //- Mean distribution for gaussian probabililty
+        scalarList sigma_;
+
+        //- Residual oxydaser
+        scalarList oxydantRes_;
+
+        //- ft stochiometric correction
+        scalarList ftCorr_;
+
+        //- Relaxatnio factor on total source
+        scalar alpha_;
+
+        //- Switch on to laminar combustion for ignition
+        bool laminarIgn_;
+
+
+    // Private Member Functions
+
+        //- Return the chemical time scale
+        tmp<volScalarField> tc() const;
+
+        //- Initialize
+        void init();
+
+        //- Disallow copy construct
+        diffusionMulticomponent(const diffusionMulticomponent&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const diffusionMulticomponent&);
+
+
+public:
+
+    //- Runtime type information
+    TypeName("diffusionMulticomponent");
+
+
+    // Constructors
+
+        //- Construct from components
+        diffusionMulticomponent
+        (
+            const word& modelType,
+            const fvMesh& mesh,
+            const word& phaseName
+        );
+
+
+    //- Destructor
+    virtual ~diffusionMulticomponent();
+
+
+    // Member Functions
+
+        // Evolution
+
+            //- Correct combustion rate
+            virtual void correct();
+
+            //- Fuel consumption rate matrix.
+            virtual tmp<fvScalarMatrix> R(volScalarField& Y) const;
+
+            //- Heat release rate calculated from fuel consumption rate matrix
+            virtual tmp<volScalarField> dQ() const;
+
+            //-  Return source for enthalpy equation [kg/m/s3]
+            virtual tmp<volScalarField> Sh() const;
+
+
+    // IO
+
+            //- Update properties from given dictionary
+            virtual bool read();
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace combustionModels
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+#   include "diffusionMulticomponent.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/combustionModels/diffusionMulticomponent/diffusionMulticomponents.C b/src/combustionModels/diffusionMulticomponent/diffusionMulticomponents.C
new file mode 100644
index 0000000000000000000000000000000000000000..3aa6b7940190776c1192832212d44dd9cc589244
--- /dev/null
+++ b/src/combustionModels/diffusionMulticomponent/diffusionMulticomponents.C
@@ -0,0 +1,61 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 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/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "makeCombustionTypes.H"
+
+#include "thermoPhysicsTypes.H"
+#include "psiChemistryCombustion.H"
+#include "rhoChemistryCombustion.H"
+#include "diffusionMulticomponent.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+// Combustion models based on sensibleEnthalpy
+
+makeCombustionTypesThermo
+(
+    diffusionMulticomponent,
+    psiChemistryCombustion,
+    gasHThermoPhysics,
+    psiCombustionModel
+);
+
+makeCombustionTypesThermo
+(
+    diffusionMulticomponent,
+    rhoChemistryCombustion,
+    gasHThermoPhysics,
+    rhoCombustionModel
+);
+
+makeCombustionTypesThermo
+(
+    diffusionMulticomponent,
+    rhoChemistryCombustion,
+    incompressibleGasHThermoPhysics,
+    rhoCombustionModel
+);
+
+// ************************************************************************* //
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorField.C b/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorField.C
index 9eac00835fdba3bb5292a79f2d2b10df04d74470..9b5e347fbd20ab75f8ccf01673f037b193ae8657 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorField.C
+++ b/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorField.C
@@ -68,54 +68,6 @@ Foam::pressurePIDControlInletVelocityFvPatchVectorField::facePressure() const
 }
 
 
-template <class Type>
-void Foam::pressurePIDControlInletVelocityFvPatchVectorField::faceZoneAverage
-(
-    const word& name,
-    const GeometricField<Type, fvsPatchField, surfaceMesh>& field,
-    scalar& area,
-    Type& average
-) const
-{
-    const fvMesh& mesh(patch().boundaryMesh().mesh());
-
-    PackedBoolList isMasterFace(syncTools::getInternalOrMasterFaces(mesh));
-
-    const faceZone& zone = mesh.faceZones()[name];
-
-    area = 0;
-    average = pTraits<Type>::zero;
-
-    forAll(zone, faceI)
-    {
-        const label f(zone[faceI]);
-
-        if (mesh.isInternalFace(f))
-        {
-            const scalar da(mesh.magSf()[f]);
-
-            area += da;
-            average += da*field[f];
-        }
-        else if (isMasterFace[f])
-        {
-            const label bf(f-mesh.nInternalFaces());
-            const label patchID = mesh.boundaryMesh().patchID()[bf];
-            const label lf(mesh.boundaryMesh()[patchID].whichFace(f));
-            const scalar da(mesh.magSf().boundaryField()[patchID][lf]);
-
-            area += da;
-            average += da*field.boundaryField()[patchID][lf];
-        }
-    }
-
-    reduce(area, sumOp<scalar>());
-    reduce(average, sumOp<Type>());
-
-    average /= area;
-}
-
-
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
 Foam::pressurePIDControlInletVelocityFvPatchVectorField::
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorField.H b/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorField.H
index d6f6cf765e5137971cece89b50c19c6f7734401d..dac45b242d9daa2d963f5fe353b2a4e231820a99 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorField.H
@@ -274,6 +274,12 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+#ifdef NoRepository
+#   include "pressurePIDControlInletVelocityFvPatchVectorFieldTemplates.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
 #endif
 
 // ************************************************************************* //
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorFieldTemplates.C b/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorFieldTemplates.C
new file mode 100644
index 0000000000000000000000000000000000000000..6bd1d95bc561de129300c6460059e6c178b69f0a
--- /dev/null
+++ b/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorFieldTemplates.C
@@ -0,0 +1,79 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 OpenCFD Ltd.
+     \\/     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/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "surfaceFields.H"
+#include "syncTools.H"
+
+// * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * //
+
+template <class Type>
+void Foam::pressurePIDControlInletVelocityFvPatchVectorField::faceZoneAverage
+(
+    const word& name,
+    const GeometricField<Type, fvsPatchField, surfaceMesh>& field,
+    scalar& area,
+    Type& average
+) const
+{
+    const fvMesh& mesh(patch().boundaryMesh().mesh());
+
+    PackedBoolList isMasterFace(syncTools::getInternalOrMasterFaces(mesh));
+
+    const faceZone& zone = mesh.faceZones()[name];
+
+    area = 0;
+    average = pTraits<Type>::zero;
+
+    forAll(zone, faceI)
+    {
+        const label f(zone[faceI]);
+
+        if (mesh.isInternalFace(f))
+        {
+            const scalar da(mesh.magSf()[f]);
+
+            area += da;
+            average += da*field[f];
+        }
+        else if (isMasterFace[f])
+        {
+            const label bf(f-mesh.nInternalFaces());
+            const label patchID = mesh.boundaryMesh().patchID()[bf];
+            const label lf(mesh.boundaryMesh()[patchID].whichFace(f));
+            const scalar da(mesh.magSf().boundaryField()[patchID][lf]);
+
+            area += da;
+            average += da*field.boundaryField()[patchID][lf];
+        }
+    }
+
+    reduce(area, sumOp<scalar>());
+    reduce(average, sumOp<Type>());
+
+    average /= area;
+}
+
+
+// ************************************************************************* //
diff --git a/src/lagrangian/coalCombustion/Make/options b/src/lagrangian/coalCombustion/Make/options
index 04b133ba05321d3e8e29079eba7602c5e8744ccc..87e1d6a7102e0b872d994a0be3c72aaa803a6bb6 100644
--- a/src/lagrangian/coalCombustion/Make/options
+++ b/src/lagrangian/coalCombustion/Make/options
@@ -18,6 +18,7 @@ EXE_INC = \
     -I$(LIB_SRC)/transportModels \
     -I$(LIB_SRC)/regionModels/regionModel/lnInclude \
     -I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \
+    -I$(LIB_SRC)/dynamicMesh/lnInclude \
     -I$(LIB_SRC)/dynamicFvMesh/lnInclude \
     -I$(LIB_SRC)/finiteVolume/lnInclude \
     -I$(LIB_SRC)/meshTools/lnInclude
@@ -43,6 +44,7 @@ LIB_LIBS = \
     -lincompressibleTransportModels \
     -lregionModels \
     -lsurfaceFilmModels \
+    -ldynamicMesh \
     -ldynamicFvMesh \
     -lfiniteVolume \
     -lmeshTools
diff --git a/src/lagrangian/intermediate/Make/files b/src/lagrangian/intermediate/Make/files
index 9cadf55117b49ed1c79380a9e37e213b68a2acf7..3abb93961e19dfed3be4b533676d62cd5f79e2e6 100644
--- a/src/lagrangian/intermediate/Make/files
+++ b/src/lagrangian/intermediate/Make/files
@@ -1,3 +1,5 @@
+submodels/CloudFunctionObjects/CloudToVTK/vtkTools.C
+
 PARCELS=parcels
 BASEPARCELS=$(PARCELS)/baseClasses
 DERIVEDPARCELS=$(PARCELS)/derived
diff --git a/src/lagrangian/intermediate/Make/options b/src/lagrangian/intermediate/Make/options
index a5a3b3c8ebdb14fa2fd410aabc9fe451f0e84b4c..dc893c1148def8bdc4d1b3388691a6ed4cb48a56 100644
--- a/src/lagrangian/intermediate/Make/options
+++ b/src/lagrangian/intermediate/Make/options
@@ -14,6 +14,7 @@ EXE_INC = \
     -I$(LIB_SRC)/transportModels \
     -I$(LIB_SRC)/regionModels/regionModel/lnInclude \
     -I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \
+    -I$(LIB_SRC)/dynamicMesh/lnInclude \
     -I$(LIB_SRC)/dynamicFvMesh/lnInclude \
     -I$(LIB_SRC)/sampling/lnInclude \
     -I$(LIB_SRC)/finiteVolume/lnInclude \
@@ -35,6 +36,7 @@ LIB_LIBS = \
     -lincompressibleTransportModels \
     -lregionModels \
     -lsurfaceFilmModels \
+    -ldynamicMesh \
     -ldynamicFvMesh \
     -lsampling \
     -lfiniteVolume \
diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.C
index d761e5f17a56a657ce18042d47a07320934a4d5f..c609b2d27261f2bea0a0ed1b7f2b9007ef6b7f2b 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.C
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.C
@@ -28,11 +28,7 @@ License
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::cloudSolution::cloudSolution
-(
-    const fvMesh& mesh,
-    const dictionary& dict
-)
+Foam::cloudSolution::cloudSolution(const fvMesh& mesh, const dictionary& dict)
 :
     mesh_(mesh),
     dict_(dict),
@@ -42,6 +38,7 @@ Foam::cloudSolution::cloudSolution
     maxCo_(0.3),
     iter_(1),
     trackTime_(0.0),
+    deltaTMax_(GREAT),
     coupled_(false),
     cellValueSourceCorrection_(false),
     maxTrackTime_(0.0),
@@ -52,13 +49,25 @@ Foam::cloudSolution::cloudSolution
     {
         read();
     }
+    else
+    {
+        // see if existing source terms should be reset
+        const dictionary sourceTerms(dict_.subOrEmptyDict("sourceTerms"));
+        sourceTerms.readIfPresent("resetOnStartup", resetSourcesOnStartup_);
+
+        if (resetSourcesOnStartup_)
+        {
+            Info<< "Cloud source terms will be reset" << endl;
+        }
+        else
+        {
+            Info<< "Cloud source terms will be held constant" << endl;
+        }
+    }
 }
 
 
-Foam::cloudSolution::cloudSolution
-(
-    const cloudSolution& cs
-)
+Foam::cloudSolution::cloudSolution(const cloudSolution& cs)
 :
     mesh_(cs.mesh_),
     dict_(cs.dict_),
@@ -68,6 +77,7 @@ Foam::cloudSolution::cloudSolution
     maxCo_(cs.maxCo_),
     iter_(cs.iter_),
     trackTime_(cs.trackTime_),
+    deltaTMax_(cs.deltaTMax_),
     coupled_(cs.coupled_),
     cellValueSourceCorrection_(cs.cellValueSourceCorrection_),
     maxTrackTime_(cs.maxTrackTime_),
@@ -76,10 +86,7 @@ Foam::cloudSolution::cloudSolution
 {}
 
 
-Foam::cloudSolution::cloudSolution
-(
-    const fvMesh& mesh
-)
+Foam::cloudSolution::cloudSolution(const fvMesh& mesh)
 :
     mesh_(mesh),
     dict_(dictionary::null),
@@ -89,6 +96,7 @@ Foam::cloudSolution::cloudSolution
     maxCo_(GREAT),
     iter_(0),
     trackTime_(0.0),
+    deltaTMax_(GREAT),
     coupled_(false),
     cellValueSourceCorrection_(false),
     maxTrackTime_(0.0),
@@ -111,6 +119,7 @@ void Foam::cloudSolution::read()
     dict_.lookup("coupled") >> coupled_;
     dict_.lookup("cellValueSourceCorrection") >> cellValueSourceCorrection_;
     dict_.readIfPresent("maxCo", maxCo_);
+    dict_.readIfPresent("deltaTMax", deltaTMax_);
 
     if (steadyState())
     {
@@ -229,4 +238,23 @@ bool Foam::cloudSolution::output() const
 }
 
 
+Foam::scalar Foam::cloudSolution::deltaTMax(const scalar trackTime) const
+{
+    if (transient_)
+    {
+        return min(deltaTMax_, maxCo_*trackTime);
+    }
+    else
+    {
+        return min(deltaTMax_, trackTime);
+    }
+}
+
+
+Foam::scalar Foam::cloudSolution::deltaLMax(const scalar lRef) const
+{
+    return maxCo_*lRef;
+}
+
+
 // ************************************************************************* //
diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.H
index e155abc375b3250e3e7ee5620eb6d363df559dcf..01e5c880253441b132131e7569315cf9f7cbbc89 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.H
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.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-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -80,6 +80,9 @@ class cloudSolution
         //- Particle track time
         scalar trackTime_;
 
+        //- Maximum integration time step (optional)
+        scalar deltaTMax_;
+
 
         // Run-time options
 
@@ -171,6 +174,9 @@ public:
             //- Return the particle track time
             inline scalar trackTime() const;
 
+            //- Return the maximum integation time step
+            inline scalar deltaTMax() const;
+
             //- Return const access to the coupled flag
             inline const Switch coupled() const;
 
@@ -207,6 +213,12 @@ public:
 
         //- Returns true if writing this step
         bool output() const;
+
+        //- Return the maximum integration time
+        scalar deltaTMax(const scalar trackTime) const;
+
+        //- Return the maximum integration length
+        scalar deltaLMax(const scalar lRef) const;
 };
 
 
diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolutionI.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolutionI.H
index 6280b97837d77c6cf841a77a411daa69e15d9319..27b0b38fde894d877687569709ddcb3b3a385ecb 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolutionI.H
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolutionI.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-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -101,6 +101,12 @@ inline Foam::scalar Foam::cloudSolution::trackTime() const
 }
 
 
+inline Foam::scalar Foam::cloudSolution::deltaTMax() const
+{
+    return deltaTMax_;
+}
+
+
 inline Foam::Switch& Foam::cloudSolution::coupled()
 {
     return coupled_;
diff --git a/src/lagrangian/intermediate/clouds/Templates/MPPICCloud/MPPICCloud.C b/src/lagrangian/intermediate/clouds/Templates/MPPICCloud/MPPICCloud.C
index db56ae68fcbafbb7a2f22aeac889b422778aa5fe..b5715726b4ad9013c6cdd08122e95af896042249 100644
--- a/src/lagrangian/intermediate/clouds/Templates/MPPICCloud/MPPICCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/MPPICCloud/MPPICCloud.C
@@ -80,15 +80,15 @@ Foam::MPPICCloud<CloudType>::MPPICCloud
     dampingModel_(NULL),
     isotropyModel_(NULL)
 {
-    if (this->solution().steadyState())
-    {
-        FatalErrorInFunction
-            << "MPPIC modelling not available for steady state calculations"
-            << exit(FatalError);
-    }
-
     if (this->solution().active())
     {
+        if (this->solution().steadyState())
+        {
+            FatalErrorInFunction
+                << "MPPIC modelling not available for steady state calculations"
+                << exit(FatalError);
+        }
+
         setModels();
 
         if (readFields)
diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C
index 69666feddec17c4599cd8c726d3f7763688c2d68..24c9cc1b9d04cb1e871e5d3713ef53f634ccee19 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -51,10 +51,7 @@ void Foam::ThermoCloud<CloudType>::setModels()
         ).ptr()
     );
 
-    if (this->solution().coupled())
-    {
-        this->subModelProperties().lookup("radiation") >> radiation_;
-    }
+    this->subModelProperties().lookup("radiation") >> radiation_;
 
     if (radiation_)
     {
diff --git a/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.C b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.C
index e7471bbd68412bd625040d8ba88bbdb3c4f5b1f9..500ac6fb3eb7ba984e05e372631c11fb48f1ce68 100644
--- a/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.C
+++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.C
@@ -69,6 +69,8 @@ bool Foam::CollidingParcel<ParcelType>::move
     typename TrackData::cloudType::parcelType& p =
         static_cast<typename TrackData::cloudType::parcelType&>(*this);
 
+    td.keepParticle = true;
+
     switch (td.part())
     {
         case TrackData::tpVelocityHalfStep:
diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C
index b7a2d9cf7c80cdca0d471cfefdc049b1a63a713c..8595876eb41f22ce1c9ca4feb581dedeecce3015 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C
@@ -27,6 +27,7 @@ License
 #include "forceSuSp.H"
 #include "IntegrationScheme.H"
 #include "meshTools.H"
+#include "cloudSolution.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
@@ -264,15 +265,11 @@ bool Foam::KinematicParcel<ParcelType>::move
 
     const polyMesh& mesh = td.cloud().pMesh();
     const polyBoundaryMesh& pbMesh = mesh.boundaryMesh();
+    const cloudSolution& solution = td.cloud().solution();
     const scalarField& cellLengthScale = td.cloud().cellLengthScale();
-    const scalar maxCo = td.cloud().solution().maxCo();
 
     scalar tEnd = (1.0 - p.stepFraction())*trackTime;
-    scalar dtMax = trackTime;
-    if (td.cloud().solution().transient())
-    {
-        dtMax *= maxCo;
-    }
+    scalar dtMax = solution.deltaTMax(trackTime);
 
     bool tracking = true;
     label nTrackingStalled = 0;
@@ -294,7 +291,8 @@ bool Foam::KinematicParcel<ParcelType>::move
         if (p.active() && tracking && (magU > ROOTVSMALL))
         {
             const scalar d = dt*magU;
-            const scalar dCorr = min(d, maxCo*cellLengthScale[cellI]);
+            const scalar deltaLMax = solution.deltaLMax(cellLengthScale[cellI]);
+            const scalar dCorr = min(d, deltaLMax);
             dt *=
                 dCorr/d
                *p.trackToFace(p.position() + dCorr*U_/magU, td);
@@ -302,7 +300,7 @@ bool Foam::KinematicParcel<ParcelType>::move
 
         tEnd -= dt;
 
-        scalar newStepFraction = 1.0 - tEnd/trackTime;
+        const scalar newStepFraction = 1.0 - tEnd/trackTime;
 
         if (tracking)
         {
@@ -328,7 +326,7 @@ bool Foam::KinematicParcel<ParcelType>::move
         p.stepFraction() = newStepFraction;
 
         bool calcParcel = true;
-        if (!tracking && td.cloud().solution().steadyState())
+        if (!tracking && solution.steadyState())
         {
             calcParcel = false;
         }
@@ -339,7 +337,7 @@ bool Foam::KinematicParcel<ParcelType>::move
             // Update cell based properties
             p.setCellValues(td, dt, cellI);
 
-            if (td.cloud().solution().cellValueSourceCorrection())
+            if (solution.cellValueSourceCorrection())
             {
                 p.cellValueSourceCorrection(td, dt, cellI);
             }
@@ -459,6 +457,8 @@ void Foam::KinematicParcel<ParcelType>::hitPatch
 )
 {
     td.keepParticle = false;
+
+    td.cloud().patchInteraction().addToEscapedParcels(nParticle_*mass());
 }
 
 
diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C
index 289127b18bd3632fffc40b52aebe1e2d0ef135e3..2f050e26ae5f2fa35dddde19d3290b070aaae51a 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C
+++ b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C
@@ -121,7 +121,13 @@ Foam::scalar Foam::ReactingMultiphaseParcel<ParcelType>::updateMassFractions
 
     YMix[GAS] = massGas/massNew;
     YMix[LIQ] = massLiquid/massNew;
-    YMix[SLD] = 1.0 - YMix[GAS] - YMix[LIQ];
+    YMix[SLD] = massSolid/massNew;
+
+    scalar Ytotal = sum(YMix);
+
+    YMix[GAS] /= Ytotal;
+    YMix[LIQ] /= Ytotal;
+    YMix[SLD] /= Ytotal;
 
     return massNew;
 }
diff --git a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C
index cbbf563fa4aaf508c0a67c18384b87f4b22779bc..98e0c16756fb069908f84eea22e689effee66f1d 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C
+++ b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C
@@ -73,6 +73,9 @@ void Foam::ThermoParcel<ParcelType>::cellValueSourceCorrection
     this->Uc_ += td.cloud().UTrans()[cellI]/this->massCell(cellI);
 
     const scalar CpMean = td.CpInterp().psi()[cellI];
+
+    tetIndices tetIs = this->currentTetIndices();
+    Tc_ = td.TInterp().interpolate(this->position(), tetIs);
     Tc_ += td.cloud().hsTrans()[cellI]/(CpMean*this->massCell(cellI));
 
     if (Tc_ < td.cloud().constProps().TMin())
diff --git a/src/lagrangian/intermediate/parcels/include/makeParcelCloudFunctionObjects.H b/src/lagrangian/intermediate/parcels/include/makeParcelCloudFunctionObjects.H
index 783878f4800683e15a785d2dddc3b2f69ff4b6ba..a181ae19b15e223e4f1d9402cbcb5b40a16d1ef4 100644
--- a/src/lagrangian/intermediate/parcels/include/makeParcelCloudFunctionObjects.H
+++ b/src/lagrangian/intermediate/parcels/include/makeParcelCloudFunctionObjects.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -28,6 +28,7 @@ License
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+#include "CloudToVTK.H"
 #include "FacePostProcessing.H"
 #include "ParticleCollector.H"
 #include "ParticleErosion.H"
@@ -42,6 +43,7 @@ License
                                                                               \
     makeCloudFunctionObject(CloudType);                                       \
                                                                               \
+    makeCloudFunctionObjectType(CloudToVTK, CloudType);                       \
     makeCloudFunctionObjectType(FacePostProcessing, CloudType);               \
     makeCloudFunctionObjectType(ParticleCollector, CloudType);                \
     makeCloudFunctionObjectType(ParticleErosion, CloudType);                  \
diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/CloudToVTK.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/CloudToVTK.C
new file mode 100644
index 0000000000000000000000000000000000000000..240154edf3e02c9b86f85700f3507ab664f66b98
--- /dev/null
+++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/CloudToVTK.C
@@ -0,0 +1,164 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 OpenFOAM Foundation
+     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "CloudToVTK.H"
+#include "vtkTools.H"
+#include "floatScalar.H"
+
+// * * * * * * * * * * * * * Protectd Member Functions * * * * * * * * * * * //
+
+template<class CloudType>
+void Foam::CloudToVTK<CloudType>::writeData
+(
+    std::ostream& vtkOs,
+    const bool binary,
+    const List<floatScalar>& data
+) const
+{
+    const label procI = Pstream::myProcNo();
+
+    List<List<floatScalar> > allProcData(Pstream::nProcs());
+    allProcData[procI] = data;
+    Pstream::gatherList(allProcData);
+    List<floatScalar> allData =
+        ListListOps::combine<List<floatScalar> >
+        (
+            allProcData,
+            accessOp<List<floatScalar> >()
+        );
+
+    vtkTools::write(vtkOs, binary, allData);
+}
+
+
+template<class CloudType>
+template<class Type>
+void Foam::CloudToVTK<CloudType>::writeFieldData
+(
+    std::ostream& vtkOs,
+    const bool binary,
+    const List<floatScalar>& data,
+    const word& title,
+    const label nParcels
+) const
+{
+    vtkOs
+        << title << ' ' << pTraits<Type>::nComponents << ' '
+        << nParcels << " float" << std::endl;
+    writeData(vtkOs, binary, data);
+}
+
+
+template<class CloudType>
+void Foam::CloudToVTK<CloudType>::write()
+{
+    label nParcels = this->owner().size();
+    DynamicList<floatScalar> position(3*nParcels);
+    DynamicList<floatScalar> U(3*nParcels);
+    DynamicList<floatScalar> d(nParcels);
+    DynamicList<floatScalar> age(nParcels);
+    DynamicList<floatScalar> rho(nParcels);
+
+    forAllConstIter(typename CloudType, this->owner(), iter)
+    {
+        vtkTools::insert(iter().position(), position);
+        vtkTools::insert(iter().U(), U);
+        vtkTools::insert(iter().d(), d);
+        vtkTools::insert(iter().age(), age);
+        vtkTools::insert(iter().rho(), rho);
+    }
+
+    reduce(nParcels, sumOp<label>());
+
+
+binary_ = false;
+    if (Pstream::master())
+    {
+        // Create directory if does not exist
+        mkDir(this->outputTimeDir());
+
+        // Open new file at start up
+
+        const fileName fName = this->outputTimeDir()/(type() + ".vtk");
+        this->setModelProperty("file", fName);
+
+        OFstream os(fName, binary_ ? IOstream::BINARY : IOstream::ASCII);
+        std::ostream& vtkOs = os.stdStream();
+
+
+        vtkTools::writeHeader(vtkOs, binary_, this->modelName().c_str());
+        vtkOs
+            << "DATASET POLYDATA" << std::endl
+            << "POINTS " << nParcels << " float" << std::endl;
+
+        writeData(vtkOs, binary_, position);
+
+        vtkOs
+            << "POINT_DATA " << nParcels << std::endl
+            << "FIELD attributes " << 4
+            << std::endl;
+
+        writeFieldData<vector>(vtkOs, binary_, U, "U", nParcels);
+        writeFieldData<scalar>(vtkOs, binary_, d, "d", nParcels);
+        writeFieldData<scalar>(vtkOs, binary_, age, "age", nParcels);
+        writeFieldData<scalar>(vtkOs, binary_, rho, "rho", nParcels);
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+template<class CloudType>
+Foam::CloudToVTK<CloudType>::CloudToVTK
+(
+    const dictionary& dict,
+    CloudType& owner,
+    const word& modelName
+)
+:
+    CloudFunctionObject<CloudType>(dict, owner, modelName, typeName),
+    binary_(dict.lookupOrDefault<bool>("binary", true))
+{}
+
+
+template<class CloudType>
+Foam::CloudToVTK<CloudType>::CloudToVTK
+(
+    const CloudToVTK<CloudType>& c
+)
+:
+    CloudFunctionObject<CloudType>(c),
+    binary_(c.binary_)
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+template<class CloudType>
+Foam::CloudToVTK<CloudType>::~CloudToVTK()
+{}
+
+
+// ************************************************************************* //
diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/CloudToVTK.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/CloudToVTK.H
new file mode 100644
index 0000000000000000000000000000000000000000..13a68f1879d87f725fb9c6db75bba8d5296a1f6e
--- /dev/null
+++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/CloudToVTK.H
@@ -0,0 +1,138 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 OpenFOAM Foundation
+     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::CloudToVTK
+
+Description
+    Write cloud data in VTK format
+
+SourceFiles
+    CloudToVTK.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef CloudToVTK_H
+#define CloudToVTK_H
+
+#include "CloudFunctionObject.H"
+#include "volFields.H"
+#include "OFstream.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                         Class CloudToVTK Declaration
+\*---------------------------------------------------------------------------*/
+
+template<class CloudType>
+class CloudToVTK
+:
+    public CloudFunctionObject<CloudType>
+{
+
+protected:
+
+    // Protected data
+
+        //- Ascii/binary output flag
+        bool binary_;
+
+
+    // Protected Member Functions
+
+        //- Write post-processing info
+        virtual void write();
+
+        //- Helper function to write VTK data
+        void writeData
+        (
+            std::ostream& vtkOs,
+            const bool binary,
+            const List<floatScalar>& data
+        ) const;
+
+        //- Helper function to write VTK field data
+        template<class Type>
+        void writeFieldData
+        (
+            std::ostream& vtkOs,
+            const bool binary,
+            const List<floatScalar>& data,
+            const word& title,
+            const label nParcels
+        ) const;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("cloudToVTK");
+
+
+    // Constructors
+
+        //- Construct from dictionary
+        CloudToVTK
+        (
+            const dictionary& dict,
+            CloudType& owner,
+            const word& modelName
+        );
+
+        //- Construct copy
+        CloudToVTK(const CloudToVTK<CloudType>& c);
+
+        //- Construct and return a clone
+        virtual autoPtr<CloudFunctionObject<CloudType> > clone() const
+        {
+            return autoPtr<CloudFunctionObject<CloudType> >
+            (
+                new CloudToVTK<CloudType>(*this)
+            );
+        }
+
+
+    //- Destructor
+    virtual ~CloudToVTK();
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+#   include "CloudToVTK.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/vtkTools.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/vtkTools.C
new file mode 100644
index 0000000000000000000000000000000000000000..71de62552669d9452cb5ea132d984f6f1ff7bd6e
--- /dev/null
+++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/vtkTools.C
@@ -0,0 +1,287 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2011-2014 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/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "vtkTools.H"
+
+#if defined(__mips)
+#include <standards.h>
+#include <sys/endian.h>
+#endif
+
+// MacOSX
+#ifdef __DARWIN_BYTE_ORDER
+#if __DARWIN_BYTE_ORDER==__DARWIN_BIG_ENDIAN
+#undef LITTLE_ENDIAN
+#else
+#undef BIG_ENDIAN
+#endif
+#endif
+
+#if defined(LITTLE_ENDIAN) \
+ || defined(_LITTLE_ENDIAN) \
+ || defined(__LITTLE_ENDIAN)
+#   define LITTLEENDIAN 1
+#elif defined(BIG_ENDIAN) || defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN)
+#   undef LITTLEENDIAN
+#else
+#   error "Cannot find LITTLE_ENDIAN or BIG_ENDIAN symbol defined."
+#   error "Please add to compilation options"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+void Foam::vtkTools::swapWord(label& word32)
+{
+    char* mem = reinterpret_cast<char*>(&word32);
+
+    char a = mem[0];
+    mem[0] = mem[3];
+    mem[3] = a;
+
+    a = mem[1];
+    mem[1] = mem[2];
+    mem[2] = a;
+}
+
+
+void Foam::vtkTools::swapWords(const label nWords, label* words32)
+{
+    for (label i = 0; i < nWords; i++)
+    {
+        swapWord(words32[i]);
+    }
+}
+
+
+void Foam::vtkTools::write
+(
+    std::ostream& os,
+    const bool binary,
+    List<floatScalar>& fField
+)
+{
+    if (binary)
+    {
+#       ifdef LITTLEENDIAN
+        swapWords(fField.size(), reinterpret_cast<label*>(fField.begin()));
+#       endif
+        os.write
+        (
+            reinterpret_cast<char*>(fField.begin()),
+            fField.size()*sizeof(float)
+        );
+
+        os  << std::endl;
+    }
+    else
+    {
+        forAll(fField, i)
+        {
+            os  << fField[i];
+
+            if (i > 0 && (i % 10) == 0)
+            {
+                os  << std::endl;
+            }
+            else
+            {
+                os  << ' ';
+            }
+        }
+        os  << std::endl;
+    }
+}
+
+
+void Foam::vtkTools::write
+(
+    std::ostream& os,
+    const bool binary,
+    DynamicList<floatScalar>& fField
+)
+{
+    List<floatScalar>& fld = fField.shrink();
+
+    write(os, binary, fld);
+}
+
+
+void Foam::vtkTools::write
+(
+    std::ostream& os,
+    const bool binary,
+    labelList& elems
+)
+{
+    if (binary)
+    {
+#       ifdef LITTLEENDIAN
+        swapWords(elems.size(), reinterpret_cast<label*>(elems.begin()));
+#       endif
+        os.write
+        (
+            reinterpret_cast<char*>(elems.begin()),
+            elems.size()*sizeof(label)
+        );
+
+        os  << std::endl;
+    }
+    else
+    {
+        forAll(elems, i)
+        {
+            os  << elems[i];
+
+            if (i > 0 && (i % 10) == 0)
+            {
+                os  << std::endl;
+            }
+            else
+            {
+                os  << ' ';
+            }
+        }
+        os  << std::endl;
+    }
+}
+
+
+void Foam::vtkTools::write
+(
+    std::ostream& os,
+    const bool binary,
+    DynamicList<label>& elems
+)
+{
+    labelList& fld = elems.shrink();
+
+    write(os, binary, fld);
+}
+
+
+void Foam::vtkTools::writeHeader
+(
+    std::ostream& os,
+    const bool binary,
+    const std::string& title
+)
+{
+    os  << "# vtk DataFile Version 2.0" << std::endl
+        << title << std::endl;
+
+    if (binary)
+    {
+        os  << "BINARY" << std::endl;
+    }
+    else
+    {
+        os  << "ASCII" << std::endl;
+    }
+}
+
+
+void Foam::vtkTools::writeCellDataHeader
+(
+    std::ostream& os,
+    const label nCells,
+    const label nFields
+)
+{
+    os  << "CELL_DATA " << nCells << std::endl
+        << "FIELD attributes " << nFields << std::endl;
+}
+
+
+void Foam::vtkTools::writePointDataHeader
+(
+    std::ostream& os,
+    const label nPoints,
+    const label nFields
+)
+{
+    os  << "POINT_DATA  " << nPoints << std::endl
+        << "FIELD attributes " << nFields << std::endl;
+}
+
+
+void Foam::vtkTools::insert(const scalar src, DynamicList<floatScalar>& dest)
+{
+    dest.append(float(src));
+}
+
+
+void Foam::vtkTools::insert(const vector& src, DynamicList<floatScalar>& dest)
+{
+    for (direction cmpt = 0; cmpt < vector::nComponents; ++cmpt)
+    {
+        dest.append(float(src[cmpt]));
+    }
+}
+
+
+void Foam::vtkTools::insert
+(
+    const sphericalTensor& src,
+    DynamicList<floatScalar>& dest
+)
+{
+    for (direction cmpt = 0; cmpt < sphericalTensor::nComponents; ++cmpt)
+    {
+        dest.append(float(src[cmpt]));
+    }
+}
+
+
+void Foam::vtkTools::insert
+(
+    const symmTensor& src,
+    DynamicList<floatScalar>& dest
+)
+{
+    dest.append(float(src.xx()));
+    dest.append(float(src.yy()));
+    dest.append(float(src.zz()));
+    dest.append(float(src.xy()));
+    dest.append(float(src.yz()));
+    dest.append(float(src.xz()));
+}
+
+
+void Foam::vtkTools::insert(const tensor& src, DynamicList<floatScalar>& dest)
+{
+    for (direction cmpt = 0; cmpt < tensor::nComponents; ++cmpt)
+    {
+        dest.append(float(src[cmpt]));
+    }
+}
+
+
+void Foam::vtkTools::insert(const labelList& src, DynamicList<label>& dest)
+{
+    dest.append(src);
+}
+
+
+// ************************************************************************* //
diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/vtkTools.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/vtkTools.H
new file mode 100644
index 0000000000000000000000000000000000000000..12bdda1f3801122a0f228de7723ebbe3e27cc29e
--- /dev/null
+++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/vtkTools.H
@@ -0,0 +1,126 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2011-2014 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/>.
+
+Class
+    Foam::vtkTools
+
+Description
+    Various functions for collecting and writing binary data.
+
+SourceFiles
+    vtkTools.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef vtkTools_H
+#define vtkTools_H
+
+#include "floatScalar.H"
+#include "DynamicList.H"
+#include "volFieldsFwd.H"
+#include "pointFieldsFwd.H"
+#include "volPointInterpolation.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                          Class vtkTools Declaration
+\*---------------------------------------------------------------------------*/
+
+class vtkTools
+{
+    // Private Member Functions
+
+        // Swap halves of word.
+
+            static void swapWord(label& word32);
+            static void swapWords(const label nWords, label* words32);
+
+
+public:
+
+    // Write ascii or binary. If binary optionally in-place swaps argument
+
+        static void write(std::ostream&, const bool, List<floatScalar>&);
+        static void write(std::ostream&, const bool, DynamicList<floatScalar>&);
+        static void write(std::ostream&, const bool, labelList&);
+        static void write(std::ostream&, const bool, DynamicList<label>&);
+
+
+    // Write header
+
+        static void writeHeader
+        (
+            std::ostream&,
+            const bool isBinary,
+            const std::string& title
+        );
+        static void writeCellDataHeader
+        (
+            std::ostream&,
+            const label nCells,
+            const label nFields
+        );
+        static void writePointDataHeader
+        (
+            std::ostream&,
+            const label nPoints,
+            const label nFields
+        );
+
+
+    // Convert to VTK and store
+
+        static void insert(const scalar, DynamicList<floatScalar>&);
+        static void insert(const point&, DynamicList<floatScalar>&);
+        static void insert(const sphericalTensor&, DynamicList<floatScalar>&);
+        static void insert(const symmTensor&, DynamicList<floatScalar>&);
+        static void insert(const tensor&, DynamicList<floatScalar>&);
+
+
+    //- Append elements to DynamicList
+    static void insert(const labelList&, DynamicList<label>&);
+
+    template<class Type>
+    static void insert(const List<Type>&, DynamicList<floatScalar>&);
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+#   include "vtkToolsTemplates.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/vtkToolsTemplates.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/vtkToolsTemplates.C
new file mode 100644
index 0000000000000000000000000000000000000000..53ea67e398e4b84ec5f5ca0723803ee823a94e62
--- /dev/null
+++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/vtkToolsTemplates.C
@@ -0,0 +1,44 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2011-2014 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/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "vtkTools.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+template<class Type>
+void Foam::vtkTools::insert
+(
+    const List<Type>& source,
+    DynamicList<floatScalar>& dest
+)
+{
+    forAll(source, i)
+    {
+        insert(source[i], dest);
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C
index 10cb1d3c544a0d7785a3324f27bf09e04f7f05a6..42d4c7a33d7ea9b7f8fb5329afbd62e991ffb4d6 100644
--- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C
+++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C
@@ -453,7 +453,15 @@ void Foam::ParticleCollector<CloudType>::write()
     {
         if (Pstream::master())
         {
-            autoPtr<surfaceWriter> writer(surfaceWriter::New(surfaceFormat_));
+            autoPtr<surfaceWriter> writer
+            (
+                surfaceWriter::New
+                (
+                    surfaceFormat_,
+                    this->coeffDict().subOrEmptyDict("formatOptions").
+                        subOrEmptyDict(surfaceFormat_)
+                )
+            );
 
             writer->write
             (
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairSpringSliderDashpot/PairSpringSliderDashpot.H b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairSpringSliderDashpot/PairSpringSliderDashpot.H
index f5e4b31ff9d323a5d5d308e644520fa409a5b460..01336c85185515e2648951ed4ea8943636742a13 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairSpringSliderDashpot/PairSpringSliderDashpot.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairSpringSliderDashpot/PairSpringSliderDashpot.H
@@ -41,7 +41,7 @@ Description
 namespace Foam
 {
 /*---------------------------------------------------------------------------*\
-                    Class PairSpringSliderDashpot Declaration
+                   Class PairSpringSliderDashpot Declaration
 \*---------------------------------------------------------------------------*/
 
 template<class CloudType>
@@ -71,7 +71,7 @@ class PairSpringSliderDashpot
         //- Cohesion energy density [J/m^3]
         scalar cohesionEnergyDensity_;
 
-        // Switch cohesion on and off
+        //- Switch cohesion on and off
         bool cohesion_;
 
         //- The number of steps over which to resolve the minimum
@@ -104,7 +104,7 @@ class PairSpringSliderDashpot
     // Private Member Functions
 
         //- Find the appropriate properties for determining the minimum
-        //- Allowable timestep
+        //  allowable timestep
         void findMinMaxProperties
         (
             scalar& RMin,
@@ -136,8 +136,8 @@ public:
             return volumeFactor_;
         }
 
-        // Return the area of overlap between two spheres of radii rA and rB,
-        // centres separated by a distance rAB.  Assumes rAB < (rA + rB).
+        //- Return the area of overlap between two spheres of radii rA and rB,
+        //  centres separated by a distance rAB.  Assumes rAB < (rA + rB).
         inline scalar overlapArea(scalar rA, scalar rB, scalar rAB) const
         {
             // From:
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallLocalSpringSliderDashpot/WallLocalSpringSliderDashpot.H b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallLocalSpringSliderDashpot/WallLocalSpringSliderDashpot.H
index e48e949f57388cea7f7c9b17be743c89060fb746..699c9cda2c871493109cd0ee6756ce83f6552c90 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallLocalSpringSliderDashpot/WallLocalSpringSliderDashpot.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallLocalSpringSliderDashpot/WallLocalSpringSliderDashpot.H
@@ -68,7 +68,7 @@ class WallLocalSpringSliderDashpot
         //- Cohesion energy density [J/m^3]
         scalarList cohesionEnergyDensity_;
 
-        // Switch cohesion on and off
+        //- Switch cohesion on and off
         boolList cohesion_;
 
         //- Mapping the patch index to the model data
@@ -107,7 +107,7 @@ class WallLocalSpringSliderDashpot
     // Private Member Functions
 
         //- Find the appropriate properties for determining the minimum
-        //- Allowable timestep
+        //  allowable timestep
         void findMinMaxProperties
         (
             scalar& rMin,
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallSpringSliderDashpot/WallSpringSliderDashpot.H b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallSpringSliderDashpot/WallSpringSliderDashpot.H
index 88dca9b66c45a3b1d5dbd341e938e946a1295a44..0087d011978773c003e394ad77c248e672380f0e 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallSpringSliderDashpot/WallSpringSliderDashpot.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallSpringSliderDashpot/WallSpringSliderDashpot.H
@@ -101,7 +101,7 @@ class WallSpringSliderDashpot
     // Private Member Functions
 
         //- Find the appropriate properties for determining the minimum
-        //- Allowable timestep
+        //  allowable timestep
         void findMinMaxProperties
         (
             scalar& rMin,
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/CellZoneInjection/CellZoneInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/CellZoneInjection/CellZoneInjection.H
index 9edd88736e7cbc8ea9d390173d3ca3bc92fb6aa4..ece119404dce6e58bd5d403be8a783d2a335d439 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/CellZoneInjection/CellZoneInjection.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/CellZoneInjection/CellZoneInjection.H
@@ -27,10 +27,12 @@ Class
 Description
     Injection positions specified by a particle number density within a cell set
 
-    - User specifies
-      - Number density of particles in cell set (effective)
-      - Total mass to inject
-      - Initial parcel velocity
+    User specifies
+    - Number density of particles in cell set (effective)
+    - Total mass to inject
+    - Initial parcel velocity
+
+    Additional
     - Parcel diameters obtained by PDF model
     - All parcels introduced at SOI
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C
index 338897117876eb6e1a67c0966fe2e06f83eb13cd..0cca8f321ecc3d079aca76b9e01ac58ccebe8113 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C
@@ -203,8 +203,6 @@ Foam::label Foam::ConeInjection<CloudType>::parcelsToInject
 
         const label nToInject = targetParcels - nInjected_;
 
-        nInjected_ += nToInject;
-
         return positionAxis_.size()*nToInject;
     }
     else
@@ -264,7 +262,7 @@ void Foam::ConeInjection<CloudType>::setProperties
 {
     cachedRandom& rnd = this->owner().rndGen();
 
-    // set particle velocity
+    // Set particle velocity
     const label i = parcelI % positionAxis_.size();
 
     scalar t = time - this->SOI_;
@@ -283,8 +281,11 @@ void Foam::ConeInjection<CloudType>::setProperties
 
     parcel.U() = Umag_.value(t)*dirVec;
 
-    // set particle diameter
+    // Set particle diameter
     parcel.d() = sizeDistribution_().sample();
+
+    // Increment number of particles injected
+    nInjected_++;
 }
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H
index f45fd4a4f0f8a866a41a161a59adb9ca2c32f8c8..56519243e4822b0ab89f94931e9d4f191a375da8 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H
@@ -26,12 +26,15 @@ Class
 
 Description
     Multi-point cone injection model
-    - User specifies
-      - time of start of injection
-      - list of injector positions and directions (along injection axes)
-      - number of parcels to inject per injector
-      - parcel velocities
-      - inner and outer half-cone angles
+
+    User specifies
+    - time of start of injection
+    - list of injector positions and directions (along injection axes)
+    - number of parcels to inject per injector
+    - parcel velocities
+    - inner and outer half-cone angles
+
+    Additional
     - Parcel diameters obtained by distribution model
 
 SourceFiles
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.C
index abe80140fc69e0e8a8fe18528f64b1d9992f79ce..c748a8684b13f124756795040b33e3eb87cc3718 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.C
@@ -163,8 +163,10 @@ Foam::ConeNozzleInjection<CloudType>::ConeNozzleInjection
     if (innerDiameter_ >= outerDiameter_)
     {
         FatalErrorInFunction
-         << "innerNozzleDiameter >= outerNozzleDiameter" << nl
-         << exit(FatalError);
+            << "Inner diameter must be less than the outer diameter:" << nl
+            << "    innerDiameter: " << innerDiameter_ << nl
+            << "    outerDiameter: " << outerDiameter_
+            << exit(FatalError);
     }
 
     duration_ = owner.db().time().userTimeToTime(duration_);
@@ -258,7 +260,7 @@ void Foam::ConeNozzleInjection<CloudType>::updateMesh()
         }
         default:
         {
-            // do nothing
+            // Do nothing
         }
     }
 }
@@ -337,9 +339,10 @@ void Foam::ConeNozzleInjection<CloudType>::setPositionAndCell
         }
         case imDisc:
         {
-            scalar frac = rndGen.sample01<scalar>();
+            scalar frac = rndGen.globalSample01<scalar>();
             scalar dr = outerDiameter_ - innerDiameter_;
             scalar r = 0.5*(innerDiameter_ + frac*dr);
+
             position = position_ + r*normal_;
 
             this->findCellAtPosition
@@ -347,8 +350,7 @@ void Foam::ConeNozzleInjection<CloudType>::setPositionAndCell
                 cellOwner,
                 tetFaceI,
                 tetPtI,
-                position,
-                false
+                position
             );
             break;
         }
@@ -373,7 +375,7 @@ void Foam::ConeNozzleInjection<CloudType>::setProperties
 {
     cachedRandom& rndGen = this->owner().rndGen();
 
-    // set particle velocity
+    // Set particle velocity
     const scalar deg2Rad = mathematical::pi/180.0;
 
     scalar t = time - this->SOI_;
@@ -423,7 +425,7 @@ void Foam::ConeNozzleInjection<CloudType>::setProperties
         }
     }
 
-    // set particle diameter
+    // Set particle diameter
     parcel.d() = sizeDistribution_->sample();
 }
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.H
index 1d32db5f7284ec3197957125d929b2dfe3bc6efd..9490c31128a252c6248d4c562b746293e2295127 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.H
@@ -27,17 +27,16 @@ Class
 Description
     Cone injection
 
-    - User specifies
-      - time of start of injection
-      - injector position
-      - direction (along injection axis)
-      - parcel flow rate
-      - inner and outer half-cone angles
-
+    User specifies
+    - time of start of injection
+    - injector position
+    - direction (along injection axis)
+    - parcel flow rate
+    - inner and outer half-cone angles
+
+    Additional
     - Parcel diameters obtained by size distribution model
-
     - Parcel velocity is calculated as:
-
         - Constant velocity
             U = \<specified by user\>
         - Pressure driven velocity
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.H
index 704345d8f536b3740f308de30f6079cc1387486d..8e7c7d682d5ac6a9c4eda23b9eb3c114e6926e9d 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.H
@@ -25,18 +25,19 @@ Class
     Foam::FieldActivatedInjection
 
 Description
-    Injection at specified positions, with the conditions:
+    Conditional injection at specified positions.
 
-    - for injection to be allowed
+    For injection to be allowed, the equality must be satisfied:
 
         factor*referenceField[cellI] >= thresholdField[cellI]
 
-        where:
-          - referenceField is the field used to supply the look-up values
-          - thresholdField supplies the values beyond which the injection is
+        Where:
+        - referenceField is the field used to supply the look-up values
+        - thresholdField supplies the values beyond which the injection is
             permitted
 
-    - limited to a user-supllied number of injections per injector location
+    Note:
+    - Limited to a user-supplied number of injections per injector location
 
 SourceFiles
     FieldActivatedInjection.C
@@ -56,7 +57,7 @@ namespace Foam
 {
 
 /*---------------------------------------------------------------------------*\
-                    Class FieldActivatedInjection Declaration
+                   Class FieldActivatedInjection Declaration
 \*---------------------------------------------------------------------------*/
 
 template<class CloudType>
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C
index 18a3c22a99f12f088fac53372418b18e1f128dfc..c1ea66b90c0dbb487e6391f4c9b1e93bf7fbd8b7 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C
@@ -267,7 +267,8 @@ Foam::InjectionModel<CloudType>::InjectionModel(CloudType& owner)
     nParticleFixed_(0.0),
     time0_(0.0),
     timeStep0_(this->template getModelProperty<scalar>("timeStep0")),
-    delayedVolume_(0.0)
+    delayedVolume_(0.0),
+    injectorID_(-1)
 {}
 
 
@@ -295,7 +296,8 @@ Foam::InjectionModel<CloudType>::InjectionModel
     nParticleFixed_(0.0),
     time0_(owner.db().time().value()),
     timeStep0_(this->template getModelProperty<scalar>("timeStep0")),
-    delayedVolume_(0.0)
+    delayedVolume_(0.0),
+    injectorID_(this->coeffDict().lookupOrDefault("injectorID", -1))
 {
     // Provide some info
     // - also serves to initialise mesh dimensions - needed for parallel runs
@@ -303,18 +305,25 @@ Foam::InjectionModel<CloudType>::InjectionModel
     Info<< "    Constructing " << owner.mesh().nGeometricD() << "-D injection"
         << endl;
 
+    if (injectorID_ != -1)
+    {
+        Info<< "    injector ID: " << injectorID_ << endl;
+    }
+
     if (owner.solution().transient())
     {
         this->coeffDict().lookup("massTotal") >> massTotal_;
         this->coeffDict().lookup("SOI") >> SOI_;
-        SOI_ = owner.db().time().userTimeToTime(SOI_);
     }
     else
     {
         massFlowRate_.reset(this->coeffDict());
         massTotal_ = massFlowRate_.value(owner.db().time().value());
+        this->coeffDict().readIfPresent("SOI", SOI_);
     }
 
+    SOI_ = owner.db().time().userTimeToTime(SOI_);
+
     const word parcelBasisType = this->coeffDict().lookup("parcelBasisType");
 
     if (parcelBasisType == "mass")
@@ -362,7 +371,8 @@ Foam::InjectionModel<CloudType>::InjectionModel
     nParticleFixed_(im.nParticleFixed_),
     time0_(im.time0_),
     timeStep0_(im.timeStep0_),
-    delayedVolume_(im.delayedVolume_)
+    delayedVolume_(im.delayedVolume_),
+    injectorID_(im.injectorID_)
 {}
 
 
@@ -415,10 +425,10 @@ void Foam::InjectionModel<CloudType>::inject(TrackData& td)
     scalar massAdded = 0.0;
     label newParcels = 0;
     scalar newVolumeFraction = 0.0;
+    scalar delayedVolume = 0;
 
     if (prepareForNextTimeStep(time, newParcels, newVolumeFraction))
     {
-        scalar delayedVolume = 0;
 
         const scalar trackTime = this->owner().solution().trackTime();
         const polyMesh& mesh = this->owner().mesh();
@@ -504,7 +514,8 @@ void Foam::InjectionModel<CloudType>::inject(TrackData& td)
 
                         if (pPtr->move(td, dt))
                         {
-                            td.cloud().addParticle(pPtr);
+                            pPtr->typeId() = injectorID_;
+                            cloud.addParticle(pPtr);
                         }
                         else
                         {
@@ -519,10 +530,10 @@ void Foam::InjectionModel<CloudType>::inject(TrackData& td)
                 }
             }
         }
-
-        delayedVolume_ = delayedVolume;
     }
 
+    delayedVolume_ = returnReduce(delayedVolume, sumOp<scalar>());
+
     postInjectCheck(parcelsAdded, massAdded);
 }
 
@@ -540,6 +551,13 @@ void Foam::InjectionModel<CloudType>::injectSteadyState
         return;
     }
 
+    const scalar time = this->owner().db().time().value();
+
+    if (time < SOI_)
+    {
+        return;
+    }
+
     const polyMesh& mesh = this->owner().mesh();
     typename TrackData::cloudType& cloud = td.cloud();
 
@@ -609,8 +627,10 @@ void Foam::InjectionModel<CloudType>::injectSteadyState
                     pPtr->rho()
                 );
 
+            pPtr->typeId() = injectorID_;
+
             // Add the new parcel
-            td.cloud().addParticle(pPtr);
+            cloud.addParticle(pPtr);
 
             massAdded += pPtr->nParticle()*pPtr->mass();
             parcelsAdded++;
@@ -624,9 +644,9 @@ void Foam::InjectionModel<CloudType>::injectSteadyState
 template<class CloudType>
 void Foam::InjectionModel<CloudType>::info(Ostream& os)
 {
-    os  << "    " << this->modelName() << ":" << nl
-        << "        number of parcels added     = " << parcelsAddedTotal_ << nl
-        << "        mass introduced             = " << massInjected_ << nl;
+    os  << "    Injector " << this->modelName() << ":" << nl
+        << "      - parcels added               = " << parcelsAddedTotal_ << nl
+        << "      - mass introduced             = " << massInjected_ << nl;
 
     if (this->outputTime())
     {
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H
index b570a6bf4ab5080201b4fe68fef246df7a9c555e..fc0e285608c3835b4e24d4d2dfeeb7c44ef493b7 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H
@@ -138,6 +138,9 @@ protected:
             //  less than 1 particle per parcel
             scalar delayedVolume_;
 
+            //- Optional injector ID
+            label injectorID_;
+
 
     // Protected Member Functions
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H
index bbadab5409cf4c059298a9cc0a0cfd1cf25cc4f0..c9a91e8be6357014570478596aa9c4d3ef0864da 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H
@@ -26,10 +26,13 @@ Class
 
 Description
     Manual injection
-    - User specifies
-      - Total mass to inject
-      - Parcel positions in file \c positionsFile
-      - Initial parcel velocity
+
+    User specifies
+    - Total mass to inject
+    - Parcel positions in file \c positionsFile
+    - Initial parcel velocity
+
+    Additional
     - Parcel diameters obtained by distribution model
     - All parcels introduced at SOI
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.C
index cee8eaa3dbd5555c5c7b9ae22a92a900ff56b24d..57c8f915375e75c86e5cb6ab6831854657645a97 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.C
@@ -121,9 +121,8 @@ Foam::label Foam::PatchInjection<CloudType>::parcelsToInject
     if ((time0 >= 0.0) && (time0 < duration_))
     {
         scalar nParcels = (time1 - time0)*parcelsPerSecond_;
-
         cachedRandom& rnd = this->owner().rndGen();
-
+        scalar rndPos = rnd.globalPosition(scalar(0), scalar(1));
         label nParcelsToInject = floor(nParcels);
 
         // Inject an additional parcel with a probability based on the
@@ -131,10 +130,7 @@ Foam::label Foam::PatchInjection<CloudType>::parcelsToInject
         if
         (
             nParcelsToInject > 0
-         && (
-               nParcels - scalar(nParcelsToInject)
-             > rnd.globalPosition(scalar(0), scalar(1))
-            )
+         && (nParcels - scalar(nParcelsToInject) > rndPos)
         )
         {
             ++nParcelsToInject;
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.H
index c782ad860d8024c95b28f09d10966e1f5d851d41..e32b2918513b5591f8ad12bbb4fb3888bd503250 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.H
@@ -26,12 +26,15 @@ Class
 
 Description
     Patch injection
-    - User specifies
-      - Total mass to inject
-      - Name of patch
-      - Injection duration
-      - Initial parcel velocity
-      - Injection volume flow rate
+
+    User specifies
+    - Total mass to inject
+    - Name of patch
+    - Injection duration
+    - Initial parcel velocity
+    - Injection volume flow rate
+
+    Additional
     - Parcel diameters obtained by distribution model
     - Parcels injected randomly across the patch
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/Drag/PlessisMasliyahDrag/PlessisMasliyahDragForce.C b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/Drag/PlessisMasliyahDrag/PlessisMasliyahDragForce.C
index 970dee90f9614e4fb7192d47fe360775e2f1a6e3..0dd49b7f0ae47c9f6a332ec4a39d046429457853 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/Drag/PlessisMasliyahDrag/PlessisMasliyahDragForce.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/Drag/PlessisMasliyahDrag/PlessisMasliyahDragForce.C
@@ -104,7 +104,7 @@ Foam::forceSuSp Foam::PlessisMasliyahDragForce<CloudType>::calcCoupled
 {
     scalar alphac(alphac_[p.cell()]);
 
-    scalar cbrtAlphap(pow(1.0 - alphac, 1.0/3.0));
+    scalar cbrtAlphap(cbrt(1.0 - alphac));
 
     scalar A =
         26.8*pow3(alphac)
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C
index 5ccaf9bc02814807724b6b929d960628aa7a5461..d21917710735f22cefa9f820b216cb64e35cab41 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -123,7 +123,9 @@ Foam::PatchInteractionModel<CloudType>::PatchInteractionModel
 )
 :
     CloudSubModelBase<CloudType>(owner, dict, typeName, type),
-    UName_(this->coeffDict().lookupOrDefault("UName", word("U")))
+    UName_(this->coeffDict().lookupOrDefault("UName", word("U"))),
+    escapedParcels_(0),
+    escapedMass_(0.0)
 {}
 
 
@@ -134,7 +136,9 @@ Foam::PatchInteractionModel<CloudType>::PatchInteractionModel
 )
 :
     CloudSubModelBase<CloudType>(pim),
-    UName_(pim.UName_)
+    UName_(pim.UName_),
+    escapedParcels_(pim.escapedParcels_),
+    escapedMass_(pim.escapedMass_)
 {}
 
 
@@ -154,10 +158,42 @@ const Foam::word& Foam::PatchInteractionModel<CloudType>::UName() const
 }
 
 
+template<class CloudType>
+void Foam::PatchInteractionModel<CloudType>::addToEscapedParcels
+(
+    const scalar mass
+)
+{
+    escapedMass_ += mass;
+    escapedParcels_++;
+}
+
+
 template<class CloudType>
 void Foam::PatchInteractionModel<CloudType>::info(Ostream& os)
 {
-    // do nothing
+    const label escapedParcels0 =
+        this->template getBaseProperty<label>("escapedParcels");
+    const label escapedParcelsTotal =
+        escapedParcels0 + returnReduce(escapedParcels_, sumOp<label>());
+
+    const scalar escapedMass0 =
+        this->template getBaseProperty<scalar>("escapedMass");
+    const scalar escapedMassTotal =
+        escapedMass0 + returnReduce(escapedMass_, sumOp<scalar>());
+
+    os  << "    Parcel fate: system (number, mass)" << nl
+        << "      - escape                      = " << escapedParcelsTotal
+        << ", " << escapedMassTotal << endl;
+
+    if (this->outputTime())
+    {
+        this->setBaseProperty("escapedParcels", escapedParcelsTotal);
+        escapedParcels_ = 0;
+
+        this->setBaseProperty("escapedMass", escapedMassTotal);
+        escapedMass_ = 0.0;
+    }
 }
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.H
index bfc4ae277b13a0690086fb94f8b649347bf980c6..66fc753f07ab375b72eec774b7c77726962b2180 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.H
@@ -74,7 +74,7 @@ public:
         static wordList interactionTypeNames_;
 
 
-private:
+protected:
 
     // Private data
 
@@ -82,6 +82,16 @@ private:
         const word UName_;
 
 
+        // Counters
+
+            //- Number of parcels escaped
+            label escapedParcels_;
+
+            //- Mass of parcels escaped
+            scalar escapedMass_;
+
+
+
 public:
 
     //- Runtime type information
@@ -158,6 +168,9 @@ public:
             const tetIndices& tetIs
         ) = 0;
 
+        //- Add to escaped parcels
+        void addToEscapedParcels(const scalar mass);
+
 
         // I-O
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.C b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.C
index d2dbb92d6c5a401956d6f49affb97d0b3a9f0135..3f3d9974033928570bee89322c82f1c508ed6713 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.C
@@ -266,8 +266,9 @@ void Foam::SurfaceFilmModel<CloudType>::info(Ostream& os)
     label nInjectTotal =
         nInject0 + returnReduce(nParcelsInjected_, sumOp<label>());
 
-    os  << "    Parcels absorbed into film      = " << nTransTotal << nl
-        << "    New film detached parcels       = " << nInjectTotal << endl;
+    os  << "    Surface film:" << nl
+        << "      - parcels absorbed            = " << nTransTotal << nl
+        << "      - parcels ejected             = " << nInjectTotal << endl;
 
     if (this->outputTime())
     {
diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.C b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.C
index ee3f961e68e52da883d3e8f22b1d6823995ccdab..26127eaf1240bfd95e8c83325f6015b32956b3b6 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.C
+++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.C
@@ -229,7 +229,7 @@ const Foam::scalarField& Foam::CompositionModel<CloudType>::Y0
 
 
 template<class CloudType>
-Foam::scalarField Foam::CompositionModel<CloudType>::X
+Foam::tmp<Foam::scalarField> Foam::CompositionModel<CloudType>::X
 (
     const label phasei,
     const scalarField& Y
@@ -267,9 +267,8 @@ Foam::scalarField Foam::CompositionModel<CloudType>::X
         }
     }
 
-    X /= WInv;
-
-    return X;
+    tmp<scalarField> tfld = X/(WInv + ROOTVSMALL);
+    return tfld;
 }
 
 
diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H
index b57da79fde10eb441b90fa5160882b48ba820d53..97aa1c5c7c3ab925fb10bd3640ed764155287cd9 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H
@@ -188,7 +188,11 @@ public:
 
                 //- Return the list of phase phaseI volume fractions fractions
                 //  based on supplied mass fractions Y
-                scalarField X(const label phaseI, const scalarField& Y) const;
+                tmp<scalarField> X
+                (
+                    const label phaseI,
+                    const scalarField& Y
+                ) const;
 
 
             // Mixture properties
diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.C b/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.C
index 7f752378866ec485413d0d3880a3b64d2ea7a6a4..2aa0da83ab0319999f1fd6dc7360ca8028e3d0e6 100644
--- a/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.C
+++ b/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.C
@@ -667,7 +667,7 @@ void Foam::ThermoSurfaceFilm<CloudType>::info(Ostream& os)
     label nSplashTotal =
         nSplash0 + returnReduce(nParcelsSplashed_, sumOp<label>());
 
-    os  << "    New film splash parcels         = " << nSplashTotal << endl;
+    os  << "      - new splash parcels          = " << nSplashTotal << endl;
 
     if (this->outputTime())
     {
diff --git a/src/lagrangian/spray/Make/options b/src/lagrangian/spray/Make/options
index 3b5a4e72e9565bfce6a407b8f8641dcffa5201b5..b45129b83860fd9cc2c03834908a61ae5b55e1c6 100644
--- a/src/lagrangian/spray/Make/options
+++ b/src/lagrangian/spray/Make/options
@@ -19,6 +19,7 @@ EXE_INC = \
     -I$(LIB_SRC)/transportModels \
     -I$(LIB_SRC)/regionModels/regionModel/lnInclude \
     -I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \
+    -I$(LIB_SRC)/dynamicMesh/lnInclude \
     -I$(LIB_SRC)/dynamicFvMesh/lnInclude \
     -I$(LIB_SRC)/sampling/lnInclude \
     -I$(LIB_SRC)/finiteVolume/lnInclude \
@@ -45,6 +46,7 @@ LIB_LIBS = \
     -lincompressibleTransportModels \
     -lregionModels \
     -lsurfaceFilmModels \
+    -ldynamicMesh \
     -ldynamicFvMesh \
     -lsampling \
     -lfiniteVolume \
diff --git a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.C b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.C
index ae1651e78d5dfe3eaa0881d3ddf69bc03175f70f..f4f562543dd61dac13fe81a4cba43c4280374b49 100644
--- a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.C
+++ b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.C
@@ -24,6 +24,7 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "SprayParcel.H"
+#include "BreakupModel.H"
 #include "CompositionModel.H"
 #include "AtomizationModel.H"
 
@@ -153,13 +154,19 @@ void Foam::SprayParcel<ParcelType>::calcAtomization
     const label cellI
 )
 {
+    typedef typename TrackData::cloudType::sprayCloudType sprayCloudType;
+    const AtomizationModel<sprayCloudType>& atomization =
+        td.cloud().atomization();
+
+    if (!atomization.active())
+    {
+        return;
+    }
+
     typedef typename TrackData::cloudType::reactingCloudType reactingCloudType;
     const CompositionModel<reactingCloudType>& composition =
         td.cloud().composition();
 
-    typedef typename TrackData::cloudType::sprayCloudType sprayCloudType;
-    const AtomizationModel<sprayCloudType>& atomization =
-        td.cloud().atomization();
 
     // Average molecular weight of carrier mix - assumes perfect gas
     scalar Wc = this->rhoc_*RR*this->Tc()/this->pc();
@@ -223,11 +230,19 @@ void Foam::SprayParcel<ParcelType>::calcBreakup
     typedef typename TrackData::cloudType cloudType;
     typedef typename cloudType::parcelType parcelType;
     typedef typename cloudType::forceType forceType;
+    typedef typename TrackData::cloudType::sprayCloudType sprayCloudType;
+
+    BreakupModel<sprayCloudType>& breakup = td.cloud().breakup();
+
+    if (!breakup.active())
+    {
+        return;
+    }
 
     const parcelType& p = static_cast<const parcelType&>(*this);
     const forceType& forces = td.cloud().forces();
 
-    if (td.cloud().breakup().solveOscillationEq())
+    if (breakup.solveOscillationEq())
     {
         solveTABEq(td, dt);
     }
@@ -247,7 +262,7 @@ void Foam::SprayParcel<ParcelType>::calcBreakup
     const scalar mass = p.mass();
     const forceSuSp Fcp = forces.calcCoupled(p, dt, mass, Re, muAv);
     const forceSuSp Fncp = forces.calcNonCoupled(p, dt, mass, Re, muAv);
-    this->tMom() = mass/(Fcp.Sp() + Fncp.Sp());
+    this->tMom() = mass/(Fcp.Sp() + Fncp.Sp() + ROOTVSMALL);
 
     const vector g = td.cloud().g().value();
 
@@ -255,7 +270,7 @@ void Foam::SprayParcel<ParcelType>::calcBreakup
     scalar dChild = 0.0;
     if
     (
-        td.cloud().breakup().update
+        breakup.update
         (
             dt,
             g,
diff --git a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.H b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.H
index 4e1fab22d0210b366b856585dc7116654b0661e5..4d7f28926017cf141f3cecf1102aaf31330aa231 100644
--- a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.H
+++ b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.H
@@ -181,6 +181,25 @@ public:
         //- Runtime type information
         TypeName("SprayParcel");
 
+        //- String representation of properties
+        AddToPropertyList
+        (
+            ParcelType,
+          + " d0"
+          + " position0"
+          + " sigma"
+          + " mu"
+          + " liquidCore"
+          + " KHindex"
+          + " y"
+          + " yDot"
+          + " tc"
+          + " ms"
+          + " injector"
+          + " tMom"
+          + " user"
+        );
+
 
     // Constructors
 
diff --git a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcelIO.C b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcelIO.C
index 7d85441b1e6b3d47b4b8992bfd66022615385ded..6188ccf73552c8127f655385977b3fc21cc4da3d 100644
--- a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcelIO.C
+++ b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcelIO.C
@@ -28,6 +28,11 @@ License
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
+template<class ParcelType>
+Foam::string Foam::SprayParcel<ParcelType>::propertyList_ =
+    Foam::SprayParcel<ParcelType>::propertyList();
+
+
 template<class ParcelType>
 const std::size_t Foam::SprayParcel<ParcelType>::sizeofFields_
 (
@@ -89,7 +94,7 @@ Foam::SprayParcel<ParcelType>::SprayParcel
     (
         "SprayParcel<ParcelType>::SprayParcel"
         "("
-            "const polyMesh, "
+            "const polyMesh&, "
             "Istream&, "
             "bool"
         ")"
diff --git a/src/meshTools/regionSplit/localPointRegion.C b/src/meshTools/regionSplit/localPointRegion.C
index 26427bc7f34da8e203d6bef3a10fd6aacb2c8221..55f7b6a8c13eeb1e5324277613415d593fbafe0f 100644
--- a/src/meshTools/regionSplit/localPointRegion.C
+++ b/src/meshTools/regionSplit/localPointRegion.C
@@ -70,6 +70,11 @@ bool Foam::localPointRegion::isDuplicate
     const bool forward
 )
 {
+    if (f0.size() != f1.size())
+    {
+        return false;
+    }
+
     label fp1 = findIndex(f1, f0[0]);
 
     if (fp1 == -1)
diff --git a/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.C b/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.C
index 454d2c97b0eb00abc5f8ea369d908a9aff71bf4f..44d0ecfa470b5994d585736bceac03894819d695 100644
--- a/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.C
+++ b/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2013-2014 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -135,12 +135,12 @@ void Foam::partialWrite::read(const dictionary& dict)
 
 void Foam::partialWrite::execute()
 {
+    // Do nothing - only valid on write
 }
 
 
 void Foam::partialWrite::end()
 {
-    //Pout<< "end at time " << obr_.time().timeName() << endl;
     // Do nothing - only valid on write
 }
 
diff --git a/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.C b/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.C
index fee807a9a63ec7eaf663a4f2a310120860bb6299..bd1b41479ccd3994284598308bed74c78db7b00b 100644
--- a/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.C
+++ b/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.C
@@ -94,7 +94,7 @@ void Foam::removeRegisteredObject::execute()
 
 void Foam::removeRegisteredObject::end()
 {
-    execute();
+    // Do nothing - only valid on execute
 }
 
 
diff --git a/src/postProcessing/functionObjects/IO/writeDictionary/writeDictionary.C b/src/postProcessing/functionObjects/IO/writeDictionary/writeDictionary.C
index 0e6ec44ce8cd2c44c52ff0a8df70a6a38b047b0f..2578b4406459dbea5216a06f0b232f088885f7de 100644
--- a/src/postProcessing/functionObjects/IO/writeDictionary/writeDictionary.C
+++ b/src/postProcessing/functionObjects/IO/writeDictionary/writeDictionary.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2013-2014 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -195,7 +195,7 @@ void Foam::writeDictionary::execute()
 
 void Foam::writeDictionary::end()
 {
-    execute();
+    // do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.C b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.C
index dcdb62eff73333f532cbfb591bb18303f7087465..9104b2d293b911923409dcf6eec4502bd192e7c9 100644
--- a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.C
+++ b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.C
@@ -288,12 +288,7 @@ void Foam::fieldAverage::execute()
 
 
 void Foam::fieldAverage::end()
-{
-    if (active_)
-    {
-        execute();
-    }
-}
+{}
 
 
 void Foam::fieldAverage::timeSet()
diff --git a/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransform.C b/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransform.C
index ff761f583f03ac8b2a5df251df1eada66944211b..0275f78878650e70cdc83e5c77dd3f099b988960 100644
--- a/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransform.C
+++ b/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransform.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -30,7 +30,7 @@ License
 
 namespace Foam
 {
-defineTypeNameAndDebug(fieldCoordinateSystemTransform, 0);
+    defineTypeNameAndDebug(fieldCoordinateSystemTransform, 0);
 }
 
 
@@ -110,10 +110,7 @@ void Foam::fieldCoordinateSystemTransform::execute()
 
 void Foam::fieldCoordinateSystemTransform::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.C b/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.C
index cbdf8576065811d51d744b7e7e0929694a7015cd..d03d641a40ba6ef59967ed264399cba7d95c579a 100644
--- a/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.C
+++ b/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.C
@@ -239,10 +239,7 @@ void Foam::fieldValues::fieldValueDelta::execute()
 
 void Foam::fieldValues::fieldValueDelta::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/field/nearWallFields/nearWallFields.C b/src/postProcessing/functionObjects/field/nearWallFields/nearWallFields.C
index 3df21efc22bb764101d37ff36ce41b8a8d601961..fdea64319d90d0a72a29fad16b61c04fb4b870ce 100644
--- a/src/postProcessing/functionObjects/field/nearWallFields/nearWallFields.C
+++ b/src/postProcessing/functionObjects/field/nearWallFields/nearWallFields.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -361,15 +361,7 @@ void Foam::nearWallFields::execute()
 
 void Foam::nearWallFields::end()
 {
-    if (debug)
-    {
-        Info<< "nearWallFields:end()" << endl;
-    }
-
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/field/processorField/processorField.C b/src/postProcessing/functionObjects/field/processorField/processorField.C
index d1ec8bb5a4b5818c439157a6f9328f9fe895d849..604b2409f0639930265759d0d2a3427925216d3b 100644
--- a/src/postProcessing/functionObjects/field/processorField/processorField.C
+++ b/src/postProcessing/functionObjects/field/processorField/processorField.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -31,7 +31,7 @@ License
 
 namespace Foam
 {
-defineTypeNameAndDebug(processorField, 0);
+    defineTypeNameAndDebug(processorField, 0);
 }
 
 
@@ -119,10 +119,7 @@ void Foam::processorField::execute()
 
 void Foam::processorField::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/field/readFields/readFields.C b/src/postProcessing/functionObjects/field/readFields/readFields.C
index e2e046658c27ddcdf5045bc287951d5022f84570..07a43d6bbc57290c1bf4b025154b4c06a4aa39dc 100644
--- a/src/postProcessing/functionObjects/field/readFields/readFields.C
+++ b/src/postProcessing/functionObjects/field/readFields/readFields.C
@@ -104,10 +104,7 @@ void Foam::readFields::execute()
 
 void Foam::readFields::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.C b/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.C
index dffb7feb009adf26f06226fd5643ff64f559fc00..c2fd737800677f075120216baf462d1bc024c6ff 100644
--- a/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.C
+++ b/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.C
@@ -108,10 +108,7 @@ void Foam::surfaceInterpolateFields::execute()
 
 void Foam::surfaceInterpolateFields::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/field/valueAverage/valueAverage.C b/src/postProcessing/functionObjects/field/valueAverage/valueAverage.C
index d7c95a18e1c6cc41bc842d1efde26fc69bc1a2a3..8db50b1f6fb8ba612bf3347855b22b464394452c 100644
--- a/src/postProcessing/functionObjects/field/valueAverage/valueAverage.C
+++ b/src/postProcessing/functionObjects/field/valueAverage/valueAverage.C
@@ -180,10 +180,7 @@ void Foam::valueAverage::execute()
 
 void Foam::valueAverage::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/forces/forceCoeffs/forceCoeffs.C b/src/postProcessing/functionObjects/forces/forceCoeffs/forceCoeffs.C
index 53ad2b94603dd2e6621745f700a74d9649421c35..ef3766170882b01d580b55e9e9d55c03bcfea339 100644
--- a/src/postProcessing/functionObjects/forces/forceCoeffs/forceCoeffs.C
+++ b/src/postProcessing/functionObjects/forces/forceCoeffs/forceCoeffs.C
@@ -425,10 +425,7 @@ void Foam::forceCoeffs::execute()
 
 void Foam::forceCoeffs::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/forces/forces/forces.C b/src/postProcessing/functionObjects/forces/forces/forces.C
index 2b45394aba137cf0eefd5bcd1192f129e0367c89..9501fad1b06bc7be019051186a5be6f65ff0402c 100644
--- a/src/postProcessing/functionObjects/forces/forces/forces.C
+++ b/src/postProcessing/functionObjects/forces/forces/forces.C
@@ -1035,10 +1035,7 @@ void Foam::forces::execute()
 
 void Foam::forces::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDiv.C b/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDiv.C
index 87c9730ec506f678cffdbe9493e21d609d851b85..965b2d419884bc92093e23752a878891fb8f0336 100644
--- a/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDiv.C
+++ b/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDiv.C
@@ -149,10 +149,7 @@ void Foam::calcFvcDiv::execute()
 
 void Foam::calcFvcDiv::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.C b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.C
index 0a77e2779df9822224723d8de4eadfc92b70d68c..f7152472d1b23b8c5e65851fe96b1d8c4eb9d052 100644
--- a/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.C
+++ b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.C
@@ -111,10 +111,7 @@ void Foam::calcFvcGrad::execute()
 
 void Foam::calcFvcGrad::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/fvTools/calcMag/calcMag.C b/src/postProcessing/functionObjects/fvTools/calcMag/calcMag.C
index 46a3b107ee35f13049c05c1af855c280d488777e..b77cc92ba95445bce3fffa6b3b4cb0a686e3e31c 100644
--- a/src/postProcessing/functionObjects/fvTools/calcMag/calcMag.C
+++ b/src/postProcessing/functionObjects/fvTools/calcMag/calcMag.C
@@ -114,10 +114,7 @@ void Foam::calcMag::execute()
 
 void Foam::calcMag::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/jobControl/runTimeControl/runTimeControl.C b/src/postProcessing/functionObjects/jobControl/runTimeControl/runTimeControl.C
index ccabf77d12690fdb4f2ae28175b459f46a50ec57..31e417cfdb27cd237bd9607f1eee2ce818603893 100644
--- a/src/postProcessing/functionObjects/jobControl/runTimeControl/runTimeControl.C
+++ b/src/postProcessing/functionObjects/jobControl/runTimeControl/runTimeControl.C
@@ -236,10 +236,7 @@ void Foam::runTimeControl::execute()
 
 void Foam::runTimeControl::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/utilities/CourantNo/CourantNo.C b/src/postProcessing/functionObjects/utilities/CourantNo/CourantNo.C
index 118b387e30bc92baacc7f1d6062484cd0fc6a431..be18bbc0bcb5c8a91867b4223ad0495cec1f9c5b 100644
--- a/src/postProcessing/functionObjects/utilities/CourantNo/CourantNo.C
+++ b/src/postProcessing/functionObjects/utilities/CourantNo/CourantNo.C
@@ -159,10 +159,7 @@ void Foam::CourantNo::execute()
 
 void Foam::CourantNo::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/utilities/DESModelRegions/DESModelRegions.C b/src/postProcessing/functionObjects/utilities/DESModelRegions/DESModelRegions.C
index befe184985dcdadaa1aa4fdaa31a53b9bb99731f..1578ebdc3affb7595765bee6615e97b346f9c7ca 100644
--- a/src/postProcessing/functionObjects/utilities/DESModelRegions/DESModelRegions.C
+++ b/src/postProcessing/functionObjects/utilities/DESModelRegions/DESModelRegions.C
@@ -176,10 +176,7 @@ void Foam::DESModelRegions::execute()
 
 void Foam::DESModelRegions::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/utilities/Lambda2/Lambda2.C b/src/postProcessing/functionObjects/utilities/Lambda2/Lambda2.C
index d9a2d1f3160872742345afd71b2c1450208533a2..45726130e72bd471de9d9b37966bc3af54eb834f 100644
--- a/src/postProcessing/functionObjects/utilities/Lambda2/Lambda2.C
+++ b/src/postProcessing/functionObjects/utilities/Lambda2/Lambda2.C
@@ -148,10 +148,7 @@ void Foam::Lambda2::execute()
 
 void Foam::Lambda2::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/utilities/Peclet/Peclet.C b/src/postProcessing/functionObjects/utilities/Peclet/Peclet.C
index 03f55583af122993e86d44f914a2114d0a45f3db..8f9193b7da8252375692dc86f015435ea39ff910 100644
--- a/src/postProcessing/functionObjects/utilities/Peclet/Peclet.C
+++ b/src/postProcessing/functionObjects/utilities/Peclet/Peclet.C
@@ -202,10 +202,7 @@ void Foam::Peclet::execute()
 
 void Foam::Peclet::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/utilities/Q/Q.C b/src/postProcessing/functionObjects/utilities/Q/Q.C
index 0371cbf51680f0263b4a482bd916af5fe7a012c7..aa0bc8db8426f7b7be94eafadf681a1cac2c5564 100644
--- a/src/postProcessing/functionObjects/utilities/Q/Q.C
+++ b/src/postProcessing/functionObjects/utilities/Q/Q.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2013-2015 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -32,7 +32,7 @@ License
 
 namespace Foam
 {
-defineTypeNameAndDebug(Q, 0);
+    defineTypeNameAndDebug(Q, 0);
 }
 
 
@@ -141,10 +141,7 @@ void Foam::Q::execute()
 
 void Foam::Q::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactor.C b/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactor.C
index 16b4c78b0c5ec50f9943be36659d3abecaf89795..1b01cbb4b3d731bc5fa5ee659a70c4d197fa8630 100644
--- a/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactor.C
+++ b/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactor.C
@@ -146,12 +146,10 @@ void Foam::blendingFactor::execute()
 
 void Foam::blendingFactor::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
+
 void Foam::blendingFactor::timeSet()
 {
     // Do nothing
diff --git a/src/postProcessing/functionObjects/utilities/fluxSummary/fluxSummary.C b/src/postProcessing/functionObjects/utilities/fluxSummary/fluxSummary.C
index 5469c232a532815a5d8b449ed8c7e2c53e6312a0..a5f481c52fcbfb735dfda82ca6fa9dcaf7ef5c87 100644
--- a/src/postProcessing/functionObjects/utilities/fluxSummary/fluxSummary.C
+++ b/src/postProcessing/functionObjects/utilities/fluxSummary/fluxSummary.C
@@ -468,17 +468,17 @@ void Foam::fluxSummary::initialiseCellZoneAndDirection
             returnReduce(patch.nEdges(), sumOp<label>())
         );
 
-        label nCells = 0;
-        forAll(allFaceInfo, faceI)
+        if (debug)
         {
-            if (allFaceInfo[faceI].region() == regionI)
+            label nCells = 0;
+            forAll(allFaceInfo, faceI)
             {
-                nCells++;
+                if (allFaceInfo[faceI].region() == regionI)
+                {
+                    nCells++;
+                }
             }
-        }
 
-        if (debug)
-        {
             Info<< "*** region:" << regionI
                 << "  found:" << returnReduce(nCells, sumOp<label>())
                 << " faces" << endl;
diff --git a/src/postProcessing/functionObjects/utilities/pressureTools/pressureTools.C b/src/postProcessing/functionObjects/utilities/pressureTools/pressureTools.C
index 7691cd4939e2cab42a51674f4f9cf8c6aa99f6f6..4e023d924c2a6813683b2aaf6792fdedb71362e6 100644
--- a/src/postProcessing/functionObjects/utilities/pressureTools/pressureTools.C
+++ b/src/postProcessing/functionObjects/utilities/pressureTools/pressureTools.C
@@ -329,10 +329,7 @@ void Foam::pressureTools::execute()
 
 void Foam::pressureTools::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransport.C b/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransport.C
index 41df78ac1ede4362f71ce1e1a4f898b48e60da8b..2cc155904b70c8d01ecfc0d4aa610aa96169edad 100644
--- a/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransport.C
+++ b/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransport.C
@@ -328,10 +328,7 @@ void Foam::scalarTransport::execute()
 
 void Foam::scalarTransport::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.C b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.C
index b8f56a5f6992ffd6eaed1dc0766622c326a80e39..c20ca7a145743ef1b5ea932c0c39f70e209f88cd 100644
--- a/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.C
+++ b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.C
@@ -140,10 +140,7 @@ void Foam::timeActivatedFileUpdate::execute()
 
 void Foam::timeActivatedFileUpdate::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFields.C b/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFields.C
index f15a58ceb9d8738c78428108f4bfe11a82e025f3..a620430e77d3dc2e9735419b28cdd39b20b0c2f4 100644
--- a/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFields.C
+++ b/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFields.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2013-2015 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -276,12 +276,7 @@ void Foam::turbulenceFields::execute()
 
 
 void Foam::turbulenceFields::end()
-{
-    if (active_)
-    {
-        execute();
-    }
-}
+{}
 
 
 void Foam::turbulenceFields::timeSet()
diff --git a/src/postProcessing/functionObjects/utilities/vorticity/vorticity.C b/src/postProcessing/functionObjects/utilities/vorticity/vorticity.C
index d82a752fc6e2dc45ab53ac7e373ef2f41224a55b..135fc00540c90361d07fcb4a8b3da495aec3e1f5 100644
--- a/src/postProcessing/functionObjects/utilities/vorticity/vorticity.C
+++ b/src/postProcessing/functionObjects/utilities/vorticity/vorticity.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2014-2015 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -136,10 +136,7 @@ void Foam::vorticity::execute()
 
 void Foam::vorticity::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.C b/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.C
index a7870f21397e1d8bc23df6444232b9c5e83e0e6b..eb261493392881ce82171179af0cf983a4565253 100644
--- a/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.C
+++ b/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.C
@@ -266,10 +266,7 @@ void Foam::wallShearStress::execute()
 
 void Foam::wallShearStress::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/src/postProcessing/functionObjects/utilities/yPlus/yPlus.C b/src/postProcessing/functionObjects/utilities/yPlus/yPlus.C
index 6f43a896eb97416dd29d540c94169d5e3b3d9990..f7671475b351f02ce4e47281ff06cf7afdeac874 100644
--- a/src/postProcessing/functionObjects/utilities/yPlus/yPlus.C
+++ b/src/postProcessing/functionObjects/utilities/yPlus/yPlus.C
@@ -202,10 +202,7 @@ void Foam::yPlus::execute()
 
 void Foam::yPlus::end()
 {
-    if (active_)
-    {
-        execute();
-    }
+    // Do nothing
 }
 
 
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/chemistryProperties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/chemistryProperties
new file mode 100644
index 0000000000000000000000000000000000000000..60eb1671344de4a81fda5f9eb63fc4f24594a6f5
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/chemistryProperties
@@ -0,0 +1,29 @@
+/*--------------------------------*- 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      chemistryProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+chemistryType
+{
+    chemistrySolver   noChemistrySolver;
+    chemistryThermo   psi;
+}
+
+chemistry           on;
+
+initialChemicalTimeStep 1e-07;
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/combustionProperties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/combustionProperties
index 51e80f82d64f8071b585d60ff043dd8742ab02b5..76a0324cf85bf99129febed76ce061d732d062bb 100644
--- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/combustionProperties
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/combustionProperties
@@ -16,7 +16,12 @@ FoamFile
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 combustionModel  infinitelyFastChemistry<psiThermoCombustion,gasHThermoPhysics>;
+
 //combustionModel  FSD<psiThermoCombustion,gasHThermoPhysics>;
+//combustionModel  diffusionMulticomponent<psiChemistryCombustion,gasHThermoPhysics>;
+//NOTE: To use diffusionMulticomponent combustion model you need to rename files:
+// reactions.twoSteps -> reactions
+// thermophysicalProperties.twoSteps -> thermophysicalProperties
 
 active  true;
 
@@ -26,8 +31,22 @@ infinitelyFastChemistryCoeffs
     C           5.0;
 }
 
+diffusionMulticomponentCoeffs
+{
+    Ci          (1.0 1.5);
+    fuels       (CH4 CO);
+    oxydants    (O2 O2);
+    YoxStream   (0.23 0.23);
+    YfStream    (1.0 1.0);
+    sigma       (0.02 0.02);
+    oxydantRes  (0.015 0.005);
+    ftCorr      (0  0);
+    laminarIgn  false;
+}
+
 FSDCoeffs
 {
+    semiImplicit no;
     Cv          0.1;
     ftVarMin    1e-2;
 
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/radiationProperties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/radiationProperties
index a25c81382a4d3837f18c4a1051eee255fa7aa4a5..7220f7b9960a190aca55da90dffc9d207d6b4d16 100644
--- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/radiationProperties
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/radiationProperties
@@ -189,7 +189,7 @@ greyMeanAbsorptionEmissionCoeffs
 
 scatterModel    none;
 
-sootModel mixtureFractionSoot<gasHThermoPhysics>;
+sootModel none;//mixtureFractionSoot<gasHThermoPhysics>;
 
 mixtureFractionSootCoeffs
 {
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactions b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactions
index 67f2373c382e5477caeeada95dc46a061ee97423..f8d7139b6b2ccd7b43542ce334f336a34648a621 100644
--- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactions
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactions
@@ -9,7 +9,7 @@ species
 
 reactions
 {
-    propaneReaction
+    methaneReaction
     {
         type         irreversibleinfiniteReaction;
         reaction     "CH4 + 2O2 + 7.5N2 = CO2 + 2H2O + 7.5N2";
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactions.twoSteps b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactions.twoSteps
new file mode 100644
index 0000000000000000000000000000000000000000..360014f503f0ebb0778d6705d535c7b616c21db4
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactions.twoSteps
@@ -0,0 +1,30 @@
+species
+(
+    O2
+    H2O
+    CH4
+    CO2
+    CO
+    N2
+);
+
+reactions
+{
+    methaneReaction
+    {
+        type        irreversibleArrheniusReaction;
+        reaction    "CH4^0.9 + 2O2^1.1 = CO + 2H2O";
+        A           2.119e12;
+        beta        0;
+        Ta          17676;
+    }
+
+    COReaction
+    {
+        type         irreversibleArrheniusReaction;
+        reaction     "CO + 0.5O2^0.25 = CO2";
+        A            1e6;
+        beta         0;
+        Ta           6060;
+    }
+}
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermo.compressibleGas b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermo.compressibleGas
index db1994252554db6ef0a01216e4b9a5f5337d58f0..5e02e173a2c835aa7ad60a1e8204e880c87efa93 100644
--- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermo.compressibleGas
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermo.compressibleGas
@@ -124,3 +124,26 @@ N2
         Ts              170.672;
     }
 }
+
+CO
+{
+    specie
+    {
+        nMoles          1;
+        molWeight       28.0106;
+    }
+    thermodynamics
+    {
+        Tlow            200;
+        Thigh           6000;
+        Tcommon         1000;
+        highCpCoeffs    ( 3.04849 0.00135173 -4.85794e-07 7.88536e-11 -4.69807e-15 -14266.1 6.0171 );
+        lowCpCoeffs     ( 3.57953 -0.000610354 1.01681e-06 9.07006e-10 -9.04424e-13 -14344.1 3.50841 );
+    }
+    transport
+    {
+        As              1.67212e-06;
+        Ts              170.672;
+    }
+}
+
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermophysicalProperties.twoSteps b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermophysicalProperties.twoSteps
new file mode 100644
index 0000000000000000000000000000000000000000..ae47817551299d81dca63ffaa7b8914f5fb48532
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermophysicalProperties.twoSteps
@@ -0,0 +1,40 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  2.2.2                                 |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      thermophysicalProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+thermoType
+{
+    type            hePsiThermo;
+    mixture         reactingMixture;
+    transport       sutherland;
+    thermo          janaf;
+    energy          sensibleEnthalpy;
+    equationOfState perfectGas;
+    specie          specie;
+}
+
+inertSpecie N2;
+
+fuel        CH4;
+
+chemistryReader foamChemistryReader;
+
+foamChemistryFile "$FOAM_CASE/constant/reactions";
+
+foamChemistryThermoFile "$FOAM_CASE/constant/thermo.compressibleGas";
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSchemes b/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSchemes
index 82cb86a511022b8aa967eff09f685572f1bd9aa0..da618b2dab3dd8b8743de0be24a1e46317ca5a36 100644
--- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSchemes
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSchemes
@@ -30,7 +30,7 @@ divSchemes
     default         none;
 
     div(phi,U)      Gauss LUST grad(U);
-    div(phi,K)      Gauss linear;
+    div(phi,K)      Gauss limitedLinear 1;
     div(phi,k)      Gauss limitedLinear 1;
     div(phi,Yi_h)   Gauss multivariateSelection
     {
@@ -39,9 +39,12 @@ divSchemes
         N2              limitedLinear01 1;
         H2O             limitedLinear01 1;
         CO2             limitedLinear01 1;
+        CO              limitedLinear01 1;
         h               limitedLinear 1;
     };
     div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
+    div(phi,omega)  Gauss upwind;
+    div(U)          Gauss linear;
     div(Ji,Ii_h)    Gauss upwind;
 }
 
diff --git a/tutorials/mesh/parallel/cavity/Allrun b/tutorials/mesh/parallel/cavity/Allrun
index cc8f39f76f19df182f58153566349afe981b35c4..22412ea2871c949d4307e6a6c163b3637baa8214 100755
--- a/tutorials/mesh/parallel/cavity/Allrun
+++ b/tutorials/mesh/parallel/cavity/Allrun
@@ -9,26 +9,27 @@ runApplication blockMesh
 #cp system/decomposeParDict-2 system/decomposeParDict
 #runApplication decomposePar
 
-#- redistributePar to do decomposition
+# redistributePar to do decomposition
 runParallel redistributePar 2 -decompose
 
-#- bit of renumbering and running
+# Bit of renumbering and running
 runParallel -log log.renumberMesh-CuthillMcKee renumberMesh 2 -overwrite
 runParallel -log log.icoFoam-CuthillMcKee icoFoam 2
 
-#- bit of bad renumbering and running
+# Bit of bad renumbering and running
 runParallel -log log.renumberMesh-parallel renumberMesh 2 -overwrite -dict system/renumberMeshDict-random
 runParallel -log log.icoFoam-random icoFoam 2
 
-#- pick up last result
+# Pick up last result
 cp system/controlDict-latestTime system/controlDict
 
-#- redistribute to 5 processors
+# Redistribute to 5 processors
 runParallel -log log.redistributePar-5 redistributePar 5 -decomposeParDict system/decomposeParDict-5 -cellDist
-#- run a bit more
+
+# Run a bit more
 runParallel -log log.icoFoam-5 icoFoam 5 -decomposeParDict system/decomposeParDict-5
 
-#- reconstruct mesh and results
+# Reconstruct mesh and results
 runParallel -log log.redistributePar-1 redistributePar 5 -reconstruct -decomposeParDict system/decomposeParDict