From f27490b7b353b207e93b196820c2d27826da4049 Mon Sep 17 00:00:00 2001
From: andy <a.heather@opencfd.co.uk>
Date: Tue, 6 May 2008 12:00:31 +0100
Subject: [PATCH] updates to radiation and lagrangian libraries

---
 src/lagrangian/Allwmake                       |   1 -
 src/lagrangian/basic/Cloud/Cloud.C            |   2 -
 src/lagrangian/basic/Cloud/Cloud.H            |  13 +-
 src/lagrangian/basic/Cloud/CloudIO.C          |   2 -
 src/lagrangian/basic/IOPosition/IOPosition.C  |   2 +
 src/lagrangian/basic/Particle/Particle.C      |  61 ++--
 src/lagrangian/basic/Particle/Particle.H      | 159 +++++-----
 src/lagrangian/basic/Particle/ParticleI.H     |  13 +-
 .../basic/indexedParticle/indexedParticle.H   |   1 -
 .../indexedParticle/indexedParticleCloud.C    |   2 +
 .../basic/lagrangianField/LagrangianField.H   |   1 -
 .../basic/passiveParticle/passiveParticle.H   |   1 -
 .../passiveParticle/passiveParticleCloud.C    |   2 +
 .../basic/polyMeshInfo/polyMeshInfo.H         |   2 +-
 .../IntegrationScheme/Analytical/Analytical.C |  65 ++++
 .../IntegrationScheme/Analytical/Analytical.H | 101 +++++++
 .../IntegrationScheme/Euler/Euler.C           |  65 ++++
 .../IntegrationScheme/Euler/Euler.H           | 101 +++++++
 .../IntegrationScheme/IntegrationScheme.C     |  54 ++++
 .../IntegrationScheme/IntegrationScheme.H     | 169 +++++++++++
 .../IntegrationScheme/IntegrationSchemesFwd.H |  59 ++++
 .../IntegrationScheme/newIntegrationScheme.C  |  65 ++++
 .../makeIntegrationSchemes.C                  |  46 +++
 src/lagrangian/intermediate/Make/files        |  51 ++--
 .../Templates/KinematicCloud/KinematicCloud.C |  72 +++--
 .../Templates/KinematicCloud/KinematicCloud.H |  87 +++---
 .../KinematicCloud/KinematicCloudI.H          |  78 +++--
 .../Templates/ReactingCloud/ReactingCloud.C   | 115 ++++----
 .../Templates/ReactingCloud/ReactingCloud.H   |  50 +---
 .../Templates/ReactingCloud/ReactingCloudI.H  |  14 +-
 .../ReactingCloud/ReactingCloudThermoTypes.H  |   2 +-
 .../Templates/ThermoCloud/ThermoCloud.C       | 210 +++----------
 .../Templates/ThermoCloud/ThermoCloud.H       |  70 ++---
 .../Templates/ThermoCloud/ThermoCloudI.H      | 149 +++++++---
 .../basicKinematicCloud/basicKinematicCloud.C |  31 +-
 .../basicKinematicCloud/basicKinematicCloud.H |  30 +-
 .../basicReactingCloud/basicReactingCloud.C   |  33 +--
 .../basicReactingCloud/basicReactingCloud.H   |  31 +-
 .../basicThermoCloud/basicThermoCloud.C       |  33 +--
 .../basicThermoCloud/basicThermoCloud.H       |  30 +-
 .../KinematicParcel/KinematicParcel.C         | 193 ++++++------
 .../KinematicParcel/KinematicParcel.H         | 279 ++++++++++--------
 .../KinematicParcel/KinematicParcelI.H        |  46 ++-
 .../KinematicParcel/KinematicParcelIO.C       |  23 +-
 .../Templates/ReactingParcel/ReactingParcel.C | 232 +++++----------
 .../Templates/ReactingParcel/ReactingParcel.H | 249 ++++++++--------
 .../ReactingParcel/ReactingParcelI.H          |  17 +-
 .../ReactingParcel/ReactingParcelIO.C         |   3 +-
 .../Templates/ThermoParcel/ThermoParcel.C     | 229 +++++---------
 .../Templates/ThermoParcel/ThermoParcel.H     | 204 ++++++-------
 .../Templates/ThermoParcel/ThermoParcelI.H    |  18 +-
 .../Templates/ThermoParcel/ThermoParcelIO.C   |   4 +-
 .../basicKinematicParcel.C}                   |  22 +-
 .../basicKinematicParcel.H}                   |  37 +--
 .../defineBasicKinematicParcel.C}             |  10 +-
 ...akeBasicKinematicParcelDispersionModels.C} |  12 +-
 .../makeBasicKinematicParcelDragModels.C}     |   8 +-
 ...eBasicKinematicParcelHeatTransferModels.C} |  11 +-
 ...makeBasicKinematicParcelInjectionModels.C} |  18 +-
 ...sicKinematicParcelWallInteractionModels.C} |   9 +-
 .../basicReactingParcel.C}                    |  22 +-
 .../basicReactingParcel.H}                    |  37 +--
 .../defineBasicReactingParcel.C}              |  28 +-
 ...akeBasicReactingParcelCompositionModels.C} |   6 +-
 ...makeBasicReactingParcelDispersionModels.C} |  12 +-
 .../makeBasicReactingParcelDragModels.C}      |   8 +-
 ...keBasicReactingParcelHeatTransferModels.C} |  18 +-
 .../makeBasicReactingParcelInjectionModels.C} |  18 +-
 ...keBasicReactingParcelMassTransferModels.C} |  10 +-
 ...asicReactingParcelSurfaceReactionModels.C} |   6 +-
 ...asicReactingParcelWallInteractionModels.C} |  14 +-
 .../basicThermoParcel.C}                      |  22 +-
 .../basicThermoParcel.H}                      |  34 +--
 .../defineBasicThermoParcel.C}                |  20 +-
 .../makeBasicThermoParcelDispersionModels.C}  |  12 +-
 .../makeBasicThermoParcelDragModels.C}        |   8 +-
 ...makeBasicThermoParcelHeatTransferModels.C} |   8 +-
 .../makeBasicThermoParcelInjectionModels.C}   |   8 +-
 ...eBasicThermoParcelWallInteractionModels.C} |   8 +-
 .../DispersionModel/DispersionModel.H         |   1 -
 .../DispersionRASModel/DispersionRASModel.H   |   4 -
 .../GradientDispersionRAS.H                   |   2 +-
 .../StochasticDispersionRAS.C                 |   2 +
 .../StochasticDispersionRAS.H                 |   7 +-
 .../Kinematic/DragModel/DragModel/DragModel.H |   6 +-
 .../Kinematic/DragModel/NoDrag/NoDrag.H       |   5 +-
 .../DragModel/SphereDrag/SphereDrag.H         |   5 +-
 .../InjectionModel/InjectionModel.H           |   1 +
 .../ManualInjection/ManualInjection.C         |   2 +-
 .../ManualInjection/ManualInjection.H         |   8 +-
 .../WallInteractionModel.H                    |   1 +
 .../CompositionModel/CompositionModel.H       |   4 +-
 .../SingleMixtureFraction.H                   |   1 -
 .../MassTransferModel/MassTransferModel.H     |   1 +
 .../SurfaceReactionModel.H                    |   1 +
 .../HeatTransferModel/HeatTransferModel.H     |   2 +-
 .../cloudAbsorptionEmission.C                 |   6 +-
 .../cloudAbsorptionEmission.H                 |  24 +-
 .../scatter/cloudScatter/cloudScatter.H       |   2 +-
 src/thermophysicalModels/radiation/Make/files |   4 +-
 .../MarshakRadiationMixedFvPatchScalarField.C |   0
 .../MarshakRadiationMixedFvPatchScalarField.H |   0
 ...akRadiationFixedTMixedFvPatchScalarField.C |   0
 ...akRadiationFixedTMixedFvPatchScalarField.H |   0
 .../radiation/radiationModel/P1/P1.C          |  29 +-
 .../radiation/radiationModel/P1/P1.H          |   4 +-
 .../radiationModel/noRadiation/noRadiation.C  |  18 +-
 .../radiationModel/noRadiation/noRadiation.H  |   4 +-
 .../radiationModel/newRadiationModel.C        |  11 +-
 .../radiationModel/radiationModel.C           |  25 +-
 .../radiationModel/radiationModel.H           |  21 +-
 .../absorptionEmissionModel.C                 | 161 ++++++++++
 .../absorptionEmissionModel.H                 |  44 ++-
 .../binaryAbsorptionEmission.C                |  36 ++-
 .../binaryAbsorptionEmission.H                |  31 +-
 .../constantAbsorptionEmission.C              |   7 +-
 .../constantAbsorptionEmission.H              |  25 +-
 .../noAbsorptionEmission.C                    |  71 -----
 .../noAbsorptionEmission.H                    |  22 --
 119 files changed, 2620 insertions(+), 1974 deletions(-)
 create mode 100644 src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.C
 create mode 100644 src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.H
 create mode 100644 src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.C
 create mode 100644 src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.H
 create mode 100644 src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.C
 create mode 100644 src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.H
 create mode 100644 src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationSchemesFwd.H
 create mode 100644 src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/newIntegrationScheme.C
 create mode 100644 src/lagrangian/intermediate/IntegrationScheme/makeIntegrationSchemes.C
 rename src/lagrangian/intermediate/parcels/derived/{kinematicParcel/kinematicParcel.C => basicKinematicParcel/basicKinematicParcel.C} (77%)
 rename src/lagrangian/intermediate/parcels/derived/{kinematicParcel/kinematicParcel.H => basicKinematicParcel/basicKinematicParcel.H} (76%)
 rename src/lagrangian/intermediate/parcels/derived/{kinematicParcel/defineKinematicParcel.C => basicKinematicParcel/defineBasicKinematicParcel.C} (80%)
 rename src/lagrangian/intermediate/parcels/derived/{kinematicParcel/makeKinematicParcelDispersionModels.C => basicKinematicParcel/makeBasicKinematicParcelDispersionModels.C} (88%)
 rename src/lagrangian/intermediate/parcels/derived/{reactingParcel/makeReactingParcelDragModels.C => basicKinematicParcel/makeBasicKinematicParcelDragModels.C} (86%)
 rename src/lagrangian/intermediate/parcels/derived/{kinematicParcel/makeKinematicParcelHeatTransferModels.C => basicKinematicParcel/makeBasicKinematicParcelHeatTransferModels.C} (86%)
 rename src/lagrangian/intermediate/parcels/derived/{kinematicParcel/makeKinematicParcelInjectionModels.C => basicKinematicParcel/makeBasicKinematicParcelInjectionModels.C} (81%)
 rename src/lagrangian/intermediate/parcels/derived/{reactingParcel/makeReactingParcelWallInteractionModels.C => basicKinematicParcel/makeBasicKinematicParcelWallInteractionModels.C} (89%)
 rename src/lagrangian/intermediate/parcels/derived/{reactingParcel/reactingParcel.C => basicReactingParcel/basicReactingParcel.C} (79%)
 rename src/lagrangian/intermediate/parcels/derived/{reactingParcel/reactingParcel.H => basicReactingParcel/basicReactingParcel.H} (78%)
 rename src/lagrangian/intermediate/parcels/derived/{reactingParcel/defineReactingParcel.C => basicReactingParcel/defineBasicReactingParcel.C} (59%)
 rename src/lagrangian/intermediate/parcels/derived/{reactingParcel/makeReactingParcelCompositionModels.C => basicReactingParcel/makeBasicReactingParcelCompositionModels.C} (92%)
 rename src/lagrangian/intermediate/parcels/derived/{reactingParcel/makeReactingParcelDispersionModels.C => basicReactingParcel/makeBasicReactingParcelDispersionModels.C} (88%)
 rename src/lagrangian/intermediate/parcels/derived/{kinematicParcel/makeKinematicParcelDragModels.C => basicReactingParcel/makeBasicReactingParcelDragModels.C} (86%)
 rename src/lagrangian/intermediate/parcels/derived/{thermoParcel/makeThermoParcelHeatTransferModels.C => basicReactingParcel/makeBasicReactingParcelHeatTransferModels.C} (81%)
 rename src/lagrangian/intermediate/parcels/derived/{reactingParcel/makeReactingParcelInjectionModels.C => basicReactingParcel/makeBasicReactingParcelInjectionModels.C} (81%)
 rename src/lagrangian/intermediate/parcels/derived/{reactingParcel/makeReactingParcelMassTransferModels.C => basicReactingParcel/makeBasicReactingParcelMassTransferModels.C} (91%)
 rename src/lagrangian/intermediate/parcels/derived/{reactingParcel/makeReactingParcelSurfaceReactionModels.C => basicReactingParcel/makeBasicReactingParcelSurfaceReactionModels.C} (92%)
 rename src/lagrangian/intermediate/parcels/derived/{kinematicParcel/makeKinematicParcelWallInteractionModels.C => basicReactingParcel/makeBasicReactingParcelWallInteractionModels.C} (83%)
 rename src/lagrangian/intermediate/parcels/derived/{thermoParcel/thermoParcel.C => basicThermoParcel/basicThermoParcel.C} (79%)
 rename src/lagrangian/intermediate/parcels/derived/{thermoParcel/thermoParcel.H => basicThermoParcel/basicThermoParcel.H} (79%)
 rename src/lagrangian/intermediate/parcels/derived/{thermoParcel/defineThermoParcel.C => basicThermoParcel/defineBasicThermoParcel.C} (66%)
 rename src/lagrangian/intermediate/parcels/derived/{thermoParcel/makeThermoParcelDispersionModels.C => basicThermoParcel/makeBasicThermoParcelDispersionModels.C} (88%)
 rename src/lagrangian/intermediate/parcels/derived/{thermoParcel/makeThermoParcelDragModels.C => basicThermoParcel/makeBasicThermoParcelDragModels.C} (86%)
 rename src/lagrangian/intermediate/parcels/derived/{reactingParcel/makeReactingParcelHeatTransferModels.C => basicThermoParcel/makeBasicThermoParcelHeatTransferModels.C} (85%)
 rename src/lagrangian/intermediate/parcels/derived/{thermoParcel/makeThermoParcelInjectionModels.C => basicThermoParcel/makeBasicThermoParcelInjectionModels.C} (85%)
 rename src/lagrangian/intermediate/parcels/derived/{thermoParcel/makeThermoParcelWallInteractionModels.C => basicThermoParcel/makeBasicThermoParcelWallInteractionModels.C} (91%)
 rename src/thermophysicalModels/radiation/{boundaryConditions => derivedFvPatchFields}/MarshakRadiation/MarshakRadiationMixedFvPatchScalarField.C (100%)
 rename src/thermophysicalModels/radiation/{boundaryConditions => derivedFvPatchFields}/MarshakRadiation/MarshakRadiationMixedFvPatchScalarField.H (100%)
 rename src/thermophysicalModels/radiation/{boundaryConditions => derivedFvPatchFields}/MarshakRadiationFixedT/MarshakRadiationFixedTMixedFvPatchScalarField.C (100%)
 rename src/thermophysicalModels/radiation/{boundaryConditions => derivedFvPatchFields}/MarshakRadiationFixedT/MarshakRadiationFixedTMixedFvPatchScalarField.H (100%)

diff --git a/src/lagrangian/Allwmake b/src/lagrangian/Allwmake
index 4dae508c2f5..b3ab6338993 100755
--- a/src/lagrangian/Allwmake
+++ b/src/lagrangian/Allwmake
@@ -3,6 +3,5 @@ set -x
 
 wmake libso basic
 wmake libso solidParticle
-wmake libso basic
 wmake libso intermediate
 wmake libso dieselSpray
diff --git a/src/lagrangian/basic/Cloud/Cloud.C b/src/lagrangian/basic/Cloud/Cloud.C
index 84f47162034..fffa0506f82 100644
--- a/src/lagrangian/basic/Cloud/Cloud.C
+++ b/src/lagrangian/basic/Cloud/Cloud.C
@@ -43,7 +43,6 @@ Foam::Cloud<ParticleType>::Cloud
     cloud(pMesh),
     IDLList<ParticleType>(particles),
     polyMesh_(pMesh),
-    cloudName_("defaultCloud"),
     allFaces_(pMesh.faces()),
     points_(pMesh.points()),
     cellFaces_(pMesh.cells()),
@@ -65,7 +64,6 @@ Foam::Cloud<ParticleType>::Cloud
     cloud(pMesh, cloudName),
     IDLList<ParticleType>(particles),
     polyMesh_(pMesh),
-    cloudName_(cloudName),
     allFaces_(pMesh.faces()),
     points_(pMesh.points()),
     cellFaces_(pMesh.cells()),
diff --git a/src/lagrangian/basic/Cloud/Cloud.H b/src/lagrangian/basic/Cloud/Cloud.H
index f5e70593f37..c26c592fe0b 100644
--- a/src/lagrangian/basic/Cloud/Cloud.H
+++ b/src/lagrangian/basic/Cloud/Cloud.H
@@ -26,7 +26,6 @@ Class
     Foam::Cloud
 
 Description
-    Foam::Cloud
 
 SourceFiles
     Cloud.C
@@ -74,7 +73,6 @@ class Cloud
     // Private data
 
         const polyMesh& polyMesh_;
-        const word cloudName_;
         const faceList& allFaces_;
         const vectorField& points_;
         const cellList& cellFaces_;
@@ -152,12 +150,6 @@ public:
                 return polyMesh_;
             }
 
-            //- Return the cloud name reference
-            const word& cloudName() const
-            {
-                return cloudName_;
-            }
-
             //- Is this global face an internal face?
             bool internalFace(const label facei) const
             {
@@ -213,6 +205,11 @@ public:
                 return IDLList<ParticleType>::end();
             };
 
+            void clear()
+            {
+                return IDLList<ParticleType>::clear();
+            };
+
 
         // Edit
 
diff --git a/src/lagrangian/basic/Cloud/CloudIO.C b/src/lagrangian/basic/Cloud/CloudIO.C
index a6e03579aae..ef67531fca9 100644
--- a/src/lagrangian/basic/Cloud/CloudIO.C
+++ b/src/lagrangian/basic/Cloud/CloudIO.C
@@ -60,7 +60,6 @@ Foam::Cloud<ParticleType>::Cloud
 :
     cloud(pMesh),
     polyMesh_(pMesh),
-    cloudName_("defaultCloud"),
     allFaces_(pMesh.faces()),
     points_(pMesh.points()),
     cellFaces_(pMesh.cells()),
@@ -83,7 +82,6 @@ Foam::Cloud<ParticleType>::Cloud
 :
     cloud(pMesh, cloudName),
     polyMesh_(pMesh),
-    cloudName_(cloudName),
     allFaces_(pMesh.faces()),
     points_(pMesh.points()),
     cellFaces_(pMesh.cells()),
diff --git a/src/lagrangian/basic/IOPosition/IOPosition.C b/src/lagrangian/basic/IOPosition/IOPosition.C
index 89d94169d13..09cda64c362 100644
--- a/src/lagrangian/basic/IOPosition/IOPosition.C
+++ b/src/lagrangian/basic/IOPosition/IOPosition.C
@@ -22,6 +22,8 @@ License
     along with OpenFOAM; if not, write to the Free Software Foundation,
     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 
+Description
+
 \*---------------------------------------------------------------------------*/
 
 #include "IOPosition.H"
diff --git a/src/lagrangian/basic/Particle/Particle.C b/src/lagrangian/basic/Particle/Particle.C
index 68266a631b7..98ca9669d1c 100644
--- a/src/lagrangian/basic/Particle/Particle.C
+++ b/src/lagrangian/basic/Particle/Particle.C
@@ -39,7 +39,7 @@ template<class ParticleType>
 Foam::labelList Foam::Particle<ParticleType>::findFaces
 (
     const vector& position
-)
+) const
 {
     const polyMesh& mesh = cloud_.polyMesh_;
     const labelList& faces = mesh.cells()[celli_];
@@ -69,7 +69,7 @@ Foam::labelList Foam::Particle<ParticleType>::findFaces
     const vector& position,
     const label celli,
     const scalar stepFraction
-)
+) const
 {
     const polyMesh& mesh = cloud_.polyMesh_;
     const labelList& faces = mesh.cells()[celli];
@@ -94,11 +94,11 @@ Foam::labelList Foam::Particle<ParticleType>::findFaces
 
 
 template<class ParticleType>
-template<class TrackingData>
+template<class TrackData>
 void Foam::Particle<ParticleType>::prepareForParallelTransfer
 (
     const label patchi,
-    TrackingData& td
+    TrackData& td
 )
 {
     // Convert the face index to be local to the processor patch
@@ -107,11 +107,11 @@ void Foam::Particle<ParticleType>::prepareForParallelTransfer
 
 
 template<class ParticleType>
-template<class TrackingData>
+template<class TrackData>
 void Foam::Particle<ParticleType>::correctAfterParallelTransfer
 (
     const label patchi,
-    TrackingData& td
+    TrackData& td
 )
 {
     const processorPolyPatch& ppp =
@@ -156,7 +156,15 @@ void Foam::Particle<ParticleType>::correctAfterParallelTransfer
     }
 
     // Reset the face index for the next tracking operation
-    facei_ = -1;
+    if (stepFraction_ > (1.0 - SMALL))
+    {
+        stepFraction_ = 1.0;
+        facei_ = -1;
+    }
+    else
+    {
+        facei_ += ppp.start();
+    }
 }
 
 
@@ -181,11 +189,11 @@ Foam::Particle<ParticleType>::Particle
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class ParticleType>
-template<class TrackingData>
+template<class TrackData>
 Foam::label Foam::Particle<ParticleType>::track
 (
     const vector& endPosition,
-    TrackingData& td
+    TrackData& td
 )
 {
     facei_ = -1;
@@ -200,6 +208,7 @@ Foam::label Foam::Particle<ParticleType>::track
 }
 
 
+
 template<class ParticleType>
 Foam::label Foam::Particle<ParticleType>::track(const vector& endPosition)
 {
@@ -207,13 +216,12 @@ Foam::label Foam::Particle<ParticleType>::track(const vector& endPosition)
     return track(endPosition, dummyTd);
 }
 
-
 template<class ParticleType>
-template<class TrackingData>
+template<class TrackData>
 Foam::scalar Foam::Particle<ParticleType>::trackToFace
 (
     const vector& endPosition,
-    TrackingData& td
+    TrackData& td
 )
 {
     const polyMesh& mesh = cloud_.polyMesh_;
@@ -301,8 +309,7 @@ Foam::scalar Foam::Particle<ParticleType>::trackToFace
             {
                 FatalErrorIn
                 (
-                    "Particle::trackToFace"
-                    "(const vector&, TrackingData&)"
+                    "Particle::trackToFace(const vector&, TrackData&)"
                 )<< "addressing failure" << nl
                  << abort(FatalError);
             }
@@ -389,7 +396,6 @@ Foam::scalar Foam::Particle<ParticleType>::trackToFace
     return trackFraction;
 }
 
-
 template<class ParticleType>
 Foam::scalar Foam::Particle<ParticleType>::trackToFace
 (
@@ -400,7 +406,6 @@ Foam::scalar Foam::Particle<ParticleType>::trackToFace
     return trackToFace(endPosition, dummyTd);
 }
 
-
 template<class ParticleType>
 void Foam::Particle<ParticleType>::transformPosition(const tensor& T)
 {
@@ -419,11 +424,11 @@ void Foam::Particle<ParticleType>::transformProperties(const vector&)
 
 
 template<class ParticleType>
-template<class TrackingData>
+template<class TrackData>
 void Foam::Particle<ParticleType>::hitWedgePatch
 (
     const wedgePolyPatch& wpp,
-    TrackingData&
+    TrackData&
 )
 {
     vector nf = wpp.faceAreas()[wpp.whichFace(facei_)];
@@ -434,11 +439,11 @@ void Foam::Particle<ParticleType>::hitWedgePatch
 
 
 template<class ParticleType>
-template<class TrackingData>
+template<class TrackData>
 void Foam::Particle<ParticleType>::hitSymmetryPatch
 (
     const symmetryPolyPatch& spp,
-    TrackingData&
+    TrackData&
 )
 {
     vector nf = spp.faceAreas()[spp.whichFace(facei_)];
@@ -449,11 +454,11 @@ void Foam::Particle<ParticleType>::hitSymmetryPatch
 
 
 template<class ParticleType>
-template<class TrackingData>
+template<class TrackData>
 void Foam::Particle<ParticleType>::hitCyclicPatch
 (
     const cyclicPolyPatch& cpp,
-    TrackingData&
+    TrackData&
 )
 {
     label patchFacei_ = cpp.whichFace(facei_);
@@ -481,31 +486,31 @@ void Foam::Particle<ParticleType>::hitCyclicPatch
 
 
 template<class ParticleType>
-template<class TrackingData>
+template<class TrackData>
 void Foam::Particle<ParticleType>::hitProcessorPatch
 (
     const processorPolyPatch& spp,
-    TrackingData& td
+    TrackData& td
 )
 {}
 
 
 template<class ParticleType>
-template<class TrackingData>
+template<class TrackData>
 void Foam::Particle<ParticleType>::hitWallPatch
 (
     const wallPolyPatch& spp,
-    TrackingData&
+    TrackData&
 )
 {}
 
 
 template<class ParticleType>
-template<class TrackingData>
+template<class TrackData>
 void Foam::Particle<ParticleType>::hitPatch
 (
     const polyPatch& spp,
-    TrackingData&
+    TrackData&
 )
 {}
 
diff --git a/src/lagrangian/basic/Particle/Particle.H b/src/lagrangian/basic/Particle/Particle.H
index 40556a204cc..2dc821710f0 100644
--- a/src/lagrangian/basic/Particle/Particle.H
+++ b/src/lagrangian/basic/Particle/Particle.H
@@ -26,7 +26,6 @@ Class
     Foam::Particle
 
 Description
-    Foam::Particle
 
 \*---------------------------------------------------------------------------*/
 
@@ -79,6 +78,41 @@ class Particle
     public IDLList<ParticleType>::link
 {
 
+public:
+
+    //- Class used to pass tracking data to the trackToFace function
+    class trackData
+    {
+
+        // Private data
+
+            //- Reference to the cloud containing this particle
+            Cloud<ParticleType>& cloud_;
+
+
+    public:
+
+        bool switchProcessor;
+        bool keepParticle;
+
+
+        // Constructors
+
+            inline trackData
+            (
+                Cloud<ParticleType>& cloud
+            );
+
+
+        // Member functions
+
+            //- Return a reference to the cloud
+            inline Cloud<ParticleType>& cloud();
+    };
+
+
+private:
+
     // Private data
 
         //- Reference to the particle cloud
@@ -108,7 +142,7 @@ class Particle
             const vector& to,
             const label facei,
             const scalar stepFraction
-        );
+        ) const;
 
         //- Return the 'lambda' value for the position, p, on the face,
         // where, p = from + lamda*(to - from)
@@ -118,13 +152,13 @@ class Particle
             const vector& from,
             const vector& to,
             const label facei
-        );
+        ) const;
 
         //- Return the faces between position and cell centre
         labelList findFaces
         (
             const vector& position
-        );
+        ) const;
 
         //- Return the faces between position and cell centre
         labelList findFaces
@@ -132,80 +166,91 @@ class Particle
             const vector& position,
             const label celli,
             const scalar stepFraction
-        );
+        ) const;
 
 
 protected:
 
+    // Patch interactions
+
         //- Overridable function to handle the particle hitting a wedgePatch
-        template<class TrackingData>
+        template<class TrackData>
         void hitWedgePatch
         (
             const wedgePolyPatch&,
-            TrackingData& td
+            TrackData& td
         );
 
-        //- Overridable function to handle the particle hitting a symmetryPatch
-        template<class TrackingData>
+        //- Overridable function to handle the particle hitting a
+        //  symmetryPatch
+        template<class TrackData>
         void hitSymmetryPatch
         (
             const symmetryPolyPatch&,
-            TrackingData& td
+            TrackData& td
         );
 
         //- Overridable function to handle the particle hitting a cyclicPatch
-        template<class TrackingData>
+        template<class TrackData>
         void hitCyclicPatch
         (
             const cyclicPolyPatch&,
-            TrackingData& td
+            TrackData& td
         );
 
-        //- Overridable function to handle the particle hitting a processorPatch
-        template<class TrackingData>
+        //- Overridable function to handle the particle hitting a
+        //  processorPatch
+        template<class TrackData>
         void hitProcessorPatch
         (
             const processorPolyPatch&,
-            TrackingData& td
+            TrackData& td
         );
 
         //- Overridable function to handle the particle hitting a wallPatch
-        template<class TrackingData>
+        template<class TrackData>
         void hitWallPatch
         (
             const wallPolyPatch&,
-            TrackingData& td
+            TrackData& td
         );
 
-        //- Overridable function to handle the particle hitting a general patch
-        template<class TrackingData>
+        //- Overridable function to handle the particle hitting a
+        //  general patch
+        template<class TrackData>
         void hitPatch
         (
             const polyPatch&,
-            TrackingData& td
+            TrackData& td
         );
 
+
+    // Transformations
+
         //- Transform the position the particle
         //  according to the given transformation tensor
-        void transformPosition(const tensor& T);
+        virtual void transformPosition(const tensor& T);
 
         //- Transform the physical properties of the particle
         //  according to the given transformation tensor
-        void transformProperties(const tensor& T);
+        virtual void transformProperties(const tensor& T);
 
         //- Transform the physical properties of the particle
         //  according to the given separation vector
-        void transformProperties(const vector& separation);
+        virtual void transformProperties(const vector& separation);
+
+
+    // Parallel transfer
 
         //- Convert global addressing to the processor patch
         //  local equivalents
-        template<class TrackingData>
-        void prepareForParallelTransfer(const label patchi, TrackingData& td);
+        template<class TrackData>
+        void prepareForParallelTransfer(const label patchi, TrackData& td);
 
         //- Convert processor patch addressing to the global equivalents
         //  and set the celli to the face-neighbour
-        template<class TrackingData>
-        void correctAfterParallelTransfer(const label patchi, TrackingData& td);
+        template<class TrackData>
+        void correctAfterParallelTransfer(const label patchi, TrackData& td);
 
 
 public:
@@ -217,36 +262,6 @@ public:
     TypeName("Particle");
 
 
-    //- Class used to pass tracking data to the trackToFace function
-    class trackData
-    {
-
-        // Private data
-
-            //- Reference to the cloud containing this particle
-            Cloud<ParticleType>& cloud_;
-
-
-    public:
-
-        bool switchProcessor;
-        bool keepParticle;
-
-
-        // Constructors
-
-            inline trackData
-            (
-                Cloud<ParticleType>& cloud
-            );
-
-
-        // Member functions
-
-            inline Cloud<ParticleType>& cloud();
-    };
-
-
     // Constructors
 
         //- Construct from components
@@ -265,7 +280,8 @@ public:
             bool readFields = true
         );
 
-        //- Factory class to read-construct particles used for parallel transfer
+        //- Factory class to read-construct particles used for
+        //  parallel transfer
         class iNew
         {
 
@@ -288,7 +304,7 @@ public:
         };
 
 
-    // Destructor
+    //- Destructor
 
         virtual ~Particle()
         {}
@@ -299,7 +315,7 @@ public:
         // Access
 
             //- Return true if particle is in cell
-            inline bool inCell();
+            inline bool inCell() const;
 
             //- Return true if position is in cell i
             inline bool inCell
@@ -307,7 +323,7 @@ public:
                 const vector& position,
                 const label celli,
                 const scalar stepFraction
-            );
+            ) const;
 
             //- Return current particle position
             inline const vector& position() const;
@@ -337,7 +353,11 @@ public:
             inline label patch(const label facei) const;
 
             //- Which face of this patch is this particle on
-            inline label patchFace(const label patchi, const label facei) const;
+            inline label patchFace
+            (
+                const label patchi,
+                const label facei
+            ) const;
 
             //- The nearest distance to a wall that
             //  the particle can be in the n direction
@@ -359,14 +379,14 @@ public:
             //  the fraction of the time-step completed.
             //  Returns the boundary face index if the track stops at the
             //  boundary, -1 otherwise.
-            template<class TrackingData>
+            template<class TrackData>
             label track
             (
                 const vector& endPosition,
-                TrackingData& td
+                TrackData& td
             );
 
-            //- Calls the templated track with dummy TrackingData
+            //- Calls the templated track with dummy TrackData
             label track(const vector& endPosition);
 
             //- Track particle to a given position and returns 1.0 if the
@@ -375,17 +395,18 @@ public:
             //  completed.
             //  on entry 'stepFraction()' should be set to the fraction of the
             //  time-step at which the tracking starts.
-            template<class TrackingData>
+            template<class TrackData>
             scalar trackToFace
             (
                 const vector& endPosition,
-                TrackingData& td
+                TrackData& td
             );
 
-            //- Calls the templated trackToFace with dummy TrackingData
+            //- Calls the templated trackToFace with dummy TrackData
             scalar trackToFace(const vector& endPosition);
 
-            //- Return the index of the face to be used in the interpolation routine
+            //- Return the index of the face to be used in the interpolation
+            //  routine
             inline label faceInterpolation() const;
 
 
diff --git a/src/lagrangian/basic/Particle/ParticleI.H b/src/lagrangian/basic/Particle/ParticleI.H
index e2678954123..4ffc8c53f1f 100644
--- a/src/lagrangian/basic/Particle/ParticleI.H
+++ b/src/lagrangian/basic/Particle/ParticleI.H
@@ -40,7 +40,7 @@ inline scalar Particle<ParticleType>::lambda
     const vector& to,
     const label facei,
     const scalar stepFraction
