diff --git a/src/lagrangian/Allwmake b/src/lagrangian/Allwmake
index 4dae508c2f551d8c07aa91544be68be476a2057b..b3ab63389938afb14bcc05d8a21779a09c1033cb 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 84f47162034f56c9ffe5c5ab446700b14229fb9a..fffa0506f8223c8495d5b219f81c962e94b4b021 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 f5e70593f376a7f585df167f2a381ef9fb548178..c26c592fe0b03a8f298a747b1bee44deb5a5ee2b 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 a6e03579aaee9a258798e9bc86a50166c0c0e412..ef67531fca9ec214cd5a5a7043ebf8fe2d1ed388 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 89d94169d1392ff339ad4be5146e1b91f7123925..09cda64c362455d44f7542117fcb151c3b8bc79b 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 68266a631b74fda90c29ccd9e65d03950c3ccaba..98ca9669d1ce3351434082d6fcef337c1c9f049c 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 40556a204ccf141d51498f7c17115564b0bfa7d6..2dc821710f084ddec63f58fb575bcbea92ccd2a3 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 e26789541238dbe0a449396b633ba9b9da4eb317..4ffc8c53f1f0b7b6d3139f2be4b25d66c3b5366e 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 742f0462e4c436e285aa1dc872cdc1d5fb6dcad8..259d77ebbe6434e315d3fd4337696882f1c67ac3 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 6b86a4f8dee29c499e4add39e43c590fbba8af98..c51fc30b19ab16b13270080b361532f143add9ac 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 217a31fc7e9b2508932bc15fc0484c0eef713f3b..de11b91c3d361449ba1602337f151910b4fa3bf9 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 27b8eef40bb114afd969b637b53ce13727ff4d66..f5f76036c22b33b173861c768cd1f31bbdc8c60b 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 2f3c8b655744b475cbd0783ccee4cac4d2d593d6..4263d80f04b2741f98fa24db0a3313f399d3cd6a 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 ae16c885e874e28ce9d9245e75224ed7d4e16fd2..c91ac209c28f582387cd026433d46eb58dfec60a 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 0000000000000000000000000000000000000000..4150f8b78ebb7165906af6ab41a95188d595e10f
--- /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 0000000000000000000000000000000000000000..4ae39f226efeeef16331ff2b23ac0e4dd96f31f7
--- /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 0000000000000000000000000000000000000000..34f3b216ee3dbced3f4c5f99ff98bcab9d386aaf
--- /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 0000000000000000000000000000000000000000..7073c9de6cf5e0a299979850a3c9005ac4f8f734
--- /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 0000000000000000000000000000000000000000..99fb7c1a494fbb530873f7f63fadb57899848f32
--- /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 0000000000000000000000000000000000000000..3db7f59844bdbeeaec9c29a11a7b71209f4a9355
--- /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 0000000000000000000000000000000000000000..63e4a07997d108b1e1111cbb97568cce1f03f6b9
--- /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 0000000000000000000000000000000000000000..5c3e7c364028e2e783a7b7cd06f385c6193d88c8
--- /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 0000000000000000000000000000000000000000..e3b488ca54ab7a99033581de75add816bd694898
--- /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 9b9869bc2ce579457d45a6b6576a7d9711cb8e98..d29f2c32bfac3fc619e7cca8c2af55479ead6007 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 84bccf17a0985def8bb4817d7511b43a3d69e9a9..c68238a28f944681cda6add3c301578ce71d393c 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 98a04bc32f0b896d6b9467a8291f9687b5141742..7a572c45c1ee1656c01840b27dcc7c2c1048bb14 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 f16f66e1c507002855d2c82e57dde39b67318c4d..72c467e92f3ebc755bc9b3c8a02c353881628dc3 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 6f30dcb4f49c16d7fc4a9875a8dd009e62acbacf..5251907c13035264f0be18f6ce39aefa70ac4d79 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 dda6676565f247350a89adbee3c80b5dcd20305a..14222dd198ef9336052a6c3c9cfb0b62ce184721 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 6385b7c9a77f694c49b7a00cd7675bb6a9b29716..dc4ae13c6f5f8e9092d39786ab06803e02335f81 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 ae932883d6041e4298fb4fc607055413282e8ae4..9fe413101d4d8d5f57865651028fc56212e14945 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 ac6653a348f7281e11a6175c801521dc7c7d5330..a4f6f9324bfcc1699cd26bd51168ce9b6dfc60fd 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 36e2cc2058bb7327adedabafdca6d99f0c1ffa7e..98a2e496a6bc0c7003bba27a35b0370298fc32b7 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 c7b86501512b85f8768e06617c8f887f453e100d..cb8321c37ea7fdf0a728054d47868be330d13b98 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 2fb09a503188f9fc412238a0f43981489d4bfdac..17e8baa79d9798d2417dea5df80594a0ef89e54d 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 41e2914739407602c9fc1b302b6ac117bbb7df54..38b3070ac6d0ffa6790af376084e0d745a2e0cdc 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 d5582b29de8f57441b02ea6f363c922d662a5ac0..1b8eceea2d058687fb59c3b68cc7e53636235b98 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 13686e75fe69a2a3c454ca3778f4436d9755b36d..4b2292fc592336ad07361b11165e1aba19411391 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 dbc40e04b12174f7384389b0e83a1acd2070346a..d57eddebe5001cd60b6020776e8c742e64a2be58 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 207b432abc65d48c798c4edc9543aeb72ef9cdf7..7d351ccba224fd89022c61f8bdd6be1bbaf427d8 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 5e2d96a53fa65dbb3a78c8ff04eef771604cd6f2..e8dc87bc307b22adbcd23ad01211272d2a1050e8 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 6ed7d6d8d7c508ee3477fd05184a8d7d64694cb7..f18423e2576aa92b3714931f0d6ce09699ac8e0d 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 fe8ae288c30579f463f8ac2fa3dced3084ebdc89..daecf8d405465c7ff93fa315ac7850f42c5d2a36 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 993b0e3de824da42e9b3a244ff95ab9e89798b53..ccef539c1b291bd5bdb683877cc9f4af6e331773 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 44e299efb5c58c2cfcaceec92d0a86a7833075c8..e1bae0e5f712e4bf7d70220f00fdbf46c6bf1156 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 ea8adee569071dfe974be730e35d4de18033df57..3b17542cd8e96732cca36ed9f0151e8b6ff11815 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 65448d0dbe2620eeee70a90dcaae6c4bc97855fb..a29906a815c21e3d6e89e8429900c375bd8bd1c2 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 83262dd3880a244d49a32d314eea27c59609a436..fa86e966d0fd44df71b467812f4a2cf47e0c7d69 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 b327a5b96247917e419faf1653d08f09fa9de34a..b1effd166faeb5b2dfdc0569a51272b89f9d4fc5 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 c19bbdf9befc2f87a7a15080fd87c8979a05863a..c9dd564cdfc27229deca2ef15bb1f3e44f745d05 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 b0960a26895729191f9967478239ee9c14c1c9c3..e2621bda8de739d288314469a941b37129e37212 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 822be5af7a96f992956aee358aa484cf47413256..f44dba5db2d405672f1f4d38b7ba63a655deef23 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 a33e3e37b32def4829cf86e6d0dc6d6a2b845ff0..c9957044f6a294917093cc6cf1ae8bfa3fd75e19 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 f64359307f4c147ee7a6fa19ef4e577bd5e52208..bb43934aa0f1a853d4aeb6417fc7a451905f1a85 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 0ad0793203f420360440387dff1f2d59a460f29b..452b53e9da27d80132bbba6a4bc6665dfc9d3ec1 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 595edb2947f7e95fe9448a74c89897d0516fa4b6..74b29d8d43ec9a1ab7168ebb8e29fcafc2e8ceb7 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 65a35d79a0ee4e5ad29b86f8045b21a7a0b3eb94..82af0bb1e6e9bfd8dadb2b36d883cebecd4f3358 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 6a5eaa11f935cef746024dc89a1e713564c5bb53..34740bd6a867fc57db1f07fffa53a8784c013c5d 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 bb6e400393b4adcbc9a3b3e4a35e579a25fdcf83..7b72076611baaf8ad74f867e97754b6ffcdf3a65 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 c3f551887df5ebe127e11687c3c00635441dfea5..1adc3b927181841a2f2748560540e9cc1af46df5 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 9e445058dd77e02156a90b32ce0c3c65e117883f..d6a4c14f8fe1ef0af66dd68c49cb08eb8cc91416 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 3986a73fc8bdec123e0302e572914c3d8fd6db5c..98af0d0e0fdccfae2b5a150e4861c12315374f32 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 427def96de1536c6d764f39f7725e9817afc5eae..87106d9d7e9c17823c9411e15cefea25a4a289db 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 fd8a908fbf4fccb0e7370fc5133a9cc7ade9fda9..2cd9da2d65bf0ed0cdd0701aea0ce2562ba890a5 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 cde646184536a44857320c76d0d466bf66b316bc..985cb0fee6e9ea8390fb13c8b90a531bb3445b97 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 209ae7d86d717a49189d8e18e9c50b4086c453c6..2de3b1614351198bc51aab8752e11a80c3a60caa 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 29afb72f4b371f2e83f3ab4276ae1ef58e56a5d3..7bd38923d3d3279ffec247c08b701c7ee8809938 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 d43f9570ca6b01a142cb9cb26fed9dd3be07a0ce..64296007dc7b98e0b16e6204dff6cec1845a32f9 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 6768b459c79700bd3f5db1706c683548fa86b87f..b6347d5353d7217859b82eee0b30e8b4ef41b5b2 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 5392a1dacaf2411c7bd1dee99142fd63ce1a5e49..8cf01454056c9f64172c9dece79a8bc25c5021fd 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 67e8930eedbde4bc5e8b1bb85081836d45aaad81..688350fe04898e8e4bb8b69956e9099319da4aee 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 4667cc3880e915bfdd23825e998014f892c2eed7..d392cb15b0f87907554435f214c2ffc89a9440ef 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 4030e605927b2a1c8b360f0936552568323e6b8b..890340635334dc2fe3e2051a222cd55d87b1b36d 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 a807484782b9b2ad6c3ee88b01de05ffefd80906..8d5b906e3152b10ba14677027602b0592626252d 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 9061d6ed93f7f7f88391a2190e5bd6b3c610aaec..9c23ac599460f208c6b7cb5c8d798ac51664431d 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 6899dfd07c9f0f2ef18bbefcbb866eb94e534927..8166e0ad462c39e4a02ddd4ad65e3837a18b04ca 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 3291f4eb8ad05e25f368742f5462faab139036b2..daed9b5bb5a1f9a7e9d02ae2ccc41f10681ccaf5 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 fb12cd9e158aef7db2aa121322448dfeb110b439..357ba8249889166cb2b5524b37864f25ba3e7fae 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 aab77c9b70d3a89dade6d40ac276c7299e047d34..fc79685f3ae06807c48e6d7588d6bacc1c0101da 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 f3e5d03a6c7805430aaf8e3d6adbc0b88519d27f..b85ef99ddc8a07074de0543ccc9cc69852f2cd8a 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 cac9552386e9a857c1ffd151fbedd43231f4da70..1caab64203d3714eea70fcd23e1242b6a90eba07 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 59cd314e5e00b974f434b65cf72dd2e6f8604e8d..31bfdc4ad0b2bfeecd55e7d9a7003ebdff56b226 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 58d62844073daad9b3e3db389bd6cc1a23fa7297..9078a33cd776bb7b1418b14793af87666c6d419a 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 52deb49d578f7d6a9b95ebc4b35d7e9ca62ad7d0..f704a5daba69ec0f8a036a1594cc30dff0fa42cf 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 28ab6d944cd30118e4c2662af0b2ca3105876270..87ef3062408fea33fbf897d75cdbc6d2d2fd134f 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 f469bbbc465b6a21bae8664f2f169aafdc0ca45c..ae8385a204516e178a83deaa0cd452246ea81886 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 a82b5aa2dcdf7c89e5d5cdbebdc11f732a723075..935bd07c48bd430c196c3c11a65d50c5ae8ff63e 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 9a657d1598e1b96d0192b428d91c326c1bb1b33f..2a7e8c4a0e5f7f096f92a9e7fa8f2caf0aed9e32 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 06373ab5cbabdcc53d23ca541173472dbb0b74e3..dc8541525b593e69099b4a736d1c053d3d2d6c28 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 289a0b588ad7daeaec7b2bc7cbad5cde8156c0e8..77059c857027a6a69db1828b53c17fc3e9584456 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 7dcad47a24e0562ce324e5bd6540ca2b5039a8fd..0c6c5a851ac085a60571b906edb086dbb06ba8f5 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 0215550638428e9f3a2b87cf8f39225bba478bb7..470549c91646c9ff9db1956eda428c114237c719 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 c8357bbff59161fd6348a788d34cfa96cab22e14..1269c983069528eb255134a1a99c046f3b44ea6d 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 5f5b1bc72c053018ef25a26ca0042e5ab3a9e933..cb5164782a1c83e4fd493abb555a78335b29c27b 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 b4d1a8f913380d5eb5ffdf17a0a12096c8b19c97..c6ab5c122539b1efc5e8daabc54a6188e0beceaf 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 6ea85606e12cecc02d001fdd1f55d23256c546d9..e1ae0b7383c54bf067ef06c2b17e76e89a3a9208 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 9b7b16a6e26e4927402f89cac522cbcb25954886..a87332daafff81c0c68f1764613590c391ab2e0f 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 1956dfaa112d39edf9536d4c5fd0144f194df8d8..0f4c9e5a532d626cb669ba876d8e3fa8b729bff0 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 26185f63621c128c863ba68a29d3d4e673be755b..579a3faaf210b7ce4bdf0af59ca40b81f6583146 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 f2fcb57d03288f6ad76904c9389e007fa9d7a4ab..9b385e8a5675a2cb704020f20a6d9649f1a840e8 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 f4f2d4c07faedf46b546469d46db4c4d90ba2d40..f453f41cd0bfe70ce35b759034f62aa2ca30ebf4 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 e7a981aeffbe0d2a790d291317188023a0ec902f..dc12624304ef7f21a508385a802584517ddcb520 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 e21063e64daf420bdd6bb53139dced86cf53b318..e7602376d9c04ea4686a9079b5d036e2050a8d91 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 19a9eaff77c3796684f23d256a01d8059549d24f..c11138f99fbbad46f618e29e0c5f9ac55e6147be 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 aa4afc803c2ab985e7c65e9ef29ff0f909301860..5ec693d9cc4b2979620d29a476914dd22b5fae80 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 95aac903e8ce49cd578e4d17404729f2e62b10fb..1f5691a8cc23fe8d43e3406d7bb50ad124e64105 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 a4aa0480a3e646951bf5135d7cf2401b6ab632f4..703fafca794d9927454d28bd284b47ad66cc6094 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 4402c2f1b3d637746e17d0c4cbef408fb319251b..046da0bad6b44adc8b23617c4dee4a908e455bb0 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 c56153c5a677d36a3d05e0c8131e59734f472f9d..6b50ac26e8f437e694b7a1cad963f14da4c014c0 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 a8f3004d3c6d8da4172d43191125d95b48e8aa09..15dc20d40cd64476cd81860007e818f85c1fb5aa 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 473340af35eda17531e8f606d043271087dcd34b..46c040b79beebd10908784bfc9b04b81e5774868 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 9661c99059736512ad8024da56109d00800a52cd..bd2e27ea5b27d9769715d7f7fed2bd92e9d4060b 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 921011b086dc6caec3802777203cc92e645b7adb..96a08cef242f77a4f921cce04d0baa897f6ac092 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 fd4dd62269e8ea9cadc45d0da6f1bfc731c31c92..8dc2196a9343934267c2b792d899497e20781eab 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 e21f397d0fee673ad8d67bffe1c8a0e259871927..2db4ba2235670cfebbb5b2b458df1a700744d721 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;
 };