diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C
index ce7d78fe27399eee1cbb1e30d7d65c30b3c6e30e..67c83864ba7abd57a2a262a48dcdf521744e7e7c 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C
@@ -47,6 +47,7 @@ void Foam::KinematicCloud<ParcelType>::cloudSolution::read()
 
     if (steadyState())
     {
+        dict_.lookup("calcFrequency") >> calcFrequency_;
         dict_.lookup("maxTrackTime") >> maxTrackTime_;
         dict_.subDict("sourceTerms").lookup("resetOnStartup")
             >> resetSourcesOnStartup_;
@@ -65,6 +66,9 @@ Foam::KinematicCloud<ParcelType>::cloudSolution::cloudSolution
     dict_(dict),
     active_(dict.lookup("active")),
     transient_(false),
+    calcFrequency_(1),
+    iter_(1),
+    deltaT_(0.0),
     coupled_(false),
     cellValueSourceCorrection_(false),
     maxTrackTime_(0.0),
@@ -87,6 +91,9 @@ Foam::KinematicCloud<ParcelType>::cloudSolution::cloudSolution
     dict_(cs.dict_),
     active_(cs.active_),
     transient_(cs.transient_),
+    calcFrequency_(cs.calcFrequency_),
+    iter_(cs.iter_),
+    deltaT_(cs.deltaT_),
     coupled_(cs.coupled_),
     cellValueSourceCorrection_(cs.cellValueSourceCorrection_),
     maxTrackTime_(cs.maxTrackTime_),
@@ -104,6 +111,9 @@ Foam::KinematicCloud<ParcelType>::cloudSolution::cloudSolution
     dict_(dictionary::null),
     active_(false),
     transient_(false),
+    calcFrequency_(0),
+    iter_(0),
+    deltaT_(0.0),
     coupled_(false),
     cellValueSourceCorrection_(false),
     maxTrackTime_(0.0),
@@ -137,14 +147,36 @@ bool Foam::KinematicCloud<ParcelType>::cloudSolution::semiImplicit
 
 
 template<class ParcelType>
-bool Foam::KinematicCloud<ParcelType>::cloudSolution::sourceActive() const
+bool Foam::KinematicCloud<ParcelType>::cloudSolution::solveThisStep() const
 {
-    return coupled_ && (active_ || steadyState());
+    return
+        active_
+     && (
+            mesh_.time().outputTime()
+         || (mesh_.time().timeIndex() % calcFrequency_ == 0)
+        );
 }
 
 
 template<class ParcelType>
-bool Foam::KinematicCloud<ParcelType>::cloudSolution::writeThisStep() const
+bool Foam::KinematicCloud<ParcelType>::cloudSolution::canEvolve()
+{
+    // Set the calculation time step
+    if (transient_)
+    {
+        deltaT_ = mesh_.time().deltaTValue();
+    }
+    else
+    {
+        deltaT_ = maxTrackTime_;
+    }
+
+    return solveThisStep();
+}
+
+
+template<class ParcelType>
+bool Foam::KinematicCloud<ParcelType>::cloudSolution::output() const
 {
     return active_ && mesh_.time().outputTime();
 }
@@ -278,10 +310,10 @@ void Foam::KinematicCloud<ParcelType>::evolveCloud
     {
 //        this->surfaceFilm().injectStreadyState(td);
 
-        this->injection().injectSteadyState(td, solution_.maxTrackTime());
+        this->injection().injectSteadyState(td, solution_.deltaT());
 
         td.part() = ParcelType::trackData::tpLinearTrack;
-        Cloud<ParcelType>::move(td, solution_.maxTrackTime());
+        Cloud<ParcelType>::move(td,  solution_.deltaT());
     }
 }
 
@@ -331,10 +363,10 @@ void  Foam::KinematicCloud<ParcelType>::moveCollide
 )
 {
     td.part() = ParcelType::trackData::tpVelocityHalfStep;
-    Cloud<ParcelType>::move(td, this->db().time().deltaTValue());
+    Cloud<ParcelType>::move(td,  solution_.deltaT());
 
     td.part() = ParcelType::trackData::tpLinearTrack;
-    Cloud<ParcelType>::move(td, this->db().time().deltaTValue());
+    Cloud<ParcelType>::move(td,  solution_.deltaT());
 
     // td.part() = ParcelType::trackData::tpRotationalTrack;
     // Cloud<ParcelType>::move(td);
@@ -344,7 +376,7 @@ void  Foam::KinematicCloud<ParcelType>::moveCollide
     this->collision().collide();
 
     td.part() = ParcelType::trackData::tpVelocityHalfStep;
-    Cloud<ParcelType>::move(td, this->db().time().deltaTValue());
+    Cloud<ParcelType>::move(td,  solution_.deltaT());
 }
 
 
