diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
index 15c8cf4d0357a2f2689a60c5ee7e94e2471fc48d..7d05141fca04ff37509ff6868fcc1d68710ebe81 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
@@ -320,6 +320,10 @@ public:
                 //  Note: for particles belonging to this cloud only
                 inline const tmp<volScalarField> alpha() const;
 
+                //- Return the particle effective density field
+                //  Note: for particles belonging to this cloud only
+                inline const tmp<volScalarField> rhoEff() const;
+
 
         // Cloud evolution functions
 
diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H
index 2b8cca12d1657de733eb7ebb1e99b50fe8a59e8c..948a6b5dfffc2605fefb5a3ef9e81f83c08d042b 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H
@@ -91,6 +91,7 @@ Foam::KinematicCloud<ParcelType>::g() const
     return g_;
 }
 
+
 template<class ParcelType>
 inline const Foam::dictionary&
 Foam::KinematicCloud<ParcelType>::interpolationSchemes() const
@@ -212,7 +213,7 @@ Foam::KinematicCloud<ParcelType>::SU1() const
             dimensionedVector
             (
                  "zero",
-                 dimensionSet(1, -2, -2, 0, 0),
+                 dimDensity*dimVelocity/dimTime,
                  vector::zero
             )
         )
@@ -237,9 +238,10 @@ Foam::KinematicCloud<ParcelType>::SU2(volVectorField& U) const
             << min(UCoeff_) << ", " << max(UCoeff_) << endl;
     }
 
-    return UTrans_/(mesh_.V()*this->db().time().deltaT())
-         - fvm::Sp(UCoeff_/mesh_.V(), U)
-         + UCoeff_/mesh_.V()*U;
+    return
+        UTrans_/(mesh_.V()*this->db().time().deltaT())
+      - fvm::Sp(UCoeff_/mesh_.V(), U)
+      + UCoeff_/mesh_.V()*U;
 }
 
 
@@ -261,7 +263,7 @@ Foam::KinematicCloud<ParcelType>::theta() const
                 false
             ),
             mesh_,
-            dimensionedScalar("zero", dimensionSet(0, 0, 0, 0, 0), 0.0)
+            dimensionedScalar("zero", dimless, 0.0)
         )
     );
 
@@ -274,7 +276,7 @@ Foam::KinematicCloud<ParcelType>::theta() const
         theta[cellI] += p.nParticle()*p.volume();
     }
 
-    theta /= mesh().cellVolumes();
+    theta /= mesh().V();
 
     return ttheta;
 }
@@ -298,7 +300,7 @@ Foam::KinematicCloud<ParcelType>::alpha() const
                 false
             ),
             mesh_,
-            dimensionedScalar("zero", dimensionSet(0, 0, 0, 0, 0), 0.0)
+            dimensionedScalar("zero", dimless, 0.0)
         )
     );
 
@@ -311,10 +313,47 @@ Foam::KinematicCloud<ParcelType>::alpha() const
         alpha[cellI] += p.nParticle()*p.mass();
     }
 
-    alpha /= (mesh().cellVolumes()*rho_);
+    alpha /= (mesh().V()*rho_);
 
     return talpha;
 }
 
 
+template<class ParcelType>
+inline const Foam::tmp<Foam::volScalarField>
+Foam::KinematicCloud<ParcelType>::rhoEff() const
+{
+    tmp<volScalarField> trhoEff
+    (
+        new volScalarField
+        (
+            IOobject
+            (
+                this->name() + "RhoEff",
+                this->db().time().timeName(),
+                this->db(),
+                IOobject::NO_READ,
+                IOobject::NO_WRITE,
+                false
+            ),
+            mesh_,
+            dimensionedScalar("zero", dimDensity, 0.0)
+        )
+    );
+
+    scalarField& rhoEff = trhoEff().internalField();
+    forAllConstIter(typename KinematicCloud<ParcelType>, *this, iter)
+    {
+        const ParcelType& p = iter();
+        const label cellI = p.cell();
+
+        rhoEff[cellI] += p.nParticle()*p.mass();
+    }
+
+    rhoEff /= mesh().V();
+
+    return trhoEff;
+}
+
+
 // ************************************************************************* //
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C
index a6d5a830413ca6811529cfc3c0d50bb95fc2a7dc..56a497803ab9f74963cfaa0a84b53900bd655b31 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C
@@ -176,34 +176,12 @@ void Foam::ConeInjection<CloudType>::setPositionAndCell
 (
     const label,
     const scalar,
-    const polyMeshInfo& meshInfo,
     vector& position,
     label& cellOwner
 )
 {
     position = position_;
     this->findCellAtPosition(cellOwner, position);
-
-    if (meshInfo.caseIs2d())
-    {
-        if (meshInfo.caseIs2dWedge())
-        {
-            position.component(meshInfo.emptyComponent()) = 0.0;
-        }
-        else if (meshInfo.caseIs2dSlab())
-        {
-            position.component(meshInfo.emptyComponent()) =
-                meshInfo.centrePoint().component(meshInfo.emptyComponent());
-        }
-        else
-        {
-            FatalErrorIn
-            (
-                "void Foam::ConeInjection<CloudType>::setPositionAndCell"
-            )   << "Could not determine 2-D case geometry" << nl
-                << abort(FatalError);
-        }
-    }
 }
 
 
