diff --git a/src/lagrangian/dieselSpray/injector/commonRailInjector/commonRailInjector.C b/src/lagrangian/dieselSpray/injector/commonRailInjector/commonRailInjector.C
index 922c51a8d8c4f471bbc305b1253d2ca67abfc7e8..374e1a16c05fc211b3bf20fe1eae53ae9bc5d396 100644
--- a/src/lagrangian/dieselSpray/injector/commonRailInjector/commonRailInjector.C
+++ b/src/lagrangian/dieselSpray/injector/commonRailInjector/commonRailInjector.C
@@ -25,7 +25,6 @@ License
 
 #include "commonRailInjector.H"
 #include "addToRunTimeSelectionTable.H"
-#include "Random.H"
 #include "mathematicalConstants.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@@ -175,13 +174,13 @@ Foam::commonRailInjector::~commonRailInjector()
 
 void Foam::commonRailInjector::setTangentialVectors()
 {
-    Random rndGen(label(0));
+    cachedRandom rndGen(label(0), -1);
     scalar magV = 0.0;
     vector tangent;
 
     while (magV < SMALL)
     {
-        vector testThis = rndGen.vector01();
+        vector testThis = rndGen.sample01<vector>();
 
         tangent = testThis - (testThis & direction_)*direction_;
         magV = mag(tangent);
@@ -223,7 +222,7 @@ Foam::vector Foam::commonRailInjector::position
     const vector& axisOfSymmetry,
     const vector& axisOfWedge,
     const vector& axisOfWedgeNormal,
-    Random& rndGen
+    cachedRandom& rndGen
 ) const
 {
     if (twoD)
@@ -241,8 +240,8 @@ Foam::vector Foam::commonRailInjector::position
     else
     {
         // otherwise, disc injection
-        scalar iRadius = d_*rndGen.scalar01();
-        scalar iAngle = constant::mathematical::twoPi*rndGen.scalar01();
+        scalar iRadius = d_*rndGen.sample01<scalar>();
+        scalar iAngle = constant::mathematical::twoPi*rndGen.sample01<scalar>();
 
         return
         (
diff --git a/src/lagrangian/dieselSpray/injector/commonRailInjector/commonRailInjector.H b/src/lagrangian/dieselSpray/injector/commonRailInjector/commonRailInjector.H
index ed13a2cb82bcd5ff9362d1eacb548dbeaf395384..6ca532c9eac920fb17d6d9bca97fae0f7118a2f7 100644
--- a/src/lagrangian/dieselSpray/injector/commonRailInjector/commonRailInjector.H
+++ b/src/lagrangian/dieselSpray/injector/commonRailInjector/commonRailInjector.H
@@ -138,7 +138,7 @@ public:
             const vector& axisOfSymmetry,
             const vector& axisOfWedge,
             const vector& axisOfWedgeNormal,
-            Random& rndGen
+            cachedRandom& rndGen
         ) const;
 
         //- Return the number of holes
diff --git a/src/lagrangian/dieselSpray/injector/definedInjector/definedInjector.C b/src/lagrangian/dieselSpray/injector/definedInjector/definedInjector.C
index 6071c67bd7b6b22a656733933b772bcbf514bcdb..1934491eaf4fb1301c586a63cdd6fcf7c2a0bf0a 100644
--- a/src/lagrangian/dieselSpray/injector/definedInjector/definedInjector.C
+++ b/src/lagrangian/dieselSpray/injector/definedInjector/definedInjector.C
@@ -25,7 +25,6 @@ License
 
 #include "definedInjector.H"
 #include "addToRunTimeSelectionTable.H"
-#include "Random.H"
 #include "mathematicalConstants.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@@ -158,13 +157,13 @@ Foam::definedInjector::~definedInjector()
 
 void Foam::definedInjector::setTangentialVectors()
 {
-    Random rndGen(label(0));
+    cachedRandom rndGen(label(0), -1);
     scalar magV = 0.0;
     vector tangent;
 
     while (magV < SMALL)
     {
-        vector testThis = rndGen.vector01();
+        vector testThis = rndGen.sample01<vector>();
 
         tangent = testThis - (testThis & direction_)*direction_;
         magV = mag(tangent);
@@ -204,7 +203,7 @@ Foam::vector Foam::definedInjector::position
     const vector& axisOfSymmetry,
     const vector& axisOfWedge,
     const vector& axisOfWedgeNormal,
-    Random& rndGen
+    cachedRandom& rndGen
 ) const
 {
     if (twoD)
@@ -222,8 +221,8 @@ Foam::vector Foam::definedInjector::position
     else
     {
         // otherwise, disc injection
-        scalar iRadius = d_*rndGen.scalar01();
-        scalar iAngle = constant::mathematical::twoPi*rndGen.scalar01();
+        scalar iRadius = d_*rndGen.sample01<scalar>();
+        scalar iAngle = constant::mathematical::twoPi*rndGen.sample01<scalar>();
 
         return
         (
diff --git a/src/lagrangian/dieselSpray/injector/definedInjector/definedInjector.H b/src/lagrangian/dieselSpray/injector/definedInjector/definedInjector.H
index acbb09c765b2c35f6c649a07b41f403b8073293b..0f14b80c8f23e0ce5ec597edc8dbb0fec8d2c96b 100644
--- a/src/lagrangian/dieselSpray/injector/definedInjector/definedInjector.H
+++ b/src/lagrangian/dieselSpray/injector/definedInjector/definedInjector.H
@@ -139,7 +139,7 @@ public:
             const vector& axisOfSymmetry,
             const vector& axisOfWedge,
             const vector& axisOfWedgeNormal,
-            Random& rndGen
+            cachedRandom& rndGen
         ) const;
 
         //- Return the number of holes
diff --git a/src/lagrangian/dieselSpray/injector/injectorType/injectorType.H b/src/lagrangian/dieselSpray/injector/injectorType/injectorType.H
index 90e1c3885edbb81c2b159a81b1ba2d493023c917..a5a3e476c938e74f48d269f92b133fb7da134250 100644
--- a/src/lagrangian/dieselSpray/injector/injectorType/injectorType.H
+++ b/src/lagrangian/dieselSpray/injector/injectorType/injectorType.H
@@ -43,7 +43,7 @@ SourceFiles
 #include "runTimeSelectionTables.H"
 #include "vector.H"
 #include "scalarField.H"
-#include "Random.H"
+#include "cachedRandom.H"
 #include "liquidMixture.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -120,7 +120,7 @@ public:
             const vector& axisOfSymmetry,
             const vector& axisOfWedge,
             const vector& axisOfWedgeNormal,
-            Random& rndGen
+            cachedRandom& rndGen
         ) const = 0;
 
         //- Return the number of holes
diff --git a/src/lagrangian/dieselSpray/injector/multiHoleInjector/multiHoleInjector.C b/src/lagrangian/dieselSpray/injector/multiHoleInjector/multiHoleInjector.C
index 49446e1f00c0bf2c909720936959c44ae240354d..878c9bcabb5891a3ddfde626a383b0f2fd012ec1 100644
--- a/src/lagrangian/dieselSpray/injector/multiHoleInjector/multiHoleInjector.C
+++ b/src/lagrangian/dieselSpray/injector/multiHoleInjector/multiHoleInjector.C
@@ -25,7 +25,6 @@ License
 
 #include "multiHoleInjector.H"
 #include "addToRunTimeSelectionTable.H"
-#include "Random.H"
 #include "unitConversion.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@@ -194,7 +193,7 @@ void Foam::multiHoleInjector::setTangentialVectors()
         position_[i] = centerPosition_ + 0.5*nozzleTipDiameter_*dp;
     }
 
-    Random rndGen(label(0));
+    cachedRandom rndGen(label(0), -1);
 
     for (label i=0; i<nHoles_; i++)
     {
@@ -202,7 +201,7 @@ void Foam::multiHoleInjector::setTangentialVectors()
         scalar magV = 0;
         while (magV < SMALL)
         {
-            vector testThis = rndGen.vector01();
+            vector testThis = rndGen.sample01<vector>();
 
             tangent = testThis - (testThis & direction_[i])*direction_[i];
             magV = mag(tangent);
@@ -244,7 +243,7 @@ Foam::vector Foam::multiHoleInjector::position
     const vector& axisOfSymmetry,
     const vector& axisOfWedge,
     const vector& axisOfWedgeNormal,
-    Random& rndGen
+    cachedRandom& rndGen
 ) const
 {
     if (twoD)
@@ -262,8 +261,8 @@ Foam::vector Foam::multiHoleInjector::position
     else
     {
         // otherwise, disc injection
-        scalar iRadius = d_*rndGen.scalar01();
-        scalar iAngle = constant::mathematical::twoPi*rndGen.scalar01();
+        scalar iRadius = d_*rndGen.sample01<scalar>();
+        scalar iAngle = constant::mathematical::twoPi*rndGen.sample01<scalar>();
 
         return
         (
diff --git a/src/lagrangian/dieselSpray/injector/multiHoleInjector/multiHoleInjector.H b/src/lagrangian/dieselSpray/injector/multiHoleInjector/multiHoleInjector.H
index 686ac382bd89da53e52beca3f469a462113d9cc5..cd2b5cad53905690810a1bc5f6bae564db05fe2c 100644
--- a/src/lagrangian/dieselSpray/injector/multiHoleInjector/multiHoleInjector.H
+++ b/src/lagrangian/dieselSpray/injector/multiHoleInjector/multiHoleInjector.H
@@ -148,7 +148,7 @@ public:
             const vector& axisOfSymmetry,
             const vector& axisOfWedge,
             const vector& axisOfWedgeNormal,
-            Random& rndGen
+            cachedRandom& rndGen
         ) const;
 
         //- Return the number of holes
diff --git a/src/lagrangian/dieselSpray/injector/swirlInjector/swirlInjector.C b/src/lagrangian/dieselSpray/injector/swirlInjector/swirlInjector.C
index ed8177e293310170673012bf20e3ad6b3bd8f3e7..57cce2960f3e8f49793d132c440a92eb9184b339 100644
--- a/src/lagrangian/dieselSpray/injector/swirlInjector/swirlInjector.C
+++ b/src/lagrangian/dieselSpray/injector/swirlInjector/swirlInjector.C
@@ -25,7 +25,6 @@ License
 
 #include "swirlInjector.H"
 #include "addToRunTimeSelectionTable.H"
-#include "Random.H"
 #include "mathematicalConstants.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@@ -179,13 +178,13 @@ Foam::swirlInjector::~swirlInjector()
 
 void Foam::swirlInjector::setTangentialVectors()
 {
-    Random rndGen(label(0));
+    cachedRandom rndGen(label(0), -1);
     scalar magV = 0.0;
     vector tangent;
 
     while (magV < SMALL)
     {
-        vector testThis = rndGen.vector01();
+        vector testThis = rndGen.sample01<vector>();
 
         tangent = testThis - (testThis & direction_)*direction_;
         magV = mag(tangent);
@@ -226,7 +225,7 @@ Foam::vector Foam::swirlInjector::position
     const vector& axisOfSymmetry,
     const vector& axisOfWedge,
     const vector& axisOfWedgeNormal,
-    Random& rndGen
+    cachedRandom& rndGen
 ) const
 {
     if (twoD)
@@ -244,8 +243,8 @@ Foam::vector Foam::swirlInjector::position
     else
     {
         // otherwise, disc injection
-        scalar iRadius = d_*rndGen.scalar01();
-        scalar iAngle = constant::mathematical::twoPi*rndGen.scalar01();
+        scalar iRadius = d_*rndGen.sample01<scalar>();
+        scalar iAngle = constant::mathematical::twoPi*rndGen.sample01<scalar>();
 
         return
         (
diff --git a/src/lagrangian/dieselSpray/injector/swirlInjector/swirlInjector.H b/src/lagrangian/dieselSpray/injector/swirlInjector/swirlInjector.H
index 0658139fa9f1c828e590a8b4b475bbfe716ed931..4a1083a3d787230baf1000f02872398ec7c281ba 100644
--- a/src/lagrangian/dieselSpray/injector/swirlInjector/swirlInjector.H
+++ b/src/lagrangian/dieselSpray/injector/swirlInjector/swirlInjector.H
@@ -157,7 +157,7 @@ public:
             const vector& axisOfSymmetry,
             const vector& axisOfWedge,
             const vector& axisOfWedgeNormal,
-            Random& rndGen
+            cachedRandom& rndGen
         ) const;
 
         //- Return the number of holes
diff --git a/src/lagrangian/dieselSpray/injector/unitInjector/unitInjector.C b/src/lagrangian/dieselSpray/injector/unitInjector/unitInjector.C
index a09e497bb1ab9fb642fddd867cf9e5217cfabf5a..e40646a06d9e18377669b9e577b99b97703794bd 100644
--- a/src/lagrangian/dieselSpray/injector/unitInjector/unitInjector.C
+++ b/src/lagrangian/dieselSpray/injector/unitInjector/unitInjector.C
@@ -25,7 +25,6 @@ License
 
 #include "unitInjector.H"
 #include "addToRunTimeSelectionTable.H"
-#include "Random.H"
 #include "mathematicalConstants.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@@ -154,13 +153,13 @@ Foam::unitInjector::~unitInjector()
 
 void Foam::unitInjector::setTangentialVectors()
 {
-    Random rndGen(label(0));
+    cachedRandom rndGen(label(0), -1);
     scalar magV = 0.0;
     vector tangent;
 
     while (magV < SMALL)
     {
-        vector testThis = rndGen.vector01();
+        vector testThis = rndGen.sample01<vector>();
 
         tangent = testThis - (testThis & direction_)*direction_;
         magV = mag(tangent);
@@ -199,7 +198,7 @@ Foam::vector Foam::unitInjector::position
     const vector& axisOfSymmetry,
     const vector& axisOfWedge,
     const vector& axisOfWedgeNormal,
-    Random& rndGen
+    cachedRandom& rndGen
 ) const
 {
     if (twoD)
@@ -217,8 +216,8 @@ Foam::vector Foam::unitInjector::position
     else
     {
         // otherwise, disc injection
-        scalar iRadius = d_*rndGen.scalar01();
-        scalar iAngle = constant::mathematical::twoPi*rndGen.scalar01();
+        scalar iRadius = d_*rndGen.sample01<scalar>();
+        scalar iAngle = constant::mathematical::twoPi*rndGen.sample01<scalar>();
 
         return
         (
diff --git a/src/lagrangian/dieselSpray/injector/unitInjector/unitInjector.H b/src/lagrangian/dieselSpray/injector/unitInjector/unitInjector.H
index f386783b10a502ea2a2492dfaf3f0e54ef057bef..1b61f6e96c3a5c6dfed136abf7f4b306d41ad365 100644
--- a/src/lagrangian/dieselSpray/injector/unitInjector/unitInjector.H
+++ b/src/lagrangian/dieselSpray/injector/unitInjector/unitInjector.H
@@ -137,7 +137,7 @@ public:
             const vector& axisOfSymmetry,
             const vector& axisOfWedge,
             const vector& axisOfWedgeNormal,
-            Random& rndGen
+            cachedRandom& rndGen
         ) const;
 
         //- Return the number of holes
diff --git a/src/lagrangian/dieselSpray/parcel/parcel.C b/src/lagrangian/dieselSpray/parcel/parcel.C
index 50837a923d42581b8f60e3b5933744b97ae30c32..3862508f7a58e7ec3f676833afa69092f3ed82a6 100644
--- a/src/lagrangian/dieselSpray/parcel/parcel.C
+++ b/src/lagrangian/dieselSpray/parcel/parcel.C
@@ -521,7 +521,7 @@ void Foam::parcel::updateParcelProperties
 
         scalar Taverage = TDroplet + (Tg - TDroplet)/3.0;
         // for a liquid Cl \approx Cp
-        scalar liquidcL = sDB.fuels().cp(pg, TDroplet, X());
+        scalar liquidcL = sDB.fuels().Cp(pg, TDroplet, X());
 
         cpMix = 0.0;
         for (label i=0; i<Ns; i++)
diff --git a/src/lagrangian/dieselSpray/parcel/setRelaxationTimes.C b/src/lagrangian/dieselSpray/parcel/setRelaxationTimes.C
index 0b4b305f0cdf82168eac3ba7dae1235ff116df33..36f1c092c45ef4019bdf9f427aed39770af51b49 100644
--- a/src/lagrangian/dieselSpray/parcel/setRelaxationTimes.C
+++ b/src/lagrangian/dieselSpray/parcel/setRelaxationTimes.C
@@ -65,7 +65,7 @@ void Foam::parcel::setRelaxationTimes
     // calculate mixture properties
     scalar W = 0.0;
     scalar kMixture = 0.0;
-    scalar cpMixture = 0.0;
+    scalar CpMixture = 0.0;
     scalar muf = 0.0;
 
     for (label i=0; i<Ns; i++)
@@ -74,7 +74,7 @@ void Foam::parcel::setRelaxationTimes
         W += Y/sDB.gasProperties()[i].W();
         // Using mass-fractions to average...
         kMixture += Y*sDB.gasProperties()[i].kappa(Tf);
-        cpMixture += Y*sDB.gasProperties()[i].Cp(Tf);
+        CpMixture += Y*sDB.gasProperties()[i].Cp(Tf);
         muf += Y*sDB.gasProperties()[i].mu(Tf);
     }
     W = 1.0/W;
@@ -98,7 +98,7 @@ void Foam::parcel::setRelaxationTimes
     scalar nuf = muf/rho;
 
     scalar liquidDensity = fuels.rho(pressure, T(), X());
-    scalar liquidcL = fuels.cp(pressure, T(), X());
+    scalar liquidcL = fuels.Cp(pressure, T(), X());
     scalar heatOfVapour = fuels.hl(pressure, T(), X());
 
     // calculate the partial rho of the fuel vapour
@@ -130,7 +130,7 @@ void Foam::parcel::setRelaxationTimes
     }
 
     scalar Reynolds = Re(Up, nuf);
-    scalar Prandtl = Pr(cpMixture, muf, kMixture);
+    scalar Prandtl = Pr(CpMixture, muf, kMixture);
 
     // calculate the characteritic times
 
@@ -280,7 +280,7 @@ void Foam::parcel::setRelaxationTimes
                 tauBoiling[i] = sDB.evaporation().boilingTime
                 (
                     fuels.properties()[i].rho(pressure, Td),
-                    fuels.properties()[i].cp(pressure, Td),
+                    fuels.properties()[i].Cp(pressure, Td),
                     heatOfVapour,
                     kMixture,
                     Nusselt,
@@ -292,7 +292,7 @@ void Foam::parcel::setRelaxationTimes
                     tBoilingSurface,
                     vapourSurfaceEnthalpy,
                     vapourFarEnthalpy,
-                    cpMixture,
+                    CpMixture,
                     temperature,
                     kLiquid
                 );
diff --git a/src/lagrangian/dieselSpray/spray/spray.C b/src/lagrangian/dieselSpray/spray/spray.C
index 81047c6809480bc37eeda8868845c13b6a52c986..7283cbaa4619ec5174ab1947aa199ca5521b93a2 100644
--- a/src/lagrangian/dieselSpray/spray/spray.C
+++ b/src/lagrangian/dieselSpray/spray/spray.C
@@ -68,7 +68,7 @@ Foam::spray::spray
     runTime_(U.time()),
     time0_(runTime_.value()),
     mesh_(U.mesh()),
-    rndGen_(label(0)),
+    rndGen_(label(0), -1),
     g_(g.value()),
 
     U_(U),
diff --git a/src/lagrangian/dieselSpray/spray/spray.H b/src/lagrangian/dieselSpray/spray/spray.H
index 86859aa17c1fd5570d444d4277b7e5b4277443ee..ac380c7520a6a55d539613eb33417a42ea80e63d 100644
--- a/src/lagrangian/dieselSpray/spray/spray.H
+++ b/src/lagrangian/dieselSpray/spray/spray.H
@@ -39,7 +39,7 @@ Description
 #include "liquid.H"
 #include "autoPtr.H"
 #include "liquidMixture.H"
-#include "Random.H"
+#include "cachedRandom.H"
 #include "thermoPhysicsTypes.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -76,7 +76,7 @@ class spray
             const fvMesh& mesh_;
 
             //- Random number generator
-            Random rndGen_;
+            cachedRandom rndGen_;
 
         //- Acceleration due to gravity
         const vector& g_;
@@ -250,7 +250,7 @@ public:
             inline tmp<volScalarField> evaporationSource(const label i) const;
             inline tmp<volScalarField> heatTransferSource() const;
 
-            inline Random& rndGen();
+            inline cachedRandom& rndGen();
             inline label subCycles() const;
             inline const vector& g() const;
 
diff --git a/src/lagrangian/dieselSpray/spray/sprayI.H b/src/lagrangian/dieselSpray/spray/sprayI.H
index d406f670dd47fdd2ee7caabc2d8cc5a3d20e6719..7087204888f6acb57e643182f015e301ef87d8c3 100644
--- a/src/lagrangian/dieselSpray/spray/sprayI.H
+++ b/src/lagrangian/dieselSpray/spray/sprayI.H
@@ -221,7 +221,7 @@ inline tmp<volScalarField> spray::heatTransferSource() const
 }
 
 
-inline Random& spray::rndGen()
+inline cachedRandom& spray::rndGen()
 {
     return rndGen_;
 }
diff --git a/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/LISA/LISA.C b/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/LISA/LISA.C
index 5334e2295d75dcfde49a993a99cd4a59bff37ac0..5082323aa5e82e48e1162acf535bbb6b958a07df 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/LISA/LISA.C
+++ b/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/LISA/LISA.C
@@ -54,7 +54,6 @@ Foam::LISA::LISA
 :
     atomizationModel(dict, sm),
     coeffsDict_(dict.subDict(typeName + "Coeffs")),
-    rndGen_(sm.rndGen()),
     Cl_(readScalar(coeffsDict_.lookup("Cl"))),
     cTau_(readScalar(coeffsDict_.lookup("cTau"))),
     Q_(readScalar(coeffsDict_.lookup("Q"))),
@@ -361,8 +360,8 @@ void Foam::LISA::atomizeParcel
 
         do
         {
-            x = minValue + range*rndGen_.scalar01();
-            y = rndGen_.scalar01();
+            x = minValue + range*rndGen_.sample01<scalar>();
+            y = rndGen_.sample01<scalar>();
 
             scalar xx = pow(x/dD, nExp);
 
diff --git a/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/LISA/LISA.H b/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/LISA/LISA.H
index 18234356d503a505331fed675198ac72edcf5b93..235aef280ea0993007d6f9beeada3a82be901f04 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/LISA/LISA.H
+++ b/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/LISA/LISA.H
@@ -68,7 +68,6 @@ private:
     // Private data
 
         dictionary coeffsDict_;
-        Random& rndGen_;
         scalar Cl_;
         scalar cTau_;
         scalar Q_;
diff --git a/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/atomizationModel/atomizationModel.H b/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/atomizationModel/atomizationModel.H
index db0cf0dada45e546bc4aa76f13924cbb69f2d17a..d543ec2bedbadecd8407ce469610ca7eff6f67ba 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/atomizationModel/atomizationModel.H
+++ b/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/atomizationModel/atomizationModel.H
@@ -55,7 +55,7 @@ protected:
 
         const dictionary& dict_;
         spray& spray_;
-        Random& rndGen_;
+        cachedRandom& rndGen_;
 
 
 public:
diff --git a/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/blobsSheetAtomization/blobsSheetAtomization.C b/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/blobsSheetAtomization/blobsSheetAtomization.C
index 3c58faaf4f65625217b411e374d7b5a3688b718c..6c527b9b28d5b2cc0da3a8bdf59e2ecb45a8cbc9 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/blobsSheetAtomization/blobsSheetAtomization.C
+++ b/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/blobsSheetAtomization/blobsSheetAtomization.C
@@ -56,8 +56,7 @@ Foam::blobsSheetAtomization::blobsSheetAtomization
     atomizationModel(dict, sm),
     coeffsDict_(dict.subDict(typeName + "Coeffs")),
     B_(readScalar(coeffsDict_.lookup("B"))),
-    angle_(readScalar(coeffsDict_.lookup("angle"))),
-    rndGen_(sm.rndGen())
+    angle_(readScalar(coeffsDict_.lookup("angle")))
 {}
 
 
diff --git a/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/blobsSheetAtomization/blobsSheetAtomization.H b/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/blobsSheetAtomization/blobsSheetAtomization.H
index 754c92f0f346d10c86f9bc7e78424250b4f8d5e6..2aef4303edfdfaf4d3ce88443d318785e957cdc3 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/blobsSheetAtomization/blobsSheetAtomization.H
+++ b/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/blobsSheetAtomization/blobsSheetAtomization.H
@@ -67,7 +67,6 @@ private:
         dictionary coeffsDict_;
         scalar B_;
         scalar angle_;
-        Random& rndGen_;
 
 
 public:
diff --git a/src/lagrangian/dieselSpray/spraySubModels/breakupModel/SHF/SHF.C b/src/lagrangian/dieselSpray/spraySubModels/breakupModel/SHF/SHF.C
index 4824d253f856f99ca16ab5df74220b23d2206c6d..2c00930e05c11239525b6616ced7bd0f075c39ac 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/breakupModel/SHF/SHF.C
+++ b/src/lagrangian/dieselSpray/spraySubModels/breakupModel/SHF/SHF.C
@@ -53,7 +53,6 @@ Foam::SHF::SHF
     breakupModel(dict, sm),
     coeffsDict_(dict.subDict(typeName + "Coeffs")),
     g_(sm.g()),
-    rndGen_(sm.rndGen()),
     weCorrCoeff_(readScalar(coeffsDict_.lookup("weCorrCoeff"))),
     weBuCrit_(readScalar(coeffsDict_.lookup("weBuCrit"))),
     weBuBag_(readScalar(coeffsDict_.lookup("weBuBag"))),
@@ -186,9 +185,9 @@ void Foam::SHF::breakupParcel
 
             do
             {
-                x = cDmaxBM_*rndGen_.scalar01();
+                x = cDmaxBM_*rndGen_.sample01<scalar>();
                 d = sqr(x)*d05;
-                y = rndGen_.scalar01();
+                y = rndGen_.sample01<scalar>();
 
                 px =
                     x
@@ -217,9 +216,9 @@ void Foam::SHF::breakupParcel
             do
             {
 
-                x = cDmaxS_*rndGen_.scalar01();
+                x = cDmaxS_*rndGen_.sample01<scalar>();
                 d = sqr(x)*d05;
-                y = rndGen_.scalar01();
+                y = rndGen_.sample01<scalar>();
 
                 px =
                     x
diff --git a/src/lagrangian/dieselSpray/spraySubModels/breakupModel/SHF/SHF.H b/src/lagrangian/dieselSpray/spraySubModels/breakupModel/SHF/SHF.H
index daf62e69af8f92d1916c44f23e077265b48cb926..549c48b5991535a39e1017080ab5e6f12610d20d 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/breakupModel/SHF/SHF.H
+++ b/src/lagrangian/dieselSpray/spraySubModels/breakupModel/SHF/SHF.H
@@ -66,8 +66,6 @@ private:
         // reference to gravity
         const vector& g_;
 
-        Random& rndGen_;
-
         // model constants
 
         scalar weCorrCoeff_;
diff --git a/src/lagrangian/dieselSpray/spraySubModels/breakupModel/TAB/TAB.C b/src/lagrangian/dieselSpray/spraySubModels/breakupModel/TAB/TAB.C
index 9d9f5523efc403cbc35ec9c427e62e65b9552c23..4f791ea7c49ae24879efab55f02aa222cca9eaab 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/breakupModel/TAB/TAB.C
+++ b/src/lagrangian/dieselSpray/spraySubModels/breakupModel/TAB/TAB.C
@@ -175,7 +175,7 @@ void Foam::TAB::breakupParcel
 
                 label n = 0;
                 bool found = false;
-                scalar random = rndGen_.scalar01();
+                scalar random = rndGen_.sample01<scalar>();
                 while (!found && (n<99))
                 {
                     if (rrd_[n] > random)
diff --git a/src/lagrangian/dieselSpray/spraySubModels/breakupModel/breakupModel/breakupModel.H b/src/lagrangian/dieselSpray/spraySubModels/breakupModel/breakupModel/breakupModel.H
index 8913d4ad6649e89417a0c3da5406b3581109b303..8ec1e38196ed33ae13d6b313d098aee7336ec4be 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/breakupModel/breakupModel/breakupModel.H
+++ b/src/lagrangian/dieselSpray/spraySubModels/breakupModel/breakupModel/breakupModel.H
@@ -56,7 +56,7 @@ protected:
         const dictionary& dict_;
 
         spray& spray_;
-        Random& rndGen_;
+        cachedRandom& rndGen_;
 
         Switch includeOscillation_;
 
diff --git a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/ORourke/ORourkeCollisionModel.C b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/ORourke/ORourkeCollisionModel.C
index f333f6b38798acc6b3704070518bf281edab4e83..0c0e10b8f366a96540a8903da868c8a4c3b55e00 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/ORourke/ORourkeCollisionModel.C
+++ b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/ORourke/ORourkeCollisionModel.C
@@ -48,7 +48,7 @@ Foam::ORourkeCollisionModel::ORourkeCollisionModel
 (
     const dictionary& dict,
     spray& sm,
-    Random& rndGen
+    cachedRandom& rndGen
 )
 :
     collisionModel(dict, sm, rndGen),
diff --git a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/ORourke/ORourkeCollisionModel.H b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/ORourke/ORourkeCollisionModel.H
index 64fb5f247c297bc5ad7e10a83ee8320dd2644782..e9fddb31d1ccf9b4c27364760d3fb9a412a252a6 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/ORourke/ORourkeCollisionModel.H
+++ b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/ORourke/ORourkeCollisionModel.H
@@ -75,7 +75,7 @@ public:
         (
             const dictionary& dict,
             spray& sm,
-            Random& rndGen
+            cachedRandom& rndGen
         );
 
 
diff --git a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/ORourke/sameCell.H b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/ORourke/sameCell.H
index dd66d1d3ddcd036ac3f019c861d359dbf4857d8b..7743a06f7cceceaa0ef0c315e2bb2ed2051a1cfb 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/ORourke/sameCell.H
+++ b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/ORourke/sameCell.H
@@ -35,7 +35,7 @@ scalar mdMin = mMin/nMin;
 scalar nu0 = 0.25*constant::mathematical::pi*sqr(sumD)*magVRel*dt/vols_[cell1];
 scalar nu = nMin*nu0;
 scalar collProb = exp(-nu);
-scalar xx = rndGen_.scalar01();
+scalar xx = rndGen_.sample01<scalar>();
 
 if ((xx > collProb) && (mMin > VSMALL) && (mMax > VSMALL))
 {
@@ -62,7 +62,7 @@ if ((xx > collProb) && (mMin > VSMALL) && (mMax > VSMALL))
     scalar WeColl = max(1.0e-12, 0.5*rho*magVRel*magVRel*dMin/sigma);
 
     scalar coalesceProb = min(1.0, 2.4*f/WeColl);
-    scalar prob = rndGen_.scalar01();
+    scalar prob = rndGen_.sample01<scalar>();
 
     // Coalescence
     if (prob < coalesceProb && coalescence_)
diff --git a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/collisionModel/collisionModel.C b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/collisionModel/collisionModel.C
index 29a98081eb5aa292f21d45da16b0176cfcf7479a..af6e7517147d8ff0c60a514eec6af78de8acd85c 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/collisionModel/collisionModel.C
+++ b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/collisionModel/collisionModel.C
@@ -41,7 +41,7 @@ Foam::collisionModel::collisionModel
 (
     const dictionary& dict,
     spray& sm,
-    Random& rndGen
+    cachedRandom& rndGen
 )
 :
     dict_(dict),
diff --git a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/collisionModel/collisionModel.H b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/collisionModel/collisionModel.H
index 94d8c73b76feda1639a902374f9b32060d8ac517..4554ea0ab4288f30fca424b66fde0ae9b34cb735 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/collisionModel/collisionModel.H
+++ b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/collisionModel/collisionModel.H
@@ -34,7 +34,7 @@ Description
 
 #include "IOdictionary.H"
 #include "spray.H"
-#include "Random.H"
+#include "cachedRandom.H"
 #include "Switch.H"
 #include "autoPtr.H"
 #include "runTimeSelectionTables.H"
@@ -56,7 +56,7 @@ protected:
     // Protected data
         const dictionary& dict_;
         spray& spray_;
-        Random& rndGen_;
+        cachedRandom& rndGen_;
 
         //dictionary coeffsDict_;
 
@@ -76,7 +76,7 @@ public:
             (
                 const dictionary& dict,
                 spray& sm,
-                Random& rndGen
+                cachedRandom& rndGen
             ),
             (dict, sm, rndGen)
         );
@@ -89,7 +89,7 @@ public:
         (
             const dictionary& dict,
             spray& sm,
-            Random& rndGen
+            cachedRandom& rndGen
         );
 
 
@@ -103,7 +103,7 @@ public:
         (
             const dictionary& dict,
             spray& sm,
-            Random& rndGen
+            cachedRandom& rndGen
         );
 
 
diff --git a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/collisionModel/collisionModelNew.C b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/collisionModel/collisionModelNew.C
index 9e56403c3696cdb2702379dbdbc58f8ab0188728..6b850a011665c491cd46dc0926b315e9fc3c42fc 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/collisionModel/collisionModelNew.C
+++ b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/collisionModel/collisionModelNew.C
@@ -37,7 +37,7 @@ Foam::autoPtr<Foam::collisionModel> Foam::collisionModel::New
 (
     const dictionary& dict,
     spray& sm,
-    Random& rndGen
+    cachedRandom& rndGen
 )
 {
     const word modelType(dict.lookup("collisionModel"));
diff --git a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/noCollision/noCollision.C b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/noCollision/noCollision.C
index 8949e12967572e43222297bc77b8a6f729e45737..f74dc9956ef47344fd6985475769b98bf205df41 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/noCollision/noCollision.C
+++ b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/noCollision/noCollision.C
@@ -49,7 +49,7 @@ Foam::noCollision::noCollision
 (
     const dictionary& dict,
     spray& sm,
-    Random& rndGen
+    cachedRandom& rndGen
 )
 :
     collisionModel(dict, sm, rndGen)
diff --git a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/noCollision/noCollision.H b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/noCollision/noCollision.H
index b78332edbc6c51950f4deef1f2729db8ce5043b5..edb857fcaaae88fa39f60b950fe7eab51066d884 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/noCollision/noCollision.H
+++ b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/noCollision/noCollision.H
@@ -62,7 +62,7 @@ public:
         (
             const dictionary& dict,
             spray& sm,
-            Random& rndGen
+            cachedRandom& rndGen
         );
 
     //- Destructor
diff --git a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/trajectoryModel/trajectoryCM.H b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/trajectoryModel/trajectoryCM.H
index 9b60cff915f723076c210e04e190fb911c294fe8..d9e83f68752bd8ca911e8fd35f65323289fa221e 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/trajectoryModel/trajectoryCM.H
+++ b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/trajectoryModel/trajectoryCM.H
@@ -51,7 +51,7 @@ if (vAlign > 0)
                 pow(0.5*sumD/max(0.5*sumD, closestDist), cSpace_)
                *exp(-cTime_*mag(alpha-beta));
 
-            scalar xx = rndGen_.scalar01();
+            scalar xx = rndGen_.sample01<scalar>();
 
             spray::iterator pMin = p1;
             spray::iterator pMax = p2;
@@ -106,7 +106,7 @@ if (vAlign > 0)
 
                 scalar coalesceProb = min(1.0, 2.4*f/WeColl);
 
-                scalar prob = rndGen_.scalar01();
+                scalar prob = rndGen_.sample01<scalar>();
 
                 // Coalescence
                 if ( prob < coalesceProb && coalescence_)
diff --git a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/trajectoryModel/trajectoryModel.C b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/trajectoryModel/trajectoryModel.C
index 60e2e9b7618b53af53169f90f16dd1dc86982a28..a58b729d073f291dc80125f9ad933c7179467cc5 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/trajectoryModel/trajectoryModel.C
+++ b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/trajectoryModel/trajectoryModel.C
@@ -48,7 +48,7 @@ Foam::trajectoryCollisionModel::trajectoryCollisionModel
 (
     const dictionary& dict,
     spray& sm,
-    Random& rndGen
+    cachedRandom& rndGen
 )
 :
     collisionModel(dict, sm, rndGen),
diff --git a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/trajectoryModel/trajectoryModel.H b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/trajectoryModel/trajectoryModel.H
index 62b55f9a39039926387444c8b1d06a228b6fef86..65323b305b172e554bcce4eb6e108e51dbe33cc0 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/collisionModel/trajectoryModel/trajectoryModel.H
+++ b/src/lagrangian/dieselSpray/spraySubModels/collisionModel/trajectoryModel/trajectoryModel.H
@@ -78,7 +78,7 @@ public:
         (
             const dictionary& dict,
             spray& sm,
-            Random& rndGen
+            cachedRandom& rndGen
         );
 
 
diff --git a/src/lagrangian/dieselSpray/spraySubModels/dispersionModel/gradientDispersionRAS/gradientDispersionRAS.C b/src/lagrangian/dieselSpray/spraySubModels/dispersionModel/gradientDispersionRAS/gradientDispersionRAS.C
index b154974a2643221bd45ae12f10907a5eb8acf285..9c7f0dffd082ee4bdf64fcf58c88e409dc17b177 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/dispersionModel/gradientDispersionRAS/gradientDispersionRAS.C
+++ b/src/lagrangian/dieselSpray/spraySubModels/dispersionModel/gradientDispersionRAS/gradientDispersionRAS.C
@@ -102,8 +102,8 @@ void Foam::gradientDispersionRAS::disperseParcels() const
                 scalar rsq = 10.0;
                 while ((rsq > 1.0) || (rsq == 0.0))
                 {
-                    x1 = 2.0*spray_.rndGen().scalar01() - 1.0;
-                    x2 = 2.0*spray_.rndGen().scalar01() - 1.0;
+                    x1 = 2.0*spray_.rndGen().sample01<scalar>() - 1.0;
+                    x2 = 2.0*spray_.rndGen().sample01<scalar>() - 1.0;
                     rsq = x1*x1 + x2*x2;
                 }
 
diff --git a/src/lagrangian/dieselSpray/spraySubModels/dispersionModel/stochasticDispersionRAS/stochasticDispersionRAS.C b/src/lagrangian/dieselSpray/spraySubModels/dispersionModel/stochasticDispersionRAS/stochasticDispersionRAS.C
index c7e7e4cd09f36bc7224e14ff8c50e16e95728f38..7085f45839d91ed522da41aa278b28f65019ca0c 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/dispersionModel/stochasticDispersionRAS/stochasticDispersionRAS.C
+++ b/src/lagrangian/dieselSpray/spraySubModels/dispersionModel/stochasticDispersionRAS/stochasticDispersionRAS.C
@@ -96,7 +96,7 @@ void Foam::stochasticDispersionRAS::disperseParcels() const
                 elmnt().tTurb() = 0.0;
 
                 scalar sigma = sqrt(2.0*k[cellI]/3.0);
-                vector dir = 2.0*spray_.rndGen().vector01() - one;
+                vector dir = 2.0*spray_.rndGen().sample01<vector>() - one;
                 dir /= mag(dir) + SMALL;
 
                 // numerical recipes... Ch. 7. Random Numbers...
@@ -104,8 +104,8 @@ void Foam::stochasticDispersionRAS::disperseParcels() const
                 scalar rsq = 10.0;
                 while (rsq > 1.0 || rsq == 0.0)
                 {
-                    x1 = 2.0*spray_.rndGen().scalar01() - 1.0;
-                    x2 = 2.0*spray_.rndGen().scalar01() - 1.0;
+                    x1 = 2.0*spray_.rndGen().sample01<scalar>() - 1.0;
+                    x2 = 2.0*spray_.rndGen().sample01<scalar>() - 1.0;
                     rsq = x1*x1 + x2*x2;
                 }
 
diff --git a/src/lagrangian/dieselSpray/spraySubModels/injectorModel/Chomiak/Chomiak.C b/src/lagrangian/dieselSpray/spraySubModels/injectorModel/Chomiak/Chomiak.C
index 2c924d6ed17d269567b73f1619a6e48ee85ba4ce..5fe010c740182b525c5e018d512c3f7c93f7cbe2 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/injectorModel/Chomiak/Chomiak.C
+++ b/src/lagrangian/dieselSpray/spraySubModels/injectorModel/Chomiak/Chomiak.C
@@ -123,7 +123,7 @@ Foam::vector Foam::ChomiakInjector::direction
     scalar alpha = sin(angle);
     scalar dcorr = cos(angle);
 
-    scalar beta = constant::mathematical::twoPi*rndGen_.scalar01();
+    scalar beta = constant::mathematical::twoPi*rndGen_.sample01<scalar>();
 
     // randomly distributed vector normal to the injection vector
     vector normal = vector::zero;
diff --git a/src/lagrangian/dieselSpray/spraySubModels/injectorModel/blobsSwirl/blobsSwirlInjector.C b/src/lagrangian/dieselSpray/spraySubModels/injectorModel/blobsSwirl/blobsSwirlInjector.C
index a0bf94b5a3cd7312e330ce6593418670a409ef9c..d649955dabe7c6afc71f3c10023fb0d55e54be1a 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/injectorModel/blobsSwirl/blobsSwirlInjector.C
+++ b/src/lagrangian/dieselSpray/spraySubModels/injectorModel/blobsSwirl/blobsSwirlInjector.C
@@ -105,7 +105,7 @@ Foam::scalar Foam::blobsSwirlInjector::d0
 {
     const injectorType& it = injectors_[n].properties();
 
-    scalar c = rndGen_.scalar01();
+    scalar c = rndGen_.sample01<scalar>();
 
     angle_ = degToRad(coneAngle_[n]/2.0 + c*coneInterval_[n]);
 
@@ -139,7 +139,7 @@ Foam::vector Foam::blobsSwirlInjector::direction
 {
     scalar alpha = sin(angle_);
     scalar dcorr = cos(angle_);
-    scalar beta = constant::mathematical::twoPi*rndGen_.scalar01();
+    scalar beta = constant::mathematical::twoPi*rndGen_.sample01<scalar>();
 
     // randomly distributed vector normal to the injection vector
     vector normal = vector::zero;
diff --git a/src/lagrangian/dieselSpray/spraySubModels/injectorModel/constant/constInjector.C b/src/lagrangian/dieselSpray/spraySubModels/injectorModel/constant/constInjector.C
index 7e52e1d77d19216127303dcd28648267fdd2a2f1..8f59a43cee40ccaefb31ec7119845f283219c1cc 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/injectorModel/constant/constInjector.C
+++ b/src/lagrangian/dieselSpray/spraySubModels/injectorModel/constant/constInjector.C
@@ -130,11 +130,12 @@ Foam::vector Foam::constInjector::direction
     */
 
     scalar angle =
-        rndGen_.scalar01()*sprayAngle_[n]*constant::mathematical::pi/360.0;
+        rndGen_.sample01<scalar>()*sprayAngle_[n]
+       *constant::mathematical::pi/360.0;
     scalar alpha = sin(angle);
     scalar dcorr = cos(angle);
 
-    scalar beta = constant::mathematical::twoPi*rndGen_.scalar01();
+    scalar beta = constant::mathematical::twoPi*rndGen_.sample01<scalar>();
 
     // randomly distributed vector normal to the injection vector
     vector normal = vector::zero;
diff --git a/src/lagrangian/dieselSpray/spraySubModels/injectorModel/definedHollowCone/definedHollowCone.C b/src/lagrangian/dieselSpray/spraySubModels/injectorModel/definedHollowCone/definedHollowCone.C
index ea7151f070184c4e79f64d4c922c315e7f04c5c4..87c15c13a260db490875bd5939a1c60c2c832d95 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/injectorModel/definedHollowCone/definedHollowCone.C
+++ b/src/lagrangian/dieselSpray/spraySubModels/injectorModel/definedHollowCone/definedHollowCone.C
@@ -157,11 +157,11 @@ Foam::vector Foam::definedHollowConeInjector::direction
     scalar angleOuter = it.getTableValue(outerConeAngle_, t);
 
     // use random number to generate angle between inner/outer cone angles
-    scalar angle = angleInner + rndGen_.scalar01()*(angleOuter - angleInner);
+    scalar angle = rndGen_.position<scalar>(angleInner, angleOuter);
 
     scalar alpha = sin(angle*constant::mathematical::pi/360.0);
     scalar dcorr = cos(angle*constant::mathematical::pi/360.0);
-    scalar beta = constant::mathematical::twoPi*rndGen_.scalar01();
+    scalar beta = constant::mathematical::twoPi*rndGen_.sample01<scalar>();
 
     // randomly distributed vector normal to the injection vector
     vector normal = vector::zero;
diff --git a/src/lagrangian/dieselSpray/spraySubModels/injectorModel/definedPressureSwirl/definedPressureSwirl.C b/src/lagrangian/dieselSpray/spraySubModels/injectorModel/definedPressureSwirl/definedPressureSwirl.C
index 53204fac477ff9216e61e32135b693c9ca152ab4..aaeae060fec4bbaebbcd8c35f26c8f6fc83c3eca 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/injectorModel/definedPressureSwirl/definedPressureSwirl.C
+++ b/src/lagrangian/dieselSpray/spraySubModels/injectorModel/definedPressureSwirl/definedPressureSwirl.C
@@ -90,7 +90,7 @@ Foam::scalar Foam::definedPressureSwirlInjector::d0
 {
     const injectorType& it = injectors_[n].properties();
 
-    scalar c = rndGen_.scalar01();
+    scalar c = rndGen_.sample01<scalar>();
     scalar coneAngle = it.getTableValue(coneAngle_, t);
     scalar coneInterval = it.getTableValue(coneInterval_, t);
     angle_ = coneAngle ;
@@ -212,7 +212,7 @@ Foam::vector Foam::definedPressureSwirlInjector::direction
 {
     scalar alpha = sin(angle_);
     scalar dcorr = cos(angle_);
-    scalar beta = constant::mathematical::twoPi*rndGen_.scalar01();
+    scalar beta = constant::mathematical::twoPi*rndGen_.sample01<scalar>();
 
     // randomly distributed vector normal to the injection vector
     vector normal = vector::zero;
diff --git a/src/lagrangian/dieselSpray/spraySubModels/injectorModel/hollowCone/hollowCone.C b/src/lagrangian/dieselSpray/spraySubModels/injectorModel/hollowCone/hollowCone.C
index 81a1cdf8a280082bd5b3bd7b3a8e86e318ab29aa..dc53ee59d2226a906241ffea13b39ee2d039d08b 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/injectorModel/hollowCone/hollowCone.C
+++ b/src/lagrangian/dieselSpray/spraySubModels/injectorModel/hollowCone/hollowCone.C
@@ -124,11 +124,10 @@ Foam::vector Foam::hollowConeInjector::direction
     const scalar d
 ) const
 {
-    scalar angle =
-        innerAngle_[n] + rndGen_.scalar01()*(outerAngle_[n]-innerAngle_[n]);
+    scalar angle = rndGen_.position<scalar>(innerAngle_[n], outerAngle_[n]);
     scalar alpha = sin(angle*constant::mathematical::pi/360.0);
     scalar dcorr = cos(angle*constant::mathematical::pi/360.0);
-    scalar beta = constant::mathematical::twoPi*rndGen_.scalar01();
+    scalar beta = constant::mathematical::twoPi*rndGen_.sample01<scalar>();
 
     // randomly distributed vector normal to the injection vector
     vector normal = vector::zero;
diff --git a/src/lagrangian/dieselSpray/spraySubModels/injectorModel/injectorModel/injectorModel.H b/src/lagrangian/dieselSpray/spraySubModels/injectorModel/injectorModel/injectorModel.H
index 7d505ce833c038c45d60fcabffcd648c3df60914..a66f4e9cb8ed47e169a011616a2d3884dd11eba2 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/injectorModel/injectorModel/injectorModel.H
+++ b/src/lagrangian/dieselSpray/spraySubModels/injectorModel/injectorModel/injectorModel.H
@@ -62,7 +62,7 @@ protected:
         spray& sm_;
 
         const PtrList<injector>& injectors_;
-        Random& rndGen_;
+        cachedRandom& rndGen_;
 
 
 public:
diff --git a/src/lagrangian/dieselSpray/spraySubModels/injectorModel/pressureSwirl/pressureSwirlInjector.C b/src/lagrangian/dieselSpray/spraySubModels/injectorModel/pressureSwirl/pressureSwirlInjector.C
index 9f299631f38c288b832344bcfe9d643db46e77a2..42c5e59adcba6cb540f7a6e323b72298b6c2f08e 100644
--- a/src/lagrangian/dieselSpray/spraySubModels/injectorModel/pressureSwirl/pressureSwirlInjector.C
+++ b/src/lagrangian/dieselSpray/spraySubModels/injectorModel/pressureSwirl/pressureSwirlInjector.C
@@ -100,7 +100,7 @@ Foam::scalar Foam::pressureSwirlInjector::d0
 {
     const injectorType& it = injectors_[n].properties();
 
-    scalar c = rndGen_.scalar01();
+    scalar c = rndGen_.sample01<scalar>();
     angle_ = coneAngle_[n] + 2.0*coneInterval_[n]*(0.5 - c);
 
     angle_ *= constant::mathematical::pi/360.0;
@@ -134,7 +134,7 @@ Foam::vector Foam::pressureSwirlInjector::direction
 {
     scalar alpha = sin(angle_);
     scalar dcorr = cos(angle_);
-    scalar beta = constant::mathematical::twoPi*rndGen_.scalar01();
+    scalar beta = constant::mathematical::twoPi*rndGen_.sample01<scalar>();
 
     // randomly distributed vector normal to the injection vector
     vector normal = vector::zero;