@@ -362,6 +394,8 @@ void Foam::KinematicCloud<ParcelType>::postEvolve()
     forces_.cacheFields(false, solution_.interpolationSchemes());
 
     this->postProcessing().post();
+
+    solution_.nextIter();
 }
 
 
@@ -732,7 +766,7 @@ void Foam::KinematicCloud<ParcelType>::relaxSources
 template<class ParcelType>
 void Foam::KinematicCloud<ParcelType>::evolve()
 {
-    if (solution_.active())
+    if (solution_.canEvolve())
     {
         typename ParcelType::trackData td(*this);
 
diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
index 74c2c0390995d4bebe2aa671f3035f6e4800c5df..a4acfed04555ebecde5a46dbd1d5bf73eae431cd 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
@@ -132,6 +132,16 @@ public:
             //- Transient flag
             Switch transient_;
 
+            //- Calculation frequency - carrier steps per cloud step
+            //  NOTE: Steady operation only
+            label calcFrequency_;
+
+            //- Current cloud iteration
+            label iter_;
+
+            //- Cloud solution time step
+            scalar deltaT_;
+
 
             // Run-time options
 
@@ -205,6 +215,18 @@ public:
                 //- Return const access to the steady flag
                 inline const Switch steadyState() const;
 
+                //- Return const access to the calculation frequency
+                inline label calcFrequency() const;
+
+                //- Return const access to the current cloud iteration
+                inline label iter() const;
+
+                //- Increment and return iter counter
+                inline label nextIter();
+
+                //- Return the time step
+                inline scalar deltaT() const;
+
                 //- Return const access to the coupled flag
                 inline const Switch coupled() const;
 
@@ -229,11 +251,15 @@ public:
 
         // Helper functions
 
-            //- Returns true if sources are active (at this time)
-            bool sourceActive() const;
+            //- Returns true if performing a cloud iteration this calc step
+            bool solveThisStep() const;
+
+            //- Returns true if possible to evolve the cloud and sets timestep
+            //  parameters
+            bool canEvolve();
 
             //- Returns true if writing this step
-            bool writeThisStep() const;
+            bool output() const;
     };
 
 
@@ -439,6 +465,9 @@ public:
                 //- Return const access to the solution properties
                 inline const cloudSolution& solution() const;
 
+                //- Return access to the solution properties
+                inline cloudSolution& solution();
+
                 //- Return the constant properties
                 inline const typename ParcelType::constantProperties&
                     constProps() const;
diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H
index 69c8e0999ddebf89f603cd7cb781fb313ef7bf91..9bd314af6183eb9a496618c82d91c42118db5022 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H
@@ -91,6 +91,36 @@ Foam::KinematicCloud<ParcelType>::cloudSolution::steadyState() const
 }
 
 
+template<class ParcelType>
+inline Foam::label
+Foam::KinematicCloud<ParcelType>::cloudSolution::calcFrequency() const
+{
+    return calcFrequency_;
+}
+
+
+template<class ParcelType>
+inline Foam::label Foam::KinematicCloud<ParcelType>::cloudSolution::iter() const
+{
+    return iter_;
+}
+
+
+template<class ParcelType>
+inline Foam::label Foam::KinematicCloud<ParcelType>::cloudSolution::nextIter()
+{
+    return ++iter_;
+}
+
+
+template<class ParcelType>
+inline Foam::scalar
+Foam::KinematicCloud<ParcelType>::cloudSolution::deltaT() const
+{
+    return deltaT_;
+}
+
+
 template<class ParcelType>
 inline const Foam::Switch
 Foam::KinematicCloud<ParcelType>::cloudSolution::coupled() const
@@ -164,6 +194,14 @@ Foam::KinematicCloud<ParcelType>::solution() const
 }
 
 
+template<class ParcelType>
+inline typename Foam::KinematicCloud<ParcelType>::cloudSolution&
+Foam::KinematicCloud<ParcelType>::solution()
+{
+    return solution_;
+}
+
+
 template<class ParcelType>
 inline const typename ParcelType::constantProperties&
 Foam::KinematicCloud<ParcelType>::constProps() const