@@ -211,8 +189,7 @@ template<class CloudType>
 Foam::vector Foam::ConeInjection<CloudType>::velocity
 (
     const label,
-    const scalar time,
-    const polyMeshInfo& meshInfo
+    const scalar time
 )
 {
     const scalar deg2Rad = mathematicalConstant::pi/180.0;
@@ -231,13 +208,6 @@ Foam::vector Foam::ConeInjection<CloudType>::velocity
     vector normal = alpha*(tanVec1_*cos(beta) + tanVec2_*sin(beta));
     vector dirVec = dcorr*direction_;
     dirVec += normal;
-
-    // Remove empty component of velocity for slab cases
-    if (meshInfo.caseIs2dSlab())
-    {
-        dirVec.component(meshInfo.emptyComponent()) = 0.0;
-    }
-
     dirVec /= mag(dirVec);
 
     return Umag_().value(t)*dirVec;
@@ -255,4 +225,10 @@ Foam::scalar Foam::ConeInjection<CloudType>::d0
 }
 
 
+template<class CloudType>
+bool Foam::ConeInjection<CloudType>::validInjection(const label iParcel)
+{
+    return true;
+}
+
 // ************************************************************************* //
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H
index 610f201a1d3716776de5b382cefe4abaf38e7663..22faf297eb8761365f05adb25e9a03eb698c3425 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H
@@ -162,7 +162,6 @@ public:
             (
                 const label iParcel,
                 const scalar time,
-                const polyMeshInfo& meshInfo,
                 vector& position,
                 label& cellOwner
             );
@@ -170,17 +169,20 @@ public:
             //- Return the velocity of the parcel to introduce at a time
             vector velocity
             (
-                const label,
-                const scalar time,
-                const polyMeshInfo& meshInfo
+                const label iParcel,
+                const scalar time
             );
 
             //- Return the diameter of the parcel to introduce at a time
             scalar d0
             (
-                const label,
-                const scalar
+                const label iParcel,
+                const scalar time
             ) const;
+
+            //- Return flag to identify whether or not injection in cellI is
+            //  permitted
+            bool validInjection(const label iParcel);
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C
index 0aaeb44cd4619d85019bce8d6628517956055e05..98c762f0eceb053a960cbaeae599f32e3310dc55 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C
@@ -228,6 +228,49 @@ Foam::scalar Foam::InjectionModel<CloudType>::setNumberOfParticles
 }
 
 
