diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C
index 4cd8e6df9bfae4ca0e5d02558868544b84d01f46..c35b17a7ea5ac9c4d2c838a26a56aa88aab0561d 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C
@@ -40,7 +40,7 @@ void Foam::KinematicParcel<ParcelType>::setCellValues
 
     rhoc_ = td.rhoInterp().interpolate(this->position(), tetIs);
 
-    if (rhoc_ < td.constProps().rhoMin())
+    if (rhoc_ < td.cloud().constProps().rhoMin())
     {
         WarningIn
         (
@@ -51,9 +51,9 @@ void Foam::KinematicParcel<ParcelType>::setCellValues
                 "const label"
             ")"
         )   << "Limiting observed density in cell " << cellI << " to "
-            << td.constProps().rhoMin() <<  nl << endl;
+            << td.cloud().constProps().rhoMin() <<  nl << endl;
 
-        rhoc_ = td.constProps().rhoMin();
+        rhoc_ = td.cloud().constProps().rhoMin();
     }
 
     Uc_ = td.UInterp().interpolate(this->position(), tetIs);
diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H
index 70724cc8169f81cd2ec40af5d2efaeb8bda3bbea..b1e2b45f2f65a781857e2bb41f8cc2890f481c46 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H
@@ -168,9 +168,6 @@ public:
             //- Reference to the cloud containing this particle
             KinematicCloud<ParcelType>& cloud_;
 
-            //- Particle constant properties
-            const constantProperties& constProps_;
-
 
             // Interpolators for continuous phase fields
 
@@ -209,9 +206,6 @@ public:
             //- Return access to the owner cloud
             inline KinematicCloud<ParcelType>& cloud();
 
-            //- Return const access to the constant properties
-            inline const constantProperties& constProps() const;
-
             //- Return conat access to the interpolator for continuous
             //  phase density field
             inline const interpolation<scalar>& rhoInterp() const;
diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H
index 8d7a9f0236af269c7b4de7a98521f01c21c9a444..3a9fc043737ca909498f4851cd35b24bec20eaf6 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H
@@ -54,7 +54,6 @@ inline Foam::KinematicParcel<ParcelType>::trackData::trackData
 :
     Particle<ParcelType>::trackData(cloud),
     cloud_(cloud),
-    constProps_(cloud.constProps()),
     rhoInterp_
     (
         interpolation<scalar>::New
@@ -223,14 +222,6 @@ Foam::KinematicParcel<ParcelType>::trackData::cloud()
 }
 
 
-template <class ParcelType>
-inline const typename Foam::KinematicParcel<ParcelType>::constantProperties&
-Foam::KinematicParcel<ParcelType>::trackData::constProps() const
-{
-    return constProps_;
-}
-
-
 template<class ParcelType>
 inline const Foam::interpolation<Foam::scalar>&
 Foam::KinematicParcel<ParcelType>::trackData::rhoInterp() const
diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C
index 1402304f133248d4f74c18ee2446f422c9b0122b..ecb353e08882d97ce2363f7652df8fe5aad88a7b 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C
+++ b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C
@@ -422,7 +422,7 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calc
     // Remove the particle when mass falls below minimum threshold
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-    if (mass1 < td.constProps().minParticleMass())
+    if (mass1 < td.cloud().constProps().minParticleMass())
     {
         td.keepParticle = false;
 
@@ -469,7 +469,7 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calc
         this->U_ = U1;
 
         // Update particle density or diameter
-        if (td.constProps().constantVolume())
+        if (td.cloud().constProps().constantVolume())
         {
             this->rho_ = mass1/this->volume();
         }
@@ -541,8 +541,8 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calcDevolatilisation
         const scalar beta = sqr(cbrt(15.0) + cbrt(15.0));
         const label id =
             td.cloud().composition().localToGlobalCarrierId(GAS, i);
-        const scalar Cp = td.cloud().mcCarrierThermo().speciesData()[id].Cp(Ts);
-        const scalar W = td.cloud().mcCarrierThermo().speciesData()[id].W();
+        const scalar Cp = td.cloud().thermo().carrier().Cp(id, Ts);
+        const scalar W = td.cloud().thermo().carrier().W(id);
         const scalar Ni = dMassDV[i]/(this->areaS(d)*dt*W);
 
         // Dab calc'd using API vapour mass diffusivity function
@@ -615,12 +615,12 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calcSurfaceReactions
     );
 
     const scalar xsi = min(T/5000.0, 1.0);