@@ -445,7 +483,7 @@ Foam::KinematicCloud<ParcelType>::SU(volVectorField& U) const
             << max(UCoeff()).value() << endl;
     }
 
-    if (solution_.sourceActive())
+    if (solution_.coupled())
     {
         if (solution_.semiImplicit("U"))
         {
diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C
index 744b15b493f3de11b2345675150dbc0554dcd7ba..7615cc3024df99c76d546bae31ba3c3a8a3ef01b 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C
@@ -297,7 +297,7 @@ void Foam::ReactingCloud<ParcelType>::relaxSources
 template<class ParcelType>
 void Foam::ReactingCloud<ParcelType>::evolve()
 {
-    if (this->solution().active())
+    if (this->solution().canEvolve())
     {
         typename ParcelType::trackData td(*this);
 
diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudI.H b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudI.H
index 97c32f53386bb5bb8566bbb1e4d2b6a79f11a85a..be69361f095928d6db82e741e2e43989b11ff2e0 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudI.H
+++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudI.H
@@ -90,7 +90,7 @@ Foam::ReactingCloud<ParcelType>::SYi
     volScalarField& Yi
 ) const
 {
-    if (this->solution().sourceActive())
+    if (this->solution().coupled())
     {
         if (this->solution().semiImplicit("Yi"))
         {
@@ -165,7 +165,7 @@ Foam::ReactingCloud<ParcelType>::Srho(const label i) const
         )
     );
 
-    if (this->solution().sourceActive())
+    if (this->solution().coupled())
     {
         scalarField& rhoi = tRhoi();
         rhoi = rhoTrans_[i]/(this->db().time().deltaT()*this->mesh().V());
@@ -202,7 +202,7 @@ Foam::ReactingCloud<ParcelType>::Srho() const
         )
     );
 
-    if (this->solution().sourceActive())
+    if (this->solution().coupled())
     {
         scalarField& sourceField = trhoTrans();
         forAll(rhoTrans_, i)
@@ -221,7 +221,7 @@ template<class ParcelType>
 inline Foam::tmp<Foam::fvScalarMatrix>
 Foam::ReactingCloud<ParcelType>::Srho(volScalarField& rho) const
 {
-    if (this->solution().sourceActive())
+    if (this->solution().coupled())
     {
         tmp<volScalarField> trhoTrans
         (
diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C
index 2a3dbecb40badcba0a7b156248ada0738df469dc..fc33d58434a384ddf777343a6bede18b7bc17835 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C
@@ -220,7 +220,7 @@ void Foam::ReactingMultiphaseCloud<ParcelType>::resetSourceTerms()
 template<class ParcelType>
 void Foam::ReactingMultiphaseCloud<ParcelType>::evolve()
 {
-    if (this->solution().active())
+    if (this->solution().canEvolve())
     {
         typename ParcelType::trackData td(*this);
 
diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C
index 8f0a36688486b644840f51b85128850efc4ce7ac..c20bb483cf7d4fd4667455707befad4b69a54871 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C
@@ -286,7 +286,7 @@ void Foam::ThermoCloud<ParcelType>::relaxSources
 template<class ParcelType>
 void Foam::ThermoCloud<ParcelType>::evolve()
 {
-    if (this->solution().active())
+    if (this->solution().canEvolve())
     {
         typename ParcelType::trackData td(*this);
 
diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H
index 0cd8db5ce15dc6e826754def36f80f4b52f3be3d..dabbdc1211679c06827e4af9688585fbb78dd20b 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H
+++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H
@@ -133,7 +133,7 @@ Foam::ThermoCloud<ParcelType>::Sh(volScalarField& hs) const
             << max(hsCoeff()).value() << endl;
     }
 
-    if (this->solution().sourceActive())
+    if (this->solution().coupled())
     {
         if (this->solution().semiImplicit("hs"))
         {
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/ParticleTracks/ParticleTracks.C b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/ParticleTracks/ParticleTracks.C
index 06fb5200049889866526d18dc089973ed5b767c4..799afdfa4c94e4ba01a51b97cc05debb026e1091 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/ParticleTracks/ParticleTracks.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/ParticleTracks/ParticleTracks.C
@@ -105,7 +105,7 @@ void Foam::ParticleTracks<CloudType>::postFace(const parcelType& p)
 {
     if
     (
-        this->owner().solution().writeThisStep()
+        this->owner().solution().output()
      || this->owner().solution().transient()
     )
     {