+template<class CloudType>
+void Foam::InjectionModel<CloudType>::geometryCorrection(vector& pos) const
+{
+    if (owner_.meshInfo().caseIs2d())
+    {
+        if (owner_.meshInfo().caseIs2dWedge())
+        {
+            pos.component(owner_.meshInfo().emptyComponent()) = 0.0;
+        }
+        else if (owner_.meshInfo().caseIs2dSlab())
+        {
+            pos.component(owner_.meshInfo().emptyComponent()) =
+                owner_.meshInfo().centrePoint().component
+                (
+                    owner_.meshInfo().emptyComponent()
+                );
+        }
+        else
+        {
+            FatalErrorIn
+            (
+                "void Foam::InjectionModel<CloudType>::geometryCorrection"
+                "(vector& pos)"
+            )   << "Could not determine 2-D case geometry" << nl
+                << abort(FatalError);
+        }
+    }
+}
+
+
+template<class CloudType>
+void Foam::InjectionModel<CloudType>::velocityCorrection(vector& U) const
+{
+    if (owner_.meshInfo().caseIs2dSlab())
+    {
+        U.component(owner_.meshInfo().emptyComponent()) =
+            owner_.meshInfo().centrePoint().component
+            (
+                owner_.meshInfo().emptyComponent()
+            );
+    }
+}
+
 template<class CloudType>
 void Foam::InjectionModel<CloudType>::postInjectCheck()
 {
@@ -380,33 +423,40 @@ void Foam::InjectionModel<CloudType>::inject(TrackData& td)
         // Determine the injection position and owner cell
         label cellI = -1;
         vector pos = vector::zero;
-        setPositionAndCell(iParcel, timeInj, owner_.meshInfo(), pos, cellI);
+        setPositionAndCell(iParcel, timeInj, pos, cellI);
 
         if (cellI >= 0)
         {
-            // Diameter of parcels
-            scalar d = d0(iParcel, timeInj);
-
-            // Number of particles per parcel
-            scalar nP = setNumberOfParticles
-            (
-                newParcels,
-                newVolume,
-                volFraction,
-                d,
-                rho
-            );
-
-            // Velocity of parcels
-            vector U = velocity(iParcel, timeInj, owner_.meshInfo());
-
-            // Lagrangian timestep
-            scalar dt = time - timeInj;
-
-            // Add the new parcel
-            td.cloud().addNewParcel(pos, cellI, d, U, nP, dt);
-            massInjected_ += nP*rho*mathematicalConstant::pi*pow3(d)/6.0;
-            parcelsAdded_++;
+            if (validInjection(iParcel))
+            {
+                // Diameter of parcels
+                scalar d = d0(iParcel, timeInj);
+
+                // Number of particles per parcel
+                scalar nP = setNumberOfParticles
+                (
+                    newParcels,
+                    newVolume,
+                    volFraction,
+                    d,
+                    rho
+                );
+
+                // Velocity of parcels
+                vector U = velocity(iParcel, timeInj);
+
+                // Lagrangian timestep
+                scalar dt = time - timeInj;
+
+                // Apply corrections for 2-D cases
+                geometryCorrection(pos);
+                velocityCorrection(U);
+
+                // Add the new parcel
+                td.cloud().addNewParcel(pos, cellI, d, U, nP, dt);
+                massInjected_ += nP*rho*mathematicalConstant::pi*pow3(d)/6.0;
+                parcelsAdded_++;
+            }
         }
         else
         {
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H
index dd7d71de2484d406aee674e900f62c6c39b46118..4c4d546c179ece8888fd94eaffb1cb17d4ca16cf 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H
@@ -88,6 +88,12 @@ private:
         //- Write injector properties
         void writeProps();
 
+        //- Geometry correction for 2-D cases
+        void geometryCorrection(vector& pos) const;
+
+        //- Velocity correction for 2-D cases
+        void velocityCorrection(vector& U) const;
+
 
 protected:
 
@@ -149,6 +155,9 @@ protected:
             const scalar time1
         ) const = 0;
 
+        //- Additional flag to identify whether or not injection in cellI is
+        //  permitted
+        virtual bool validInjection(const label iParcel) = 0;
 
         //- Determine properties for next time step/injection interval
         virtual void prepareForNextTimeStep
@@ -287,7 +296,6 @@ public:
             (
                 const label iParcel,
                 const scalar time,
-                const polyMeshInfo& meshInfo,
                 vector& position,
                 label& cellOwner
             ) = 0;
@@ -296,8 +304,7 @@ public:
             virtual vector velocity
             (
                 const label iParcel,
-                const scalar time,
-                const polyMeshInfo& meshInfo
+                const scalar time
             ) = 0;
 
             //- Return the diameter of the parcel to introduce at a time
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C
index 6a8361d7df2ef9368a0b65264009b7c121764c02..a059b81b7c1fc2c547b9c5caa97ab45c6a59b6dc 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C
@@ -139,34 +139,12 @@ void Foam::ManualInjection<CloudType>::setPositionAndCell
 (
     const label iParcel,
     const scalar time,
-    const polyMeshInfo& meshInfo,
     vector& position,
     label& cellOwner
 )
 {
     position = positions_[iParcel];
     this->findCellAtPosition(cellOwner, position);
-
-    if (meshInfo.caseIs2d())
-    {
-        if (meshInfo.caseIs2dWedge())
-        {
-            position.component(meshInfo.emptyComponent()) = 0.0;
-        }
-        else if (meshInfo.caseIs2dSlab())
-        {
-            position.component(meshInfo.emptyComponent()) =
-                meshInfo.centrePoint().component(meshInfo.emptyComponent());
-        }
-        else
-        {
-            FatalErrorIn
-            (
-                "void Foam::ManualInjection<CloudType>::setPositionAndCell"
-            )   << "Could not determine 2-D case geometry" << nl
-                << abort(FatalError);
-        }
-    }
 }
 
 
@@ -174,18 +152,10 @@ template<class CloudType>
 Foam::vector Foam::ManualInjection<CloudType>::velocity
 (
     const label,
-    const scalar,
-    const polyMeshInfo& meshInfo
+    const scalar
 )
 {
-    vector vel = U0_;
-    if (meshInfo.caseIs2dSlab())
-    {
-        vel.component(meshInfo.emptyComponent()) =
-            meshInfo.centrePoint().component(meshInfo.emptyComponent());
-    }
-
-    return vel;
+    return U0_;
 }
 
 
@@ -200,4 +170,11 @@ Foam::scalar Foam::ManualInjection<CloudType>::d0
 }
 
 