-    const scalar hRetentionCoeffMod =
-        (1.0 - xsi*xsi)*td.constProps().hRetentionCoeff();
+    const scalar coeff =
+        (1.0 - xsi*xsi)*td.cloud().constProps().hRetentionCoeff();
 
-    Sh += hRetentionCoeffMod*hReaction/dt;
+    Sh += coeff*hReaction/dt;
 
-    dhsTrans += (1.0 - hRetentionCoeffMod)*hReaction;
+    dhsTrans += (1.0 - coeff)*hReaction;
 }
 
 
diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H
index 67041d5eb1a80dc21fd29bdf5cdc31f1364612b2..36d95cc4aa549e18333a0ff667bab2b7eb2ef957 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H
+++ b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H
@@ -115,9 +115,6 @@ public:
             //- Reference to the cloud containing this particle
             ReactingMultiphaseCloud<ParcelType>& cloud_;
 
-            //- Particle constant properties
-            const constantProperties& constProps_;
-
 
     public:
 
@@ -136,9 +133,6 @@ public:
 
             //- Return access to the owner cloud
             inline ReactingMultiphaseCloud<ParcelType>& cloud();
-
-            //- Return const access to the constant properties
-            inline const constantProperties& constProps() const;
     };
 
 
diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelI.H b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelI.H
index 4d67ca43d468eb3816711c9302540e5c9196d935..9abaae0e2b5441459c791fe2611417f4bb606ac6 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelI.H
+++ b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelI.H
@@ -58,8 +58,7 @@ inline Foam::ReactingMultiphaseParcel<ParcelType>::trackData::trackData
 )
 :
     ReactingParcel<ParcelType>::trackData(cloud, part),
-    cloud_(cloud),
-    constProps_(cloud.constProps())
+    cloud_(cloud)
 {}
 
 
@@ -158,15 +157,6 @@ Foam::ReactingMultiphaseParcel<ParcelType>::trackData::cloud()
 }
 
 
-template<class ParcelType>
-inline const typename Foam::ReactingMultiphaseParcel<ParcelType>::
-constantProperties&
-Foam::ReactingMultiphaseParcel<ParcelType>::trackData::constProps() const
-{
-    return constProps_;
-}
-
-
 // * * * * * * * * * * ThermoParcel Member Functions * * * * * * * * * * * * //
 
 template<class ParcelType>
diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C
index 1c0539eda6424b690f9e2fba1d1f28ac39cfdff7..1ae4e01348db752eb39f0bdd265ff6ece70b13c4 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C
+++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C
@@ -48,7 +48,7 @@ void Foam::ReactingParcel<ParcelType>::setCellValues
         this->currentTetIndices()
     );
 
-    if (pc_ < td.constProps().pMin())
+    if (pc_ < td.cloud().constProps().pMin())
     {
         WarningIn
         (
@@ -59,9 +59,9 @@ void Foam::ReactingParcel<ParcelType>::setCellValues
                 "const label"
             ")"
         )   << "Limiting observed pressure in cell " << cellI << " to "
-            << td.constProps().pMin() <<  nl << endl;
+            << td.cloud().constProps().pMin() <<  nl << endl;
 
-        pc_ = td.constProps().pMin();
+        pc_ = td.cloud().constProps().pMin();
     }
 }
 