-)
+) const
 {
     const polyMesh& mesh = cloud_.polyMesh_;
     bool movingMesh = mesh.moving();
@@ -71,7 +71,6 @@ inline scalar Particle<ParticleType>::lambda
 
         // for a moving mesh we need to reconstruct the old
         // Sf and Cf from oldPoints (they aren't stored)
-        // NN.
 
         const vectorField& oldPoints = mesh.oldPoints();
 
@@ -100,7 +99,7 @@ inline scalar Particle<ParticleType>::lambda
             // find center of rotation
             vector omega = Sf0 ^ Sf;
             scalar magOmega = mag(omega);
-            omega /= magOmega+SMALL;
+            omega /= magOmega + SMALL;
             vector n0 = omega ^ Sf0;
             scalar lam = ((Cf - Cf0) & Sf)/(n0 & Sf);
             vector r0 = Cf0 + lam*n0;
@@ -188,7 +187,7 @@ inline scalar Particle<ParticleType>::lambda
     const vector& from,
     const vector& to,
     const label facei
-)
+) const
 {
     const polyMesh& mesh = cloud_.polyMesh_;
 
@@ -235,7 +234,7 @@ inline scalar Particle<ParticleType>::lambda
 
 
 template<class ParticleType>
-inline bool Particle<ParticleType>::inCell()
+inline bool Particle<ParticleType>::inCell() const
 {
     labelList faces = findFaces(position_);
 
@@ -249,7 +248,7 @@ inline bool Particle<ParticleType>::inCell
     const vector& position,
     const label celli,
     const scalar stepFraction
-)
+) const
 {
     labelList faces = findFaces(position, celli, stepFraction);
 
@@ -277,7 +276,6 @@ inline Cloud<ParticleType>& Particle<ParticleType>::trackData::cloud()
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-//- Return reference to the particle cloud
 template<class ParticleType>
 inline const Cloud<ParticleType>& Particle<ParticleType>::cloud() const
 {
@@ -313,7 +311,6 @@ inline label Particle<ParticleType>::face() const
 }
 
 
-//- Is the particle on a boundary face?
 template<class ParticleType>
 inline bool Particle<ParticleType>::onBoundary() const
 {
diff --git a/src/lagrangian/basic/indexedParticle/indexedParticle.H b/src/lagrangian/basic/indexedParticle/indexedParticle.H
index 742f0462e4c..259d77ebbe6 100644
--- a/src/lagrangian/basic/indexedParticle/indexedParticle.H
+++ b/src/lagrangian/basic/indexedParticle/indexedParticle.H
@@ -26,7 +26,6 @@ Class
     Foam::indexedParticle
 
 Description
-    An indexed Particle
 
 SourceFiles
     indexedParticleI.H
diff --git a/src/lagrangian/basic/indexedParticle/indexedParticleCloud.C b/src/lagrangian/basic/indexedParticle/indexedParticleCloud.C
index 6b86a4f8dee..c51fc30b19a 100644
--- a/src/lagrangian/basic/indexedParticle/indexedParticleCloud.C
+++ b/src/lagrangian/basic/indexedParticle/indexedParticleCloud.C
@@ -22,6 +22,8 @@ License
     along with OpenFOAM; if not, write to the Free Software Foundation,
     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 
+Description
+
 \*---------------------------------------------------------------------------*/
 
 #include "indexedParticle.H"
diff --git a/src/lagrangian/basic/lagrangianField/LagrangianField.H b/src/lagrangian/basic/lagrangianField/LagrangianField.H
index 217a31fc7e9..de11b91c3d3 100644
--- a/src/lagrangian/basic/lagrangianField/LagrangianField.H
+++ b/src/lagrangian/basic/lagrangianField/LagrangianField.H
@@ -26,7 +26,6 @@ Class
     Foam::LagrangianField
 
 Description
-    Lagrangian Field
 
 SourceFiles
     LagrangianFieldI.H
diff --git a/src/lagrangian/basic/passiveParticle/passiveParticle.H b/src/lagrangian/basic/passiveParticle/passiveParticle.H
index 27b8eef40bb..f5f76036c22 100644
--- a/src/lagrangian/basic/passiveParticle/passiveParticle.H
+++ b/src/lagrangian/basic/passiveParticle/passiveParticle.H
@@ -26,7 +26,6 @@ Class
     Foam::passiveParticle
 
 Description
-    A passive Particle
 
 SourceFiles
     passiveParticleI.H
diff --git a/src/lagrangian/basic/passiveParticle/passiveParticleCloud.C b/src/lagrangian/basic/passiveParticle/passiveParticleCloud.C
index 2f3c8b65574..4263d80f04b 100644
--- a/src/lagrangian/basic/passiveParticle/passiveParticleCloud.C
+++ b/src/lagrangian/basic/passiveParticle/passiveParticleCloud.C
@@ -22,6 +22,8 @@ License
     along with OpenFOAM; if not, write to the Free Software Foundation,
     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 
+Description
+
 \*---------------------------------------------------------------------------*/
 
 #include "passiveParticle.H"
diff --git a/src/lagrangian/basic/polyMeshInfo/polyMeshInfo.H b/src/lagrangian/basic/polyMeshInfo/polyMeshInfo.H
index ae16c885e87..c91ac209c28 100644
--- a/src/lagrangian/basic/polyMeshInfo/polyMeshInfo.H
+++ b/src/lagrangian/basic/polyMeshInfo/polyMeshInfo.H
@@ -26,7 +26,7 @@ Class
     Foam::polyMeshInfo
 
 Description
-    Foam::polyMeshInfo
+
 
 SourceFiles
     polyMeshInfo.C
diff --git a/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.C b/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.C
new file mode 100644
index 00000000000..4150f8b78eb
--- /dev/null
+++ b/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.C
@@ -0,0 +1,65 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 1991-2007 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 2 of the License, or (at your
+    option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM; if not, write to the Free Software Foundation,
+    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+\*---------------------------------------------------------------------------*/
+
+#include "Analytical.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+template<class Type>
+Foam::Analytical<Type>::Analytical
+(
+    const word& phiName,
+    const dictionary& dict
+)
+:
+    IntegrationScheme<Type>(phiName, dict)
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+template<class Type>
+Foam::Analytical<Type>::~Analytical()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+template<class Type>
+Type Foam::Analytical<Type>::integrate
+(
+    const Type phi,
+    const scalar dt,
+    const Type alpha,
+    const scalar beta
+) const
+{
+    return alpha + (phi - alpha)*exp(-beta*dt);
+}
+
+
+// ************************************************************************* //
diff --git a/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.H b/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.H
new file mode 100644
index 00000000000..4ae39f226ef
--- /dev/null
+++ b/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.H
@@ -0,0 +1,101 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 1991-2007 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 2 of the License, or (at your
+    option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM; if not, write to the Free Software Foundation,
+    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+Class
+    Foam::Analytical
+
+Description
+    Analytical integration
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef Analytical_H
+#define Analytical_H
+
+#include "IntegrationScheme.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                         Class Analytical Declaration
+\*---------------------------------------------------------------------------*/
+
+template<class Type>
+class Analytical
+:
+    public IntegrationScheme<Type>
+{
+
+public:
+
+    //- Runtime type information
+    TypeName("Analytical");
+
+
+    // Constructors
+
+        //- Construct from components
+        Analytical
+        (
+            const word& phiName,
+            const dictionary& dict
+        );
+
+
+    //- Destructor
+
+        virtual ~Analytical();
+
+
+    // Member Functions
+
+        //- Perform the integration
+        virtual Type integrate
+        (
+            const Type phi,
+            const scalar dt,
+            const Type alpha,
+            const scalar beta
+        ) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+#   include "Analytical.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.C b/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.C
new file mode 100644
index 00000000000..34f3b216ee3
--- /dev/null
+++ b/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.C
@@ -0,0 +1,65 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 1991-2007 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 2 of the License, or (at your
+    option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM; if not, write to the Free Software Foundation,
+    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+\*---------------------------------------------------------------------------*/
+
+#include "Euler.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+template<class Type>
+Foam::Euler<Type>::Euler
+(
+    const word& phiName,
+    const dictionary& dict
+)
+:
+    IntegrationScheme<Type>(phiName, dict)
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+template<class Type>
+Foam::Euler<Type>::~Euler()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+template<class Type>
+Type Foam::Euler<Type>::integrate
+(
+    const Type phi,
+    const scalar dt,
+    const Type alpha,
+    const scalar beta
+) const
+{
+    return (phi + dt*alpha)/(1.0 + dt/beta);
+}
+
+
+// ************************************************************************* //
diff --git a/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.H b/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.H
new file mode 100644
index 00000000000..7073c9de6cf
--- /dev/null
+++ b/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.H
@@ -0,0 +1,101 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 1991-2007 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 2 of the License, or (at your
+    option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM; if not, write to the Free Software Foundation,
+    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+Class
+    Foam::Euler
+
+Description
+    Euler-implicit integration
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef Euler_H
+#define Euler_H
+
+#include "IntegrationScheme.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                           Class Euler Declaration
+\*---------------------------------------------------------------------------*/
+
+template<class Type>
+class Euler
+:
+    public IntegrationScheme<Type>
+{
+
+public:
+
+    //- Runtime type information
+    TypeName("Euler");
+
+
+    // Constructors
+
+        //- Construct from components
+        Euler
+        (
+            const word& phiName,
+            const dictionary& dict
+        );
+
+
+    //- Destructor
+
+        virtual ~Euler();
+
+
+    // Member Functions
+
+        //- Perform the integration
+        virtual Type integrate
+        (
+            const Type phi,
+            const scalar dt,
+            const Type alpha,
+            const scalar beta
+        ) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+#   include "Euler.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.C b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.C
new file mode 100644
index 00000000000..99fb7c1a494
--- /dev/null
+++ b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.C
@@ -0,0 +1,54 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 1991-2007 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 2 of the License, or (at your
+    option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM; if not, write to the Free Software Foundation,
+    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+\*---------------------------------------------------------------------------*/
+
+#include "IntegrationScheme.H"
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+template<class Type>
+Foam::IntegrationScheme<Type>::IntegrationScheme
+(
+    const word& phiName,
+    const dictionary& dict
+)
+:
+   phiName_(phiName),
+   dict_(dict)
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor    * * * * * * * * * * * * * * //
+
+template<class Type>
+Foam::IntegrationScheme<Type>::~IntegrationScheme()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+#include "newIntegrationScheme.C"
+
+// ************************************************************************* //
diff --git a/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.H b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.H
new file mode 100644
index 00000000000..3db7f59844b
--- /dev/null
+++ b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.H
@@ -0,0 +1,169 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 1991-2007 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 2 of the License, or (at your
+    option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM; if not, write to the Free Software Foundation,
+    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+Class
+    Foam::IntegrationScheme
+
+Description
+    Top level model for Integration schemes
+
+SourceFiles
+    IntegrationScheme.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef IntegrationScheme_H
+#define IntegrationScheme_H
+
+#include "autoPtr.H"
+#include "runTimeSelectionTables.H"
+#include "dictionary.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                     Class IntegrationScheme Declaration
+\*---------------------------------------------------------------------------*/
+
+template<class Type>
+class IntegrationScheme
+{
+    // Private data
+
+        //- Name of the Integration variable
+        const word& phiName_;
+
+        //- Reference to the dictionary
+        const dictionary& dict_;
+
+
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        IntegrationScheme(const IntegrationScheme&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const IntegrationScheme&);
+
+
+public:
+
+    //- Runtime type information
+    TypeName("IntegrationScheme");
+
+
+    //- Declare runtime constructor selection table
+
+         declareRunTimeSelectionTable
+         (
+             autoPtr,
+             IntegrationScheme,
+             dictionary,
+             (
+                 const word& phiName,
+                 const dictionary& dict
+             ),
+             (phiName, dict)
+         );
+
+
+    // Constructors
+
+        //- Construct from components
+        IntegrationScheme
+        (
+            const word& phiName,
+            const dictionary& dict
+        );
+
+
+    // Selectors
+
+        //- Return a reference to the selected radiation model
+        static autoPtr<IntegrationScheme> New
+        (
+            const word& phiName,
+            const dictionary& dict
+        );
+
+
+    //- Destructor
+
+        virtual ~IntegrationScheme();
+
+
+    // Member Functions
+
+        //- Perform the Integration
+        virtual Type integrate
+        (
+            const Type phi,
+            const scalar dt,
+            const Type alpha,
+            const scalar beta
+        ) const = 0;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#define makeIntegrationScheme(Type)                                           \
+                                                                              \
+    defineNamedTemplateTypeNameAndDebug(IntegrationScheme<Type>, 0);          \
+                                                                              \
+    defineTemplateRunTimeSelectionTable                                       \
+    (                                                                         \
+        IntegrationScheme<Type>,                                               \
+        dictionary                                                            \
+    );
+
+
+#define makeIntegrationSchemeType(SS, Type)                                   \
+                                                                              \
+    defineNamedTemplateTypeNameAndDebug(SS<Type>, 0);                         \
+                                                                              \
+    IntegrationScheme<Type>::adddictionaryConstructorToTable<SS<Type> >          \
+        add##SS##Type##ConstructorToTable_;
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+#   include "IntegrationScheme.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
+
diff --git a/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationSchemesFwd.H b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationSchemesFwd.H
new file mode 100644
index 00000000000..63e4a07997d
--- /dev/null
+++ b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationSchemesFwd.H
@@ -0,0 +1,59 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 1991-2007 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 2 of the License, or (at your
+    option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM; if not, write to the Free Software Foundation,
+    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+InClass
+    Foam::IntegrationScheme
+
+Description
+
+SourceFiles
+    IntegrationScheme.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef IntegrationSchemesFwd_H
+#define IntegrationSchemesFwd_H
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+template<class Type>
+class IntegrationScheme;
+
+typedef IntegrationScheme<scalar> scalarIntegrationScheme;
+typedef IntegrationScheme<vector> vectorIntegrationScheme;
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/newIntegrationScheme.C b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/newIntegrationScheme.C
new file mode 100644
index 00000000000..5c3e7c36402
--- /dev/null
+++ b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/newIntegrationScheme.C
@@ -0,0 +1,65 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 1991-2007 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 2 of the License, or (at your
+    option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM; if not, write to the Free Software Foundation,
+    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+\*---------------------------------------------------------------------------*/
+
+#include "error.H"
+#include "IntegrationScheme.H"
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+template<class Type>
+Foam::autoPtr<Foam::IntegrationScheme<Type> >
+Foam::IntegrationScheme<Type>::New
+(
+    const word& phiName,
+    const dictionary& dict
+)
+{
+    word IntegrationSchemeTypeName;
+
+    dict.lookup(phiName) >> IntegrationSchemeTypeName;
+
+    Info<< "Selecting " << phiName << " IntegrationScheme "
+        << IntegrationSchemeTypeName << endl;
+
+    typename dictionaryConstructorTable::iterator cstrIter =
+        dictionaryConstructorTablePtr_->find(IntegrationSchemeTypeName);
+
+    if (cstrIter == dictionaryConstructorTablePtr_->end())
+    {
+        FatalErrorIn
+        (
+            "IntegrationScheme::New(const dictionary&)"
+        )   << "Unknown IntegrationScheme type "
+            << IntegrationSchemeTypeName << nl << nl
+            << "Valid IntegrationScheme types are:" << nl
+            << dictionaryConstructorTablePtr_->toc() << nl
+            << exit(FatalError);
+    }
+
+    return autoPtr<IntegrationScheme<Type> >(cstrIter()(phiName, dict));
+}
+
+// ************************************************************************* //
diff --git a/src/lagrangian/intermediate/IntegrationScheme/makeIntegrationSchemes.C b/src/lagrangian/intermediate/IntegrationScheme/makeIntegrationSchemes.C
new file mode 100644
index 00000000000..e3b488ca54a
--- /dev/null
+++ b/src/lagrangian/intermediate/IntegrationScheme/makeIntegrationSchemes.C
@@ -0,0 +1,46 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 1991-2007 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 2 of the License, or (at your
+    option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM; if not, write to the Free Software Foundation,
+    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+\*---------------------------------------------------------------------------*/
+
+#include "IntegrationScheme.H"
+#include "Euler.H"
+#include "Analytical.H"
+
+#include "scalar.H"
+#include "vector.H"
+
+namespace Foam
+{
+    makeIntegrationScheme(scalar);
+    makeIntegrationSchemeType(Euler, scalar);
+    makeIntegrationSchemeType(Analytical, scalar);
+
+    makeIntegrationScheme(vector);
+    makeIntegrationSchemeType(Euler, vector);
+    makeIntegrationSchemeType(Analytical, vector);
+};
+
+
+// ************************************************************************* //
diff --git a/src/lagrangian/intermediate/Make/files b/src/lagrangian/intermediate/Make/files
index 9b9869bc2ce..d29f2c32bfa 100755
--- a/src/lagrangian/intermediate/Make/files
+++ b/src/lagrangian/intermediate/Make/files
@@ -1,7 +1,7 @@
 /* Parcels */
-parcels/derived/kinematicParcel/kinematicParcel.C
-parcels/derived/thermoParcel/thermoParcel.C
-parcels/derived/reactingParcel/reactingParcel.C
+parcels/derived/basicKinematicParcel/basicKinematicParcel.C
+parcels/derived/basicThermoParcel/basicThermoParcel.C
+parcels/derived/basicReactingParcel/basicReactingParcel.C
 
 /* Cloud base classes */
 clouds/baseClasses/kinematicCloud/kinematicCloud.C
@@ -14,35 +14,38 @@ clouds/derived/basicThermoCloud/basicThermoCloud.C
 clouds/derived/basicReactingCloud/basicReactingCloud.C
 
 /* kinematic parcel sub-models */
-parcels/derived/kinematicParcel/defineKinematicParcel.C
-parcels/derived/kinematicParcel/makeKinematicParcelDispersionModels.C
-parcels/derived/kinematicParcel/makeKinematicParcelDragModels.C
-parcels/derived/kinematicParcel/makeKinematicParcelInjectionModels.C
-parcels/derived/kinematicParcel/makeKinematicParcelHeatTransferModels.C
-parcels/derived/kinematicParcel/makeKinematicParcelWallInteractionModels.C
+parcels/derived/basicKinematicParcel/defineBasicKinematicParcel.C
+parcels/derived/basicKinematicParcel/makeBasicKinematicParcelDispersionModels.C
+parcels/derived/basicKinematicParcel/makeBasicKinematicParcelDragModels.C
+parcels/derived/basicKinematicParcel/makeBasicKinematicParcelInjectionModels.C
+parcels/derived/basicKinematicParcel/makeBasicKinematicParcelHeatTransferModels.C
+parcels/derived/basicKinematicParcel/makeBasicKinematicParcelWallInteractionModels.C
 
 /* thermo parcel sub-models */
-parcels/derived/thermoParcel/defineThermoParcel.C
-parcels/derived/thermoParcel/makeThermoParcelDispersionModels.C
-parcels/derived/thermoParcel/makeThermoParcelDragModels.C
-parcels/derived/thermoParcel/makeThermoParcelInjectionModels.C
-parcels/derived/thermoParcel/makeThermoParcelHeatTransferModels.C
-parcels/derived/thermoParcel/makeThermoParcelWallInteractionModels.C
+parcels/derived/basicThermoParcel/defineBasicThermoParcel.C
+parcels/derived/basicThermoParcel/makeBasicThermoParcelDispersionModels.C
+parcels/derived/basicThermoParcel/makeBasicThermoParcelDragModels.C
+parcels/derived/basicThermoParcel/makeBasicThermoParcelInjectionModels.C
+parcels/derived/basicThermoParcel/makeBasicThermoParcelHeatTransferModels.C
+parcels/derived/basicThermoParcel/makeBasicThermoParcelWallInteractionModels.C
 
 /* reacting parcel sub-models */
-parcels/derived/reactingParcel/defineReactingParcel.C
-parcels/derived/reactingParcel/makeReactingParcelCompositionModels.C
-parcels/derived/reactingParcel/makeReactingParcelDragModels.C
-parcels/derived/reactingParcel/makeReactingParcelDispersionModels.C
-parcels/derived/reactingParcel/makeReactingParcelInjectionModels.C
-parcels/derived/reactingParcel/makeReactingParcelHeatTransferModels.C
-parcels/derived/reactingParcel/makeReactingParcelMassTransferModels.C
-parcels/derived/reactingParcel/makeReactingParcelSurfaceReactionModels.C
-parcels/derived/reactingParcel/makeReactingParcelWallInteractionModels.C
+parcels/derived/basicReactingParcel/defineBasicReactingParcel.C
+parcels/derived/basicReactingParcel/makeBasicReactingParcelCompositionModels.C
+parcels/derived/basicReactingParcel/makeBasicReactingParcelDragModels.C
+parcels/derived/basicReactingParcel/makeBasicReactingParcelDispersionModels.C
+parcels/derived/basicReactingParcel/makeBasicReactingParcelInjectionModels.C
+parcels/derived/basicReactingParcel/makeBasicReactingParcelHeatTransferModels.C
+parcels/derived/basicReactingParcel/makeBasicReactingParcelMassTransferModels.C
+parcels/derived/basicReactingParcel/makeBasicReactingParcelSurfaceReactionModels.C
+parcels/derived/basicReactingParcel/makeBasicReactingParcelWallInteractionModels.C
 
 /* bolt-on models */
 submodels/addOns/radiation/absorptionEmission/cloudAbsorptionEmission/cloudAbsorptionEmission.C
 submodels/addOns/radiation/scatter/cloudScatter/cloudScatter.C
 
+/* integration schemes */
+IntegrationScheme/makeIntegrationSchemes.C
+
 
 LIB = $(FOAM_LIBBIN)/liblagrangianIntermediate
diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C
index 84bccf17a09..c68238a28f9 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C
@@ -30,6 +30,8 @@ License
 #include "InjectionModel.H"
 #include "WallInteractionModel.H"
 
+#include "IntegrationScheme.H"
+
 #include "interpolationCellPoint.H"
 
 // * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * * * //
@@ -153,7 +155,6 @@ Foam::KinematicCloud<ParcelType>::KinematicCloud
     kinematicCloud(),
     cloudType_(cloudType),
     mesh_(rho.mesh()),
-    runTime_(rho.time()),
     vpi_(vpi),
     particleProperties_
     (
@@ -170,7 +171,7 @@ Foam::KinematicCloud<ParcelType>::KinematicCloud
     parcelTypeId_(readLabel(particleProperties_.lookup("parcelTypeId"))),
     coupled_(particleProperties_.lookup("coupled")),
     rndGen_(label(0)),
-    time0_(runTime_.value()),
+    time0_(this->db().time().value()),
     parcelBasisType_(particleProperties_.lookup("parcelBasisType")),
     parcelBasis_(pbNumber),
     massTotal_
@@ -182,6 +183,7 @@ Foam::KinematicCloud<ParcelType>::KinematicCloud
     U_(U),
     mu_(mu),
     g_(g),
+    interpolationSchemes_(particleProperties_.subDict("interpolationSchemes")),
     dispersionModel_
     (
         DispersionModel<KinematicCloud<ParcelType> >::New
@@ -214,6 +216,14 @@ Foam::KinematicCloud<ParcelType>::KinematicCloud
             *this
         )
     ),
+    UIntegrator_
+    (
+        vectorIntegrationScheme::New
+        (
+            "U",
+            particleProperties_.subDict("integrationSchemes")
+        )
+    ),
     nInjections_(0),
     nParcelsAdded_(0),
     nParcelsAddedTotal_(0),
@@ -221,8 +231,8 @@ Foam::KinematicCloud<ParcelType>::KinematicCloud
     (
         IOobject
         (
-            this->cloudName() + "UTrans",
-            runTime_.timeName(),
+            this->name() + "UTrans",
+            this->db().time().timeName(),
             this->db(),
             IOobject::NO_READ,
             IOobject::NO_WRITE,
@@ -235,8 +245,8 @@ Foam::KinematicCloud<ParcelType>::KinematicCloud
     (
         IOobject
         (
-            this->cloudName() + "UCoeff",
-            runTime_.timeName(),
+            this->name() + "UCoeff",
+            this->db().time().timeName(),
             this->db(),
             IOobject::NO_READ,
             IOobject::NO_WRITE,
@@ -288,17 +298,37 @@ void Foam::KinematicCloud<ParcelType>::resetSourceTerms()
 template<class ParcelType>
 void Foam::KinematicCloud<ParcelType>::evolve()
 {
-    interpolationCellPoint<scalar> rhoInterp(vpi_, rho_);
-    interpolationCellPoint<vector> UInterp(vpi_, U_);
-    interpolationCellPoint<scalar> muInterp(vpi_, mu_);
+    autoPtr<interpolation<scalar> > rhoInterpolator =
+        interpolation<scalar>::New
+        (
+            interpolationSchemes_,
+            vpi_,
+            rho_
+        );
+
+    autoPtr<interpolation<vector> > UInterpolator =
+        interpolation<vector>::New
+        (
+            interpolationSchemes_,
+            vpi_,
+            U_
+        );
+
+    autoPtr<interpolation<scalar> > muInterpolator =
+        interpolation<scalar>::New
+        (
+            interpolationSchemes_,
+            vpi_,
+            mu_
+        );
 
     typename ParcelType::trackData td
     (
         *this,
         constProps_,
-        rhoInterp,
-        UInterp,
-        muInterp,
+        rhoInterpolator(),
+        UInterpolator(),
+        muInterpolator(),
         g_.value()
     );
 
@@ -330,7 +360,7 @@ void Foam::KinematicCloud<ParcelType>::inject
     TrackingData& td
 )
 {
-    scalar time = runTime_.value();
+    scalar time = this->db().time().value();
 
     scalar pRho = td.constProps().rho0();
 
@@ -363,7 +393,7 @@ void Foam::KinematicCloud<ParcelType>::inject
     // Duration of injection period during this timestep
     scalar deltaT = min
     (
-        runTime().deltaT().value(),
+        this->db().time().deltaT().value(),
         min
         (
             time - this->injection().timeStart(),
@@ -430,8 +460,8 @@ void Foam::KinematicCloud<ParcelType>::inject
 
             scalar dt = time - timeInj;
 
-            pPtr->stepFraction() = (runTime_.deltaT().value() - dt)
-                /runTime_.deltaT().value();
+            pPtr->stepFraction() = (this->db().time().deltaT().value() - dt)
+                /this->time().deltaT().value();
 
             this->injectParcel(td, pPtr);
          }
@@ -466,7 +496,7 @@ void Foam::KinematicCloud<ParcelType>::postInjectCheck()
 {
     if (nParcelsAdded_)
     {
-        Pout<< "\n--> Cloud: " << this->cloudName() << nl <<
+        Pout<< "\n--> Cloud: " << this->name() << nl <<
                "    Added " << nParcelsAdded_ <<  " new parcels" << nl << endl;
     }
 
@@ -474,7 +504,7 @@ void Foam::KinematicCloud<ParcelType>::postInjectCheck()
     nParcelsAdded_ = 0;
 
     // Set time for start of next injection
-    time0_ = runTime_.value();
+    time0_ = this->db().time().value();
 
     // Increment number of injections
     nInjections_++;
@@ -484,7 +514,7 @@ void Foam::KinematicCloud<ParcelType>::postInjectCheck()
 template<class ParcelType>
 void Foam::KinematicCloud<ParcelType>::info() const
 {
-    Info<< "Cloud name: " << this->cloudName() << nl
+    Info<< "Cloud name: " << this->name() << nl
         << "    Parcels added during this run   = "
         << returnReduce(nParcelsAddedTotal_, sumOp<label>()) << nl
         << "    Mass introduced during this run = "
@@ -502,8 +532,8 @@ void Foam::KinematicCloud<ParcelType>::dumpParticlePositions() const
 {
     OFstream pObj
     (
-        this->runTime().path()/"parcelPositions_"
-      + this->cloudName() + "_"
+        this->db().time().path()/"parcelPositions_"
+      + this->name() + "_"
       + name(this->nInjections_) + ".obj"
     );
 
diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
index 98a04bc32f0..7a572c45c1e 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
@@ -27,7 +27,6 @@ Class
 
 Description
     Templated base class for kinematic cloud
-
     - Kinematic only
       - Dispersion model
       - Drag model
@@ -53,7 +52,8 @@ SourceFiles
 #include "volPointInterpolation.H"
 #include "fvMatrices.H"
 #include "fvm.H"
-//#include "DimensionedField.H"
+
+#include "IntegrationSchemesFwd.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -108,7 +108,7 @@ private:
 
         //- References to the mesh and time databases
         const fvMesh& mesh_;
-        const Time& runTime_;
+//        const Time& runTime_;
 
         //- Reference to the interpolation for the carrier phase to the parcels
         const volPointInterpolation& vpi_;
@@ -165,6 +165,11 @@ private:
             const dimensionedVector& g_;
 
 
+        // Interpolation
+
+            dictionary interpolationSchemes_;
+
+
         // References to the cloud sub-models
 
             //- Dispersion model
@@ -183,6 +188,12 @@ private:
                 wallInteractionModel_;
 
 
+        // Reference to the particle integration schemes
+
+            //- Velocity integration
+            autoPtr<vectorIntegrationScheme> UIntegrator_;
+
+
         // Counters
 
             //- Number of injections counter
@@ -233,6 +244,25 @@ protected:
             const scalar pVolume
         );
 
+        //- Inject more parcels
+        template<class TrackingData>
+        void inject(TrackingData& td);
+
+        //- Inject parcel if it is valid - delete otherwise
+        template<class TrackingData>
+        void injectParcel
+        (
+            TrackingData& td,
+            ParcelType* p
+        );
+
+        //- Move the parcels
+        template<class TrackingData>
+        void move(TrackingData& td);
+
+        //- Post-injection checks
+        void postInjectCheck();
+
 
 public:
 
@@ -253,7 +283,7 @@ public:
         );
 
 
-    // Destructors
+    // Destructor
 
         virtual ~KinematicCloud();
 
@@ -273,9 +303,6 @@ public:
                 //- Return refernce to the mesh
                 inline const fvMesh& mesh() const;
 
-                //- Return referece to the time database
-                inline const Time& runTime() const;
-
                 //- Retuen reference to the interpolation
                 inline const volPointInterpolation& vpi() const;
 
@@ -313,6 +340,12 @@ public:
                 inline const dimensionedVector& g() const;
 
 
+            // Interpolations
+
+                //- Return reference to the interpolation dictionary
+                inline const dictionary& interpolationSchemes() const;
+
+
             // Sub-models
 
                 //- Return reference to dispersion model
@@ -335,6 +368,12 @@ public:
                     wallInteraction() const;
 
 
+            // Integration schemes
+
+                //-Return reference to velocity integration
+                inline const vectorIntegrationScheme& UIntegrator() const;
+
+
             // Sources
 
                 // Momentum
@@ -345,15 +384,15 @@ public:
                     //- Coefficient for carrier phase U equation
                     inline DimensionedField<scalar, volMesh>& UCoeff();
 
-                    //- Momentum source term
-                    inline tmp<fvVectorMatrix> SU(volVectorField& U) const;
+                    //- Return tmp momentum source term - fully explicit
+                    inline tmp<DimensionedField<vector, volMesh> > SU1() const;
 
+                    //- Return tmp momentum source term - semi-implicit
+                    inline tmp<fvVectorMatrix> SU2(volVectorField& U) const;
 
 
-        // Check
 
-            //- Post-injection checks
-            void postInjectCheck();
+        // Check
 
             //- Total mass injected
             inline const scalar massInjected() const;
@@ -388,35 +427,13 @@ public:
                 inline const tmp<volScalarField> alpha() const;
 
 
-        // Edit
+        // Cloud evolution functions
 
             //- Reset the spray source terms
             void resetSourceTerms();
 
             //- Evolve the spray (move, inject)
             void evolve();
-
-            //- Move the parcels
-            template<class TrackingData>
-            void move
-            (
-                TrackingData& td
-            );
-
-            //- Inject parcel if it is valid - delete otherwise
-            template<class TrackingData>
-            void injectParcel
-            (
-                TrackingData& td,
-                ParcelType* p
-            );
-
-            //- Inject more parcels
-            template<class TrackingData>
-            void inject
-            (
-                TrackingData& td
-            );
 };
 
 
diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H
index f16f66e1c50..72c467e92f3 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H
@@ -47,13 +47,6 @@ inline const Foam::fvMesh& Foam::KinematicCloud<ParcelType>::mesh() const
 }
 
 
-template<class ParcelType>
-inline const Foam::Time& Foam::KinematicCloud<ParcelType>::runTime() const
-{
-    return runTime_;
-}
-
-
 template<class ParcelType>
 inline const Foam::volPointInterpolation&
 Foam::KinematicCloud<ParcelType>::vpi() const
@@ -106,6 +99,13 @@ Foam::KinematicCloud<ParcelType>::g() const
     return g_;
 }
 
+template<class ParcelType>
+inline const Foam::dictionary&
+Foam::KinematicCloud<ParcelType>::interpolationSchemes() const
+{
+    return interpolationSchemes_;
+}
+
 
 template<class ParcelType>
 inline const Foam::DispersionModel<Foam::KinematicCloud<ParcelType> >&
@@ -147,6 +147,14 @@ Foam::KinematicCloud<ParcelType>::wallInteraction() const
 }
 
 
+template<class ParcelType>
+inline const Foam::vectorIntegrationScheme&
+Foam::KinematicCloud<ParcelType>::UIntegrator() const
+{
+    return UIntegrator_;
+}
+
+
 template<class ParcelType>
 inline const Foam::label Foam::KinematicCloud<ParcelType>::nInjections() const
 {
@@ -219,16 +227,52 @@ Foam::KinematicCloud<ParcelType>::UCoeff()
 }
 
 
+template<class ParcelType>
+inline Foam::tmp<Foam::DimensionedField<Foam::vector, Foam::volMesh> >
+Foam::KinematicCloud<ParcelType>::SU1() const
+{
+    tmp<DimensionedField<vector, volMesh> > tSU1
+    (
+        new DimensionedField<vector, volMesh>
+        (
+            IOobject
+            (
+                this->name() + "SU1",
+                this->db().time().timeName(),
+                this->mesh(),
+                IOobject::NO_READ,
+                IOobject::AUTO_WRITE
+            ),
+            this->mesh(),
+            dimensionedVector
+            (
+                 "zero",
+                 dimensionSet(1, -2, -2, 0, 0),
+                 vector::zero
+            )
+        )
+    );
+
+    vectorField& SU1 = tSU1().field();
+    SU1 = UTrans_/(mesh_.V()*this->db().time().deltaT());
+
+    return tSU1;
+}
+
+
 template<class ParcelType>
 inline Foam::tmp<Foam::fvVectorMatrix>
-Foam::KinematicCloud<ParcelType>::SU(volVectorField& U) const
+Foam::KinematicCloud<ParcelType>::SU2(volVectorField& U) const
 {
-    Info<< "UTrans min/max = "
-        << min(UTrans_) << ", " << max(UTrans_) << endl;
-    Info<< "UCoeff min/max = "
-        << min(UCoeff_) << ", " << max(UCoeff_) << endl;
+    if (debug)
+    {
+        Info<< "UTrans min/max = "
+            << min(UTrans_) << ", " << max(UTrans_) << endl;
+        Info<< "UCoeff min/max = "
+            << min(UCoeff_) << ", " << max(UCoeff_) << endl;
+    }
 
-    return UTrans_/(mesh_.V()*runTime_.deltaT())
+    return UTrans_/(mesh_.V()*this->db().time().deltaT())
          - fvm::Sp(UCoeff_/mesh_.V(), U)
          + UCoeff_/mesh_.V()*U;
 }
@@ -244,8 +288,8 @@ Foam::KinematicCloud<ParcelType>::theta() const
         (
             IOobject
             (
-                this->cloudName() + "Theta",
-                runTime_.timeName(),
+                this->name() + "Theta",
+                this->db().time().timeName(),
                 this->db(),
                 IOobject::NO_READ,
                 IOobject::NO_WRITE,
@@ -281,8 +325,8 @@ Foam::KinematicCloud<ParcelType>::alpha() const
         (
             IOobject
             (
-                this->cloudName() + "Alpha",
-                runTime_.timeName(),
+                this->name() + "Alpha",
+                this->db().time().timeName(),
                 this->db(),
                 IOobject::NO_READ,
                 IOobject::NO_WRITE,
diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C
index 6f30dcb4f49..5251907c130 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C
@@ -86,15 +86,15 @@ Foam::ReactingCloud<ParcelType>::ReactingCloud
             (
                 IOobject
                 (
-                     this->cloudName() + "rhoTrans" + name(i),
-                     this->runTime().timeName(),
+                     this->name() + "rhoTrans" + name(i),
+                     this->db().time().timeName(),
                      this->db(),
                      IOobject::NO_READ,
                      IOobject::NO_WRITE,
                      false
                 ),
                 this->mesh(),
-                dimensionedScalar("zero", dimensionSet(1, 0, 0, 0, 0), 0.0)
+                dimensionedScalar("zero", dimMass, 0.0)
             )
         );
     }
@@ -128,44 +128,64 @@ void Foam::ReactingCloud<ParcelType>::evolve()
     const volScalarField cp = carrierThermo_.Cp();
     const volScalarField& p = carrierThermo_.p();
 
-    interpolationCellPoint<scalar> rhoInterp(this->vpi(), this->rho());
-    interpolationCellPoint<vector> UInterp(this->vpi(), this->U());
-    interpolationCellPoint<scalar> muInterp(this->vpi(), this->mu());
-    interpolationCellPoint<scalar> TInterp(this->vpi(), T);
-    interpolationCellPoint<scalar> cpInterp(this->vpi(), cp);
-    interpolationCellPoint<scalar> pInterp(this->vpi(), p);
+    autoPtr<interpolation<scalar> > rhoInterpolator = interpolation<scalar>::New
+    (
+        this->interpolationSchemes(),
+        this->vpi(),
+        this->rho()
+    );
+
+    autoPtr<interpolation<vector> > UInterpolator = interpolation<vector>::New
+    (
+        this->interpolationSchemes(),
+        this->vpi(),
+        this->U()
+    );
+
+    autoPtr<interpolation<scalar> > muInterpolator = interpolation<scalar>::New
+    (
+        this->interpolationSchemes(),
+        this->vpi(),
+        this->mu()
+    );
+
+    autoPtr<interpolation<scalar> > TInterpolator = interpolation<scalar>::New
+    (
+        this->interpolationSchemes(),
+        this->vpi(),
+        T
+    );
+
+    autoPtr<interpolation<scalar> > cpInterpolator = interpolation<scalar>::New
+    (
+        this->interpolationSchemes(),
+        this->vpi(),
+        cp
+    );
+
+    autoPtr<interpolation<scalar> > pInterpolator = interpolation<scalar>::New
+    (
+        this->interpolationSchemes(),
+        this->vpi(),
+        p
+    );
 
     typename ParcelType::trackData td
     (
         *this,
         constProps_,
-        rhoInterp,
-        UInterp,
-        muInterp,
-        TInterp,
-        cpInterp,
-        pInterp,
+        rhoInterpolator(),
+        UInterpolator(),
+        muInterpolator(),
+        TInterpolator(),
+        cpInterpolator(),
+        pInterpolator(),
         this->g().value()
     );
 
     inject(td);
 
-    move(td);
-}
-
-
-template<class ParcelType>
-template<class TrackingData>
-void Foam::ReactingCloud<ParcelType>::move
-(
-    TrackingData& td
-)
-{
-    if (this->coupled())
-    {
-        resetSourceTerms();
-    }
-    Cloud<ParcelType>::move(td);
+    this->move(td);
 }
 
 
@@ -176,7 +196,7 @@ void Foam::ReactingCloud<ParcelType>::inject
     TrackingData& td
 )
 {
-    scalar time = this->runTime().value();
+    scalar time = this->db().time().value();
 
     scalar pRho = td.constProps().rho0();
 
@@ -191,7 +211,7 @@ void Foam::ReactingCloud<ParcelType>::inject
     // Return if no parcels are required
     if (!nParcels)
     {
-        postInjectCheck();
+        this->postInjectCheck();
         return;
     }
 
@@ -213,7 +233,7 @@ void Foam::ReactingCloud<ParcelType>::inject
     // Duration of injection period during this timestep
     scalar deltaT = min
     (
-        this->runTime().deltaT().value(),
+        this->db().time().deltaT().value(),
         min
         (
             time - this->injection().timeStart(),
@@ -284,14 +304,14 @@ void Foam::ReactingCloud<ParcelType>::inject
 
             scalar dt = time - timeInj;
 
-            pPtr->stepFraction() = (this->runTime().deltaT().value() - dt)
-                /this->runTime().deltaT().value();
+            pPtr->stepFraction() = (this->db().time().deltaT().value() - dt)
+                /this->db().time().deltaT().value();
 
-            injectParcel(td, pPtr);
+            this->injectParcel(td, pPtr);
          }
     }
 
-    postInjectCheck();
+    this->postInjectCheck();
 
     if (debug)
     {
@@ -300,23 +320,4 @@ void Foam::ReactingCloud<ParcelType>::inject
 }
 
 
-template<class ParcelType>
-template<class TrackingData>
-void Foam::ReactingCloud<ParcelType>::injectParcel
-(
-    TrackingData& td,
-    ParcelType* p
-)
-{
-    ThermoCloud<ParcelType>::injectParcel(td, p);
-}
-
-
-template<class ParcelType>
-void Foam::ReactingCloud<ParcelType>::postInjectCheck()
-{
-    ThermoCloud<ParcelType>::postInjectCheck();
-}
-
-
 // ************************************************************************* //
diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H
index dda6676565f..14222dd198e 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H
+++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H
@@ -27,7 +27,6 @@ Class
 
 Description
     Templated base class for reactive cloud
-
     - Adds to kinematic cloud
       - Heat transfer
 
@@ -115,6 +114,13 @@ class ReactingCloud
         void operator=(const ReactingCloud&);
 
 
+protected:
+
+    //- Inject more parcels
+    template<class TrackingData>
+    void inject(TrackingData& td);
+
+
 public:
 
     //- Runtime type information
@@ -136,7 +142,7 @@ public:
         );
 
 
-    // Destructors
+    // Destructor
 
         virtual ~ReactingCloud();
 
@@ -182,50 +188,24 @@ public:
                     inline PtrList<DimensionedField<scalar, volMesh> >&
                         rhoTrans();
 
-                    //- Retun tmp mass source for field i
+                    //- Return tmp mass source for field i
+                    //  Fully explicit
                     inline tmp<DimensionedField<scalar, volMesh> >
-                        Srho(const label i) const;
+                        Srho1(const label i) const;
 
-                    //- Retun tmp total mass source for carrier phase
+                    //- Return tmp total mass source for carrier phase
+                    //  Fully explicit
                     inline tmp<DimensionedField<scalar, volMesh> >
-                        Srho() const;
+                        Srho1() const;
 
 
-        // Check
-
-            //- Post-injection checks
-            void postInjectCheck();
-
-
-        // Edit
+        // Cloud evolution functions
 
             //- Reset the spray source terms
             void resetSourceTerms();
 
             //- Evolve the spray (move, inject)
             void evolve();
-
-            //- Move the parcels
-            template<class TrackingData>
-            void move
-            (
-                TrackingData& td
-            );
-
-            //- Inject parcel if it is valid - delete otherwise
-            template<class TrackingData>
-            void injectParcel
-            (
-                TrackingData& td,
-                ParcelType* p
-            );
-
-            //- Inject more parcels
-            template<class TrackingData>
-            void inject
-            (
-                TrackingData& td
-            );
 };
 
 
diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudI.H b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudI.H
index 6385b7c9a77..dc4ae13c6f5 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudI.H
+++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudI.H
@@ -92,15 +92,15 @@ Foam::ReactingCloud<ParcelType>::rhoTrans()
 
 template<class ParcelType>
 inline Foam::tmp<Foam::DimensionedField<Foam::scalar, Foam::volMesh> >
-Foam::ReactingCloud<ParcelType>::Srho(const label i) const
+Foam::ReactingCloud<ParcelType>::Srho1(const label i) const
 {
-    return rhoTrans_[i]/(this->runTime().deltaT()*this->mesh().V());
+    return rhoTrans_[i]/(this->db().time().deltaT()*this->mesh().V());
 }
 
 
 template<class ParcelType>
 inline Foam::tmp<Foam::DimensionedField<Foam::scalar, Foam::volMesh> >
-Foam::ReactingCloud<ParcelType>::Srho() const
+Foam::ReactingCloud<ParcelType>::Srho1() const
 {
     tmp<DimensionedField<scalar, volMesh> > trhoTrans
     (
@@ -108,8 +108,8 @@ Foam::ReactingCloud<ParcelType>::Srho() const
         (
             IOobject
             (
-                this->cloudName() + "rhoTrans",
-                this->runTime().timeName(),
+                this->name() + "rhoTrans",
+                this->db().time().timeName(),
                 this->db(),
                 IOobject::NO_READ,
                 IOobject::NO_WRITE,
@@ -120,13 +120,13 @@ Foam::ReactingCloud<ParcelType>::Srho() const
         )
     );
 
-    DimensionedField<scalar, volMesh>& sourceField = trhoTrans();
+    scalarField& sourceField = trhoTrans().field();
     forAll (rhoTrans_, i)
     {
         sourceField += rhoTrans_[i];
     }
 
-    return trhoTrans/(this->runTime().deltaT()*this->mesh().V());
+    return trhoTrans/(this->db().time().deltaT()*this->mesh().V());
 }
 
 // ************************************************************************* //
diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudThermoTypes.H b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudThermoTypes.H
index ae932883d60..9fe413101d4 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudThermoTypes.H
+++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudThermoTypes.H
@@ -22,7 +22,7 @@ License
     along with OpenFOAM; if not, write to the Free Software Foundation,
     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 
-InClass
+Class
     Foam::cloudThermoTypes
 
 Description
diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C
index ac6653a348f..a4f6f9324bf 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C
@@ -63,13 +63,21 @@ Foam::ThermoCloud<ParcelType>::ThermoCloud
             *this
         )
     ),
+    TIntegrator_
+    (
+        scalarIntegrationScheme::New
+        (
+            "T",
+            this->particleProperties().subDict("integrationSchemes")
+        )
+    ),
     radiation_(this->particleProperties().lookup("radiation")),
     hTrans_
     (
         IOobject
         (
-            this->cloudName() + "hTrans",
-            this->runTime().timeName(),
+            this->name() + "hTrans",
+            this->db().time().timeName(),
             this->db(),
             IOobject::NO_READ,
             IOobject::NO_WRITE,
@@ -82,8 +90,8 @@ Foam::ThermoCloud<ParcelType>::ThermoCloud
     (
         IOobject
         (
-            this->cloudName() + "hCoeff",
-            this->runTime().timeName(),
+            this->name() + "hCoeff",
+            this->db().time().timeName(),
             this->db(),
             IOobject::NO_READ,
             IOobject::NO_WRITE,
@@ -119,188 +127,68 @@ void Foam::ThermoCloud<ParcelType>::evolve()
     const volScalarField& T = carrierThermo_.T();
     const volScalarField cp = carrierThermo_.Cp();
 
-    interpolationCellPoint<scalar> rhoInterp(this->vpi(), this->rho());
-    interpolationCellPoint<vector> UInterp(this->vpi(), this->U());
-    interpolationCellPoint<scalar> muInterp(this->vpi(), this->mu());
-    interpolationCellPoint<scalar> TInterp(this->vpi(), T);
-    interpolationCellPoint<scalar> cpInterp(this->vpi(), cp);
-
-    typename ParcelType::trackData td
+    autoPtr<interpolation<scalar> > rhoInterpolator = interpolation<scalar>::New
     (
-        *this,
-        constProps_,
-        rhoInterp,
-        UInterp,
-        muInterp,
-        TInterp,
-        cpInterp,
-        this->g().value()
+        this->interpolationSchemes(),
+        this->vpi(),
+        this->rho()
     );
 
-    inject(td);
-
-    move(td);
-}
-
-
-template<class ParcelType>
-template<class TrackingData>
-void Foam::ThermoCloud<ParcelType>::move
-(
-    TrackingData& td
-)
-{
-    if (this->coupled())
-    {
-        resetSourceTerms();
-    }
-    Cloud<ParcelType>::move(td);
-}
-
-
-template<class ParcelType>
-template<class TrackingData>
-void Foam::ThermoCloud<ParcelType>::inject
-(
-    TrackingData& td
-)
-{
-    KinematicCloud<ParcelType>::inject(td);
-/*
-    scalar time = this->runTime().value();
-
-    scalar pRho = td.constProps().rho0();
-
-    // Number of parcels to introduce during this timestep
-    const label nParcels = this->injection().nParcelsToInject
+    autoPtr<interpolation<vector> > UInterpolator = interpolation<vector>::New
     (
-        this->nInjections(),
-        this->time0(),
-        time
+        this->interpolationSchemes(),
+        this->vpi(),
+        this->U()
     );
 
-    // Return if no parcels are required
-    if (!nParcels)
-    {
-        this->postInjectCheck();
-        return;
-    }
-
-    // Volume of particles to introduce during this timestep
-    scalar pVolume = this->injection().volume
+    autoPtr<interpolation<scalar> > muInterpolator = interpolation<scalar>::New
     (
-         this->time0(),
-         time,
-         this->meshInfo()
+        this->interpolationSchemes(),
+        this->vpi(),
+        this->mu()
     );
 
-    // Volume fraction to introduce during this timestep
-    scalar pVolumeFraction =
-        this->injection().volumeFraction(this->time0(), time);
-
-    // Duration of injection period during this timestep
-    scalar deltaT = min
+    autoPtr<interpolation<scalar> > TInterpolator = interpolation<scalar>::New
     (
-        this->runTime().deltaT().value(),
-        min
-        (
-            time - this->injection().timeStart(),
-            this->injection().timeEnd() - this->time0()
-        )
+        this->interpolationSchemes(),
+        this->vpi(),
+        T
     );
 
-    // Pad injection time if injection starts during this timestep
-    scalar padTime = max
+    autoPtr<interpolation<scalar> > cpInterpolator = interpolation<scalar>::New
     (
-        0.0,
-        this->injection().timeStart() - this->time0()
+        this->interpolationSchemes(),
+        this->vpi(),
+        cp
     );
 
-    // Introduce new parcels linearly with time
-    for (label iParcel=0; iParcel<nParcels; iParcel++)
-    {
-        // Calculate the pseudo time of injection for parcel 'iParcel'
-        scalar timeInj = this->time0() + padTime + deltaT*iParcel/nParcels;
-
-        // Determine injected parcel properties
-        vector pPosition = this->injection().position
-        (
-            iParcel,
-            timeInj,
-            this->meshInfo(),
-            this->rndGen()
-        );
-
-        // Diameter of parcels
-        scalar pDiameter = this->injection().d0(iParcel, timeInj);
-
-        // Number of particles per parcel
-        scalar pNumberOfParticles = this->setNumberOfParticles
-        (
-            nParcels,
-            pDiameter,
-            pVolumeFraction,
-            pRho,
-            pVolume
-        );
-
-        // Velocity of parcels
-        vector pU = this->injection().velocity(iParcel, timeInj);
-
-        // Determine the injection cell
-        label pCell = -1;
-        this->setInjectorCellAndPosition(pCell, pPosition);
-
-        if (pCell >= 0)
-        {
-            // construct the parcel that is to be injected
-            ParcelType* pPtr = new ParcelType
-            (
-                td.cloud(),
-                this->parcelTypeId(),
-                pPosition,
-                pCell,
-                pDiameter,
-                pU,
-                pNumberOfParticles,
-                td.constProps()
-            );
-
-            scalar dt = time - timeInj;
-
-            pPtr->stepFraction() = (this->runTime().deltaT().value() - dt)
-                /this->runTime().deltaT().value();
-
-            this->injectParcel(td, pPtr);
-         }
-    }
+    typename ParcelType::trackData td
+    (
+        *this,
+        constProps_,
+        rhoInterpolator(),
+        UInterpolator(),
+        muInterpolator(),
+        TInterpolator(),
+        cpInterpolator(),
+        this->g().value()
+    );
 
-    this->postInjectCheck();
+    inject(td);
 
-    if (debug)
-    {
-        this->dumpParticlePositions();
-    }
-*/
+    this->move(td);
 }
 
 
 template<class ParcelType>
 template<class TrackingData>
-void Foam::ThermoCloud<ParcelType>::injectParcel
+void Foam::ThermoCloud<ParcelType>::inject
 (
-    TrackingData& td,
-    ParcelType* p
+    TrackingData& td
 )
 {
-    KinematicCloud<ParcelType>::injectParcel(td, p);
-}
-
-
-template<class ParcelType>
-void Foam::ThermoCloud<ParcelType>::postInjectCheck()
-{
-    KinematicCloud<ParcelType>::postInjectCheck();
+    // Injection is same as for KinematicCloud<ParcelType>
+    KinematicCloud<ParcelType>::inject(td);
 }
 
 
diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H
index 36e2cc2058b..98a2e496a6b 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H
+++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H
@@ -27,7 +27,6 @@ Class
 
 Description
     Templated base class for thermodynamic cloud
-
     - Adds to kinematic cloud
       - Heat transfer
 
@@ -87,6 +86,12 @@ class ThermoCloud
                 heatTransferModel_;
 
 
+        // Reference to the particle integration schemes
+
+            //- Temperature integration
+            autoPtr<scalarIntegrationScheme> TIntegrator_;
+
+
         // Modelling options
 
             //- Include radiation
@@ -111,6 +116,13 @@ class ThermoCloud
         void operator=(const ThermoCloud&);
 
 
+protected:
+
+    //- Inject more parcels
+    template<class TrackingData>
+    void inject(TrackingData& td);
+
+
 public:
 
     //- Runtime type information
@@ -131,7 +143,7 @@ public:
         );
 
 
-    // Destructors
+    // Destructor
 
         virtual ~ThermoCloud();
 
@@ -154,6 +166,12 @@ public:
                     heatTransfer() const;
 
 
+            // Integration schemes
+
+                //-Return reference to velocity integration
+                inline const scalarIntegrationScheme& TIntegrator() const;
+
+
             // Modelling options
 
                 //- Radiation flag
@@ -170,8 +188,11 @@ public:
                     //- Coefficient for carrier phase h equation
                     inline DimensionedField<scalar, volMesh>& hCoeff();
 
-                    //- Enthalpy source term
-                    inline tmp<fvScalarMatrix> Sh(volScalarField& h) const;
+                    //- return tmp enthalpy source term - fully explicit
+                    inline tmp<DimensionedField<scalar, volMesh> > Sh1() const;
+
+                    //- Return tmp enthalpy source term - semi-implicit
+                    inline tmp<fvScalarMatrix> Sh2(volScalarField& h) const;
 
 
                 // Radiation - overrides thermoCloud virtual abstract members
@@ -186,48 +207,13 @@ public:
                     inline tmp<volScalarField> sigmap() const;
 
 
-        // Check
-
-            //- Post-injection checks
-            void postInjectCheck();
-
-
-        // Edit
-
-            //- Reset the spray source terms
-            void resetSourceTerms();
+        // Cloud evolution functions
 
             //- Evolve the spray (move, inject)
             void evolve();
 
-
-        // Tracking
-
-            //- Move the particles under the influence of the given
-            //  gravitational acceleration
-            template<class TrackingData>
-            void move
-            (
-                TrackingData& td
-            );
-
-
-        // Injection
-
-            //- Inject parcel if it is valid - delete otherwise
-            template<class TrackingData>
-            void injectParcel
-            (
-                TrackingData& td,
-                ParcelType* p
-            );
-
-            //- Inject more parcels
-            template<class TrackingData>
-            void inject
-            (
-                TrackingData& td
-            );
+            //- Reset the spray source terms
+            void resetSourceTerms();
 };
 
 
diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H
index c7b86501512..cb8321c37ea 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H
+++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H
@@ -52,6 +52,14 @@ Foam::ThermoCloud<ParcelType>::heatTransfer() const
 }
 
 
+template<class ParcelType>
+inline const Foam::scalarIntegrationScheme&
+Foam::ThermoCloud<ParcelType>::TIntegrator() const
+{
+    return TIntegrator_;
+}
+
+
 template<class ParcelType>
 inline const bool Foam::ThermoCloud<ParcelType>::radiation() const
 {
@@ -75,18 +83,55 @@ Foam::ThermoCloud<ParcelType>::hCoeff()
 }
 
 
+template<class ParcelType>
+inline Foam::tmp<Foam::DimensionedField<Foam::scalar, Foam::volMesh> >
+Foam::ThermoCloud<ParcelType>::Sh1() const
+{
+    tmp<DimensionedField<scalar, volMesh> > tSh1
+    (
+        new DimensionedField<scalar, volMesh>
+        (
+            IOobject
+            (
+                this->name() + "Sh1",
+                this->db().time().timeName(),
+                this->mesh(),
+                IOobject::NO_READ,
+                IOobject::AUTO_WRITE,
+                false
+            ),
+            this->mesh(),
+            dimensionedScalar
+            (
+                "zero",
+                dimMass/dimLength/pow3(dimTime),
+                0.0
+            )
+        )
+    );
+
+    scalarField& Sh1 = tSh1().field();
+    Sh1 = hTrans_/(this->mesh().V()*this->db().time().deltaT());
+
+    return tSh1;
+}
+
+
 template<class ParcelType>
 inline Foam::tmp<Foam::fvScalarMatrix>
-Foam::ThermoCloud<ParcelType>::Sh(volScalarField& h) const
+Foam::ThermoCloud<ParcelType>::Sh2(volScalarField& h) const
 {
     const volScalarField cp = carrierThermo_.Cp();
 
-    Info<< "hTrans min/max = "
-        << min(hTrans_) << ", " << max(hTrans_) << endl;
-    Info<< "hCoeff min/max = "
-        << min(hCoeff_) << ", " << max(hCoeff_) << endl;
+    if (debug)
+    {
+        Info<< "hTrans min/max = "
+            << min(hTrans_) << ", " << max(hTrans_) << endl;
+        Info<< "hCoeff min/max = "
+            << min(hCoeff_) << ", " << max(hCoeff_) << endl;
+    }
 
-    return hTrans_/(this->mesh().V()*this->runTime().deltaT())
+    return hTrans_/(this->mesh().V()*this->db().time().deltaT())
          - fvm::Sp(hCoeff_/(cp*this->mesh().V()), h)
          + hCoeff_/(cp*this->mesh().V())*h;
 }
@@ -102,31 +147,35 @@ Foam::ThermoCloud<ParcelType>::Ep() const
         (
             IOobject
             (
-                this->cloudName() + "radiationEp",
-                this->runTime().timeName(),
+                this->name() + "radiationEp",
+                this->db().time().timeName(),
                 this->db(),
                 IOobject::NO_READ,
                 IOobject::NO_WRITE,
                 false
             ),
             this->mesh(),
-            dimensionedScalar("zero", dimensionSet(1, -1, -3, 0, 0), 0.0)
+            dimensionedScalar("zero", dimMass/dimLength/pow3(dimTime), 0.0)
         )
     );
 
-    scalarField& Ep = tEp().internalField();
-    const scalarField& V = this->pMesh().cellVolumes();
-    const scalar epsilon = constProps_.epsilon0();
-
-    forAllConstIter(typename ThermoCloud<ParcelType>, *this, iter)
+    // Need to check if coupled as field is created on-the-fly
+    if (radiation_ && this->coupled())
     {
-        const ParcelType& p = iter();
-        const label cellI = p.cell();
-        Ep[cellI] += p.nParticle()*p.areaP()*pow4(p.T());
+        scalarField& Ep = tEp().internalField();
+        const scalarField& V = this->mesh().V();
+        const scalar epsilon = constProps_.epsilon0();
+
+        forAllConstIter(typename ThermoCloud<ParcelType>, *this, iter)
+        {
+            const ParcelType& p = iter();
+            const label cellI = p.cell();
+            Ep[cellI] += p.nParticle()*p.areaP()*pow4(p.T());
+        }
+
+        Ep *= epsilon*radiation::sigmaSB.value()/V;
     }
 
-    Ep *= epsilon*radiation::sigmaSB.value()/(V*mathematicalConstant::pi);
-
     return tEp;
 }
 
@@ -141,31 +190,35 @@ Foam::ThermoCloud<ParcelType>::ap() const
         (
             IOobject
             (
-                this->cloudName() + "radiationAp",
-                this->runTime().timeName(),
+                this->name() + "radiationAp",
+                this->db().time().timeName(),
                 this->db(),
                 IOobject::NO_READ,
                 IOobject::NO_WRITE,
                 false
             ),
             this->mesh(),
-            dimensionedScalar("zero", dimensionSet(0, -1, 0, 0, 0), 0.0)
+            dimensionedScalar("zero", dimless/dimLength, 0.0)
         )
     );
 
-    scalarField& ap = tap().internalField();
-    const scalarField& V = this->pMesh().cellVolumes();
-    const scalar epsilon = constProps_.epsilon0();
-
-    forAllConstIter(typename ThermoCloud<ParcelType>, *this, iter)
+    // Need to check if coupled as field is created on-the-fly
+    if (radiation_ && this->coupled())
     {
-        const ParcelType& p = iter();
-        const label cellI = p.cell();
-        ap[cellI] += p.nParticle()*p.areaP();
+        scalarField& ap = tap().internalField();
+        const scalarField& V = this->mesh().V();
+        const scalar epsilon = constProps_.epsilon0();
+
+        forAllConstIter(typename ThermoCloud<ParcelType>, *this, iter)
+        {
+            const ParcelType& p = iter();
+            const label cellI = p.cell();
+            ap[cellI] += p.nParticle()*p.areaP();
+        }
+
+        ap *= epsilon/V;
     }
 
-    ap *= epsilon/V;
-
     return tap;
 }
 
@@ -180,32 +233,36 @@ Foam::ThermoCloud<ParcelType>::sigmap() const
         (
             IOobject
             (
-                this->cloudName() + "radiationSigmap",
-                this->runTime().timeName(),
+                this->name() + "radiationSigmap",
+                this->db().time().timeName(),
                 this->db(),
                 IOobject::NO_READ,
                 IOobject::NO_WRITE,
                 false
             ),
             this->mesh(),
-            dimensionedScalar("zero", dimensionSet(0, -1, 0, 0, 0), 0.0)
+            dimensionedScalar("zero", dimless/dimLength, 0.0)
         )
     );
 
-    scalarField& sigmap = tsigmap().internalField();
+    // Need to check if coupled as field is created on-the-fly
+    if (radiation_ && this->coupled())
+    {
+        scalarField& sigmap = tsigmap().internalField();
 
-    const scalarField& V = this->pMesh().cellVolumes();
-    const scalar epsilon = constProps_.epsilon0();
-    const scalar f = constProps_.f0();
+        const scalarField& V = this->mesh().V();
+        const scalar epsilon = constProps_.epsilon0();
+        const scalar f = constProps_.f0();
 
-    forAllConstIter(typename ThermoCloud<ParcelType>, *this, iter)
-    {
-        const ParcelType& p = iter();
-        const label cellI = p.cell();
-        sigmap[cellI] += p.nParticle()*p.areaP();
-    }
+        forAllConstIter(typename ThermoCloud<ParcelType>, *this, iter)
+        {
+            const ParcelType& p = iter();
+            const label cellI = p.cell();
+            sigmap[cellI] += p.nParticle()*p.areaP();
+        }
 
-    sigmap *= (1.0 - f)*(1.0 - epsilon)/V;
+        sigmap *= (1.0 - f)*(1.0 - epsilon)/V;
+    }
 
     return tsigmap;
 }
diff --git a/src/lagrangian/intermediate/clouds/derived/basicKinematicCloud/basicKinematicCloud.C b/src/lagrangian/intermediate/clouds/derived/basicKinematicCloud/basicKinematicCloud.C
index 2fb09a50318..17e8baa79d9 100644
--- a/src/lagrangian/intermediate/clouds/derived/basicKinematicCloud/basicKinematicCloud.C
+++ b/src/lagrangian/intermediate/clouds/derived/basicKinematicCloud/basicKinematicCloud.C
@@ -46,9 +46,9 @@ Foam::basicKinematicCloud::basicKinematicCloud
     const dimensionedVector& g
 )
 :
-    KinematicCloud<kinematicParcel>(cloudType, vpi, rho, U, mu, g)
+    KinematicCloud<basicKinematicParcel>(cloudType, vpi, rho, U, mu, g)
 {
-    kinematicParcel::readFields(*this);
+    basicKinematicParcel::readFields(*this);
 }
 
 
@@ -60,34 +60,9 @@ Foam::basicKinematicCloud::~basicKinematicCloud()
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::basicKinematicCloud::evolve()
-{
-    KinematicCloud<kinematicParcel>::evolve();
-}
-
-
-void Foam::basicKinematicCloud::move
-(
-    KinematicParcel<kinematicParcel>::trackData& td
-)
-{
-    KinematicCloud<kinematicParcel>::move(td);
-}
-
-
-void Foam::basicKinematicCloud::inject
-(
-    KinematicParcel<kinematicParcel>::trackData& td
-)
-{
-    KinematicCloud<kinematicParcel>::inject(td);
-}
-
-
 void Foam::basicKinematicCloud::writeFields() const
 {
-    kinematicParcel::writeFields(*this);
+    basicKinematicParcel::writeFields(*this);
 }
 
-
 // ************************************************************************* //
diff --git a/src/lagrangian/intermediate/clouds/derived/basicKinematicCloud/basicKinematicCloud.H b/src/lagrangian/intermediate/clouds/derived/basicKinematicCloud/basicKinematicCloud.H
index 41e29147394..38b3070ac6d 100644
--- a/src/lagrangian/intermediate/clouds/derived/basicKinematicCloud/basicKinematicCloud.H
+++ b/src/lagrangian/intermediate/clouds/derived/basicKinematicCloud/basicKinematicCloud.H
@@ -37,7 +37,7 @@ SourceFiles
 #define basicKinematicCloud_H
 
 #include "KinematicCloud.H"
-#include "kinematicParcel.H"
+#include "basicKinematicParcel.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -50,7 +50,7 @@ namespace Foam
 
 class basicKinematicCloud
 :
-    public KinematicCloud<kinematicParcel>
+    public KinematicCloud<basicKinematicParcel>
 {
 
     // Private member functions
@@ -82,35 +82,15 @@ public:
         );
 
 
-    // Destructors
+    //- Destructor
 
         ~basicKinematicCloud();
 
 
     // Member functions
 
-        // Edit
-
-            //- Evolve the spray (move, inject)
-            void evolve();
-
-            //- Move the parcels
-            void move
-            (
-                KinematicParcel<kinematicParcel>::trackData& td
-            );
-
-            //- Inject more parcels
-            void inject
-            (
-                KinematicParcel<kinematicParcel>::trackData& td
-            );
-
-
-        // I-O
-
-            //- Write fields
-            void writeFields() const;
+        //- Write fields
+        void writeFields() const;
 };
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/lagrangian/intermediate/clouds/derived/basicReactingCloud/basicReactingCloud.C b/src/lagrangian/intermediate/clouds/derived/basicReactingCloud/basicReactingCloud.C
index d5582b29de8..1b8eceea2d0 100644
--- a/src/lagrangian/intermediate/clouds/derived/basicReactingCloud/basicReactingCloud.C
+++ b/src/lagrangian/intermediate/clouds/derived/basicReactingCloud/basicReactingCloud.C
@@ -47,7 +47,7 @@ Foam::basicReactingCloud::basicReactingCloud
     PtrList<specieReactingProperties>& gases
 )
 :
-    ReactingCloud<reactingParcel>
+    ReactingCloud<basicReactingParcel>
     (
         cloudType,
         vpi,
@@ -58,40 +58,21 @@ Foam::basicReactingCloud::basicReactingCloud
         gases
     )
 {
-    reactingParcel::readFields(*this);
+    basicReactingParcel::readFields(*this);
 }
 
 
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-
-void Foam::basicReactingCloud::evolve()
-{
-    ReactingCloud<reactingParcel>::evolve();
-}
-
-
-void Foam::basicReactingCloud::move
-(
-    ReactingParcel<reactingParcel>::trackData& td
-)
-{
-    ReactingCloud<reactingParcel>::move(td);
-}
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
+Foam::basicReactingCloud::~basicReactingCloud()
+{}
 
-void Foam::basicReactingCloud::inject
-(
-    ReactingParcel<reactingParcel>::trackData& td
-)
-{
-    ReactingCloud<reactingParcel>::inject(td);
-}
 
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 void Foam::basicReactingCloud::writeFields() const
 {
-    reactingParcel::writeFields(*this);
+    basicReactingParcel::writeFields(*this);
 }
 
 
diff --git a/src/lagrangian/intermediate/clouds/derived/basicReactingCloud/basicReactingCloud.H b/src/lagrangian/intermediate/clouds/derived/basicReactingCloud/basicReactingCloud.H
index 13686e75fe6..4b2292fc592 100644
--- a/src/lagrangian/intermediate/clouds/derived/basicReactingCloud/basicReactingCloud.H
+++ b/src/lagrangian/intermediate/clouds/derived/basicReactingCloud/basicReactingCloud.H
@@ -26,7 +26,6 @@ Class
     Foam::basicReactingCloud
 
 Description
-    The basicReactingCloud
 
 SourceFiles
     basicReactingCloud.C
@@ -37,7 +36,7 @@ SourceFiles
 #define basicReactingCloud_H
 
 #include "ReactingCloud.H"
-#include "reactingParcel.H"
+#include "basicReactingParcel.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -50,7 +49,7 @@ namespace Foam
 
 class basicReactingCloud
 :
-    public ReactingCloud<reactingParcel>
+    public ReactingCloud<basicReactingParcel>
 {
 
     // Private Member Functions
@@ -67,6 +66,7 @@ public:
     //- Runtime type information
     TypeName("basicReactingCloud");
 
+
     // Constructors
 
         //- Construct given carrier gas fields
@@ -82,30 +82,15 @@ public:
         );
 
 
-    // Member Functions
-
-        // Edit
-
-            //- Evolve the spray (move, inject)
-            void evolve();
-
-            //- Move the parcels
-            void move
-            (
-                ReactingParcel<reactingParcel>::trackData& td
-            );
+    //- Destructor
 
-            //- Inject more parcels
-            void inject
-            (
-                ReactingParcel<reactingParcel>::trackData& td
-            );
+        ~basicReactingCloud();
 
 
-        // I-O
+    // Member Functions
 
-            //- Write fields
-            void writeFields() const;
+        //- Write fields
+        void writeFields() const;
 };
 
 
diff --git a/src/lagrangian/intermediate/clouds/derived/basicThermoCloud/basicThermoCloud.C b/src/lagrangian/intermediate/clouds/derived/basicThermoCloud/basicThermoCloud.C
index dbc40e04b12..d57eddebe50 100644
--- a/src/lagrangian/intermediate/clouds/derived/basicThermoCloud/basicThermoCloud.C
+++ b/src/lagrangian/intermediate/clouds/derived/basicThermoCloud/basicThermoCloud.C
@@ -46,42 +46,23 @@ Foam::basicThermoCloud::basicThermoCloud
     basicThermo& thermo
 )
 :
-    ThermoCloud<thermoParcel>(cloudType, vpi, rho, U, g, thermo)
+    ThermoCloud<basicThermoParcel>(cloudType, vpi, rho, U, g, thermo)
 {
-    thermoParcel::readFields(*this);
+    basicThermoParcel::readFields(*this);
 }
 
 
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-void Foam::basicThermoCloud::evolve()
-{
-    ThermoCloud<thermoParcel>::evolve();
-}
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
+Foam::basicThermoCloud::~basicThermoCloud()
+{}
 
-void Foam::basicThermoCloud::move
-(
-    ThermoParcel<thermoParcel>::trackData& td
-)
-{
-    // Move the parcels
-    ThermoCloud<thermoParcel>::move(td);
-}
-
-
-void Foam::basicThermoCloud::inject
-(
-    ThermoParcel<thermoParcel>::trackData& td
-)
-{
-    ThermoCloud<thermoParcel>::inject(td);
-}
 
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 void Foam::basicThermoCloud::writeFields() const
 {
-    thermoParcel::writeFields(*this);
+    basicThermoParcel::writeFields(*this);
 }
 
 
diff --git a/src/lagrangian/intermediate/clouds/derived/basicThermoCloud/basicThermoCloud.H b/src/lagrangian/intermediate/clouds/derived/basicThermoCloud/basicThermoCloud.H
index 207b432abc6..7d351ccba22 100644
--- a/src/lagrangian/intermediate/clouds/derived/basicThermoCloud/basicThermoCloud.H
+++ b/src/lagrangian/intermediate/clouds/derived/basicThermoCloud/basicThermoCloud.H
@@ -26,7 +26,6 @@ Class
     Foam::basicThermoCloud
 
 Description
-    The basicThermoCloud
 
 SourceFiles
     basicThermoCloud.C
@@ -37,7 +36,7 @@ SourceFiles
 #define basicThermoCloud_H
 
 #include "ThermoCloud.H"
-#include "thermoParcel.H"
+#include "basicThermoParcel.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -50,7 +49,7 @@ namespace Foam
 
 class basicThermoCloud
 :
-    public ThermoCloud<thermoParcel>
+    public ThermoCloud<basicThermoParcel>
 {
 
     // Private Member Functions
@@ -85,30 +84,15 @@ public:
         );
 
 
-    // Member Functions
-
-        // Edit
-
-            //- Evolve the spray (move, inject)
-            void evolve();
+    //- Destructor
 
-            //- Move the parcels
-            void move
-            (
-                ThermoParcel<thermoParcel>::trackData& td
-            );
+        ~basicThermoCloud();
 
-            //- Inject more parcels
-            void inject
-            (
-                ThermoParcel<thermoParcel>::trackData& td
-            );
 
+    // Member Functions
 
-        // I-O
-
-            //- Write fields
-            void writeFields() const;
+        //- Write fields
+        void writeFields() const;
 };
 
 
diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C
index 5e2d96a53fa..e8dc87bc307 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C
@@ -30,29 +30,60 @@ License
 // * * * * * * * * * * *  Protected Member Functions * * * * * * * * * * * * //
 
 template<class ParcelType>
-template<class TrackingData>
+template<class TrackData>
+void Foam::KinematicParcel<ParcelType>::updateCellQuantities
+(
+    TrackData& td,
+    const scalar dt,
+    const label celli
+)
+{
+    rhoc_ = td.rhoInterp().interpolate(this->position(), celli);
+    Uc_ = td.UInterp().interpolate(this->position(), celli);
+    muc_ = td.muInterp().interpolate(this->position(), celli);
+
+    // Apply dispersion components to carrier phase velocity
+    Uc_ = td.cloud().dispersion().update
+    (
+        dt,
+        celli,
+        U_,
+        Uc_,
+        UTurb_,
+        tTurb_
+    );
+}
+
+
+template<class ParcelType>
+template<class TrackData>
 void Foam::KinematicParcel<ParcelType>::calcCoupled
 (
-    TrackingData& td,
-    const label celli,
+    TrackData& td,
     const scalar dt,
-    const scalar rhoc,
-    vector& Uc,
-    const scalar muc
+    const label celli
 )
 {
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     // Define local properties at beginning of timestep
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    const scalar mass0 = mass();
-    const vector U0 = U_;
+//    const scalar mass0 = mass();
+//    const vector U0 = U_;
+
+
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~
+    // Initialise transfer terms
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    // Momentum transfer from the particle to the carrier phase
+    vector dUTrans = vector::zero;
 
 
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     // Calculate velocity - update U
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     scalar Cud = 0.0;
-    const vector U1 = calcVelocity(td, dt, rhoc, Uc, muc, Cud);
+    const vector U1 = calcVelocity(td, dt, Cud, dUTrans);
 
 
     // ~~~~~~~~~~~~~~~~~~~~~~~
@@ -60,10 +91,10 @@ void Foam::KinematicParcel<ParcelType>::calcCoupled
     // ~~~~~~~~~~~~~~~~~~~~~~~
 
     // Update momentum transfer
-    td.cloud().UTrans()[celli] += nParticle_*mass0*(U0 - U1);
+    td.cloud().UTrans()[celli] += nParticle_*dUTrans;
 
     // Accumulate coefficient to be applied in carrier phase momentum coupling
-    td.cloud().UCoeff()[celli] += nParticle_*mass0*Cud;
+    td.cloud().UCoeff()[celli] += nParticle_*mass()*Cud;
 
 
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -74,72 +105,65 @@ void Foam::KinematicParcel<ParcelType>::calcCoupled
 
 
 template<class ParcelType>
-template<class TrackingData>
+template<class TrackData>
 void Foam::KinematicParcel<ParcelType>::calcUncoupled
 (
-    TrackingData& td,
+    TrackData& td,
     const scalar dt,
-    const scalar rhoc,
-    vector& Uc,
-    const scalar muc
+    const label
 )
 {
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~
+    // Initialise transfer terms
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    // Momentum transfer from the particle to the carrier phase
+    vector dUTrans = vector::zero;
+
+
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     // Calculate velocity - update U
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     scalar Cud = 0.0;
-    this->U() = calcVelocity(td, dt, rhoc, Uc, muc, Cud);
+    this->U() = calcVelocity(td, dt, Cud, dUTrans);
 }
 
 
 template<class ParcelType>
-template<class TrackingData>
+template<class TrackData>
 Foam::vector Foam::KinematicParcel<ParcelType>::calcVelocity
 (
-    TrackingData& td,
+    TrackData& td,
     const scalar dt,
-    const scalar rhoc,
-    vector& Uc,
-    const scalar muc,
-    scalar& Cud
+    scalar& Cud,
+    vector& dUTrans
 )
 {
     // Correct carrier phase velocity for 2-D slab cases
     const polyMeshInfo& meshInfo = td.cloud().meshInfo();
     if (meshInfo.caseIs2dSlab())
     {
-        Uc.component(meshInfo.emptyComponent()) = 0.0;
+        Uc_.component(meshInfo.emptyComponent()) = 0.0;
     }
 
-    // Update relative velocity
-    Ur_ = U_ - Uc;
-
     // Return linearised term from drag model
-//    const scalar Cud = td.cloud().drag().Cu
-    Cud = td.cloud().drag().Cu
-    (
-        Ur_,
-        d_,
-        rhoc,
-        rho_,
-        muc
-    );
-
-    // Update velocity - treat as 3-D
-    const vector ap = (1.0 - rhoc/rho_)*td.g();
-    const scalar bp = 1.0/Cud;
+    Cud = td.cloud().drag().Cu(U_ - Uc_, d_, rhoc_, rho_, muc_);
 
 
     //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     // Set new particle velocity
     //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-    // Analytical
-//    const scalar expTerm = exp(-dt/bp);
-//    vector Unew = Uc + (U_ - Uc)*expTerm + ap*bp*(1.0 - expTerm);
+    // Update velocity - treat as 3-D
+    const scalar bp = 1.0/(Cud + VSMALL);
+    const vector ap = Uc_/bp + rhoc_/rho_*td.g();
 
-    // Euler-implicit
-    vector Unew = (U_ + dt*(ap + Uc/bp))/(1.0 + dt/bp);
+    vector Unew = td.cloud().UIntegrator().integrate(U_, dt, ap, bp);
+
+//    Info<< "U_, Unew = " << U_ << ", " << Unew << endl;
+
+    // Calculate the momentum transfer to the continuous phase
+    dUTrans = -mass()*(Unew - U_);
 
     // Make corrections for 2-D cases
     if (meshInfo.caseIs2d())
@@ -148,6 +172,7 @@ Foam::vector Foam::KinematicParcel<ParcelType>::calcVelocity
         {
             // Remove the slab normal parcel velocity component
             Unew.component(meshInfo.emptyComponent()) = 0.0;
+            dUTrans.component(meshInfo.emptyComponent()) = 0.0;
 
             // Snap parcels to central plane
             this->position().component(meshInfo.emptyComponent()) =
@@ -172,13 +197,15 @@ Foam::vector Foam::KinematicParcel<ParcelType>::calcVelocity
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-template <class ParcelType>
-template <class TrackingData>
+template<class ParcelType>
+template<class TrackData>
 bool Foam::KinematicParcel<ParcelType>::move
 (
-    TrackingData& td
+    TrackData& td
 )
 {
+    ParcelType& p = static_cast<ParcelType&>(*this);
+
     td.switchProcessor = false;
     td.keepParticle = true;
 
@@ -186,7 +213,7 @@ bool Foam::KinematicParcel<ParcelType>::move
     const polyBoundaryMesh& pbMesh = mesh.boundaryMesh();
 
     const scalar deltaT = mesh.time().deltaT().value();
-    scalar tEnd = (1.0 - this->stepFraction())*deltaT;
+    scalar tEnd = (1.0 - p.stepFraction())*deltaT;
     const scalar dtMax = tEnd;
 
     while (td.keepParticle && !td.switchProcessor && tEnd > SMALL)
@@ -196,51 +223,33 @@ bool Foam::KinematicParcel<ParcelType>::move
 
         // Remember which cell the Parcel is in
         // since this will change if a face is hit
-        label celli = this->cell();
+        label celli = p.cell();
 
-        dt *= trackToFace(this->position() + dt*U_, td);
+        dt *= p.trackToFace(p.position() + dt*U_, td);
 
         tEnd -= dt;
-        this->stepFraction() = 1.0 - tEnd/deltaT;
-
-        cellPointWeight cpw
-        (
-            mesh,
-            this->position(),
-            celli,
-            faceInterpolation()
-        );
-        scalar rhoc = td.rhoInterp().interpolate(cpw);
-        vector Uc = td.UInterp().interpolate(cpw);
-        scalar muc = td.muInterp().interpolate(cpw);
-
-        Uc = td.cloud().dispersion().update
-        (
-            dt,
-            celli,
-            U_,
-            Uc,
-            UTurb_,
-            tTurb_
-        );
+        p.stepFraction() = 1.0 - tEnd/deltaT;
+
+        // Update cell based properties
+        p.updateCellQuantities(td, dt, celli);
 
         if (td.cloud().coupled())
         {
-            calcCoupled(td, celli, dt, rhoc, Uc, muc);
+            p.calcCoupled(td, dt, celli);
         }
         else
         {
-            calcUncoupled(td, dt, rhoc, Uc, muc);
+            p.calcUncoupled(td, dt, celli);
         }
 
-        if (this->onBoundary() && td.keepParticle)
+        if (p.onBoundary() && td.keepParticle)
         {
-            if (this->face() > -1)
+            if (p.face() > -1)
             {
                 if
                 (
                     isType<processorPolyPatch>
-                        (pbMesh[this->patch(this->face())])
+                        (pbMesh[p.patch(p.face())])
                 )
                 {
                     td.switchProcessor = true;
@@ -253,19 +262,19 @@ bool Foam::KinematicParcel<ParcelType>::move
 }
 
 
-template <class ParcelType>
-template <class TrackingData>
+template<class ParcelType>
+template<class TrackData>
 void Foam::KinematicParcel<ParcelType>::hitProcessorPatch
 (
     const processorPolyPatch&,
-    TrackingData& td
+    TrackData& td
 )
 {
     td.switchProcessor = true;
 }
 
 
-template <class ParcelType>
+template<class ParcelType>
 void Foam::KinematicParcel<ParcelType>::hitProcessorPatch
 (
     const processorPolyPatch&,
@@ -274,19 +283,19 @@ void Foam::KinematicParcel<ParcelType>::hitProcessorPatch
 {}
 
 
-template <class ParcelType>
-template <class TrackingData>
+template<class ParcelType>
+template<class TrackData>
 void Foam::KinematicParcel<ParcelType>::hitWallPatch
 (
     const wallPolyPatch& wpp,
-    TrackingData& td
+    TrackData& td
 )
 {
     td.cloud().wallInteraction().correct(wpp, this->face(), U_);
 }
 
 
-template <class ParcelType>
+template<class ParcelType>
 void Foam::KinematicParcel<ParcelType>::hitWallPatch
 (
     const wallPolyPatch&,
@@ -295,19 +304,19 @@ void Foam::KinematicParcel<ParcelType>::hitWallPatch
 {}
 
 
-template <class ParcelType>
-template <class TrackingData>
+template<class ParcelType>
+template<class TrackData>
 void Foam::KinematicParcel<ParcelType>::hitPatch
 (
     const polyPatch&,
-    TrackingData& td
+    TrackData& td
 )
 {
     td.keepParticle = false;
 }
 
 
-template <class ParcelType>
+template<class ParcelType>
 void Foam::KinematicParcel<ParcelType>::hitPatch
 (
     const polyPatch&,
@@ -316,7 +325,7 @@ void Foam::KinematicParcel<ParcelType>::hitPatch
 {}
 
 
-template <class ParcelType>
+template<class ParcelType>
 void Foam::KinematicParcel<ParcelType>::transformProperties
 (
     const tensor& T
@@ -327,7 +336,7 @@ void Foam::KinematicParcel<ParcelType>::transformProperties
 }
 
 
-template <class ParcelType>
+template<class ParcelType>
 void Foam::KinematicParcel<ParcelType>::transformProperties
 (
     const vector& separation
diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H
index 6ed7d6d8d7c..f18423e2576 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H
@@ -26,10 +26,8 @@ Class
     Foam::KinematicParcel
 
 Description
-    Kinematic parcel class with one-way coupling with the continuous
-    phase.
-
-    Sub-models include:
+    Kinematic parcel class with one/two-way coupling with the continuous
+    phase. Sub-models include:
     - drag
     - break-up
     - wall interactions
@@ -61,6 +59,8 @@ namespace Foam
 template<class ParcelType>
 class KinematicParcel;
 
+// Forward declaration of friend functions
+
 template<class ParcelType>
 Ostream& operator<<
 (
@@ -72,86 +72,15 @@ Ostream& operator<<
                          Class KinematicParcel Declaration
 \*---------------------------------------------------------------------------*/
 
-template <class ParcelType>
+template<class ParcelType>
 class KinematicParcel
 :
     public Particle<ParcelType>
 {
 
-    // Private member data
-
-        //- Parcel type id
-        label typeId_;
-
-        //- Diameter [m]
-        scalar d_;
-
-        //- Velocity of Parcel [m/s]
-        vector U_;
-
-        //- Relative velocity of Parcel [m/s]
-        vector Ur_;
-
-        //- Number of particles in Parcel
-        scalar nParticle_;
-
-        //- Density [kg/m3]
-        scalar rho_;
-
-        //- Time spent in turbulent eddy
-        scalar tTurb_;
-
-        //- Turbulent velocity fluctuation
-        vector UTurb_;
-
-
-protected:
-
-    // Protected member functions
-
-        template<class TrackingData>
-        void calcCoupled
-        (
-            TrackingData& td,
-            const label celli,
-            const scalar dt,
-            const scalar rhoc,
-            vector& Uc,
-            const scalar muc
-        );
-
-        template<class TrackingData>
-        void calcUncoupled
-        (
-            TrackingData& td,
-            const scalar dt,
-            const scalar rhoc,
-            vector& Uc,
-            const scalar muc
-        );
-
-        //- Calculate new particle velocity
-        template<class TrackingData>
-        vector calcVelocity
-        (
-            TrackingData& td,
-            const scalar dt,
-            const scalar rhoc,
-            vector& Uc,
-            const scalar muc,
-            scalar& Cud
-        );
-
-
 public:
 
-    //- Runtime type information
-    TypeName("KinematicParcel");
-
-    friend class Cloud<ParcelType>;
-
-
-    //- Class to hold particle constant properties
+    //- Class to hold kinematic particle constant properties
     class constantProperties
     {
 
@@ -166,23 +95,20 @@ public:
 
     public:
 
-        // Constructors
-        constantProperties
-        (
-            const dictionary& dict
-        );
+        //- Constructor
+        constantProperties(const dictionary& dict);
 
         // Member functions
 
-            // Access
-
+            //- Return const access to the particle density
             inline const scalar rho0() const;
 
+            //- Return const access to the minimum particle mass
             inline const scalar minParticleMass() const;
     };
 
 
-    //- Class used to pass tracking data to the trackToFace function
+    //- Class used to pass kinematic tracking data to the trackToFace function
     class trackData
     :
         public Particle<ParcelType>::trackData
@@ -196,11 +122,17 @@ public:
             //- Particle constant properties
             const constantProperties& constProps_;
 
-            //- Interpolators for continuous phase fields
 
-                const interpolationCellPoint<scalar>& rhoInterp_;
-                const interpolationCellPoint<vector>& UInterp_;
-                const interpolationCellPoint<scalar>& muInterp_;
+            // Interpolators for continuous phase fields
+
+                //- Density interpolator
+                const interpolation<scalar>& rhoInterp_;
+
+                //- Velocity interpolator
+                const interpolation<vector>& UInterp_;
+
+                //- Dynamic viscosity interpolator
+                const interpolation<scalar>& muInterp_;
 
             //- Local gravitational or other body-force acceleration
             const vector& g_;
@@ -208,39 +140,106 @@ public:
 
    public:
 
-        bool switchProcessor;
-        bool keepParticle;
-
-
         // Constructors
 
-            inline trackData
+           //- Construct from components
+           inline trackData
             (
                 KinematicCloud<ParcelType>& cloud,
                 const constantProperties& constProps,
-                const interpolationCellPoint<scalar>& rhoInterp,
-                const interpolationCellPoint<vector>& UInterp,
-                const interpolationCellPoint<scalar>& muInterp,
+                const interpolation<scalar>& rhoInterp,
+                const interpolation<vector>& UInterp,
+                const interpolation<scalar>& muInterp,
                 const vector& g
             );
 
 
         // Member functions
 
+            //- Return access to the owner cloud
             inline KinematicCloud<ParcelType>& cloud();
 
+            //- Return const access to the constant properties
             inline const constantProperties& constProps() const;
 
-            inline const interpolationCellPoint<scalar>& rhoInterp() const;
+            //- Return conat access to the interpolator for continuous
+            //  phase density field
+            inline const interpolation<scalar>& rhoInterp() const;
 
-            inline const interpolationCellPoint<vector>& UInterp() const;
+            //- Return conat access to the interpolator for continuous
+            //  phase velocity field
+            inline const interpolation<vector>& UInterp() const;
 
-            inline const interpolationCellPoint<scalar>& muInterp() const;
+            //- Return conat access to the interpolator for continuous
+            //  phase dynamic viscosity field
+            inline const interpolation<scalar>& muInterp() const;
 
+            // Return const access to the gravitational acceleration vector
             inline const vector& g() const;
     };
 
 
+protected:
+
+    // Protected member data
+
+        // Parcel properties
+
+            //- Parcel type id
+            label typeId_;
+
+            //- Diameter [m]
+            scalar d_;
+
+            //- Velocity of Parcel [m/s]
+            vector U_;
+
+            //- Number of particles in Parcel
+            scalar nParticle_;
+
+            //- Density [kg/m3]
+            scalar rho_;
+
+            //- Time spent in turbulent eddy [s]
+            scalar tTurb_;
+
+            //- Turbulent velocity fluctuation [m/s]
+            vector UTurb_;
+
+
+        // Cell-based quantities
+
+            // - Density [kg/m3]
+            scalar rhoc_;
+
+            // - Velocity [m/s]
+            vector Uc_;
+
+            // - Viscosity [Pa.s]
+            scalar muc_;
+
+
+    // Protected member functions
+
+        //- Calculate new particle velocity
+        template<class TrackData>
+        vector calcVelocity
+        (
+            TrackData& td,
+            const scalar dt,
+            scalar& Cud,
+            vector& dUTrans
+        );
+
+
+public:
+
+    //- Runtime type information
+    TypeName("KinematicParcel");
+
+    friend class Cloud<ParcelType>;
+
+
     // Constructors
 
         //- Construct from components
@@ -276,10 +275,10 @@ public:
         // Access
 
             //- Return type id
-            inline const label& typeId() const;
+            inline const label typeId() const;
 
             //- Return diameter
-            inline const scalar& d() const;
+            inline const scalar d() const;
             inline scalar& d();
 
             //- Return velocity
@@ -291,15 +290,15 @@ public:
             inline vector& Ur();
 
             //- Return number of particles
-            inline const scalar& nParticle() const;
+            inline const scalar nParticle() const;
             inline scalar& nParticle();
 
             //- Return density
-            inline const scalar& rho() const;
+            inline const scalar rho() const;
             inline scalar& rho();
 
             //- Return time spent in turbulent eddy
-            inline const scalar& tTurb() const;
+            inline const scalar tTurb() const;
             inline scalar& tTurb();
 
             //- Return turbulent velocity fluctuation
@@ -310,7 +309,8 @@ public:
             //  the particle can be in the n direction
             inline scalar wallImpactDistance(const vector& n) const;
 
-            //- Return the index of the face to be used in the interpolation routine
+            //- Return the index of the face to be used in the interpolation
+            //  routine
             inline label faceInterpolation() const;
 
             //- Particle volume
@@ -326,54 +326,84 @@ public:
             inline scalar areaS() const;
 
 
-        // Tracking
+        // Main calculation loop
 
-            //- Move the parcel
-            template<class TrackingData>
-            bool move
+            //- Update cell based quantities
+            template<class TrackData>
+            void updateCellQuantities
             (
-                TrackingData& td
+                TrackData& td,
+                const scalar dt,
+                const label celli
             );
 
+            //- Coupled calculation with the continuous phase
+            template<class TrackData>
+            void calcCoupled
+            (
+                TrackData& td,
+                const scalar dt,
+                const label celli
+            );
+
+            //- Uncoupled calculation with the continuous phase
+            template<class TrackData>
+            void calcUncoupled
+            (
+                TrackData& td,
+                const scalar dt,
+                const label
+            );
+
+
+        // Tracking
+
+            //- Move the parcel
+            template<class TrackData>
+            bool move(TrackData& td);
+
+
+        // Patch interactions
+
             //- Overridable function to handle the particle hitting a
             //  processorPatch
-            template<class TrackingData>
+            template<class TrackData>
             void hitProcessorPatch
             (
                 const processorPolyPatch&,
-                TrackingData& td
+                TrackData& td
             );
 
             //- Overridable function to handle the particle hitting a
             //  processorPatch without trackData
-            virtual void hitProcessorPatch
+            void hitProcessorPatch
             (
                 const processorPolyPatch&,
                 int&
             );
 
             //- Overridable function to handle the particle hitting a wallPatch
-            template<class TrackingData>
+            template<class TrackData>
             void hitWallPatch
             (
                 const wallPolyPatch&,
-                TrackingData& td
+                TrackData& td
             );
 
             //- Overridable function to handle the particle hitting a wallPatch
             //  without trackData
-            virtual void hitWallPatch
+            void hitWallPatch
             (
                 const wallPolyPatch&,
                 int&
             );
 
             //- Overridable function to handle the particle hitting a polyPatch
-            template<class TrackingData>
+            template<class TrackData>
             void hitPatch
             (
                 const polyPatch&,
-                TrackingData& td
+                TrackData& td
             );
 
             //- Overridable function to handle the particle hitting a polyPatch
@@ -395,15 +425,10 @@ public:
 
         // I-O
 
-            static void readFields
-            (
-                KinematicCloud<ParcelType>& c
-            );
+            static void readFields(KinematicCloud<ParcelType>& c);
+
+            static void writeFields(const KinematicCloud<ParcelType>& c);
 
-            static void writeFields
-            (
-                const KinematicCloud<ParcelType>& c
-            );
 
     // Ostream Operator
 
diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H
index fe8ae288c30..daecf8d4054 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H
@@ -42,9 +42,9 @@ inline Foam::KinematicParcel<ParcelType>::trackData::trackData
 (
     KinematicCloud<ParcelType>& cloud,
     const constantProperties& constProps,
-    const interpolationCellPoint<scalar>& rhoInterp,
-    const interpolationCellPoint<vector>& UInterp,
-    const interpolationCellPoint<scalar>& muInterp,
+    const interpolation<scalar>& rhoInterp,
+    const interpolation<vector>& UInterp,
+    const interpolation<scalar>& muInterp,
     const vector& g
 )
 :
@@ -75,11 +75,13 @@ inline Foam::KinematicParcel<ParcelType>::KinematicParcel
     typeId_(typeId),
     d_(d0),
     U_(U0),
-    Ur_(vector::zero),
     nParticle_(nParticle0),
     rho_(constProps.rho0()),
     tTurb_(0.0),
-    UTurb_(vector::zero)
+    UTurb_(vector::zero),
+    rhoc_(0.0),
+    Uc_(vector::zero),
+    muc_(0.0)
 {}
 
 
@@ -120,7 +122,7 @@ Foam::KinematicParcel<ParcelType>::trackData::constProps() const
 
 
 template<class ParcelType>
-inline const Foam::interpolationCellPoint<Foam::scalar>&
+inline const Foam::interpolation<Foam::scalar>&
 Foam::KinematicParcel<ParcelType>::trackData::rhoInterp() const
 {
     return rhoInterp_;
@@ -128,7 +130,7 @@ Foam::KinematicParcel<ParcelType>::trackData::rhoInterp() const
 
 
 template <class ParcelType>
-inline const Foam::interpolationCellPoint<Foam::vector>&
+inline const Foam::interpolation<Foam::vector>&
 Foam::KinematicParcel<ParcelType>::trackData::UInterp() const
 {
     return UInterp_;
@@ -136,7 +138,7 @@ Foam::KinematicParcel<ParcelType>::trackData::UInterp() const
 
 
 template<class ParcelType>
-inline const Foam::interpolationCellPoint<Foam::scalar>&
+inline const Foam::interpolation<Foam::scalar>&
 Foam::KinematicParcel<ParcelType>::trackData::muInterp() const
 {
     return muInterp_;
@@ -154,14 +156,14 @@ Foam::KinematicParcel<ParcelType>::trackData::g() const
 // * * * * * * * * * * KinematicParcel Member Functions  * * * * * * * * * * //
 
 template <class ParcelType>
-inline const Foam::label& Foam::KinematicParcel<ParcelType>::typeId() const
+inline const Foam::label Foam::KinematicParcel<ParcelType>::typeId() const
 {
     return typeId_;
 }
 
 
 template <class ParcelType>
-inline const Foam::scalar& Foam::KinematicParcel<ParcelType>::d() const
+inline const Foam::scalar Foam::KinematicParcel<ParcelType>::d() const
 {
     return d_;
 }
@@ -214,21 +216,7 @@ inline Foam::vector& Foam::KinematicParcel<ParcelType>::U()
 
 
 template <class ParcelType>
-inline const Foam::vector& Foam::KinematicParcel<ParcelType>::Ur() const
-{
-    return Ur_;
-}
-
-
-template <class ParcelType>
-inline Foam::vector& Foam::KinematicParcel<ParcelType>::Ur()
-{
-    return Ur_;
-}
-
-
-template <class ParcelType>
-inline const Foam::scalar& Foam::KinematicParcel<ParcelType>::nParticle() const
+inline const Foam::scalar Foam::KinematicParcel<ParcelType>::nParticle() const
 {
     return nParticle_;
 }
@@ -242,7 +230,7 @@ inline Foam::scalar& Foam::KinematicParcel<ParcelType>::nParticle()
 
 
 template <class ParcelType>
-inline const Foam::scalar& Foam::KinematicParcel<ParcelType>::rho() const
+inline const Foam::scalar Foam::KinematicParcel<ParcelType>::rho() const
 {
     return rho_;
 }
@@ -256,7 +244,7 @@ inline Foam::scalar& Foam::KinematicParcel<ParcelType>::rho()
 
 
 template <class ParcelType>
-inline const Foam::scalar& Foam::KinematicParcel<ParcelType>::tTurb() const
+inline const Foam::scalar Foam::KinematicParcel<ParcelType>::tTurb() const
 {
     return tTurb_;
 }
@@ -286,7 +274,7 @@ inline Foam::vector& Foam::KinematicParcel<ParcelType>::UTurb()
 template <class ParcelType>
 inline Foam::scalar Foam::KinematicParcel<ParcelType>::volume() const
 {
-    return mathematicalConstant::pi/6*pow(d_, 3);
+    return mathematicalConstant::pi/6.0*pow3(d_);
 }
 
 
@@ -300,7 +288,7 @@ inline Foam::scalar Foam::KinematicParcel<ParcelType>::mass() const
 template <class ParcelType>
 inline Foam::scalar Foam::KinematicParcel<ParcelType>::areaP() const
 {
-    return 0.25*mathematicalConstant::pi*d_*d_;
+    return 0.25*areaS();
 }
 
 
diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C
index 993b0e3de82..ccef539c1b2 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C
@@ -41,11 +41,13 @@ Foam::KinematicParcel<ParcelType>::KinematicParcel
     typeId_(0),
     d_(0.0),
     U_(vector::zero),
-    Ur_(vector::zero),
-    nParticle_(0),
+    nParticle_(0.0),
     rho_(0.0),
     tTurb_(0.0),
-    UTurb_(vector::zero)
+    UTurb_(vector::zero),
+    rhoc_(0.0),
+    Uc_(vector::zero),
+    muc_(0.0)
 {
     if (readFields)
     {
@@ -54,8 +56,7 @@ Foam::KinematicParcel<ParcelType>::KinematicParcel
             typeId_ = readLabel(is);
             d_ = readScalar(is);
             is >> U_;
-            is >> Ur_;
-            nParticle_ = readLabel(is);
+            nParticle_ = readScalar(is);
             rho_ = readScalar(is);
             tTurb_ = readScalar(is);
             is >> UTurb_;
@@ -68,7 +69,6 @@ Foam::KinematicParcel<ParcelType>::KinematicParcel
                 sizeof(typeId_)
               + sizeof(d_)
               + sizeof(U_)
-              + sizeof(Ur_)
               + sizeof(nParticle_)
               + sizeof(rho_)
               + sizeof(tTurb_)
@@ -106,9 +106,6 @@ void Foam::KinematicParcel<ParcelType>::readFields
     IOField<vector> U(c.fieldIOobject("U"));
     c.checkFieldIOobject(c, U);
 
-    IOField<vector> Ur(c.fieldIOobject("Ur"));
-    c.checkFieldIOobject(c, Ur);
-
     IOField<scalar> nParticle(c.fieldIOobject("nParticle"));
     c.checkFieldIOobject(c, nParticle);
 
@@ -129,7 +126,6 @@ void Foam::KinematicParcel<ParcelType>::readFields
         p.typeId_ = typeId[i];
         p.d_ = d[i];
         p.U_ = U[i];
-        p.Ur_ = Ur[i];
         p.nParticle_ = nParticle[i];
         p.rho_ = rho[i];
         p.tTurb_ = tTurb[i];
@@ -152,7 +148,6 @@ void Foam::KinematicParcel<ParcelType>::writeFields
     IOField<label> typeId(c.fieldIOobject("typeId"), np);
     IOField<scalar> d(c.fieldIOobject("d"), np);
     IOField<vector> U(c.fieldIOobject("U"), np);
-    IOField<vector> Ur(c.fieldIOobject("Ur"), np);
     IOField<scalar> nParticle(c.fieldIOobject("nParticle"), np);
     IOField<scalar> rho(c.fieldIOobject("rho"), np);
     IOField<scalar> tTurb(c.fieldIOobject("tTurb"), np);
@@ -166,7 +161,6 @@ void Foam::KinematicParcel<ParcelType>::writeFields
         typeId[i] = p.typeId();
         d[i] = p.d();
         U[i] = p.U();
-        Ur[i] = p.Ur();
         nParticle[i] = p.nParticle();
         rho[i] = p.rho();
         tTurb[i] = p.tTurb();
@@ -177,7 +171,6 @@ void Foam::KinematicParcel<ParcelType>::writeFields
     typeId.write();
     d.write();
     U.write();
-    Ur.write();
     nParticle.write();
     rho.write();
     tTurb.write();
@@ -200,7 +193,6 @@ Foam::Ostream& Foam::operator<<
             << token::SPACE << p.typeId()
             << token::SPACE << p.d()
             << token::SPACE << p.U()
-            << token::SPACE << p.Ur()
             << token::SPACE << p.nParticle()
             << token::SPACE << p.rho()
             << token::SPACE << p.tTurb()
@@ -211,11 +203,10 @@ Foam::Ostream& Foam::operator<<
         os  << static_cast<const Particle<ParcelType>& >(p);
         os.write
         (
-            reinterpret_cast<const char*>(&p.typeId()),
+            reinterpret_cast<const char*>(p.typeId()),
             sizeof(p.typeId())
           + sizeof(p.d())
           + sizeof(p.U())
-          + sizeof(p.Ur())
           + sizeof(p.nParticle())
           + sizeof(p.rho())
           + sizeof(p.tTurb())
diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C
index 44e299efb5c..e1bae0e5f71 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C
+++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C
@@ -29,28 +29,47 @@ License
 // * * * * * * * * * * *  Protected Member Functions * * * * * * * * * * * * //
 
 template<class ParcelType>
-template<class TrackingData>
+template<class TrackData>
+void Foam::ReactingParcel<ParcelType>::updateCellQuantities
+(
+    TrackData& td,
+    const scalar dt,
+    const label celli
+)
+{
+    ThermoParcel<ParcelType>::updateCellQuantities(td, dt, celli);
+
+    pc_ = td.pInterp().interpolate(this->position(), celli);
+}
+
+
+template<class ParcelType>
+template<class TrackData>
 void Foam::ReactingParcel<ParcelType>::calcCoupled
 (
-    TrackingData& td,
-    const label celli,
+    TrackData& td,
     const scalar dt,
-    const scalar rhoc,
-    vector& Uc,
-    const scalar muc,
-    const scalar Tc,
-    const scalar cpc,
-    const scalar pc
+    const label celli
 )
 {
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     // Define local properties at beginning of timestep
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    const vector U0 = this->U();
-    const scalar T0 = this->T();
+    const vector U0 = this->U_;
     const scalar mass0 = this->mass();
-    const scalar cp0 = this->cp();
-    const scalar np0 = this->nParticle();
+    const scalar np0 = this->nParticle_;
+    const scalar T0 = this->T_;
+    const scalar cp0 = this->cp_;
+
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~
+    // Initialise transfer terms
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    // Momentum transfer from the particle to the carrier phase
+    vector dUTrans = vector::zero;
+
+    // Enthalpy transfer from the particle to the carrier phase
+    scalar dhTrans = 0.0;
 
     // Mass transfer from particle to carrier phase
     // - components exist in particle already
@@ -69,14 +88,14 @@ void Foam::ReactingParcel<ParcelType>::calcCoupled
     // Calculate heat transfer - update T
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     scalar htc = 0.0;
-    scalar T1 = calcHeatTransfer(td, celli, dt, rhoc, Uc, muc, Tc, cpc, htc);
+    scalar T1 = calcHeatTransfer(td, dt, celli, htc, dhTrans);
 
 
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     // Calculate velocity - update U
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     scalar Cud = 0.0;
-    const vector U1 = calcVelocity(td, dt, rhoc, Uc, muc, Cud);
+    const vector U1 = calcVelocity(td, dt, Cud, dUTrans);
 
 
     // ~~~~~~~~~~~~~~~~~~~~~~~
@@ -88,18 +107,7 @@ void Foam::ReactingParcel<ParcelType>::calcCoupled
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~
     // Calculate surface reactions
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    calcSurfaceReactions
-    (
-        td,
-        dt,
-        celli,
-        rhoc,
-        Tc,
-        T0,
-        T1,
-        dMassMTSR,
-        dMassSR
-    );
+    calcSurfaceReactions(td, dt, celli, T0, T1, dMassMTSR, dMassSR);
 
     // New total mass
     const scalar mass1 = mass0 - sum(dMassMT) - dMassMTSR;
@@ -112,7 +120,7 @@ void Foam::ReactingParcel<ParcelType>::calcCoupled
     // Specific heat capacity of non-volatile components
     const scalar cpNonVolatile =
         (
-            YMixture_[1]*td.cloud().composition().cpLiquid(YLiquid_, pc, Tc)
+            YMixture_[1]*td.cloud().composition().cpLiquid(YLiquid_, pc_, this->Tc_)
           + YMixture_[2]*td.cloud().composition().cpSolid(YSolid_)
         )/(YMixture_[1] + YMixture_[2]);
 
@@ -129,18 +137,18 @@ void Foam::ReactingParcel<ParcelType>::calcCoupled
     // Transfer mass lost from particle to carrier mass source
     forAll(dMassMT, i)
     {
-        td.cloud().rhoTrans(i)[celli] +=
-            np0*(dMassMT[i] + dMassSR[i]);
+        td.cloud().rhoTrans(i)[celli] += np0*(dMassMT[i] + dMassSR[i]);
     }
 
     // Update momentum transfer
-    td.cloud().UTrans()[celli] += np0*(mass0*U0 - mass1*U1);
+    td.cloud().UTrans()[celli] += np0*dUTrans;
 
     // Accumulate coefficient to be applied in carrier phase momentum coupling
     td.cloud().UCoeff()[celli] += np0*mass0*Cud;
 
     // Update enthalpy transfer
-    td.cloud().hTrans()[celli] += np0*(mass0*cp0*T0 - mass1*cp1*T1);
+//    td.cloud().hTrans()[celli] += np0*(mass0*cp0*T0 - mass1*cp1*T1);
+    td.cloud().hTrans()[celli] += np0*((mass0*cp0 - mass1*cp1)*T0 + dhTrans);
 
     // Accumulate coefficient to be applied in carrier phase enthalpy coupling
     td.cloud().hCoeff()[celli] += np0*htc*this->areaS();
@@ -166,45 +174,49 @@ void Foam::ReactingParcel<ParcelType>::calcCoupled
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~
     else
     {
-        this->U() = U1;
-        this->T() = T1;
-        this->cp() = cp1;
+        this->U_ = U1;
+        this->T_ = T1;
+        this->cp_ = cp1;
 
         // Update particle density or diameter
         if (td.cloud().massTransfer().changesVolume())
         {
-            this->d() = cbrt(mass1/this->rho()*6.0/mathematicalConstant::pi);
+            this->d_ = cbrt(mass1/this->rho_*6.0/mathematicalConstant::pi);
         }
         else
         {
-            this->rho() = mass1/this->volume();
+            this->rho_ = mass1/this->volume();
         }
     }
 }
 
 
 template<class ParcelType>
-template<class TrackingData>
+template<class TrackData>
 void Foam::ReactingParcel<ParcelType>::calcUncoupled
 (
-    TrackingData& td,
-    const label celli,
+    TrackData& td,
     const scalar dt,
-    const scalar rhoc,
-    vector& Uc,
-    const scalar muc,
-    const scalar Tc,
-    const scalar cpc,
-    const scalar pc
+    const label celli
 )
 {
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     // Define local properties at beginning of timestep
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    const scalar T0 = this->T();
+    const scalar T0 = this->T_;
     const scalar mass0 = this->mass();
 //    const scalar cp0 = this->cp();
 
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~
+    // Initialise transfer terms
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    // Momentum transfer from the particle to the carrier phase
+    vector dUTrans = vector::zero;
+
+    // Enthalpy transfer from the particle to the carrier phase
+    scalar dhTrans = 0.0;
+
     // Mass transfer from particle to carrier phase
     // - components exist in particle already
     scalarList dMassMT(td.cloud().gases().size(), 0.0);
@@ -222,7 +234,7 @@ void Foam::ReactingParcel<ParcelType>::calcUncoupled
     // Calculate heat transfer - update T
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     scalar htc = 0.0;
-    scalar T1 = calcHeatTransfer(td, celli, dt, rhoc, Uc, muc, Tc, cpc, htc);
+    scalar T1 = calcHeatTransfer(td, dt, celli, htc, dhTrans);
 
     // Limit new temp max by vapourisarion temperature
     T1 = min(td.constProps().Tvap(), T1);
@@ -231,8 +243,8 @@ void Foam::ReactingParcel<ParcelType>::calcUncoupled
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     // Calculate velocity - update U
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    scalar Fd = 0.0;
-    const vector U1 = calcVelocity(td, dt, rhoc, Uc, muc, Fd);
+    scalar Cud = 0.0;
+    const vector U1 = calcVelocity(td, dt, Cud, dUTrans);
 
 
     // ~~~~~~~~~~~~~~~~~~~~~~~
@@ -249,8 +261,6 @@ void Foam::ReactingParcel<ParcelType>::calcUncoupled
         td,
         dt,
         celli,
-        rhoc,
-        Tc,
         T0,
         T1,
         dMassMTSR,
@@ -268,7 +278,7 @@ void Foam::ReactingParcel<ParcelType>::calcUncoupled
     // Specific heat capacity of non-volatile components
     const scalar cpNonVolatile =
         (
-            YMixture_[1]*td.cloud().composition().cpLiquid(YLiquid_, pc, Tc)
+            YMixture_[1]*td.cloud().composition().cpLiquid(YLiquid_, pc_, this->Tc_)
           + YMixture_[2]*td.cloud().composition().cpSolid(YSolid_)
         )/(YMixture_[1] + YMixture_[2]);
 
@@ -290,28 +300,28 @@ void Foam::ReactingParcel<ParcelType>::calcUncoupled
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~
     else
     {
-        this->U() = U1;
-        this->T() = T1;
-        this->cp() = cp1;
+        this->U_ = U1;
+        this->T_ = T1;
+        this->cp_ = cp1;
 
         // Update particle density or diameter
         if (td.cloud().massTransfer().changesVolume())
         {
-            this->d() = cbrt(mass1/this->rho()*6.0/mathematicalConstant::pi);
+            this->d_ = cbrt(mass1/this->rho_*6.0/mathematicalConstant::pi);
         }
         else
         {
-            this->rho() = mass1/this->volume();
+            this->rho_ = mass1/this->volume();
         }
     }
 }
 
 
 template<class ParcelType>
-template<class TrackingData>
+template<class TrackData>
 void Foam::ReactingParcel<ParcelType>::calcMassTransfer
 (
-    TrackingData& td,
+    TrackData& td,
     const scalar dt,
     const scalar T0,
     const scalar T1,
@@ -333,8 +343,8 @@ void Foam::ReactingParcel<ParcelType>::calcMassTransfer
     if
     (
         !td.cloud().massTransfer().active()
-     || this->T()<td.constProps().Tvap()
-     || this->T()<td.constProps().Tbp()
+     || this->T_<td.constProps().Tvap()
+     || this->T_<td.constProps().Tbp()
     )
     {
         return;
@@ -371,14 +381,12 @@ void Foam::ReactingParcel<ParcelType>::calcMassTransfer
 
 
 template<class ParcelType>
-template<class TrackingData>
+template<class TrackData>
 void Foam::ReactingParcel<ParcelType>::calcSurfaceReactions
 (
-    TrackingData& td,
+    TrackData& td,
     const scalar dt,
     const label celli,
-    const scalar rhoc,
-    const scalar Tc,
     const scalar T0,
     const scalar T1,
     scalar& dMassMTSR,
@@ -397,11 +405,11 @@ void Foam::ReactingParcel<ParcelType>::calcSurfaceReactions
     (
         dt,
         celli,
-        this->d(),
+        this->d_,
         T0,
         T1,
-        Tc,
-        rhoc,
+        this->Tc_,
+        this->rhoc_,
         this->mass(),
         YGas_,
         YLiquid_,
@@ -415,92 +423,6 @@ void Foam::ReactingParcel<ParcelType>::calcSurfaceReactions
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-template<class ParcelType>
-template<class TrackingData>
-bool Foam::ReactingParcel<ParcelType>::move
-(
-    TrackingData& td
-)
-{
-    td.switchProcessor = false;
-    td.keepParticle = true;
-
-    const polyMesh& mesh = td.cloud().pMesh();
-    const polyBoundaryMesh& pbMesh = mesh.boundaryMesh();
-
-    const scalar deltaT = mesh.time().deltaT().value();
-    scalar tEnd = (1.0 - this->stepFraction())*deltaT;
-    const scalar dtMax = tEnd;
-
-    while (td.keepParticle && !td.switchProcessor && tEnd > SMALL)
-    {
-        // Set the Lagrangian time-step
-        scalar dt = min(dtMax, tEnd);
-
-        // Remember which cell the parcel is in
-        // since this will change if a face is hit
-        label celli = this->cell();
-
-        dt *= trackToFace(this->position() + dt*this->U(), td);
-
-        tEnd -= dt;
-
-        this->stepFraction() = 1.0 - tEnd/deltaT;
-
-        // Avoid div0 in reacting sub-models
-        if (dt < SMALL)
-        {
-            break;
-        }
-
-        cellPointWeight cpw
-        (
-            mesh,
-            this->position(),
-            celli,
-            this->faceInterpolation()
-        );
-        scalar rhoc = td.rhoInterp().interpolate(cpw);
-        vector Uc = td.UInterp().interpolate(cpw);
-        scalar muc = td.muInterp().interpolate(cpw);
-        scalar Tc = td.TInterp().interpolate(cpw);
-        scalar cpc = td.cpInterp().interpolate(cpw);
-        scalar pc = td.pInterp().interpolate(cpw);
-
-        Uc = td.cloud().dispersion().update
-        (
-            dt,
-            celli,
-            this->U(),
-            Uc,
-            this->UTurb(),
-            this->tTurb()
-        );
-
-        if (td.cloud().coupled())
-        {
-            calcCoupled(td, celli, dt, rhoc, Uc, muc, Tc, cpc, pc);
-        }
-        else
-        {
-            calcUncoupled(td, celli, dt, rhoc, Uc, muc, Tc, cpc, pc);
-        }
-
-        if (this->onBoundary() && td.keepParticle)
-        {
-            if (this->face() > -1)
-            {
-                if (isType<processorPolyPatch>(pbMesh[this->patch(this->face())]))
-                {
-                    td.switchProcessor = true;
-                }
-            }
-        }
-    }
-
-    return td.keepParticle;
-}
-
 
 // * * * * * * * * * * * * * * * *  IOStream operators * * * * * * * * * * * //
 
diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H
index ea8adee5690..3b17542cd8e 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H
+++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H
@@ -26,16 +26,14 @@ Class
     Foam::ReactingParcel
 
 Description
-    Reacting parcel class with one-way coupling with the continuous
-    phase.
-
-    Includes thermo parcel sub-models, plus:
+    Reactinf parcel class with one/two-way coupling with the continuous
+    phase. Includes thermo parcel sub-models, plus:
     - combustion
 
 SourceFiles
-    reactingParcelI.H
+    ReactingParcelI.H
     ReactingParcel.C
-    reactingParcelIO.C
+    ReactingParcelIO.C
 
 \*---------------------------------------------------------------------------*/
 
@@ -75,96 +73,9 @@ class ReactingParcel
     public ThermoParcel<ParcelType>
 {
 
-    // Private data
-
-        //- Initial particle mass
-        scalar mass0_;
-
-        //- Mass fractions of mixture
-        scalarField YMixture_;
-
-        //- Mass fractions of gases
-        scalarField YGas_;
-
-        //- Mass fractions of liquids
-        scalarField YLiquid_;
-
-        //- Mass fractions of solids
-        scalarField YSolid_;
-
-        //- Flag to say that the particle is allowed to combust
-        //  Only true one ALL volatiles have been evolved from the particle
-        bool canCombust_;
-
-
-protected:
-
-    // Protected member functions
-
-        template<class TrackingData>
-        void calcCoupled
-        (
-            TrackingData& td,
-            const label celli,
-            const scalar dt,
-            const scalar rhoc,
-            vector& Uc,
-            const scalar muc,
-            const scalar Tc,
-            const scalar Cpc,
-            const scalar pc
-        );
-
-        template<class TrackingData>
-        void calcUncoupled
-        (
-            TrackingData& td,
-            const label celli,
-            const scalar dt,
-            const scalar rhoc,
-            vector& Uc,
-            const scalar muc,
-            const scalar Tc,
-            const scalar Cpc,
-            const scalar pc
-        );
-
-        //- Calculate mass transfer
-        template<class TrackingData>
-        void calcMassTransfer
-        (
-            TrackingData& td,
-            const scalar dt,
-            const scalar T0,
-            const scalar T1,
-            scalarList& dMassMT
-        );
-
-        //- Calculate surface reactions
-        template<class TrackingData>
-        void calcSurfaceReactions
-        (
-            TrackingData& td,
-            const scalar dt,
-            const label celli,
-            const scalar rhoc,
-            const scalar Tc,
-            const scalar T0,
-            const scalar T1,
-            scalar& dMassMTSR,
-            scalarList& dMassMT
-        );
-
-
 public:
 
-    //- Runtime type information
-    TypeName("ReactingParcel");
-
-    friend class Cloud<ParcelType>;
-
-
-    //- Class to hold particle constant properties
+    //- Class to hold reacting particle constant properties
     class constantProperties
     :
         public ThermoParcel<ParcelType>::constantProperties
@@ -172,31 +83,27 @@ public:
 
         // Private data
 
-            //- Vapourisation temperature
+            //- Vapourisation temperature [K]
             const scalar Tvap_;
 
-            //- Boiling point
+            //- Boiling point [K]
             const scalar Tbp_;
 
 
     public:
 
-        // Constructors
-        constantProperties
-        (
-            const dictionary& dict
-        );
-
-        // Member functions
+        //- Constructor
+        constantProperties(const dictionary& dict);
 
-            // Access
+        //- Return const access to the vapourisation temperature
+        inline const scalar Tvap() const;
 
-            inline const scalar Tvap() const;
-            inline const scalar Tbp() const;
+        //- Return const access to the boiling point
+        inline const scalar Tbp() const;
     };
 
 
-    //- Class used to pass tracking data to the trackToFace function
+    //- Class used to pass reacting tracking data to the trackToFace function
     class trackData
     :
         public ThermoParcel<ParcelType>::trackData
@@ -210,38 +117,110 @@ public:
             //- Particle constant properties
             const constantProperties& constProps_;
 
-            //- Interpolators for continuous phase fields
+            //- Interpolator for continuous phase pressure field
+            const interpolation<scalar>& pInterp_;
 
-                const interpolationCellPoint<scalar>& pInterp_;
 
     public:
 
         // Constructors
 
+            //- Construct from components
             inline trackData
             (
                 ReactingCloud<ParcelType>& cloud,
                 const constantProperties& constProps,
-                const interpolationCellPoint<scalar>& rhoInterp,
-                const interpolationCellPoint<vector>& UInterp,
-                const interpolationCellPoint<scalar>& muInterp,
-                const interpolationCellPoint<scalar>& TInterp,
-                const interpolationCellPoint<scalar>& CpInterp,
-                const interpolationCellPoint<scalar>& pInterp,
+                const interpolation<scalar>& rhoInterp,
+                const interpolation<vector>& UInterp,
+                const interpolation<scalar>& muInterp,
+                const interpolation<scalar>& TInterp,
+                const interpolation<scalar>& CpInterp,
+                const interpolation<scalar>& pInterp,
                 const vector& g
             );
 
 
         // Member functions
 
+            //- Return access to the owner cloud
             inline ReactingCloud<ParcelType>& cloud();
 
+            //- Return const access to the constant properties
             inline const constantProperties& constProps() const;
 
-            inline const interpolationCellPoint<scalar>& pInterp() const;
+            //- Return conat access to the interpolator for continuous
+            //  phase pressure field
+            inline const interpolation<scalar>& pInterp() const;
     };
 
 
+protected:
+
+    // Protected data
+
+        // Parcel properties
+
+            //- Initial particle mass [kg]
+            scalar mass0_;
+
+            //- Mass fractions of mixture []
+            scalarField YMixture_;
+
+            //- Mass fractions of gases []
+            scalarField YGas_;
+
+            //- Mass fractions of liquids []
+            scalarField YLiquid_;
+
+            //- Mass fractions of solids []
+            scalarField YSolid_;
+
+            //- Flag to say that the particle is allowed to combust
+            //  Only true after volatile content falls below threshold value
+            bool canCombust_;
+
+
+        // Cell-based quantities
+
+            //- Pressure [Pa]
+            scalar pc_;
+
+
+    // Protected member functions
+
+        //- Calculate mass transfer
+        template<class TrackData>
+        void calcMassTransfer
+        (
+            TrackData& td,
+            const scalar dt,
+            const scalar T0,
+            const scalar T1,
+            scalarList& dMassMT
+        );
+
+        //- Calculate surface reactions
+        template<class TrackData>
+        void calcSurfaceReactions
+        (
+            TrackData& td,
+            const scalar dt,
+            const label celli,
+            const scalar T0,
+            const scalar T1,
+            scalar& dMassMTSR,
+            scalarList& dMassMT
+        );
+
+
+public:
+
+    //- Runtime type information
+    TypeName("ReactingParcel");
+
+    friend class Cloud<ParcelType>;
+
+
     // Constructors
 
         //- Construct from components
@@ -301,27 +280,41 @@ public:
             inline scalar& mass0();
 
 
-        // Tracking
+        // Main calculation loop
 
-            //- Move parcel
-            template<class TrackingData>
-            bool move
+            //- Update cell based quantities
+            template<class TrackData>
+            void updateCellQuantities
             (
-                TrackingData&
+                TrackData& td,
+                const scalar dt,
+                const label celli
             );
 
-
-        // I-O
-
-            static void readFields
+            //- Coupled calculation with the continuous phase
+            template<class TrackData>
+            void calcCoupled
             (
-                ReactingCloud<ParcelType>& c
+                TrackData& td,
+                const scalar dt,
+                const label celli
             );
 
-            static void writeFields
+            //- Uncoupled calculation with the continuous phase
+            template<class TrackData>
+            void calcUncoupled
             (
-                const ReactingCloud<ParcelType>& c
+                TrackData& td,
+                const scalar dt,
+                const label
             );
+
+
+        // I-O
+
+            static void readFields(ReactingCloud<ParcelType>& c);
+
+            static void writeFields(const ReactingCloud<ParcelType>& c);
 };
 
 
diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H
index 65448d0dbe2..a29906a815c 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H
+++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H
@@ -43,12 +43,12 @@ inline Foam::ReactingParcel<ParcelType>::trackData::trackData
 (
     ReactingCloud<ParcelType>& cloud,
     const constantProperties& constProps,
-    const interpolationCellPoint<scalar>& rhoInterp,
-    const interpolationCellPoint<vector>& UInterp,
-    const interpolationCellPoint<scalar>& muInterp,
-    const interpolationCellPoint<scalar>& TInterp,
-    const interpolationCellPoint<scalar>& CpInterp,
-    const interpolationCellPoint<scalar>& pInterp,
+    const interpolation<scalar>& rhoInterp,
+    const interpolation<vector>& UInterp,
+    const interpolation<scalar>& muInterp,
+    const interpolation<scalar>& TInterp,
+    const interpolation<scalar>& CpInterp,
+    const interpolation<scalar>& pInterp,
     const vector& g
 )
 :
@@ -101,7 +101,8 @@ inline Foam::ReactingParcel<ParcelType>::ReactingParcel
     YMixture_(YMixture0),
     YGas_(YGas0),
     YLiquid_(YLiquid0),
-    YSolid_(YSolid0)
+    YSolid_(YSolid0),
+    pc_(0.0)
 {
     // Set initial parcel mass
     mass0_ = this->mass();
@@ -145,7 +146,7 @@ Foam::ReactingParcel<ParcelType>::trackData::constProps() const
 
 
 template<class ParcelType>
-inline const Foam::interpolationCellPoint<Foam::scalar>&
+inline const Foam::interpolation<Foam::scalar>&
 Foam::ReactingParcel<ParcelType>::trackData::pInterp() const
 {
     return pInterp_;
diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelIO.C b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelIO.C
index 83262dd3880..fa86e966d0f 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelIO.C
+++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelIO.C
@@ -42,7 +42,8 @@ Foam::ReactingParcel<ParcelType>::ReactingParcel
     YMixture_(0),
     YGas_(0),
     YLiquid_(0),
-    YSolid_(0)
+    YSolid_(0),
+    pc_(0.0)
 {
     if (readFields)
     {
diff --git a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C
index b327a5b9624..b1effd166fa 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C
+++ b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C
@@ -29,42 +29,63 @@ License
 // * * * * * * * * * * *  Protected Member Functions * * * * * * * * * * * * //
 
 template<class ParcelType>
-template<class TrackingData>
+template<class TrackData>
+void Foam::ThermoParcel<ParcelType>::updateCellQuantities
+(
+    TrackData& td,
+    const scalar dt,
+    const label celli
+)
+{
+    KinematicParcel<ParcelType>::updateCellQuantities(td, dt, celli);
+
+    Tc_ = td.TInterp().interpolate(this->position(), celli);
+    cpc_ = td.cpInterp().interpolate(this->position(), celli);
+}
+
+
+template<class ParcelType>
+template<class TrackData>
 void Foam::ThermoParcel<ParcelType>::calcCoupled
 (
-    TrackingData& td,
-    const label celli,
+    TrackData& td,
     const scalar dt,
-    const scalar rhoc,
-    vector& Uc,
-    const scalar muc,
-    const scalar Tc,
-    const scalar cpc
+    const label celli
 )
 {
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     // Define local properties at beginning of timestep
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    const vector U0 = this->U();
-    const scalar T0 = this->T();
+    const vector U0 = this->U_;
     const scalar mass0 = this->mass();
-    const scalar cp0 = this->cp();
-    const scalar np0 = this->nParticle();
+    const scalar np0 = this->nParticle_;
+//    const scalar T0 = T_;
+//    const scalar cp0 = cp_;
+
+
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~
+    // Initialise transfer terms
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    // Momentum transfer from the particle to the carrier phase
+    vector dUTrans = vector::zero;
+
+    // Enthalpy transfer from the particle to the carrier phase
+    scalar dhTrans = 0.0;
 
 
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     // Calculate velocity - update U
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     scalar Cud = 0.0;
-    const vector U1 = calcVelocity(td, dt, rhoc, Uc, muc, Cud);
+    const vector U1 = calcVelocity(td, dt, Cud, dUTrans);
 
 
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     // Calculate heat transfer - update T
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     scalar htc = 0.0;
-    const scalar T1 =
-        calcHeatTransfer(td, celli, dt, rhoc, Uc, muc, Tc, cpc, htc);
+    const scalar T1 = calcHeatTransfer(td, dt, celli, htc, dhTrans);
 
 
     // ~~~~~~~~~~~~~~~~~~~~~~~
@@ -72,13 +93,13 @@ void Foam::ThermoParcel<ParcelType>::calcCoupled
     // ~~~~~~~~~~~~~~~~~~~~~~~
 
     // Update momentum transfer
-    td.cloud().UTrans()[celli] += np0*(mass0*(U0 - U1));
+    td.cloud().UTrans()[celli] += np0*dUTrans;
 
     // Accumulate coefficient to be applied in carrier phase momentum coupling
     td.cloud().UCoeff()[celli] += np0*mass0*Cud;
 
     // Update enthalpy transfer
-    td.cloud().hTrans()[celli] += np0*mass0*cp0*(T0 - T1);
+    td.cloud().hTrans()[celli] += np0*dhTrans;
 
     // Accumulate coefficient to be applied in carrier phase enthalpy coupling
     td.cloud().hCoeff()[celli] += np0*htc*this->areaS();
@@ -93,74 +114,78 @@ void Foam::ThermoParcel<ParcelType>::calcCoupled
 
 
 template<class ParcelType>
-template<class TrackingData>
+template<class TrackData>
 void Foam::ThermoParcel<ParcelType>::calcUncoupled
 (
-    TrackingData& td,
-    const label celli,
+    TrackData& td,
     const scalar dt,
-    const scalar rhoc,
-    vector& Uc,
-    const scalar muc,
-    const scalar Tc,
-    const scalar cpc
+    const label celli
 )
 {
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~
+    // Initialise transfer terms
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    // Momentum transfer from the particle to the carrier phase
+    vector dUTrans = vector::zero;
+
+    // Enthalpy transfer from the particle to the carrier phase
+    scalar dhTrans = 0.0;
+
+
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     // Calculate velocity - update U
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     scalar Cud = 0.0;
-    this->U() = calcVelocity(td, dt, rhoc, Uc, muc, Cud);
+    this->U_ = calcVelocity(td, dt, Cud, dUTrans);
 
 
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     // Calculate heat transfer - update T
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     scalar htc = 0.0;
-    this->T() = calcHeatTransfer(td, celli, dt, rhoc, Uc, muc, Tc, cpc, htc);
+    T_ = calcHeatTransfer(td, dt, celli, htc, dhTrans);
 }
 
 
 template<class ParcelType>
-template<class TrackingData>
+template <class TrackData>
 Foam::scalar Foam::ThermoParcel<ParcelType>::calcHeatTransfer
 (
-    TrackingData& td,
-    const label celli,
+    TrackData& td,
     const scalar dt,
-    const scalar rhoc,
-    const vector& Uc,
-    const scalar muc,
-    const scalar Tc,
-    const scalar cpc,
-    scalar& htc
+    const label celli,
+    scalar& htc,
+    scalar& dhTrans
 )
 {
     if (!td.cloud().heatTransfer().active())
     {
+        htc = 0.0;
+        dhTrans = 0.0;
         return T_;
     }
 
     // Calc heat transfer coefficient
     htc = td.cloud().heatTransfer().h
     (
-        this->d(),
-        this->Ur(),
-        rhoc,
-        this->rho(),
-        cpc,
+        this->d_,
+        this->U_ - this->Uc_,
+        this->rhoc_,
+        this->rho_,
+        cpc_,
         cp_,
-        muc
+        this->muc_
     );
 
     // Determine ap and bp coefficients
-    scalar ap = Tc;
+    scalar ap = Tc_;
     scalar bp = htc;
     if (td.cloud().radiation())
     {
         // Carrier phase incident radiation field
-        // Currently the G field is not interpolated to the parcel position
-        // - instead, the cell centre value is applied directly
+        // - The G field is not interpolated to the parcel position
+        //   Instead, the cell centre value is applied directly
         const scalarField& G = td.cloud().mesh().objectRegistry
             ::lookupObject<volScalarField>("G");
 
@@ -168,21 +193,19 @@ Foam::scalar Foam::ThermoParcel<ParcelType>::calcHeatTransfer
         const scalar sigma = radiation::sigmaSB.value();
         const scalar epsilon = td.constProps().epsilon0();
         const scalar epsilonSigmaT3 = epsilon*sigma*pow3(T_);
-        ap = (htc*Tc + 0.25*epsilon*G[celli])/(htc + epsilonSigmaT3);
+        ap = (htc*Tc_ + 0.25*epsilon*G[celli])/(htc + epsilonSigmaT3);
         bp += epsilonSigmaT3;
     }
-    bp *= 6.0/(this->rho()*this->d()*cp_);
+    bp *= 6.0/(this->rho_*this->d_*cp_);
 
 
     //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     // Set new particle temperature
     //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-    // Analytical
-    const scalar Tnew = ap + (T_ - ap)*exp(-bp*dt);
+    scalar Tnew = td.cloud().TIntegrator().integrate(T_, dt, ap, bp);
 
-    // Euler-implicit
-//    const scalar Tnew = (T_ + dt*ap*bp)/(1.0 + dt*bp);
+    dhTrans = -this->mass()*cp_*(Tnew - T_);
 
     return Tnew;
 }
@@ -190,110 +213,6 @@ Foam::scalar Foam::ThermoParcel<ParcelType>::calcHeatTransfer
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-template<class ParcelType>
-template<class TrackingData>
-bool Foam::ThermoParcel<ParcelType>::move
-(
-    TrackingData& td
-)
-{
-    td.switchProcessor = false;
-    td.keepParticle = true;
-
-    const polyMesh& mesh = td.cloud().pMesh();
-    const polyBoundaryMesh& pbMesh = mesh.boundaryMesh();
-
-    const scalar deltaT = mesh.time().deltaT().value();
-    scalar tEnd = (1.0 - this->stepFraction())*deltaT;
-    const scalar dtMax = tEnd;
-
-    while (td.keepParticle && !td.switchProcessor && tEnd > SMALL)
-    {
-        // Set the Lagrangian time-step
-        scalar dt = min(dtMax, tEnd);
-
-        // Remember which cell the parcel is in
-        // since this will change if a face is hit
-        label celli = this->cell();
-
-        dt *= trackToFace(this->position() + dt*this->U(), td);
-
-        tEnd -= dt;
-        this->stepFraction() = 1.0 - tEnd/deltaT;
-
-        cellPointWeight cpw
-        (
-            mesh,
-            this->position(),
-            celli,
-            this->faceInterpolation()
-        );
-        scalar rhoc = td.rhoInterp().interpolate(cpw);
-        vector Uc = td.UInterp().interpolate(cpw);
-        scalar muc = td.muInterp().interpolate(cpw);
-        scalar Tc = td.TInterp().interpolate(cpw);
-        scalar cpc = td.cpInterp().interpolate(cpw);
-
-        Uc = td.cloud().dispersion().update
-        (
-            dt,
-            celli,
-            this->U(),
-            Uc,
-            this->UTurb(),
-            this->tTurb()
-        );
-
-        if (td.cloud().coupled())
-        {
-            calcCoupled(td, celli, dt, rhoc, Uc, muc, Tc, cpc);
-        }
-        else
-        {
-            calcUncoupled(td, celli, dt, rhoc, Uc, muc, Tc, cpc);
-        }
-
-        if (this->onBoundary() && td.keepParticle)
-        {
-            if (this->face() > -1)
-            {
-                if
-                (
-                    isType<processorPolyPatch>
-                        (pbMesh[this->patch(this->face())])
-                )
-                {
-                    td.switchProcessor = true;
-                }
-            }
-        }
-    }
-
-    return td.keepParticle;
-}
-
-
-template<class ParcelType>
-template<class TrackingData>
-void Foam::ThermoParcel<ParcelType>::hitWallPatch
-(
-    const wallPolyPatch& wpp,
-    TrackingData& td
-)
-{
-    td.cloud().wallInteraction().correct(wpp, this->face(), this->U());
-}
-
-
-
-template<class ParcelType>
-void Foam::ThermoParcel<ParcelType>::hitWallPatch
-(
-    const wallPolyPatch& wpp,
-    int&
-)
-{}
-
 
 // * * * * * * * * * * * * * * * *  IOStream operators * * * * * * * * * * * //
 
diff --git a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.H b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.H
index c19bbdf9bef..c9dd564cdfc 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.H
+++ b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.H
@@ -26,16 +26,14 @@ Class
     Foam::ThermoParcel
 
 Description
-    Thermodynamic parcel class with one-way coupling with the continuous
-    phase.
-
-    Includes Kinematic parcel sub-models, plus:
+    Thermodynamic parcel class with one/two-way coupling with the continuous
+    phase. Includes Kinematic parcel sub-models, plus:
     - heat transfer
 
 SourceFiles
-    thermoParcelI.H
+    ThermoParcelI.H
     ThermoParcel.C
-    thermoParcelIO.C
+    ThermoParcelIO.C
 
 \*---------------------------------------------------------------------------*/
 
@@ -69,78 +67,15 @@ Ostream& operator<<
                        Class ThermoParcel Declaration
 \*---------------------------------------------------------------------------*/
 
-template <class ParcelType>
+template<class ParcelType>
 class ThermoParcel
 :
     public KinematicParcel<ParcelType>
 {
 
-    // Private data
-
-        //- Parcel properties
-
-            //- Temperature [K]
-            scalar T_;
-
-            //- Specific heat capacity [J/(kg.K)]
-            scalar cp_;
-
-
-protected:
-
-    // Protected member functions
-
-        template<class TrackingData>
-        void calcCoupled
-        (
-            TrackingData& td,
-            const label celli,
-            const scalar dt,
-            const scalar rhoc,
-            vector& Uc,
-            const scalar muc,
-            const scalar Tc,
-            const scalar cpc
-        );
-
-        template<class TrackingData>
-        void calcUncoupled
-        (
-            TrackingData& td,
-            const label celli,
-            const scalar dt,
-            const scalar rhoc,
-            vector& Uc,
-            const scalar muc,
-            const scalar Tc,
-            const scalar cpc
-        );
-
-        //- Calculate new particle temperature
-        template<class TrackingData>
-        scalar calcHeatTransfer
-        (
-            TrackingData& td,
-            const label celli,
-            const scalar dt,
-            const scalar rhoc,
-            const vector& Uc,
-            const scalar muc,
-            const scalar Tc,
-            const scalar cpc,
-            scalar& htc
-        );
-
-
 public:
 
-    //- Runtime type information
-    TypeName("ThermoParcel");
-
-    friend class Cloud<ParcelType>;
-
-
-    //- Class to hold particle constant properties
+    //- Class to hold thermo particle constant properties
     class constantProperties
     :
         public KinematicParcel<ParcelType>::constantProperties
@@ -164,10 +99,7 @@ public:
     public:
 
         // Constructors
-        constantProperties
-        (
-            const dictionary& dict
-        );
+        constantProperties(const dictionary& dict);
 
         // Member functions
 
@@ -180,7 +112,7 @@ public:
     };
 
 
-    //- Class used to pass tracking data to the trackToFace function
+    //- Class used to pass thermo tracking data to the trackToFace function
     class trackData
     :
         public KinematicParcel<ParcelType>::trackData
@@ -194,41 +126,95 @@ public:
             //- Particle constant properties
             const constantProperties& constProps_;
 
-            //- Interpolators for continuous phase fields
+            // Interpolators for continuous phase fields
 
-                const interpolationCellPoint<scalar>& TInterp_;
-                const interpolationCellPoint<scalar>& cpInterp_;
+                //- Temperature field interpolator
+                const interpolation<scalar>& TInterp_;
+
+                //- Scpecific heat capacity field interpolator
+                const interpolation<scalar>& cpInterp_;
 
 
     public:
 
         // Constructors
 
+            //- Construct from components
             inline trackData
             (
                 ThermoCloud<ParcelType>& cloud,
                 const constantProperties& constProps,
-                const interpolationCellPoint<scalar>& rhoInterp,
-                const interpolationCellPoint<vector>& UInterp,
-                const interpolationCellPoint<scalar>& muInterp,
-                const interpolationCellPoint<scalar>& TInterp,
-                const interpolationCellPoint<scalar>& cpInterp,
+                const interpolation<scalar>& rhoInterp,
+                const interpolation<vector>& UInterp,
+                const interpolation<scalar>& muInterp,
+                const interpolation<scalar>& TInterp,
+                const interpolation<scalar>& cpInterp,
                 const vector& g
             );
 
 
         // Member functions
 
+            //- Return access to the owner cloud
             inline ThermoCloud<ParcelType>& cloud();
 
+            //- Return const access to the owner cloud
             inline const constantProperties& constProps() const;
 
-            inline const interpolationCellPoint<scalar>& TInterp() const;
+            //- Return conat access to the interpolator for continuous
+            //  phase temperature field
+            inline const interpolation<scalar>& TInterp() const;
 
-            inline const interpolationCellPoint<scalar>& cpInterp() const;
+            //- Return conat access to the interpolator for continuous
+            //  phase specific heat capacity field
+            inline const interpolation<scalar>& cpInterp() const;
     };
 
 
+protected:
+
+    // Protected data
+
+        // Parcel properties
+
+            //- Temperature [K]
+            scalar T_;
+
+            //- Specific heat capacity [J/(kg.K)]
+            scalar cp_;
+
+
+        // Call-based quantities
+
+            //- Temperature [K]
+            scalar Tc_;
+
+            //- Specific heat capacity [J/(kg.K)]
+            scalar cpc_;
+
+
+    // Protected member functions
+
+        //- Calculate new particle temperature
+        template<class TrackData>
+        scalar calcHeatTransfer
+        (
+            TrackData& td,
+            const scalar dt,
+            const label celli,
+            scalar& htc,
+            scalar& dhTrans
+        );
+
+
+public:
+
+    //- Runtime type information
+    TypeName("ThermoParcel");
+
+    friend class Cloud<ParcelType>;
+
+
     // Constructors
 
         //- Construct from components
@@ -271,42 +257,42 @@ public:
             inline const scalar cp() const;
             inline scalar& cp();
 
-            //- Move parcel
-            template<class TrackingData>
-            bool move
-            (
-                 TrackingData&
-            );
 
+        // Main calculation loop
 
-        //- Patch interaction
+            //- Update cell based quantities
+            template<class TrackData>
+            void updateCellQuantities
+            (
+                TrackData& td,
+                const scalar dt,
+                const label celli
+            );
 
-            //- Overridable function to handle the particle hitting a wallPatch
-            template<class TrackingData>
-            void hitWallPatch
+            //- Coupled calculation with the continuous phase
+            template<class TrackData>
+            void calcCoupled
             (
-                 const wallPolyPatch&,
-                 TrackingData& td
+                TrackData& td,
+                const scalar dt,
+                const label celli
             );
 
-            void hitWallPatch
+            //- Uncoupled calculation with the continuous phase
+            template<class TrackData>
+            void calcUncoupled
             (
-                 const wallPolyPatch&,
-                 int&
+                TrackData& td,
+                const scalar dt,
+                const label
             );
 
 
         // I-O
 
-            static void readFields
-            (
-                ThermoCloud<ParcelType>& c
-            );
+            static void readFields(ThermoCloud<ParcelType>& c);
 
-            static void writeFields
-            (
-                const ThermoCloud<ParcelType>& c
-            );
+            static void writeFields(const ThermoCloud<ParcelType>& c);
 };
 
 
diff --git a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelI.H b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelI.H
index b0960a26895..e2621bda8de 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelI.H
+++ b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelI.H
@@ -45,11 +45,11 @@ inline Foam::ThermoParcel<ParcelType>::trackData::trackData
 (
     ThermoCloud<ParcelType>& cloud,
     const constantProperties& constProps,
-    const interpolationCellPoint<scalar>& rhoInterp,
-    const interpolationCellPoint<vector>& UInterp,
-    const interpolationCellPoint<scalar>& muInterp,
-    const interpolationCellPoint<scalar>& TInterp,
-    const interpolationCellPoint<scalar>& cpInterp,
+    const interpolation<scalar>& rhoInterp,
+    const interpolation<vector>& UInterp,
+    const interpolation<scalar>& muInterp,
+    const interpolation<scalar>& TInterp,
+    const interpolation<scalar>& cpInterp,
     const vector& g
 )
 :
@@ -94,7 +94,9 @@ inline Foam::ThermoParcel<ParcelType>::ThermoParcel
         constProps
     ),
     T_(constProps.T0()),
-    cp_(constProps.cp0())
+    cp_(constProps.cp0()),
+    Tc_(0.0),
+    cpc_(0.0)
 {}
 
 
@@ -151,7 +153,7 @@ Foam::ThermoParcel<ParcelType>::trackData::constProps() const
 
 
 template<class ParcelType>
-inline const Foam::interpolationCellPoint<Foam::scalar>&
+inline const Foam::interpolation<Foam::scalar>&
 Foam::ThermoParcel<ParcelType>::trackData::TInterp() const
 {
     return TInterp_;
@@ -159,7 +161,7 @@ Foam::ThermoParcel<ParcelType>::trackData::TInterp() const
 
 
 template<class ParcelType>
-inline const Foam::interpolationCellPoint<Foam::scalar>&
+inline const Foam::interpolation<Foam::scalar>&
 Foam::ThermoParcel<ParcelType>::trackData::cpInterp() const
 {
     return cpInterp_;
diff --git a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelIO.C b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelIO.C
index 822be5af7a9..f44dba5db2d 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelIO.C
+++ b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelIO.C
@@ -39,7 +39,9 @@ Foam::ThermoParcel<ParcelType>::ThermoParcel
 :
     KinematicParcel<ParcelType>(cloud, is, readFields),
     T_(0.0),
-    cp_(0.0)
+    cp_(0.0),
+    Tc_(0.0),
+    cpc_(0.0)
 {
     if (readFields)
     {
diff --git a/src/lagrangian/intermediate/parcels/derived/kinematicParcel/kinematicParcel.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.C
similarity index 77%
rename from src/lagrangian/intermediate/parcels/derived/kinematicParcel/kinematicParcel.C
rename to src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.C
index a33e3e37b32..c9957044f6a 100644
--- a/src/lagrangian/intermediate/parcels/derived/kinematicParcel/kinematicParcel.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.C
@@ -24,23 +24,23 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "kinematicParcel.H"
+#include "basicKinematicParcel.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
 {
-    defineTypeNameAndDebug(kinematicParcel, 0);
-    defineParticleTypeNameAndDebug(kinematicParcel, 0);
-    defineParcelTypeNameAndDebug(kinematicParcel, 0);
+    defineTypeNameAndDebug(basicKinematicParcel, 0);
+    defineParticleTypeNameAndDebug(basicKinematicParcel, 0);
+    defineParcelTypeNameAndDebug(basicKinematicParcel, 0);
 };
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::kinematicParcel::kinematicParcel
+Foam::basicKinematicParcel::basicKinematicParcel
 (
-    KinematicCloud<kinematicParcel>& owner,
+    KinematicCloud<basicKinematicParcel>& owner,
     const label typeId,
     const vector& position,
     const label celli,
@@ -50,7 +50,7 @@ Foam::kinematicParcel::kinematicParcel
     const constantProperties& constProps
 )
 :
-    KinematicParcel<kinematicParcel>
+    KinematicParcel<basicKinematicParcel>
     (
         owner,
         typeId,
@@ -64,20 +64,20 @@ Foam::kinematicParcel::kinematicParcel
 {}
 
 
-Foam::kinematicParcel::kinematicParcel
+Foam::basicKinematicParcel::basicKinematicParcel
 (
-    const Cloud<kinematicParcel>& cloud,
+    const Cloud<basicKinematicParcel>& cloud,
     Istream& is,
     bool readFields
 )
 :
-    KinematicParcel<kinematicParcel>(cloud, is, readFields)
+    KinematicParcel<basicKinematicParcel>(cloud, is, readFields)
 {}
 
 
 // * * * * * * * * * * * * * * * *  Destructors  * * * * * * * * * * * * * * //
 
-Foam::kinematicParcel::~kinematicParcel()
+Foam::basicKinematicParcel::~basicKinematicParcel()
 {}
 
 
diff --git a/src/lagrangian/intermediate/parcels/derived/kinematicParcel/kinematicParcel.H b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.H
similarity index 76%
rename from src/lagrangian/intermediate/parcels/derived/kinematicParcel/kinematicParcel.H
rename to src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.H
index f64359307f4..bb43934aa0f 100644
--- a/src/lagrangian/intermediate/parcels/derived/kinematicParcel/kinematicParcel.H
+++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.H
@@ -23,18 +23,18 @@ License
     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 
 Class
-    Foam::kinematicParcel
+    Foam::basicKinematicParcel
 
 Description
-    Foam::kinematicParcel
+
 
 SourceFiles
-    kinematicParcel.C
+    basicKinematicParcel.C
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef kinematicParcel_H
-#define kinematicParcel_H
+#ifndef basicKinematicParcel_H
+#define basicKinematicParcel_H
 
 #include "KinematicParcel.H"
 
@@ -44,26 +44,26 @@ namespace Foam
 {
 
 /*---------------------------------------------------------------------------*\
-                         Class kinematicParcel Declaration
+                         Class basicKinematicParcel Declaration
 \*---------------------------------------------------------------------------*/
 
-class kinematicParcel
+class basicKinematicParcel
 :
-    public KinematicParcel<kinematicParcel>
+    public KinematicParcel<basicKinematicParcel>
 {
 
 public:
 
     //- Run-time type information
-    TypeName("kinematicParcel");
+    TypeName("basicKinematicParcel");
 
 
     // Constructors
 
         //- Construct from components
-        kinematicParcel
+        basicKinematicParcel
         (
-            KinematicCloud<kinematicParcel>& owner,
+            KinematicCloud<basicKinematicParcel>& owner,
             const label typeId,
             const vector& position,
             const label celli,
@@ -74,28 +74,29 @@ public:
         );
 
         //- Construct from Istream
-        kinematicParcel
+        basicKinematicParcel
         (
-            const Cloud<kinematicParcel>& c,
+            const Cloud<basicKinematicParcel>& c,
             Istream& is,
             bool readFields = true
         );
 
         //- Construct and return a clone
-        autoPtr<kinematicParcel> clone() const
+        autoPtr<basicKinematicParcel> clone() const
         {
-            return autoPtr<kinematicParcel>(new kinematicParcel(*this));
+            return autoPtr<basicKinematicParcel>
+                (new basicKinematicParcel(*this));
         }
 
 
-    // Destructors
+    //- Destructor
 
-        virtual ~kinematicParcel();
+        virtual ~basicKinematicParcel();
 };
 
 
 template<>
-inline bool contiguous<kinematicParcel>()
+inline bool contiguous<basicKinematicParcel>()
 {
     return true;
 }
diff --git a/src/lagrangian/intermediate/parcels/derived/kinematicParcel/defineKinematicParcel.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/defineBasicKinematicParcel.C
similarity index 80%
rename from src/lagrangian/intermediate/parcels/derived/kinematicParcel/defineKinematicParcel.C
rename to src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/defineBasicKinematicParcel.C
index 0ad0793203f..452b53e9da2 100644
--- a/src/lagrangian/intermediate/parcels/derived/kinematicParcel/defineKinematicParcel.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/defineBasicKinematicParcel.C
@@ -24,17 +24,17 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "kinematicParcel.H"
+#include "basicKinematicParcel.H"
 #include "KinematicCloud.H"
 
 namespace Foam
 {
-//    defineTemplateTypeNameAndDebug(IOPosition<kinematicParcel>, 0);
+//    defineTemplateTypeNameAndDebug(IOPosition<basicKinematicParcel>, 0);
 
-    defineTemplateTypeNameAndDebug(Cloud<kinematicParcel>, 0);
+    defineTemplateTypeNameAndDebug(Cloud<basicKinematicParcel>, 0);
 
-    defineParcelTypeNameAndDebug(KinematicCloud<kinematicParcel>, 0);
-//    defineTemplateTypeNameAndDebug(KinematicCloud<kinematicParcel>, 0);
+    defineParcelTypeNameAndDebug(KinematicCloud<basicKinematicParcel>, 0);
+//    defineTemplateTypeNameAndDebug(KinematicCloud<basicKinematicParcel>, 0);
 };
 
 
diff --git a/src/lagrangian/intermediate/parcels/derived/kinematicParcel/makeKinematicParcelDispersionModels.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelDispersionModels.C
similarity index 88%
rename from src/lagrangian/intermediate/parcels/derived/kinematicParcel/makeKinematicParcelDispersionModels.C
rename to src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelDispersionModels.C
index 595edb2947f..74b29d8d43e 100644
--- a/src/lagrangian/intermediate/parcels/derived/kinematicParcel/makeKinematicParcelDispersionModels.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelDispersionModels.C
@@ -24,7 +24,7 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "kinematicParcel.H"
+#include "basicKinematicParcel.H"
 #include "KinematicCloud.H"
 #include "NoDispersion.H"
 #include "GradientDispersionRAS.H"
@@ -32,11 +32,11 @@ License
 
 namespace Foam
 {
-    makeDispersionModel(KinematicCloud<kinematicParcel>);
+    makeDispersionModel(KinematicCloud<basicKinematicParcel>);
 
     defineNamedTemplateTypeNameAndDebug
     (
-        DispersionRASModel<KinematicCloud<kinematicParcel> >,
+        DispersionRASModel<KinematicCloud<basicKinematicParcel> >,
         0
     );
 
@@ -45,19 +45,19 @@ namespace Foam
     (
         NoDispersion,
         KinematicCloud,
-        kinematicParcel
+        basicKinematicParcel
     );
     makeDispersionModelType
     (
         GradientDispersionRAS,
         KinematicCloud,
-        kinematicParcel
+        basicKinematicParcel
     );
     makeDispersionModelType
     (
         StochasticDispersionRAS,
         KinematicCloud,
-        kinematicParcel
+        basicKinematicParcel
     );
 };
 
diff --git a/src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelDragModels.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelDragModels.C
similarity index 86%
rename from src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelDragModels.C
rename to src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelDragModels.C
index 65a35d79a0e..82af0bb1e6e 100644
--- a/src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelDragModels.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelDragModels.C
@@ -24,18 +24,18 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "reactingParcel.H"
+#include "basicKinematicParcel.H"
 #include "KinematicCloud.H"
 #include "NoDrag.H"
 #include "SphereDrag.H"
 
 namespace Foam
 {
-    makeDragModel(KinematicCloud<reactingParcel>);
+    makeDragModel(KinematicCloud<basicKinematicParcel>);
 
     // Add instances of drag model to the table
-    makeDragModelType(NoDrag, KinematicCloud, reactingParcel);
-    makeDragModelType(SphereDrag, KinematicCloud, reactingParcel);
+    makeDragModelType(NoDrag, KinematicCloud, basicKinematicParcel);
+    makeDragModelType(SphereDrag, KinematicCloud, basicKinematicParcel);
 };
 
 
diff --git a/src/lagrangian/intermediate/parcels/derived/kinematicParcel/makeKinematicParcelHeatTransferModels.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelHeatTransferModels.C
similarity index 86%
rename from src/lagrangian/intermediate/parcels/derived/kinematicParcel/makeKinematicParcelHeatTransferModels.C
rename to src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelHeatTransferModels.C
index 6a5eaa11f93..34740bd6a86 100644
--- a/src/lagrangian/intermediate/parcels/derived/kinematicParcel/makeKinematicParcelHeatTransferModels.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelHeatTransferModels.C
@@ -24,16 +24,21 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "kinematicParcel.H"
+#include "basicKinematicParcel.H"
 #include "KinematicCloud.H"
 #include "NoHeatTransfer.H"
 
 namespace Foam
 {
-    makeHeatTransferModel(KinematicCloud<kinematicParcel>);
+    makeHeatTransferModel(KinematicCloud<basicKinematicParcel>);
 
     // Add instances of heat transfer model to the table
-    makeHeatTransferModelType(NoHeatTransfer, KinematicCloud, kinematicParcel);
+    makeHeatTransferModelType
+    (
+        NoHeatTransfer,
+        KinematicCloud,
+        basicKinematicParcel
+    );
 };
 
 
diff --git a/src/lagrangian/intermediate/parcels/derived/kinematicParcel/makeKinematicParcelInjectionModels.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelInjectionModels.C
similarity index 81%
rename from src/lagrangian/intermediate/parcels/derived/kinematicParcel/makeKinematicParcelInjectionModels.C
rename to src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelInjectionModels.C
index bb6e400393b..7b72076611b 100644
--- a/src/lagrangian/intermediate/parcels/derived/kinematicParcel/makeKinematicParcelInjectionModels.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelInjectionModels.C
@@ -24,18 +24,28 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "kinematicParcel.H"
+#include "basicKinematicParcel.H"
 #include "KinematicCloud.H"
 #include "ManualInjection.H"
 #include "NoInjection.H"
 
 namespace Foam
 {
-    makeInjectionModel(KinematicCloud<kinematicParcel>);
+    makeInjectionModel(KinematicCloud<basicKinematicParcel>);
 
     // Add instances of injection model to the table
-    makeInjectionModelType(ManualInjection, KinematicCloud, kinematicParcel);
-    makeInjectionModelType(NoInjection, KinematicCloud, kinematicParcel);
+    makeInjectionModelType
+    (
+        ManualInjection,
+        KinematicCloud,
+        basicKinematicParcel
+    );
+    makeInjectionModelType
+    (
+        NoInjection,
+        KinematicCloud,
+        basicKinematicParcel
+    );
 };
 
 
diff --git a/src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelWallInteractionModels.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelWallInteractionModels.C
similarity index 89%
rename from src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelWallInteractionModels.C
rename to src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelWallInteractionModels.C
index c3f551887df..1adc3b92718 100644
--- a/src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelWallInteractionModels.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelWallInteractionModels.C
@@ -24,28 +24,27 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "reactingParcel.H"
+#include "basicKinematicParcel.H"
 #include "KinematicCloud.H"
 #include "Rebound.H"
 #include "StandardWallInteraction.H"
 
 namespace Foam
 {
-    makeWallInteractionModel(KinematicCloud<reactingParcel>);
-//    makeWallInteractionModel(ReactingCloud<reactingParcel>);
+    makeWallInteractionModel(KinematicCloud<basicKinematicParcel>);
 
     // Add instances of wall interaction model to the table
     makeWallInteractionModelType
     (
         Rebound,
         KinematicCloud,
-        reactingParcel
+        basicKinematicParcel
     );
     makeWallInteractionModelType
     (
         StandardWallInteraction,
         KinematicCloud,
-        reactingParcel
+        basicKinematicParcel
     );
 };
 
diff --git a/src/lagrangian/intermediate/parcels/derived/reactingParcel/reactingParcel.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/basicReactingParcel.C
similarity index 79%
rename from src/lagrangian/intermediate/parcels/derived/reactingParcel/reactingParcel.C
rename to src/lagrangian/intermediate/parcels/derived/basicReactingParcel/basicReactingParcel.C
index 9e445058dd7..d6a4c14f8fe 100644
--- a/src/lagrangian/intermediate/parcels/derived/reactingParcel/reactingParcel.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/basicReactingParcel.C
@@ -24,23 +24,23 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "reactingParcel.H"
+#include "basicReactingParcel.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
 {
-    defineTypeNameAndDebug(reactingParcel, 0);
-    defineParticleTypeNameAndDebug(reactingParcel, 0);
-    defineParcelTypeNameAndDebug(reactingParcel, 0);
+    defineTypeNameAndDebug(basicReactingParcel, 0);
+    defineParticleTypeNameAndDebug(basicReactingParcel, 0);
+    defineParcelTypeNameAndDebug(basicReactingParcel, 0);
 };
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::reactingParcel::reactingParcel
+Foam::basicReactingParcel::basicReactingParcel
 (
-    ReactingCloud<reactingParcel>& owner,
+    ReactingCloud<basicReactingParcel>& owner,
     const label typeId,
     const vector& position,
     const label celli,
@@ -54,7 +54,7 @@ Foam::reactingParcel::reactingParcel
     const constantProperties& constProps
 )
 :
-    ReactingParcel<reactingParcel>
+    ReactingParcel<basicReactingParcel>
     (
         owner,
         typeId,
@@ -72,20 +72,20 @@ Foam::reactingParcel::reactingParcel
 {}
 
 
-Foam::reactingParcel::reactingParcel
+Foam::basicReactingParcel::basicReactingParcel
 (
-    const Cloud<reactingParcel>& cloud,
+    const Cloud<basicReactingParcel>& cloud,
     Istream& is,
     bool readFields
 )
 :
-    ReactingParcel<reactingParcel>(cloud, is, readFields)
+    ReactingParcel<basicReactingParcel>(cloud, is, readFields)
 {}
 
 
 // * * * * * * * * * * * * * * * *  Destructors  * * * * * * * * * * * * * * //
 
-Foam::reactingParcel::~reactingParcel()
+Foam::basicReactingParcel::~basicReactingParcel()
 {}
 
 
diff --git a/src/lagrangian/intermediate/parcels/derived/reactingParcel/reactingParcel.H b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/basicReactingParcel.H
similarity index 78%
rename from src/lagrangian/intermediate/parcels/derived/reactingParcel/reactingParcel.H
rename to src/lagrangian/intermediate/parcels/derived/basicReactingParcel/basicReactingParcel.H
index 3986a73fc8b..98af0d0e0fd 100644
--- a/src/lagrangian/intermediate/parcels/derived/reactingParcel/reactingParcel.H
+++ b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/basicReactingParcel.H
@@ -23,19 +23,19 @@ License
     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 
 Class
-    Foam::reactingParcel
+    Foam::basicReactingParcel
 
 Description
-    Foam::reactingParcel
+
 
 SourceFiles
-    reactingParcel.C
-    reactingParcelIO.C
+    basicReactingParcel.C
+    basicReactingParcelIO.C
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef reactingParcel_H
-#define reactingParcel_H
+#ifndef basicReactingParcel_H
+#define basicReactingParcel_H
 
 #include "ReactingParcel.H"
 
@@ -45,25 +45,25 @@ namespace Foam
 {
 
 /*---------------------------------------------------------------------------*\
-                        Class reactingParcel Declaration
+                        Class basicReactingParcel Declaration
 \*---------------------------------------------------------------------------*/
 
-class reactingParcel
+class basicReactingParcel
 :
-    public ReactingParcel<reactingParcel>
+    public ReactingParcel<basicReactingParcel>
 {
 
 public:
 
     //- Run-time type information
-    TypeName("reactingParcel");
+    TypeName("basicReactingParcel");
 
     // Constructors
 
         //- Construct from components
-        reactingParcel
+        basicReactingParcel
         (
-             ReactingCloud<reactingParcel>& owner,
+             ReactingCloud<basicReactingParcel>& owner,
              const label typeId,
              const vector& position,
              const label celli,
@@ -78,28 +78,29 @@ public:
         );
 
         //- Construct from Istream
-        reactingParcel
+        basicReactingParcel
         (
-            const Cloud<reactingParcel>& c,
+            const Cloud<basicReactingParcel>& c,
             Istream& is,
             bool readFields = true
         );
 
         //- Construct and return a clone
-        autoPtr<reactingParcel> clone() const
+        autoPtr<basicReactingParcel> clone() const
         {
-            return autoPtr<reactingParcel>(new reactingParcel(*this));
+            return autoPtr<basicReactingParcel>
+                (new basicReactingParcel(*this));
         }
 
 
     // Destructors
 
-        virtual ~reactingParcel();
+        virtual ~basicReactingParcel();
 };
 
 
 template<>
-inline bool contiguous<reactingParcel>()
+inline bool contiguous<basicReactingParcel>()
 {
     return false; // Now have scalar lists/fields (mass fractions)
 }
diff --git a/src/lagrangian/intermediate/parcels/derived/reactingParcel/defineReactingParcel.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/defineBasicReactingParcel.C
similarity index 59%
rename from src/lagrangian/intermediate/parcels/derived/reactingParcel/defineReactingParcel.C
rename to src/lagrangian/intermediate/parcels/derived/basicReactingParcel/defineBasicReactingParcel.C
index 427def96de1..87106d9d7e9 100644
--- a/src/lagrangian/intermediate/parcels/derived/reactingParcel/defineReactingParcel.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/defineBasicReactingParcel.C
@@ -24,28 +24,28 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "reactingParcel.H"
+#include "basicReactingParcel.H"
 #include "ReactingCloud.H"
 
 namespace Foam
 {
-    defineTemplateTypeNameAndDebug(Cloud<reactingParcel>, 0);
+    defineTemplateTypeNameAndDebug(Cloud<basicReactingParcel>, 0);
 
-    defineParcelTypeNameAndDebug(KinematicParcel<reactingParcel>, 0);
-//    defineTemplateTypeNameAndDebug(KinematicParcel<reactingParcel>, 0);
-    defineParcelTypeNameAndDebug(ThermoParcel<reactingParcel>, 0);
-    defineTemplateTypeNameAndDebug(ThermoParcel<reactingParcel>, 0);
-    defineParcelTypeNameAndDebug(ReactingParcel<reactingParcel>, 0);
-    defineTemplateTypeNameAndDebug(ReactingParcel<reactingParcel>, 0);
+    defineParcelTypeNameAndDebug(KinematicParcel<basicReactingParcel>, 0);
+//    defineTemplateTypeNameAndDebug(KinematicParcel<basicReactingParcel>, 0);
+    defineParcelTypeNameAndDebug(ThermoParcel<basicReactingParcel>, 0);
+    defineTemplateTypeNameAndDebug(ThermoParcel<basicReactingParcel>, 0);
+    defineParcelTypeNameAndDebug(ReactingParcel<basicReactingParcel>, 0);
+    defineTemplateTypeNameAndDebug(ReactingParcel<basicReactingParcel>, 0);
 
-    defineParcelTypeNameAndDebug(KinematicCloud<reactingParcel>, 0);
-//    defineTemplateTypeNameAndDebug(KinematicCloud<reactingParcel>, 0);
+    defineParcelTypeNameAndDebug(KinematicCloud<basicReactingParcel>, 0);
+//    defineTemplateTypeNameAndDebug(KinematicCloud<basicReactingParcel>, 0);
 
-    defineParcelTypeNameAndDebug(ThermoCloud<reactingParcel>, 0);
-//    defineTemplateTypeNameAndDebug(ThermoCloud<reactingParcel>, 0);
+    defineParcelTypeNameAndDebug(ThermoCloud<basicReactingParcel>, 0);
+//    defineTemplateTypeNameAndDebug(ThermoCloud<basicReactingParcel>, 0);
 
-    defineParcelTypeNameAndDebug(ReactingCloud<reactingParcel>, 0);
-//    defineTemplateTypeNameAndDebug(ReactingCloud<reactingParcel>, 0);
+    defineParcelTypeNameAndDebug(ReactingCloud<basicReactingParcel>, 0);
+//    defineTemplateTypeNameAndDebug(ReactingCloud<basicReactingParcel>, 0);
 
 };
 
diff --git a/src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelCompositionModels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelCompositionModels.C
similarity index 92%
rename from src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelCompositionModels.C
rename to src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelCompositionModels.C
index fd8a908fbf4..2cd9da2d65b 100644
--- a/src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelCompositionModels.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelCompositionModels.C
@@ -24,20 +24,20 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "reactingParcel.H"
+#include "basicReactingParcel.H"
 #include "ReactingCloud.H"
 #include "SingleMixtureFraction.H"
 
 namespace Foam
 {
-    makeCompositionModel(ReactingCloud<reactingParcel>);
+    makeCompositionModel(ReactingCloud<basicReactingParcel>);
 
     // Add instances of composition model to the table
     makeCompositionModelType
     (
         SingleMixtureFraction,
         ReactingCloud,
-        reactingParcel
+        basicReactingParcel
     );
 };
 
diff --git a/src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelDispersionModels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelDispersionModels.C
similarity index 88%
rename from src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelDispersionModels.C
rename to src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelDispersionModels.C
index cde64618453..985cb0fee6e 100644
--- a/src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelDispersionModels.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelDispersionModels.C
@@ -24,7 +24,7 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "reactingParcel.H"
+#include "basicReactingParcel.H"
 #include "KinematicCloud.H"
 #include "NoDispersion.H"
 #include "GradientDispersionRAS.H"
@@ -32,11 +32,11 @@ License
 
 namespace Foam
 {
-    makeDispersionModel(KinematicCloud<reactingParcel>);
+    makeDispersionModel(KinematicCloud<basicReactingParcel>);
 
     defineNamedTemplateTypeNameAndDebug
     (
-        DispersionRASModel<KinematicCloud<reactingParcel> >,
+        DispersionRASModel<KinematicCloud<basicReactingParcel> >,
         0
     );
 
@@ -45,19 +45,19 @@ namespace Foam
     (
         NoDispersion,
         KinematicCloud,
-        reactingParcel
+        basicReactingParcel
     );
     makeDispersionModelType
     (
         GradientDispersionRAS,
         KinematicCloud,
-        reactingParcel
+        basicReactingParcel
     );
     makeDispersionModelType
     (
         StochasticDispersionRAS,
         KinematicCloud,
-        reactingParcel
+        basicReactingParcel
     );
 };
 
diff --git a/src/lagrangian/intermediate/parcels/derived/kinematicParcel/makeKinematicParcelDragModels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelDragModels.C
similarity index 86%
rename from src/lagrangian/intermediate/parcels/derived/kinematicParcel/makeKinematicParcelDragModels.C
rename to src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelDragModels.C
index 209ae7d86d7..2de3b161435 100644
--- a/src/lagrangian/intermediate/parcels/derived/kinematicParcel/makeKinematicParcelDragModels.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelDragModels.C
@@ -24,18 +24,18 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "kinematicParcel.H"
+#include "basicReactingParcel.H"
 #include "KinematicCloud.H"
 #include "NoDrag.H"
 #include "SphereDrag.H"
 
 namespace Foam
 {
-    makeDragModel(KinematicCloud<kinematicParcel>);
+    makeDragModel(KinematicCloud<basicReactingParcel>);
 
     // Add instances of drag model to the table
-    makeDragModelType(NoDrag, KinematicCloud, kinematicParcel);
-    makeDragModelType(SphereDrag, KinematicCloud, kinematicParcel);
+    makeDragModelType(NoDrag, KinematicCloud, basicReactingParcel);
+    makeDragModelType(SphereDrag, KinematicCloud, basicReactingParcel);
 };
 
 
diff --git a/src/lagrangian/intermediate/parcels/derived/thermoParcel/makeThermoParcelHeatTransferModels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelHeatTransferModels.C
similarity index 81%
rename from src/lagrangian/intermediate/parcels/derived/thermoParcel/makeThermoParcelHeatTransferModels.C
rename to src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelHeatTransferModels.C
index 29afb72f4b3..7bd38923d3d 100644
--- a/src/lagrangian/intermediate/parcels/derived/thermoParcel/makeThermoParcelHeatTransferModels.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelHeatTransferModels.C
@@ -24,18 +24,28 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "thermoParcel.H"
+#include "basicReactingParcel.H"
 #include "ThermoCloud.H"
 #include "NoHeatTransfer.H"
 #include "RanzMarshall.H"
 
 namespace Foam
 {
-    makeHeatTransferModel(ThermoCloud<thermoParcel>);
+    makeHeatTransferModel(ThermoCloud<basicReactingParcel>);
 
     // Add instances of heat transfer model to the table
-    makeHeatTransferModelType(NoHeatTransfer, ThermoCloud, thermoParcel);
-    makeHeatTransferModelType(RanzMarshall, ThermoCloud, thermoParcel);
+    makeHeatTransferModelType
+    (
+        NoHeatTransfer,
+        ThermoCloud,
+        basicReactingParcel
+    );
+    makeHeatTransferModelType
+    (
+        RanzMarshall,
+        ThermoCloud,
+        basicReactingParcel
+    );
 };
 
 
diff --git a/src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelInjectionModels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelInjectionModels.C
similarity index 81%
rename from src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelInjectionModels.C
rename to src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelInjectionModels.C
index d43f9570ca6..64296007dc7 100644
--- a/src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelInjectionModels.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelInjectionModels.C
@@ -24,18 +24,28 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "reactingParcel.H"
+#include "basicReactingParcel.H"
 #include "ReactingCloud.H"
 #include "ManualInjection.H"
 #include "NoInjection.H"
 
 namespace Foam
 {
-    makeInjectionModel(KinematicCloud<reactingParcel>);
+    makeInjectionModel(KinematicCloud<basicReactingParcel>);
 
     // Add instances of injection model to the table
-    makeInjectionModelType(ManualInjection, KinematicCloud, reactingParcel);
-    makeInjectionModelType(NoInjection, KinematicCloud, reactingParcel);
+    makeInjectionModelType
+    (
+        ManualInjection,
+        KinematicCloud,
+        basicReactingParcel
+    );
+    makeInjectionModelType
+    (
+        NoInjection,
+        KinematicCloud,
+        basicReactingParcel
+    );
 };
 
 
diff --git a/src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelMassTransferModels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelMassTransferModels.C
similarity index 91%
rename from src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelMassTransferModels.C
rename to src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelMassTransferModels.C
index 6768b459c79..b6347d5353d 100644
--- a/src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelMassTransferModels.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelMassTransferModels.C
@@ -24,7 +24,7 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "reactingParcel.H"
+#include "basicReactingParcel.H"
 #include "ThermoCloud.H"
 #include "NoMassTransfer.H"
 #include "ConstantRateDevolatilisation.H"
@@ -32,26 +32,26 @@ License
 
 namespace Foam
 {
-    makeMassTransferModel(ReactingCloud<reactingParcel>);
+    makeMassTransferModel(ReactingCloud<basicReactingParcel>);
 
     // Add instances of mass transfer model to the table
     makeMassTransferModelType
     (
         NoMassTransfer,
         ReactingCloud,
-        reactingParcel
+        basicReactingParcel
     );
     makeMassTransferModelType
     (
         ConstantRateDevolatilisation,
         ReactingCloud,
-        reactingParcel
+        basicReactingParcel
     );
     makeMassTransferModelType
     (
         SingleKineticRateDevolatilisation,
         ReactingCloud,
-        reactingParcel
+        basicReactingParcel
     );
 };
 
diff --git a/src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelSurfaceReactionModels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelSurfaceReactionModels.C
similarity index 92%
rename from src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelSurfaceReactionModels.C
rename to src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelSurfaceReactionModels.C
index 5392a1dacaf..8cf01454056 100644
--- a/src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelSurfaceReactionModels.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelSurfaceReactionModels.C
@@ -24,20 +24,20 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "reactingParcel.H"
+#include "basicReactingParcel.H"
 #include "ReactingCloud.H"
 #include "NoSurfaceReaction.H"
 
 namespace Foam
 {
-    makeSurfaceReactionModel(ReactingCloud<reactingParcel>);
+    makeSurfaceReactionModel(ReactingCloud<basicReactingParcel>);
 
     // Add instances of surface reaction model to the table
     makeSurfaceReactionModelType
     (
         NoSurfaceReaction,
         ReactingCloud,
-        reactingParcel
+        basicReactingParcel
     );
 };
 
diff --git a/src/lagrangian/intermediate/parcels/derived/kinematicParcel/makeKinematicParcelWallInteractionModels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelWallInteractionModels.C
similarity index 83%
rename from src/lagrangian/intermediate/parcels/derived/kinematicParcel/makeKinematicParcelWallInteractionModels.C
rename to src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelWallInteractionModels.C
index 67e8930eedb..688350fe048 100644
--- a/src/lagrangian/intermediate/parcels/derived/kinematicParcel/makeKinematicParcelWallInteractionModels.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelWallInteractionModels.C
@@ -24,22 +24,28 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "kinematicParcel.H"
+#include "basicReactingParcel.H"
 #include "KinematicCloud.H"
 #include "Rebound.H"
 #include "StandardWallInteraction.H"
 
 namespace Foam
 {
-    makeWallInteractionModel(KinematicCloud<kinematicParcel>);
+    makeWallInteractionModel(KinematicCloud<basicReactingParcel>);
+//    makeWallInteractionModel(ReactingCloud<basicReactingParcel>);
 
     // Add instances of wall interaction model to the table
-    makeWallInteractionModelType(Rebound, KinematicCloud, kinematicParcel);
+    makeWallInteractionModelType
+    (
+        Rebound,
+        KinematicCloud,
+        basicReactingParcel
+    );
     makeWallInteractionModelType
     (
         StandardWallInteraction,
         KinematicCloud,
-        kinematicParcel
+        basicReactingParcel
     );
 };
 
diff --git a/src/lagrangian/intermediate/parcels/derived/thermoParcel/thermoParcel.C b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.C
similarity index 79%
rename from src/lagrangian/intermediate/parcels/derived/thermoParcel/thermoParcel.C
rename to src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.C
index 4667cc3880e..d392cb15b0f 100644
--- a/src/lagrangian/intermediate/parcels/derived/thermoParcel/thermoParcel.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.C
@@ -24,23 +24,23 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "thermoParcel.H"
+#include "basicThermoParcel.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
 {
-    defineTypeNameAndDebug(thermoParcel, 0);
-    defineParticleTypeNameAndDebug(thermoParcel, 0);
-    defineParcelTypeNameAndDebug(thermoParcel, 0);
+    defineTypeNameAndDebug(basicThermoParcel, 0);
+    defineParticleTypeNameAndDebug(basicThermoParcel, 0);
+    defineParcelTypeNameAndDebug(basicThermoParcel, 0);
 };
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::thermoParcel::thermoParcel
+Foam::basicThermoParcel::basicThermoParcel
 (
-    ThermoCloud<thermoParcel>& owner,
+    ThermoCloud<basicThermoParcel>& owner,
     const label typeId,
     const vector position,
     const label celli,
@@ -50,7 +50,7 @@ Foam::thermoParcel::thermoParcel
     const constantProperties& constProps
 )
 :
-    ThermoParcel<thermoParcel>
+    ThermoParcel<basicThermoParcel>
     (
         owner,
         typeId,
@@ -64,20 +64,20 @@ Foam::thermoParcel::thermoParcel
 {}
 
 
-Foam::thermoParcel::thermoParcel
+Foam::basicThermoParcel::basicThermoParcel
 (
-    const Cloud<thermoParcel>& cloud,
+    const Cloud<basicThermoParcel>& cloud,
     Istream& is,
     bool readFields
 )
 :
-    ThermoParcel<thermoParcel>(cloud, is, readFields)
+    ThermoParcel<basicThermoParcel>(cloud, is, readFields)
 {}
 
 
 // * * * * * * * * * * * * * * * *  Destructors  * * * * * * * * * * * * * * //
 
-Foam::thermoParcel::~thermoParcel()
+Foam::basicThermoParcel::~basicThermoParcel()
 {}
 
 
diff --git a/src/lagrangian/intermediate/parcels/derived/thermoParcel/thermoParcel.H b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.H
similarity index 79%
rename from src/lagrangian/intermediate/parcels/derived/thermoParcel/thermoParcel.H
rename to src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.H
index 4030e605927..89034063533 100644
--- a/src/lagrangian/intermediate/parcels/derived/thermoParcel/thermoParcel.H
+++ b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.H
@@ -23,18 +23,18 @@ License
     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 
 Class
-    Foam::thermoParcel
+    Foam::basicThermoParcel
 
 Description
-    Foam::thermoParcel
+
 
 SourceFiles
-    thermoParcel.C
+    basicThermoParcel.C
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef thermoParcel_H
-#define thermoParcel_H
+#ifndef basicThermoParcel_H
+#define basicThermoParcel_H
 
 #include "ThermoParcel.H"
 
@@ -44,25 +44,25 @@ namespace Foam
 {
 
 /*---------------------------------------------------------------------------*\
-                         Class thermoParcel Declaration
+                         Class basicThermoParcel Declaration
 \*---------------------------------------------------------------------------*/
 
-class thermoParcel
+class basicThermoParcel
 :
-    public ThermoParcel<thermoParcel>
+    public ThermoParcel<basicThermoParcel>
 {
 
 public:
 
     //- Runtime type information
-    TypeName("thermoParcel");
+    TypeName("basicThermoParcel");
 
     // Constructors
 
        //- Construct from components
-       thermoParcel
+       basicThermoParcel
        (
-            ThermoCloud<thermoParcel>& owner,
+            ThermoCloud<basicThermoParcel>& owner,
             const label typeId,
             const vector position,
             const label celli,
@@ -73,28 +73,28 @@ public:
         );
 
         //- Construct from Istream
-        thermoParcel
+        basicThermoParcel
         (
-            const Cloud<thermoParcel>& c,
+            const Cloud<basicThermoParcel>& c,
             Istream& is,
             bool readFields = true
         );
 
         //- Construct and return a clone
-        autoPtr<thermoParcel> clone() const
+        autoPtr<basicThermoParcel> clone() const
         {
-            return autoPtr<thermoParcel>(new thermoParcel(*this));
+            return autoPtr<basicThermoParcel>(new basicThermoParcel(*this));
         }
 
 
     // Destructors
 
-        virtual ~thermoParcel();
+        virtual ~basicThermoParcel();
 };
 
 
 template<>
-inline bool contiguous<thermoParcel>()
+inline bool contiguous<basicThermoParcel>()
 {
     return true;
 }
diff --git a/src/lagrangian/intermediate/parcels/derived/thermoParcel/defineThermoParcel.C b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/defineBasicThermoParcel.C
similarity index 66%
rename from src/lagrangian/intermediate/parcels/derived/thermoParcel/defineThermoParcel.C
rename to src/lagrangian/intermediate/parcels/derived/basicThermoParcel/defineBasicThermoParcel.C
index a807484782b..8d5b906e315 100644
--- a/src/lagrangian/intermediate/parcels/derived/thermoParcel/defineThermoParcel.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/defineBasicThermoParcel.C
@@ -24,23 +24,23 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "thermoParcel.H"
+#include "basicThermoParcel.H"
 #include "ThermoCloud.H"
 
 namespace Foam
 {
-    defineTemplateTypeNameAndDebug(Cloud<thermoParcel>, 0);
+    defineTemplateTypeNameAndDebug(Cloud<basicThermoParcel>, 0);
 
-    defineParcelTypeNameAndDebug(KinematicParcel<thermoParcel>, 0);
-//    defineTemplateTypeNameAndDebug(KinematicParcel<thermoParcel>, 0);
-    defineParcelTypeNameAndDebug(ThermoParcel<thermoParcel>, 0);
-    defineTemplateTypeNameAndDebug(ThermoParcel<thermoParcel>, 0);
+    defineParcelTypeNameAndDebug(KinematicParcel<basicThermoParcel>, 0);
+//    defineTemplateTypeNameAndDebug(KinematicParcel<basicThermoParcel>, 0);
+    defineParcelTypeNameAndDebug(ThermoParcel<basicThermoParcel>, 0);
+    defineTemplateTypeNameAndDebug(ThermoParcel<basicThermoParcel>, 0);
 
-    defineParcelTypeNameAndDebug(KinematicCloud<thermoParcel>, 0);
-//    defineTemplateTypeNameAndDebug(KinematicCloud<thermoParcel>, 0);
+    defineParcelTypeNameAndDebug(KinematicCloud<basicThermoParcel>, 0);
+//    defineTemplateTypeNameAndDebug(KinematicCloud<basicThermoParcel>, 0);
 
-    defineParcelTypeNameAndDebug(ThermoCloud<thermoParcel>, 0);
-//    defineTemplateTypeNameAndDebug(ThermoCloud<thermoParcel>, 0);
+    defineParcelTypeNameAndDebug(ThermoCloud<basicThermoParcel>, 0);
+//    defineTemplateTypeNameAndDebug(ThermoCloud<basicThermoParcel>, 0);
 };
 
 
diff --git a/src/lagrangian/intermediate/parcels/derived/thermoParcel/makeThermoParcelDispersionModels.C b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelDispersionModels.C
similarity index 88%
rename from src/lagrangian/intermediate/parcels/derived/thermoParcel/makeThermoParcelDispersionModels.C
rename to src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelDispersionModels.C
index 9061d6ed93f..9c23ac59946 100644
--- a/src/lagrangian/intermediate/parcels/derived/thermoParcel/makeThermoParcelDispersionModels.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelDispersionModels.C
@@ -24,7 +24,7 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "thermoParcel.H"
+#include "basicThermoParcel.H"
 #include "KinematicCloud.H"
 #include "NoDispersion.H"
 #include "GradientDispersionRAS.H"
@@ -32,11 +32,11 @@ License
 
 namespace Foam
 {
-    makeDispersionModel(KinematicCloud<thermoParcel>);
+    makeDispersionModel(KinematicCloud<basicThermoParcel>);
 
     defineNamedTemplateTypeNameAndDebug
     (
-        DispersionRASModel<KinematicCloud<thermoParcel> >,
+        DispersionRASModel<KinematicCloud<basicThermoParcel> >,
         0
     );
 
@@ -45,19 +45,19 @@ namespace Foam
     (
         NoDispersion,
         KinematicCloud,
-        thermoParcel
+        basicThermoParcel
     );
     makeDispersionModelType
     (
         GradientDispersionRAS,
         KinematicCloud,
-        thermoParcel
+        basicThermoParcel
     );
     makeDispersionModelType
     (
         StochasticDispersionRAS,
         KinematicCloud,
-        thermoParcel
+        basicThermoParcel
     );
 };
 
diff --git a/src/lagrangian/intermediate/parcels/derived/thermoParcel/makeThermoParcelDragModels.C b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelDragModels.C
similarity index 86%
rename from src/lagrangian/intermediate/parcels/derived/thermoParcel/makeThermoParcelDragModels.C
rename to src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelDragModels.C
index 6899dfd07c9..8166e0ad462 100644
--- a/src/lagrangian/intermediate/parcels/derived/thermoParcel/makeThermoParcelDragModels.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelDragModels.C
@@ -24,18 +24,18 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "thermoParcel.H"
+#include "basicThermoParcel.H"
 #include "KinematicCloud.H"
 #include "NoDrag.H"
 #include "SphereDrag.H"
 
 namespace Foam
 {
-    makeDragModel(KinematicCloud<thermoParcel>);
+    makeDragModel(KinematicCloud<basicThermoParcel>);
 
     // Add instances of drag model to the table
-    makeDragModelType(NoDrag, KinematicCloud, thermoParcel);
-    makeDragModelType(SphereDrag, KinematicCloud, thermoParcel);
+    makeDragModelType(NoDrag, KinematicCloud, basicThermoParcel);
+    makeDragModelType(SphereDrag, KinematicCloud, basicThermoParcel);
 };
 
 
diff --git a/src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelHeatTransferModels.C b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelHeatTransferModels.C
similarity index 85%
rename from src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelHeatTransferModels.C
rename to src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelHeatTransferModels.C
index 3291f4eb8ad..daed9b5bb5a 100644
--- a/src/lagrangian/intermediate/parcels/derived/reactingParcel/makeReactingParcelHeatTransferModels.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelHeatTransferModels.C
@@ -24,18 +24,18 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "reactingParcel.H"
+#include "basicThermoParcel.H"
 #include "ThermoCloud.H"
 #include "NoHeatTransfer.H"
 #include "RanzMarshall.H"
 
 namespace Foam
 {
-    makeHeatTransferModel(ThermoCloud<reactingParcel>);
+    makeHeatTransferModel(ThermoCloud<basicThermoParcel>);
 
     // Add instances of heat transfer model to the table
-    makeHeatTransferModelType(NoHeatTransfer, ThermoCloud, reactingParcel);
-    makeHeatTransferModelType(RanzMarshall, ThermoCloud, reactingParcel);
+    makeHeatTransferModelType(NoHeatTransfer, ThermoCloud, basicThermoParcel);
+    makeHeatTransferModelType(RanzMarshall, ThermoCloud, basicThermoParcel);
 };
 
 
diff --git a/src/lagrangian/intermediate/parcels/derived/thermoParcel/makeThermoParcelInjectionModels.C b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelInjectionModels.C
similarity index 85%
rename from src/lagrangian/intermediate/parcels/derived/thermoParcel/makeThermoParcelInjectionModels.C
rename to src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelInjectionModels.C
index fb12cd9e158..357ba824988 100644
--- a/src/lagrangian/intermediate/parcels/derived/thermoParcel/makeThermoParcelInjectionModels.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelInjectionModels.C
@@ -24,19 +24,19 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "thermoParcel.H"
+#include "basicThermoParcel.H"
 #include "ThermoCloud.H"
 #include "NoInjection.H"
 #include "ManualInjection.H"
 
 namespace Foam
 {
-    makeInjectionModel(KinematicCloud<thermoParcel>);
+    makeInjectionModel(KinematicCloud<basicThermoParcel>);
 
     // Add instances of injection model to the table
-    makeInjectionModelType(NoInjection, KinematicCloud, thermoParcel);
+    makeInjectionModelType(NoInjection, KinematicCloud, basicThermoParcel);
 
-    makeInjectionModelType(ManualInjection, KinematicCloud, thermoParcel);
+    makeInjectionModelType(ManualInjection, KinematicCloud, basicThermoParcel);
 };
 
 
diff --git a/src/lagrangian/intermediate/parcels/derived/thermoParcel/makeThermoParcelWallInteractionModels.C b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelWallInteractionModels.C
similarity index 91%
rename from src/lagrangian/intermediate/parcels/derived/thermoParcel/makeThermoParcelWallInteractionModels.C
rename to src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelWallInteractionModels.C
index aab77c9b70d..fc79685f3ae 100644
--- a/src/lagrangian/intermediate/parcels/derived/thermoParcel/makeThermoParcelWallInteractionModels.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelWallInteractionModels.C
@@ -24,27 +24,27 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "thermoParcel.H"
+#include "basicThermoParcel.H"
 #include "KinematicCloud.H"
 #include "Rebound.H"
 #include "StandardWallInteraction.H"
 
 namespace Foam
 {
-    makeWallInteractionModel(KinematicCloud<thermoParcel>);
+    makeWallInteractionModel(KinematicCloud<basicThermoParcel>);
 
     // Add instances of wall interaction model to the table
     makeWallInteractionModelType
     (
         Rebound,
         KinematicCloud,
-        thermoParcel
+        basicThermoParcel
     );
     makeWallInteractionModelType
     (
         StandardWallInteraction,
         KinematicCloud,
-        thermoParcel
+        basicThermoParcel
     );
 };
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.H
index f3e5d03a6c7..b85ef99ddc8 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.H
@@ -26,7 +26,6 @@ Class
     Foam::DispersionModel
 
 Description
-    Templated dispersion model class
 
 \*---------------------------------------------------------------------------*/
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H
index cac9552386e..1caab64203d 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H
@@ -26,10 +26,6 @@ Class
     Foam::DispersionRASModel
 
 Description
-    Templated dispersion RAS model
-
-SourceFiles
-    DispersionRASModel.C
 
 \*---------------------------------------------------------------------------*/
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H
index 59cd314e5e0..31bfdc4ad0b 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H
@@ -27,7 +27,7 @@ Class
 
 Description
     The velocity is perturbed in the direction of -grad(k), with a
-    Gaussian random number distribution with variance sigma,
+    Gaussian random number distribution with variance sigma.
     where sigma is defined below
 
 \*---------------------------------------------------------------------------*/
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C
index 58d62844073..9078a33cd77 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C
@@ -22,6 +22,8 @@ License
     along with OpenFOAM; if not, write to the Free Software Foundation,
     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 
+Description
+
 \*---------------------------------------------------------------------------*/
 
 #include "StochasticDispersionRAS.H"
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H
index 52deb49d578..f704a5daba6 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H
@@ -26,10 +26,9 @@ Class
     Foam::StochasticDispersionRAS
 
 Description
-    The velocity is perturbed in random direction.
- 
-    A Gaussian random number distribution is used with variance sigma,
-    where sigma is defined below
+    The velocity is perturbed in random direction, with a
+    Gaussian random number distribution with variance sigma.
+    where sigma is defined below 
 
 \*---------------------------------------------------------------------------*/
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DragModel/DragModel/DragModel.H b/src/lagrangian/intermediate/submodels/Kinematic/DragModel/DragModel/DragModel.H
index 28ab6d944cd..87ef3062408 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/DragModel/DragModel/DragModel.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/DragModel/DragModel/DragModel.H
@@ -25,6 +25,7 @@ License
 Class
     Foam::DragModel
 
+
 Description
     Templated drag model class
 
@@ -121,10 +122,7 @@ public:
         virtual bool active() const = 0;
 
         //- Return drag coefficient
-        virtual scalar Cd
-        (
-            const scalar Re
-        ) const = 0;
+        virtual scalar Cd(const scalar Re) const = 0;
 
         //- Return linearised coefficient for velocity equation
         //  Drag force per unit particle mass = Cu(U - Up)
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DragModel/NoDrag/NoDrag.H b/src/lagrangian/intermediate/submodels/Kinematic/DragModel/NoDrag/NoDrag.H
index f469bbbc465..ae8385a2045 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/DragModel/NoDrag/NoDrag.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/DragModel/NoDrag/NoDrag.H
@@ -74,10 +74,7 @@ public:
 
         bool active() const;
 
-        scalar Cd
-        (
-            const scalar
-        ) const;
+        scalar Cd(const scalar) const;
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DragModel/SphereDrag/SphereDrag.H b/src/lagrangian/intermediate/submodels/Kinematic/DragModel/SphereDrag/SphereDrag.H
index a82b5aa2dcd..935bd07c48b 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/DragModel/SphereDrag/SphereDrag.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/DragModel/SphereDrag/SphereDrag.H
@@ -74,10 +74,7 @@ public:
 
         bool active() const;
 
-        scalar Cd
-        (
-            const scalar Re
-        ) const;
+        scalar Cd(const scalar Re) const;
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H
index 9a657d1598e..2a7e8c4a0e5 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H
@@ -25,6 +25,7 @@ License
 Class
     Foam::InjectionModel
 
+
 Description
     Templated injection model class
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C
index 06373ab5cba..dc8541525b5 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C
@@ -46,7 +46,7 @@ Foam::ManualInjection<CloudType>::ManualInjection
         IOobject
         (
             positionsFile_,
-            owner.runTime().constant(),
+            owner.db().time().constant(),
             owner.mesh(),
             IOobject::MUST_READ,
             IOobject::NO_WRITE
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H
index 289a0b588ad..77059c85702 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H
@@ -27,12 +27,10 @@ Class
 
 Description
     Manual injection
-
-    For manual injection,
     - User specifies
-      -# Total mass to inject
-      -# Parcel positions in file \<positionsFile\>
-      -# Initial parcel velocity
+      - Total mass to inject
+      - Parcel positions in file <positionsFile>
+      - Initial parcel velocity
     - Parcel diameters obtained by PDF model
     - All parcels introduced at the start of the calculation
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/WallInteractionModel/WallInteractionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/WallInteractionModel/WallInteractionModel.H
index 7dcad47a24e..0c6c5a851ac 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/WallInteractionModel/WallInteractionModel.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/WallInteractionModel/WallInteractionModel.H
@@ -25,6 +25,7 @@ License
 Class
     Foam::WallInteractionModel
 
+
 Description
     Templated wall interaction model class
 
diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H
index 02155506384..470549c9164 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H
@@ -25,9 +25,9 @@ License
 Class
     Foam::CompositionModel
 
-Description
-    Templated reacting parcel composition model class.
 
+Description
+    Templated reacting parcel composition model class
     Consists of gases (via thermo package), liquids and solids
 
 SourceFiles
diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.H b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.H
index c8357bbff59..1269c983069 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.H
@@ -28,7 +28,6 @@ Class
 
 Description
     Templated parcel single mixture fraction class
-
     - Each phase sums to a mass fraction of 1
 
 SourceFiles
diff --git a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/MassTransferModel/MassTransferModel.H b/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/MassTransferModel/MassTransferModel.H
index 5f5b1bc72c0..cb5164782a1 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/MassTransferModel/MassTransferModel.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/MassTransferModel/MassTransferModel.H
@@ -25,6 +25,7 @@ License
 Class
     Foam::MassTransferModel
 
+
 Description
     Templated mass transfer model class
 
diff --git a/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H b/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H
index b4d1a8f9133..c6ab5c12253 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H
@@ -25,6 +25,7 @@ License
 Class
     Foam::SurfaceReactionModel
 
+
 Description
     Templated surface reaction model class
 
diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/HeatTransferModel.H b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/HeatTransferModel.H
index 6ea85606e12..e1ae0b7383c 100644
--- a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/HeatTransferModel.H
+++ b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/HeatTransferModel.H
@@ -25,6 +25,7 @@ License
 Class
     Foam::HeatTransferModel
 
+
 Description
     Templated heat transfer model class
 
@@ -39,7 +40,6 @@ SourceFiles
 
 #include "IOdictionary.H"
 #include "autoPtr.H"
-//#include "KinematicCloud.H"
 #include "runTimeSelectionTables.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/lagrangian/intermediate/submodels/addOns/radiation/absorptionEmission/cloudAbsorptionEmission/cloudAbsorptionEmission.C b/src/lagrangian/intermediate/submodels/addOns/radiation/absorptionEmission/cloudAbsorptionEmission/cloudAbsorptionEmission.C
index 9b7b16a6e26..a87332daaff 100644
--- a/src/lagrangian/intermediate/submodels/addOns/radiation/absorptionEmission/cloudAbsorptionEmission/cloudAbsorptionEmission.C
+++ b/src/lagrangian/intermediate/submodels/addOns/radiation/absorptionEmission/cloudAbsorptionEmission/cloudAbsorptionEmission.C
@@ -72,7 +72,7 @@ Foam::radiation::cloudAbsorptionEmission::~cloudAbsorptionEmission()
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 Foam::tmp<Foam::volScalarField>
-Foam::radiation::cloudAbsorptionEmission::a() const
+Foam::radiation::cloudAbsorptionEmission::aDisp() const
 {
     tmp<volScalarField> ta
     (
@@ -107,7 +107,7 @@ Foam::radiation::cloudAbsorptionEmission::a() const
 
 
 Foam::tmp<Foam::volScalarField>
-Foam::radiation::cloudAbsorptionEmission::e() const
+Foam::radiation::cloudAbsorptionEmission::eDisp() const
 {
     tmp<volScalarField> te
     (
@@ -132,7 +132,7 @@ Foam::radiation::cloudAbsorptionEmission::e() const
 
 
 Foam::tmp<Foam::volScalarField>
-Foam::radiation::cloudAbsorptionEmission::E() const
+Foam::radiation::cloudAbsorptionEmission::EDisp() const
 {
     tmp<volScalarField> tE
     (
diff --git a/src/lagrangian/intermediate/submodels/addOns/radiation/absorptionEmission/cloudAbsorptionEmission/cloudAbsorptionEmission.H b/src/lagrangian/intermediate/submodels/addOns/radiation/absorptionEmission/cloudAbsorptionEmission/cloudAbsorptionEmission.H
index 1956dfaa112..0f4c9e5a532 100644
--- a/src/lagrangian/intermediate/submodels/addOns/radiation/absorptionEmission/cloudAbsorptionEmission/cloudAbsorptionEmission.H
+++ b/src/lagrangian/intermediate/submodels/addOns/radiation/absorptionEmission/cloudAbsorptionEmission/cloudAbsorptionEmission.H
@@ -23,7 +23,7 @@ License
     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 
 Class
-    Foam::radiation::cloudAbsorptionEmission
+    Foam::cloudAbsorptionEmission
 
 Description
     Retrieves absorption/emission data from a cloud object
@@ -86,18 +86,24 @@ public:
 
     // Member Operators
 
-        // Edit
-
         // Access
 
-            //- Return absorption coefficient
-            tmp<volScalarField> a() const;
+            // Absorption coefficient
+
+                //- Absorption coefficient for dispersed phase
+                tmp<volScalarField> aDisp() const;
+
+
+            // Emission coefficient
+
+                //- Emission coefficient for dispersed phase
+                tmp<volScalarField> eDisp() const;
+
 
-            //- Return emission coefficient
-            tmp<volScalarField> e() const;
+            // Emission contribution
 
-            //- Return emission contribution
-            tmp<volScalarField> E() const;
+                //- Return emission contribution for dispersed phase
+                tmp<volScalarField> EDisp() const;
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/addOns/radiation/scatter/cloudScatter/cloudScatter.H b/src/lagrangian/intermediate/submodels/addOns/radiation/scatter/cloudScatter/cloudScatter.H
index 26185f63621..579a3faaf21 100644
--- a/src/lagrangian/intermediate/submodels/addOns/radiation/scatter/cloudScatter/cloudScatter.H
+++ b/src/lagrangian/intermediate/submodels/addOns/radiation/scatter/cloudScatter/cloudScatter.H
@@ -23,7 +23,7 @@ License
     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 
 Class
-    Foam::radiation::cloudScatter
+    Foam::scatterModel
 
 Description
     Cloud radiation scatter model
diff --git a/src/thermophysicalModels/radiation/Make/files b/src/thermophysicalModels/radiation/Make/files
index f2fcb57d032..9b385e8a567 100755
--- a/src/thermophysicalModels/radiation/Make/files
+++ b/src/thermophysicalModels/radiation/Make/files
@@ -24,8 +24,8 @@ submodels/absorptionEmissionModel/binaryAbsorptionEmission/binaryAbsorptionEmiss
 
 
 /* Boundary conditions */
-boundaryConditions/MarshakRadiation/MarshakRadiationMixedFvPatchScalarField.C
-boundaryConditions/MarshakRadiationFixedT/MarshakRadiationFixedTMixedFvPatchScalarField.C
+derivedFvPatchFields/MarshakRadiation/MarshakRadiationMixedFvPatchScalarField.C
+derivedFvPatchFields/MarshakRadiationFixedT/MarshakRadiationFixedTMixedFvPatchScalarField.C
 
 
 LIB = $(FOAM_LIBBIN)/libradiation
diff --git a/src/thermophysicalModels/radiation/boundaryConditions/MarshakRadiation/MarshakRadiationMixedFvPatchScalarField.C b/src/thermophysicalModels/radiation/derivedFvPatchFields/MarshakRadiation/MarshakRadiationMixedFvPatchScalarField.C
similarity index 100%
rename from src/thermophysicalModels/radiation/boundaryConditions/MarshakRadiation/MarshakRadiationMixedFvPatchScalarField.C
rename to src/thermophysicalModels/radiation/derivedFvPatchFields/MarshakRadiation/MarshakRadiationMixedFvPatchScalarField.C
diff --git a/src/thermophysicalModels/radiation/boundaryConditions/MarshakRadiation/MarshakRadiationMixedFvPatchScalarField.H b/src/thermophysicalModels/radiation/derivedFvPatchFields/MarshakRadiation/MarshakRadiationMixedFvPatchScalarField.H
similarity index 100%
rename from src/thermophysicalModels/radiation/boundaryConditions/MarshakRadiation/MarshakRadiationMixedFvPatchScalarField.H
rename to src/thermophysicalModels/radiation/derivedFvPatchFields/MarshakRadiation/MarshakRadiationMixedFvPatchScalarField.H
diff --git a/src/thermophysicalModels/radiation/boundaryConditions/MarshakRadiationFixedT/MarshakRadiationFixedTMixedFvPatchScalarField.C b/src/thermophysicalModels/radiation/derivedFvPatchFields/MarshakRadiationFixedT/MarshakRadiationFixedTMixedFvPatchScalarField.C
similarity index 100%
rename from src/thermophysicalModels/radiation/boundaryConditions/MarshakRadiationFixedT/MarshakRadiationFixedTMixedFvPatchScalarField.C
rename to src/thermophysicalModels/radiation/derivedFvPatchFields/MarshakRadiationFixedT/MarshakRadiationFixedTMixedFvPatchScalarField.C
diff --git a/src/thermophysicalModels/radiation/boundaryConditions/MarshakRadiationFixedT/MarshakRadiationFixedTMixedFvPatchScalarField.H b/src/thermophysicalModels/radiation/derivedFvPatchFields/MarshakRadiationFixedT/MarshakRadiationFixedTMixedFvPatchScalarField.H
similarity index 100%
rename from src/thermophysicalModels/radiation/boundaryConditions/MarshakRadiationFixedT/MarshakRadiationFixedTMixedFvPatchScalarField.H
rename to src/thermophysicalModels/radiation/derivedFvPatchFields/MarshakRadiationFixedT/MarshakRadiationFixedTMixedFvPatchScalarField.H
diff --git a/src/thermophysicalModels/radiation/radiationModel/P1/P1.C b/src/thermophysicalModels/radiation/radiationModel/P1/P1.C
index f4f2d4c07fa..f453f41cd0b 100644
--- a/src/thermophysicalModels/radiation/radiationModel/P1/P1.C
+++ b/src/thermophysicalModels/radiation/radiationModel/P1/P1.C
@@ -53,13 +53,9 @@ namespace Foam
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
 // Construct from components
-Foam::radiation::P1::P1
-(
-    const fvMesh& mesh,
-    const basicThermo& thermo
-)
+Foam::radiation::P1::P1(const volScalarField& T)
 :
-    radiationModel(typeName, mesh, thermo),
+    radiationModel(typeName, T),
     G_
     (
         IOobject
@@ -143,12 +139,10 @@ void Foam::radiation::P1::correct()
     {
         return;
     }
-
     a_ = absorptionEmission_->a();
     e_ = absorptionEmission_->e();
     E_ = absorptionEmission_->E();
     const volScalarField sigmaEff = scatter_->sigmaEff();
-    const volScalarField& T = thermo_.T();
 
     // Construct diffusion
     const volScalarField gamma
@@ -170,7 +164,7 @@ void Foam::radiation::P1::correct()
         fvm::laplacian(gamma, G_)
       - fvm::Sp(a_, G_)
      ==
-      - 4.0*(e_*radiation::sigmaSB*pow4(T) + mathematicalConstant::pi*E_)
+      - 4.0*(e_*radiation::sigmaSB*pow4(T_) + E_)
     );
 }
 
@@ -187,17 +181,26 @@ Foam::tmp<Foam::volScalarField> Foam::radiation::P1::Rp() const
                 mesh_.time().timeName(),
                 mesh_,
                 IOobject::NO_READ,
-                IOobject::NO_WRITE
+                IOobject::NO_WRITE,
+                false
             ),
-            4.0*e_*radiation::sigmaSB
+            4.0*absorptionEmission_->eCont()*radiation::sigmaSB
         )
     );
 }
 
 
-Foam::tmp<Foam::volScalarField> Foam::radiation::P1::Ru() const
+Foam::tmp<Foam::DimensionedField<Foam::scalar, Foam::volMesh> >
+Foam::radiation::P1::Ru() const
 {
-    return a_*G_ - 4.0*mathematicalConstant::pi*E_;
+    const DimensionedField<scalar, volMesh>& G =
+        G_.dimensionedInternalField();
+    const DimensionedField<scalar, volMesh> E =
+        absorptionEmission_->ECont()().dimensionedInternalField();
+    const DimensionedField<scalar, volMesh> a =
+        absorptionEmission_->aCont()().dimensionedInternalField();
+
+    return  a*G - 4.0*E;
 }
 
 
diff --git a/src/thermophysicalModels/radiation/radiationModel/P1/P1.H b/src/thermophysicalModels/radiation/radiationModel/P1/P1.H
index e7a981aeffb..dc12624304e 100644
--- a/src/thermophysicalModels/radiation/radiationModel/P1/P1.H
+++ b/src/thermophysicalModels/radiation/radiationModel/P1/P1.H
@@ -93,7 +93,7 @@ public:
     // Constructors
 
         //- Construct from components
-        P1(const fvMesh& mesh, const basicThermo& thermo);
+        P1(const volScalarField& T);
 
 
     // Destructor
@@ -118,7 +118,7 @@ public:
             virtual tmp<volScalarField> Rp() const;
 
             //- Source term component (constant)
-            virtual tmp<volScalarField> Ru() const;
+            virtual tmp<DimensionedField<scalar, volMesh> > Ru() const;
 };
 
 
diff --git a/src/thermophysicalModels/radiation/radiationModel/noRadiation/noRadiation.C b/src/thermophysicalModels/radiation/radiationModel/noRadiation/noRadiation.C
index e21063e64da..e7602376d9c 100644
--- a/src/thermophysicalModels/radiation/radiationModel/noRadiation/noRadiation.C
+++ b/src/thermophysicalModels/radiation/radiationModel/noRadiation/noRadiation.C
@@ -51,13 +51,9 @@ namespace Foam
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
 // Construct from components
-Foam::radiation::noRadiation::noRadiation
-(
-    const fvMesh& mesh,
-    const basicThermo& thermo
-)
+Foam::radiation::noRadiation::noRadiation(const volScalarField& T)
 :
-    radiationModel(typeName, mesh, thermo)
+    radiationModel(typeName, T)
 {}
 
 
@@ -99,8 +95,7 @@ Foam::tmp<Foam::volScalarField> Foam::radiation::noRadiation::Rp() const
             dimensionedScalar
             (
                 "Rp",
-                radiation::sigmaSB.dimensions()/dimLength
-                   *pow3(dimTemperature),
+                radiation::sigmaSB.dimensions()/dimLength,
                 0.0
             )
         )
@@ -108,11 +103,12 @@ Foam::tmp<Foam::volScalarField> Foam::radiation::noRadiation::Rp() const
 }
 
 
-Foam::tmp<Foam::volScalarField> Foam::radiation::noRadiation::Ru() const
+Foam::tmp<Foam::DimensionedField<Foam::scalar, Foam::volMesh> >
+Foam::radiation::noRadiation::Ru() const
 {
-    return tmp<volScalarField>
+    return tmp<DimensionedField<scalar, volMesh> >
     (
-        new volScalarField
+        new DimensionedField<scalar, volMesh>
         (
             IOobject
             (
diff --git a/src/thermophysicalModels/radiation/radiationModel/noRadiation/noRadiation.H b/src/thermophysicalModels/radiation/radiationModel/noRadiation/noRadiation.H
index 19a9eaff77c..c11138f99fb 100644
--- a/src/thermophysicalModels/radiation/radiationModel/noRadiation/noRadiation.H
+++ b/src/thermophysicalModels/radiation/radiationModel/noRadiation/noRadiation.H
@@ -73,7 +73,7 @@ public:
     // Constructors
 
         //- Construct from components
-        noRadiation(const fvMesh& mesh, const basicThermo& thermo);
+        noRadiation(const volScalarField& T);
 
 
     // Destructor
@@ -95,7 +95,7 @@ public:
             tmp<volScalarField> Rp() const;
 
             //- Source term component (constant)
-            tmp<volScalarField> Ru() const;
+            tmp<DimensionedField<scalar, volMesh> > Ru() const;
 };
 
 
diff --git a/src/thermophysicalModels/radiation/radiationModel/radiationModel/newRadiationModel.C b/src/thermophysicalModels/radiation/radiationModel/radiationModel/newRadiationModel.C
index aa4afc803c2..5ec693d9cc4 100644
--- a/src/thermophysicalModels/radiation/radiationModel/radiationModel/newRadiationModel.C
+++ b/src/thermophysicalModels/radiation/radiationModel/radiationModel/newRadiationModel.C
@@ -38,8 +38,7 @@ namespace radiation
 
 autoPtr<radiationModel> radiationModel::New
 (
-    const fvMesh& mesh,
-    const basicThermo& thermo
+    const volScalarField& T
 )
 {
     word radiationModelTypeName;
@@ -53,8 +52,8 @@ autoPtr<radiationModel> radiationModel::New
             IOobject
             (
                 "radiationProperties",
-                mesh.time().constant(),
-                mesh.db(),
+                T.mesh().time().constant(),
+                T.mesh().db(),
                 IOobject::MUST_READ,
                 IOobject::NO_WRITE
             )
@@ -73,7 +72,7 @@ autoPtr<radiationModel> radiationModel::New
     {
         FatalErrorIn
         (
-            "radiationModel::New(const fvMesh&, const basicThermo&)"
+            "radiationModel::New(const volScalarField&)"
         )   << "Unknown radiationModel type " << radiationModelTypeName
             << nl << nl
             << "Valid radiationModel types are :" << nl
@@ -81,7 +80,7 @@ autoPtr<radiationModel> radiationModel::New
             << exit(FatalError);
     }
 
-    return autoPtr<radiationModel>(cstrIter()(mesh, thermo));
+    return autoPtr<radiationModel>(cstrIter()(T));
 }
 
 
diff --git a/src/thermophysicalModels/radiation/radiationModel/radiationModel/radiationModel.C b/src/thermophysicalModels/radiation/radiationModel/radiationModel/radiationModel.C
index 95aac903e8c..1f5691a8cc2 100644
--- a/src/thermophysicalModels/radiation/radiationModel/radiationModel/radiationModel.C
+++ b/src/thermophysicalModels/radiation/radiationModel/radiationModel/radiationModel.C
@@ -46,8 +46,7 @@ namespace Foam
 Foam::radiation::radiationModel::radiationModel
 (
     const word& type,
-    const fvMesh& mesh,
-    const basicThermo& thermo
+    const volScalarField& T
 )
 :
     IOdictionary
@@ -55,18 +54,18 @@ Foam::radiation::radiationModel::radiationModel
         IOobject
         (
             "radiationProperties",
-            mesh.time().constant(),
-            mesh.db(),
+            T.mesh().time().constant(),
+            T.mesh().db(),
             IOobject::MUST_READ,
             IOobject::NO_WRITE
         )
     ),
-    thermo_(thermo),
-    mesh_(mesh),
+    T_(T),
+    mesh_(T.mesh()),
     radiation_(lookup("radiation")),
     radiationModelCoeffs_(subDict(type + "Coeffs")),
     absorptionEmission_(absorptionEmissionModel::New(*this, mesh_)),
-    scatter_(scatterModel::New(*this, mesh))
+    scatter_(scatterModel::New(*this, mesh_))
 {}
 
 
@@ -96,18 +95,18 @@ bool Foam::radiation::radiationModel::read()
 
 Foam::tmp<Foam::fvScalarMatrix> Foam::radiation::radiationModel::Sh
 (
-    volScalarField& h
+    basicThermo& thermo
 ) const
 {
-    const volScalarField cp = thermo_.Cp();
-    const volScalarField& T = thermo_.T();
-    const volScalarField T3 = pow3(T);
+    volScalarField& h = thermo.h();
+    const volScalarField cp = thermo.Cp();
+    const volScalarField T3 = pow3(T_);
 
     return
     (
         Ru()
-      - fvm::Sp(Rp()*T3/cp, h)
-      - Rp()*T3*(T - h/cp)
+      - fvm::Sp(4.0*Rp()*T3/cp, h)
+      - Rp()*T3*(T_ - 4.0*h/cp)
     );
 }
 
diff --git a/src/thermophysicalModels/radiation/radiationModel/radiationModel/radiationModel.H b/src/thermophysicalModels/radiation/radiationModel/radiationModel/radiationModel.H
index a4aa0480a3e..703fafca794 100644
--- a/src/thermophysicalModels/radiation/radiationModel/radiationModel/radiationModel.H
+++ b/src/thermophysicalModels/radiation/radiationModel/radiationModel/radiationModel.H
@@ -73,8 +73,8 @@ protected:
 
     // Protected data
 
-        //- Reference to the thermo package
-        const basicThermo& thermo_;
+        //- Reference to the temperature field
+        const volScalarField& T_;
 
         //- Reference to the mesh
         const fvMesh& mesh_;
@@ -120,10 +120,9 @@ public:
              radiationModel,
              dictionary,
              (
-                 const fvMesh& mesh,
-                 const basicThermo& thermo
+                 const volScalarField& T
              ),
-             (mesh, thermo)
+             (T)
          );
 
 
@@ -133,8 +132,7 @@ public:
         radiationModel
         (
             const word& type,
-            const fvMesh& mesh,
-            const basicThermo& thermo
+            const volScalarField& T
         );
 
 
@@ -143,8 +141,7 @@ public:
          //- Return a reference to the selected radiation model
          static autoPtr<radiationModel> New
          (
-             const fvMesh& mesh,
-             const basicThermo& thermo
+             const volScalarField& T
          );
 
 
@@ -170,12 +167,12 @@ public:
             virtual tmp<volScalarField> Rp() const = 0;
 
             //- Source term component (constant)
-            virtual tmp<volScalarField> Ru() const = 0;
+            virtual tmp<DimensionedField<scalar, volMesh> > Ru() const = 0;
 
-            //- Source term
+            //- Enthalpy source term
             virtual tmp<fvScalarMatrix> Sh
             (
-                volScalarField& h
+                basicThermo& thermo
             ) const;
 };
 
diff --git a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/absorptionEmissionModel/absorptionEmissionModel.C b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/absorptionEmissionModel/absorptionEmissionModel.C
index 4402c2f1b3d..046da0bad6b 100644
--- a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/absorptionEmissionModel/absorptionEmissionModel.C
+++ b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/absorptionEmissionModel/absorptionEmissionModel.C
@@ -56,4 +56,165 @@ Foam::radiation::absorptionEmissionModel::~absorptionEmissionModel()
 {}
 
 
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+Foam::tmp<Foam::volScalarField>
+Foam::radiation::absorptionEmissionModel::a() const
+{
+    return aDisp() + aCont();
+}
+
+
+Foam::tmp<Foam::volScalarField>
+Foam::radiation::absorptionEmissionModel::aCont() const
+{
+    return tmp<volScalarField>
+    (
+        new volScalarField
+        (
+            IOobject
+            (
+                "aCont",
+                mesh_.time().timeName(),
+                mesh_,
+                IOobject::NO_READ,
+                IOobject::NO_WRITE,
+                false
+            ),
+            mesh_,
+            dimensionedScalar("zero", dimless/dimLength, 0.0)
+        )
+    );
+}
+
+
+Foam::tmp<Foam::volScalarField>
+Foam::radiation::absorptionEmissionModel::aDisp() const
+{
+    return tmp<volScalarField>
+    (
+        new volScalarField
+        (
+            IOobject
+            (
+                "aDisp",
+                mesh_.time().timeName(),
+                mesh_,
+                IOobject::NO_READ,
+                IOobject::NO_WRITE,
+                false
+            ),
+            mesh_,
+            dimensionedScalar("zero", dimless/dimLength, 0.0)
+        )
+    );
+}
+
+
+Foam::tmp<Foam::volScalarField>
+Foam::radiation::absorptionEmissionModel::e() const
+{
+    return eDisp() + eCont();
+}
+
+
+Foam::tmp<Foam::volScalarField>
+Foam::radiation::absorptionEmissionModel::eCont() const
+{
+    return tmp<volScalarField>
+    (
+        new volScalarField
+        (
+            IOobject
+            (
+                "eCont",
+                mesh_.time().timeName(),
+                mesh_,
+                IOobject::NO_READ,
+                IOobject::NO_WRITE,
+                false
+            ),
+            mesh_,
+            dimensionedScalar("zero", dimless/dimLength, 0.0)
+        )
+    );
+}
+
+
+Foam::tmp<Foam::volScalarField>
+Foam::radiation::absorptionEmissionModel::eDisp() const
+{
+    return tmp<volScalarField>
+    (
+        new volScalarField
+        (
+            IOobject
+            (
+                "eDisp",
+                mesh_.time().timeName(),
+                mesh_,
+                IOobject::NO_READ,
+                IOobject::NO_WRITE,
+                false
+            ),
+            mesh_,
+            dimensionedScalar("zero", dimless/dimLength, 0.0)
+        )
+    );
+}
+
+
+Foam::tmp<Foam::volScalarField>
+Foam::radiation::absorptionEmissionModel::E() const
+{
+    return EDisp() + ECont();
+}
+
+
+Foam::tmp<Foam::volScalarField>
+Foam::radiation::absorptionEmissionModel::ECont() const
+{
+    return tmp<volScalarField>
+    (
+        new volScalarField
+        (
+            IOobject
+            (
+                "ECont",
+                mesh_.time().timeName(),
+                mesh_,
+                IOobject::NO_READ,
+                IOobject::NO_WRITE,
+                false
+            ),
+            mesh_,
+            dimensionedScalar("zero", dimMass/dimLength/pow3(dimTime), 0.0)
+        )
+    );
+}
+
+
+Foam::tmp<Foam::volScalarField>
+Foam::radiation::absorptionEmissionModel::EDisp() const
+{
+    return tmp<volScalarField>
+    (
+        new volScalarField
+        (
+            IOobject
+            (
+                "EDisp",
+                mesh_.time().timeName(),
+                mesh_,
+                IOobject::NO_READ,
+                IOobject::NO_WRITE,
+                false
+            ),
+            mesh_,
+            dimensionedScalar("zero", dimMass/dimLength/pow3(dimTime), 0.0)
+        )
+    );
+}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/absorptionEmissionModel/absorptionEmissionModel.H b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/absorptionEmissionModel/absorptionEmissionModel.H
index c56153c5a67..6b50ac26e8f 100644
--- a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/absorptionEmissionModel/absorptionEmissionModel.H
+++ b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/absorptionEmissionModel/absorptionEmissionModel.H
@@ -69,7 +69,7 @@ public:
     //- Runtime type information
     TypeName("absorptionEmissionModel");
 
-    // Declare runtime constructor selection table
+    //- Declare runtime constructor selection table
 
         declareRunTimeSelectionTable
         (
@@ -94,7 +94,7 @@ public:
         );
 
 
-    // Selector
+    //- Selector
 
         static autoPtr<absorptionEmissionModel> New
         (
@@ -103,7 +103,7 @@ public:
         );
 
 
-    // Destructor
+    //- Destructor
 
         virtual ~absorptionEmissionModel();
 
@@ -112,14 +112,40 @@ public:
 
         // Access
 
-            //- Return absorption coefficient
-            virtual tmp<volScalarField> a() const = 0;
+            // Absorption coefficient
 
-            //- Return emission coefficient
-            virtual tmp<volScalarField> e() const = 0;
+                //- Absorption coefficient (net)
+                virtual tmp<volScalarField> a() const;
 
-            //- Return emission contribution
-            virtual tmp<volScalarField> E() const = 0;
+                //- Absorption coefficient for continuous phase
+                virtual tmp<volScalarField> aCont() const;
+
+                //- Absorption coefficient for dispersed phase
+                virtual tmp<volScalarField> aDisp() const;
+
+
+            // Emission coefficient
+
+                //- Emission coefficient (net)
+                virtual tmp<volScalarField> e() const;
+
+                //- Return emission coefficient for continuous phase
+                virtual tmp<volScalarField> eCont() const;
+
+                //- Return emission coefficient for dispersed phase
+                virtual tmp<volScalarField> eDisp() const;
+
+
+            // Emission contribution
+
+                //- Emission contribution (net)
+                virtual tmp<volScalarField> E() const;
+
+                //- Emission contribution for continuous phase
+                virtual tmp<volScalarField> ECont() const;
+
+                //- Emission contribution for dispersed phase
+                virtual tmp<volScalarField> EDisp() const;
 };
 
 
diff --git a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/binaryAbsorptionEmission/binaryAbsorptionEmission.C b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/binaryAbsorptionEmission/binaryAbsorptionEmission.C
index a8f3004d3c6..15dc20d40cd 100644
--- a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/binaryAbsorptionEmission/binaryAbsorptionEmission.C
+++ b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/binaryAbsorptionEmission/binaryAbsorptionEmission.C
@@ -74,21 +74,45 @@ Foam::radiation::binaryAbsorptionEmission::~binaryAbsorptionEmission()
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-Foam::tmp<Foam::volScalarField> Foam::radiation::binaryAbsorptionEmission::a() const
+Foam::tmp<Foam::volScalarField>
+Foam::radiation::binaryAbsorptionEmission::aCont() const
 {
-    return model1_->a() + model2_->a();
+    return model1_->aCont() + model2_->aCont();
 }
 
 
-Foam::tmp<Foam::volScalarField> Foam::radiation::binaryAbsorptionEmission::e() const
+Foam::tmp<Foam::volScalarField>
+Foam::radiation::binaryAbsorptionEmission::aDisp() const
 {
-    return model1_->e() + model2_->e();
+    return model1_->aDisp() + model2_->aDisp();
 }
 
 
-Foam::tmp<Foam::volScalarField> Foam::radiation::binaryAbsorptionEmission::E() const
+Foam::tmp<Foam::volScalarField>
+Foam::radiation::binaryAbsorptionEmission::eCont() const
 {
-    return model1_->E() + model2_->E();
+    return model1_->eCont() + model2_->eCont();
+}
+
+
+Foam::tmp<Foam::volScalarField>
+Foam::radiation::binaryAbsorptionEmission::eDisp() const
+{
+    return model1_->eDisp() + model2_->eDisp();
+}
+
+
+Foam::tmp<Foam::volScalarField>
+Foam::radiation::binaryAbsorptionEmission::ECont() const
+{
+    return model1_->ECont() + model2_->ECont();
+}
+
+
+Foam::tmp<Foam::volScalarField>
+Foam::radiation::binaryAbsorptionEmission::EDisp() const
+{
+    return model1_->EDisp() + model2_->EDisp();
 }
 
 
diff --git a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/binaryAbsorptionEmission/binaryAbsorptionEmission.H b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/binaryAbsorptionEmission/binaryAbsorptionEmission.H
index 473340af35e..46c040b79be 100644
--- a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/binaryAbsorptionEmission/binaryAbsorptionEmission.H
+++ b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/binaryAbsorptionEmission/binaryAbsorptionEmission.H
@@ -89,18 +89,33 @@ public:
 
     // Member Operators
 
-        // Edit
-
         // Access
 
-            //- Return absorption coefficient
-            tmp<volScalarField> a() const;
+            // Absorption coefficient
+
+                //- Absorption coefficient for continuous phase
+                tmp<volScalarField> aCont() const;
+
+                //- Absorption coefficient for dispersed phase
+                tmp<volScalarField> aDisp() const;
+
+
+            // Emission coefficient
+
+                //- Emission coefficient for continuous phase
+                tmp<volScalarField> eCont() const;
+
+                //- Emission coefficient for dispersed phase
+                tmp<volScalarField> eDisp() const;
+
+
+            // Emission contribution
 
-            //- Return emission coefficient
-            tmp<volScalarField> e() const;
+                //- Emission contribution for continuous phase
+                tmp<volScalarField> ECont() const;
 
-            //- Return emission contribution
-            tmp<volScalarField> E() const;
+                //- Emission contribution for continuous phase
+                tmp<volScalarField> EDisp() const;
 };
 
 
diff --git a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/constantAbsorptionEmission/constantAbsorptionEmission.C b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/constantAbsorptionEmission/constantAbsorptionEmission.C
index 9661c990597..bd2e27ea5b2 100644
--- a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/constantAbsorptionEmission/constantAbsorptionEmission.C
+++ b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/constantAbsorptionEmission/constantAbsorptionEmission.C
@@ -70,7 +70,7 @@ Foam::radiation::constantAbsorptionEmission::~constantAbsorptionEmission()
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 Foam::tmp<Foam::volScalarField>
-Foam::radiation::constantAbsorptionEmission::a() const
+Foam::radiation::constantAbsorptionEmission::aCont() const
 {
     tmp<volScalarField> ta
     (
@@ -95,7 +95,7 @@ Foam::radiation::constantAbsorptionEmission::a() const
 
 
 Foam::tmp<Foam::volScalarField>
-Foam::radiation::constantAbsorptionEmission::e() const
+Foam::radiation::constantAbsorptionEmission::eCont() const
 {
     tmp<volScalarField> te
     (
@@ -119,7 +119,8 @@ Foam::radiation::constantAbsorptionEmission::e() const
 }
 
 
-Foam::tmp<Foam::volScalarField> Foam::radiation::constantAbsorptionEmission::E() const
+Foam::tmp<Foam::volScalarField>
+Foam::radiation::constantAbsorptionEmission::ECont() const
 {
     tmp<volScalarField> tE
     (
diff --git a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/constantAbsorptionEmission/constantAbsorptionEmission.H b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/constantAbsorptionEmission/constantAbsorptionEmission.H
index 921011b086d..96a08cef242 100644
--- a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/constantAbsorptionEmission/constantAbsorptionEmission.H
+++ b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/constantAbsorptionEmission/constantAbsorptionEmission.H
@@ -26,7 +26,8 @@ Class
     Foam::radiation::constantAbsorptionEmission
 
 Description
-    Constant radiation absorption and emission coefficients
+    Constant radiation absorption and emission coefficients for continuous
+    phase
 
 SourceFiles
     constantAbsorptionEmission.C
@@ -92,18 +93,24 @@ public:
 
     // Member Operators
 
-        // Edit
-
         // Access
 
-            //- Return absorption coefficient
-            tmp<volScalarField> a() const;
+            // Absorption coefficient
+
+                //- Absorption coefficient for continuous phase
+                tmp<volScalarField> aCont() const;
+
+
+            // Emission coefficient
+
+                //- Emission coefficient for continuous phase
+                tmp<volScalarField> eCont() const;
+
 
-            //- Return emission coefficient
-            tmp<volScalarField> e() const;
+            // Emission contribution
 
-            //- Return emission contribution
-            tmp<volScalarField> E() const;
+                //- Emission contribution for continuous phase
+                tmp<volScalarField> ECont() const;
 };
 
 
diff --git a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/noAbsorptionEmission/noAbsorptionEmission.C b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/noAbsorptionEmission/noAbsorptionEmission.C
index fd4dd62269e..8dc2196a934 100644
--- a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/noAbsorptionEmission/noAbsorptionEmission.C
+++ b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/noAbsorptionEmission/noAbsorptionEmission.C
@@ -63,75 +63,4 @@ Foam::radiation::noAbsorptionEmission::~noAbsorptionEmission()
 {}
 
 
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-Foam::tmp<Foam::volScalarField>
-Foam::radiation::noAbsorptionEmission::a() const
-{
-    return tmp<volScalarField>
-    (
-        new volScalarField
-        (
-            IOobject
-            (
-                "a",
-                mesh_.time().timeName(),
-                mesh_,
-                IOobject::NO_READ,
-                IOobject::NO_WRITE,
-                false
-            ),
-            mesh_,
-            dimensionedScalar("a", dimless/dimLength, 0.0)
-        )
-    );
-}
-
-
-Foam::tmp<Foam::volScalarField>
-Foam::radiation::noAbsorptionEmission::e() const
-{
-    return tmp<volScalarField>
-    (
-        new volScalarField
-        (
-            IOobject
-            (
-                "e",
-                mesh_.time().timeName(),
-                mesh_,
-                IOobject::NO_READ,
-                IOobject::NO_WRITE,
-                false
-            ),
-            mesh_,
-            dimensionedScalar("e", dimless/dimLength, 0.0)
-        )
-    );
-}
-
-
-Foam::tmp<Foam::volScalarField>
-Foam::radiation::noAbsorptionEmission::E() const
-{
-    return tmp<volScalarField>
-    (
-        new volScalarField
-        (
-            IOobject
-            (
-                "E",
-                mesh_.time().timeName(),
-                mesh_,
-                IOobject::NO_READ,
-                IOobject::NO_WRITE,
-                false
-            ),
-            mesh_,
-            dimensionedScalar("E", dimMass/dimLength/pow3(dimTime), 0.0)
-        )
-    );
-}
-
-
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/noAbsorptionEmission/noAbsorptionEmission.H b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/noAbsorptionEmission/noAbsorptionEmission.H
index e21f397d0fe..2db4ba22356 100644
--- a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/noAbsorptionEmission/noAbsorptionEmission.H
+++ b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/noAbsorptionEmission/noAbsorptionEmission.H
@@ -54,12 +54,6 @@ class noAbsorptionEmission
     public absorptionEmissionModel
 {
 
-    // Private data
-
-        //- Coefficients dictionary
-        dictionary coeffsDict_;
-
-
 public:
 
     //- Runtime type information
@@ -79,22 +73,6 @@ public:
     // Destructor
 
         ~noAbsorptionEmission();
-
-
-    // Member Operators
-
-        // Edit
-
-        // Access
-
-            //- Return absorption coefficient
-            tmp<volScalarField> a() const;
-
-            //- Return emission coefficient
-            tmp<volScalarField> e() const;
-
-            //- Return emission contribution
-            tmp<volScalarField> E() const;
 };
 
 
-- 
GitLab