+template<class CloudType>
+bool Foam::ManualInjection<CloudType>::validInjection(const label)
+{
+    return true;
+}
+
+
 // ************************************************************************* //
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H
index 8403386357803ab5acb6f64baeab57e8b8e8f5ba..d97ac345244689ebc0d27a3156c02b46a2357f29 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H
@@ -33,11 +33,7 @@ Description
       - Parcel positions in file @c positionsFile
       - Initial parcel velocity
     - Parcel diameters obtained by PDF model
-    - All parcels introduced at the start of the calculation
-
-Note
-    Not suitable for 2-D slab/wedge simulations unless the @c positionsFile
-    describes 2-D data.
+    - All parcels introduced at SOI
 
 SourceFiles
     ManualInjection.C
@@ -143,7 +139,6 @@ public:
             (
                 const label iParcel,
                 const scalar time,
-                const polyMeshInfo& meshInfo,
                 vector& position,
                 label& cellOwner
             );
@@ -151,17 +146,20 @@ public:
             //- Return the velocity of the parcel to introduce at a time
             vector velocity
             (
-                const label,
-                const scalar time,
-                const polyMeshInfo& meshInfo
+                const label iParcel,
+                const scalar time
             );
 
             //- Return the diameter of the parcel to introduce at a time
             scalar d0
             (
-                const label,
+                const label iParcel,
                 const scalar
             ) const;
+
+            //- Return flag to identify whether or not injection in cellI is
+            //  permitted
+            bool validInjection(const label iParcel);
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.C
index fcbd1b6981d68e7d194d45a99d92100f7dc47ca3..5e51bc26a9ee1c3a8c392dc9248df4287d90fb06 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.C
@@ -92,7 +92,6 @@ void Foam::NoInjection<CloudType>::setPositionAndCell
 (
     const label,
     const scalar,
-    const polyMeshInfo&,
     vector&,
     label&
 )
@@ -103,8 +102,7 @@ template<class CloudType>
 Foam::vector Foam::NoInjection<CloudType>::velocity
 (
     const label,
-    const scalar,
-    const polyMeshInfo&
+    const scalar
 )
 {
     return vector::zero;
@@ -122,4 +120,11 @@ Foam::scalar Foam::NoInjection<CloudType>::d0
 }
 
 
+template<class CloudType>
+bool Foam::NoInjection<CloudType>::validInjection(const label)
+{
+    return false;
+}
+
+
 // ************************************************************************* //
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.H
index cb849a4951f865f7121a8aff44b330c4033c84e9..ab6a2ec54a72010146db85f9abb0a49af8911e3f 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.H
@@ -107,7 +107,6 @@ public:
             (
                 const label iParcel,
                 const scalar time,
-                const polyMeshInfo& meshInfo,
                 vector& position,
                 label& cellOwner
             );
@@ -115,17 +114,20 @@ public:
             //- Return the velocity of the parcel to introduce at a time
             vector velocity
             (
-                const label,
-                const scalar time,
-                const polyMeshInfo& meshInfo
+                const label iParcel,
+                const scalar time
             );
 
             //- Return the diameter of the parcel to introduce at a time
             scalar d0
             (
-                const label,
-                const scalar
+                const label iParcel,
+                const scalar time
             ) const;
+
+            //- Return flag to identify whether or not injection in cellI is
+            //  permitted
+            bool validInjection(const label cellI);
 };