@@ -352,7 +352,7 @@ void Foam::ReactingParcel<ParcelType>::calc
 
     // Remove the particle when mass falls below minimum threshold
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    if (mass1 < td.constProps().minParticleMass())
+    if (mass1 < td.cloud().constProps().minParticleMass())
     {
         td.keepParticle = false;
 
@@ -382,7 +382,7 @@ void Foam::ReactingParcel<ParcelType>::calc
         this->U_ = U1;
 
         // Update particle density or diameter
-        if (td.constProps().constantVolume())
+        if (td.cloud().constProps().constantVolume())
         {
             this->rho_ = mass1/this->volume();
         }
@@ -425,7 +425,7 @@ void Foam::ReactingParcel<ParcelType>::calcPhaseChange
     if
     (
         !td.cloud().phaseChange().active()
-     || T < td.constProps().Tvap()
+     || T < td.cloud().constProps().Tvap()
      || YPhase < SMALL
     )
     {
diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H
index d4423bc8c14c83588a12ea7bb76cd8fc6da4f837..901eb0396c574d4c6eabe115d9f8ca3fe81d88a2 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H
+++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H
@@ -121,9 +121,6 @@ public:
             //- Reference to the cloud containing this particle
             ReactingCloud<ParcelType>& cloud_;
 
-            //- Particle constant properties
-            const constantProperties& constProps_;
-
             //- Interpolator for continuous phase pressure field
             const interpolation<scalar>& pInterp_;
 
@@ -149,9 +146,6 @@ public:
             //- Return access to the owner cloud
             inline ReactingCloud<ParcelType>& cloud();
 
-            //- Return const access to the constant properties
-            inline const constantProperties& constProps() const;
-
             //- Return const access to the interpolator for continuous
             //  phase pressure field
             inline const interpolation<scalar>& pInterp() const;
diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H
index 4206975a70c37af4dc5ee79f1591e54e26d2d5b4..8878dd29ed88a7a78ee9b4df421940390be852b5 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H
+++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H
@@ -48,7 +48,6 @@ inline Foam::ReactingParcel<ParcelType>::trackData::trackData
 :
     ThermoParcel<ParcelType>::trackData(cloud, part),
     cloud_(cloud),
-    constProps_(cloud.constProps()),
     pInterp_
     (
         interpolation<scalar>::New
@@ -167,14 +166,6 @@ Foam::ReactingParcel<ParcelType>::trackData::cloud()
 }
 
 
-template<class ParcelType>
-inline const typename Foam::ReactingParcel<ParcelType>::constantProperties&
-Foam::ReactingParcel<ParcelType>::trackData::constProps() const
-{
-    return constProps_;
-}
-
-
 template<class ParcelType>
 inline const Foam::interpolation<Foam::scalar>&
 Foam::ReactingParcel<ParcelType>::trackData::pInterp() const
diff --git a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C
index bdf5f1d2cb80c3234bc9f6fc482df79249ee3970..0a457a89719bc5f330e67c9a3825545a9b0814dc 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C
+++ b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C
@@ -47,7 +47,7 @@ void Foam::ThermoParcel<ParcelType>::setCellValues
 
     Tc_ = td.TInterp().interpolate(this->position(), tetIs);
 
-    if (Tc_ < td.constProps().TMin())
+    if (Tc_ < td.cloud().constProps().TMin())
     {
         WarningIn
         (
@@ -58,9 +58,9 @@ void Foam::ThermoParcel<ParcelType>::setCellValues
                 "const label"
             ")"
         )   << "Limiting observed temperature in cell " << cellI << " to "
-            << td.constProps().TMin() <<  nl << endl;
+            << td.cloud().constProps().TMin() <<  nl << endl;
 
-        Tc_ = td.constProps().TMin();
+        Tc_ = td.cloud().constProps().TMin();
     }
 }
 
@@ -107,7 +107,7 @@ void Foam::ThermoParcel<ParcelType>::calcSurfaceValues
 
     mus = td.muInterp().interpolate (this->position(), tetIs)/factor;
 
-    Pr = td.constProps().Pr();
+    Pr = td.cloud().constProps().Pr();
     kappa = Cpc_*mus/Pr;
 }
 
@@ -238,7 +238,12 @@ Foam::scalar Foam::ThermoParcel<ParcelType>::calcHeatTransfer
 
     if (mag(htc) < ROOTVSMALL && !td.cloud().radiation())
     {
-        return max(T + dt*Sh/(this->volume(d)*rho*Cp), td.constProps().TMin());
+        return
+            max
+            (
+                T + dt*Sh/(this->volume(d)*rho*Cp),
+                td.cloud().constProps().TMin()
+            );
     }
 
     const scalar As = this->areaS(d);
@@ -250,7 +255,7 @@ Foam::scalar Foam::ThermoParcel<ParcelType>::calcHeatTransfer
             td.cloud().mesh().objectRegistry::lookupObject<volScalarField>("G");
         const scalar Gc = G[cellI];
         const scalar sigma = physicoChemical::sigma.value();
-        const scalar epsilon = td.constProps().epsilon0();
+        const scalar epsilon = td.cloud().constProps().epsilon0();
 
         ap = (ap + epsilon*Gc/(4.0*htc))/(1.0 + epsilon*sigma*pow3(T)/htc);
         bp += 6.0*(epsilon*(Gc/4.0 - sigma*pow4(T)));
@@ -261,7 +266,7 @@ Foam::scalar Foam::ThermoParcel<ParcelType>::calcHeatTransfer
     IntegrationScheme<scalar>::integrationResult Tres =
         td.cloud().TIntegrator().integrate(T, dt, ap, bp);
 
-    scalar Tnew = max(Tres.value(), td.constProps().TMin());
+    scalar Tnew = max(Tres.value(), td.cloud().constProps().TMin());
 
     dhsTrans += dt*htc*As*(0.5*(T + Tnew) - Tc_);
 
diff --git a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.H b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.H
index 2924dc3eb0a6ac3a0ccf7db1b54dfa6a5a72960b..09ca7444c6b4ab61020f09ac1a29c0692531f9d7 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.H
+++ b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.H
@@ -138,9 +138,6 @@ public:
             //- Reference to the cloud containing this particle
             ThermoCloud<ParcelType>& cloud_;
 
-            //- Particle constant properties
-            const constantProperties& constProps_;
-
             //- Local copy of specific heat field
             //  Cp not stored on acrrier thermo, but returned as tmp<...>
             const volScalarField Cp_;
@@ -173,9 +170,6 @@ public:
             //- Return access to the owner cloud
             inline ThermoCloud<ParcelType>& cloud();
 
-            //- Return const access to the owner cloud
-            inline const constantProperties& constProps() const;
-
             //- Return const access to the interpolator for continuous
             //  phase temperature field
             inline const interpolation<scalar>& TInterp() const;
diff --git a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelI.H b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelI.H
index 69ba4e610940504f2889e2ac492230a10268a98b..76108f2b27a463aecb1a5444fe5c6005b821bc9e 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelI.H
+++ b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelI.H
@@ -50,7 +50,6 @@ inline Foam::ThermoParcel<ParcelType>::trackData::trackData
 :
     KinematicParcel<ParcelType>::trackData(cloud, part),
     cloud_(cloud),
-    constProps_(cloud.constProps()),
     Cp_
     (
         IOobject
@@ -203,14 +202,6 @@ Foam::ThermoParcel<ParcelType>::trackData::cloud()
 }
 
 
-template <class ParcelType>
-inline const typename Foam::ThermoParcel<ParcelType>::constantProperties&
-Foam::ThermoParcel<ParcelType>::trackData::constProps() const
-{
-    return constProps_;
-}
-
-
 template<class ParcelType>
 inline const Foam::interpolation<Foam::scalar>&
 Foam::ThermoParcel<ParcelType>::trackData::TInterp() const