diff --git a/src/OpenFOAM/db/error/messageStream.H b/src/OpenFOAM/db/error/messageStream.H
index 36da124720fc2dac5b219a67aada7598d1754274..c4f23fcd3511fa237a7d19537271ef0a6e78592e 100644
--- a/src/OpenFOAM/db/error/messageStream.H
+++ b/src/OpenFOAM/db/error/messageStream.H
@@ -365,6 +365,10 @@ extern messageStream SeriousError;
 #define Log                                                                    \
     if (log) Info
 
+//- Report write to Foam::Info if the class log switch is true
+#define Log_                                                                   \
+    if (this->log) Info
+
 
 //- Report an IO information message using Foam::Info
 //  for functionName in file __FILE__ at line __LINE__
diff --git a/src/OpenFOAM/primitives/subModelBase/subModelBase.C b/src/OpenFOAM/primitives/subModelBase/subModelBase.C
index 3e640d273464c4470ade7ebc786dc7c86912ef5a..913192339ff2a1ee128f649124d4fafd9e9db6e2 100644
--- a/src/OpenFOAM/primitives/subModelBase/subModelBase.C
+++ b/src/OpenFOAM/primitives/subModelBase/subModelBase.C
@@ -45,7 +45,8 @@ Foam::subModelBase::subModelBase(dictionary& properties)
     dict_(),
     baseName_(),
     modelType_(),
-    coeffDict_()
+    coeffDict_(),
+    log(properties.getOrDefault<bool>("log", true))
 {}
 
 
@@ -63,7 +64,8 @@ Foam::subModelBase::subModelBase
     dict_(dict),
     baseName_(baseName),
     modelType_(modelType),
-    coeffDict_(dict.subDict(modelType + dictExt))
+    coeffDict_(dict.subDict(modelType + dictExt)),
+    log(coeffDict_.getOrDefault<bool>("log", true))
 {}
 
 
@@ -81,7 +83,8 @@ Foam::subModelBase::subModelBase
     dict_(dict),
     baseName_(baseName),
     modelType_(modelType),
-    coeffDict_(dict)
+    coeffDict_(dict),
+    log(coeffDict_.getOrDefault<bool>("log", true))
 {}
 
 
@@ -92,13 +95,8 @@ Foam::subModelBase::subModelBase(const subModelBase& smb)
     dict_(smb.dict_),
     baseName_(smb.baseName_),
     modelType_(smb.modelType_),
-    coeffDict_(smb.coeffDict_)
-{}
-
-
-// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
-
-Foam::subModelBase::~subModelBase()
+    coeffDict_(smb.coeffDict_),
+    log(coeffDict_.getOrDefault<bool>("log", true))
 {}
 
 
@@ -145,6 +143,7 @@ bool Foam::subModelBase::defaultCoeffs(const bool printMsg) const
     bool def = coeffDict_.getOrDefault("defaultCoeffs", false);
     if (printMsg && def)
     {
+        // Note: not using Log<< for output
         Info<< incrIndent;
         Info<< indent << "Employing default coefficients" << endl;
         Info<< decrIndent;
diff --git a/src/OpenFOAM/primitives/subModelBase/subModelBase.H b/src/OpenFOAM/primitives/subModelBase/subModelBase.H
index 1154240e77c7141b244b5e82b80805f1af90d507..6e592df6ab8eafee342975a507d5d96f09b1afd8 100644
--- a/src/OpenFOAM/primitives/subModelBase/subModelBase.H
+++ b/src/OpenFOAM/primitives/subModelBase/subModelBase.H
@@ -91,6 +91,12 @@ protected:
 
 public:
 
+    // Public Data
+
+        //- Flag to write log into Info
+        bool log;
+
+
     // Constructors
 
         //- Construct null
@@ -121,7 +127,7 @@ public:
 
 
     //- Destructor
-    virtual ~subModelBase();
+    virtual ~subModelBase() = default;
 
 
     // Member Functions
diff --git a/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C
index 7cfca61ea6b39822ec587208aa13e3962907de74..89ccfdeee0df467678184078bdf1aa536cf89573 100644
--- a/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C
@@ -208,7 +208,7 @@ void  Foam::CollidingCloud<CloudType>::motion
 
     if (nSubCycles > 1)
     {
-        Info<< "    " << nSubCycles << " move-collide subCycles" << endl;
+        Log_<< "    " << nSubCycles << " move-collide subCycles" << endl;
 
         subCycleTime moveCollideSubCycle
         (
@@ -238,7 +238,7 @@ void Foam::CollidingCloud<CloudType>::info()
     scalar rotationalKineticEnergy = rotationalKineticEnergyOfSystem();
     reduce(rotationalKineticEnergy, sumOp<scalar>());
 
-    Info<< "    Rotational kinetic energy       = "
+    Log_<< "    Rotational kinetic energy       = "
         << rotationalKineticEnergy << nl;
 }
 
diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C
index 460a83a8a35aba401efbfeea3ea1db66aa842f7e..db2132bf0ac7a723cd58730c1eebfc9bb83a0985 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C
@@ -133,6 +133,8 @@ void Foam::KinematicCloud<CloudType>::solve
 {
     addProfiling(prof, "cloud::solve");
 
+    log = solution_.log();
+
     if (solution_.steadyState())
     {
         cloud.storeState();
@@ -267,7 +269,7 @@ void Foam::KinematicCloud<CloudType>::postEvolve
     const typename parcelType::trackingData& td
 )
 {
-    Info<< endl;
+    Log_<< endl;
 
     if (debug)
     {
@@ -457,7 +459,8 @@ Foam::KinematicCloud<CloudType>::KinematicCloud
             mesh_,
             dimensionedScalar(dimMass, Zero)
         )
-    )
+    ),
+    log(true)
 {
     if (solution_.active())
     {
@@ -545,7 +548,8 @@ Foam::KinematicCloud<CloudType>::KinematicCloud
             ),
             c.UCoeff_()
         )
-    )
+    ),
+    log(c.log)
 {}
 
 
@@ -611,7 +615,8 @@ Foam::KinematicCloud<CloudType>::KinematicCloud
 
     UIntegrator_(nullptr),
     UTrans_(nullptr),
-    UCoeff_(nullptr)
+    UCoeff_(nullptr),
+    log(c.log)
 {}
 
 
@@ -743,7 +748,7 @@ void Foam::KinematicCloud<CloudType>::preEvolve
     // with topology change due to lazy evaluation of valid mesh dimensions
     label nGeometricD = mesh_.nGeometricD();
 
-    Info<< "\nSolving" << nGeometricD << "-D cloud " << this->name() << endl;
+    Log_<< "\nSolving" << nGeometricD << "-D cloud " << this->name() << endl;
 
     this->dispersion().cacheFields(true);
     forces_.cacheFields(true);
@@ -881,7 +886,7 @@ void Foam::KinematicCloud<CloudType>::info()
       : 0
     );
 
-    Info<< "Cloud: " << this->name() << nl
+    Log_<< "Cloud: " << this->name() << nl
         << "    Current number of parcels       = " << nTotParcel << nl
         << "    Current mass in system          = "
         << returnReduce(massInSystem(), sumOp<scalar>()) << nl
@@ -890,9 +895,10 @@ void Foam::KinematicCloud<CloudType>::info()
         << "    Linear kinetic energy           = " << linearKineticEnergy << nl
         << "    Average particle per parcel     = " << particlePerParcel << nl;
 
-    injectors_.info(Info);
-    this->surfaceFilm().info(Info);
-    this->patchInteraction().info(Info);
+
+    injectors_.info();
+    this->surfaceFilm().info();
+    this->patchInteraction().info();
 
     if (this->packingModel().active())
     {
@@ -906,8 +912,8 @@ void Foam::KinematicCloud<CloudType>::info()
         const scalar alphaMin = gMin(alpha().primitiveField());
         const scalar alphaMax = gMax(alpha().primitiveField());
 
-        Info<< "    Min cell volume fraction        = " << alphaMin << endl;
-        Info<< "    Max cell volume fraction        = " << alphaMax << endl;
+        Log_<< "    Min cell volume fraction        = " << alphaMin << nl
+            << "    Max cell volume fraction        = " << alphaMax << endl;
 
         if (alphaMax < SMALL)
         {
@@ -933,7 +939,7 @@ void Foam::KinematicCloud<CloudType>::info()
 
         reduce(nMin, minOp<scalar>());
 
-        Info<< "    Min dense number of parcels     = " << nMin << endl;
+        Log_<< "    Min dense number of parcels     = " << nMin << endl;
     }
 }
 
diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
index 288c7ec747ff90e8791b2982698329a242d33a17..267a7643cdd11c2ca21cbf8fda554c8b84bbaa65 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
@@ -302,6 +302,12 @@ protected:
 
 public:
 
+    // Public Data
+
+        //- Flag to write log into Info
+        bool log;
+
+
     // Constructors
 
         //- Construct given carrier gas fields
diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.C
index eba6703ddbae0ccda967b9e1fda62283e06b1e91..f97a3ba188eb1fd7625bf33292d4c012532b06d2 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.C
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.C
@@ -39,6 +39,7 @@ Foam::cloudSolution::cloudSolution(const fvMesh& mesh, const dictionary& dict)
     active_(dict.lookup("active")),
     transient_(false),
     calcFrequency_(1),
+    logFrequency_(1),
     maxCo_(0.3),
     iter_(1),
     trackTime_(0.0),
@@ -82,6 +83,7 @@ Foam::cloudSolution::cloudSolution(const cloudSolution& cs)
     active_(cs.active_),
     transient_(cs.transient_),
     calcFrequency_(cs.calcFrequency_),
+    logFrequency_(cs.logFrequency_),
     maxCo_(cs.maxCo_),
     iter_(cs.iter_),
     trackTime_(cs.trackTime_),
@@ -101,6 +103,7 @@ Foam::cloudSolution::cloudSolution(const fvMesh& mesh)
     active_(false),
     transient_(false),
     calcFrequency_(0),
+    logFrequency_(0),
     maxCo_(GREAT),
     iter_(0),
     trackTime_(0.0),
@@ -153,6 +156,8 @@ void Foam::cloudSolution::read()
     dict_.readIfPresent("maxCo", maxCo_);
     dict_.readIfPresent("deltaTMax", deltaTMax_);
 
+    dict_.readIfPresent("logFrequency", logFrequency_);
+
     if (steadyState())
     {
         dict_.readEntry("calcFrequency", calcFrequency_);
@@ -264,6 +269,15 @@ bool Foam::cloudSolution::canEvolve()
 }
 
 
+bool Foam::cloudSolution::log() const
+{
+    return
+        active_
+     && (logFrequency_ > 0)
+     && (mesh_.time().timeIndex() % logFrequency_ == 0);
+}
+
+
 bool Foam::cloudSolution::output() const
 {
     return active_ && mesh_.time().writeTime();
diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.H
index 3862399abf31333c0596fa7405c15758f4076efd..6af6b5053654dbe0bf4741be2c03ce0f25b42ee9 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.H
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.H
@@ -71,6 +71,10 @@ class cloudSolution
         //  NOTE: Steady operation only
         label calcFrequency_;
 
+        //- Output log frequency - carrier steps per cloud step
+        //  Default = 1
+        label logFrequency_;
+
         //- Maximum particle Courant number
         //  Max fraction of current cell that can be traversed in a single
         //  step
@@ -210,9 +214,12 @@ public:
         bool solveThisStep() const;
 
         //- Returns true if possible to evolve the cloud and sets timestep
-        //  parameters
+        //- parameters
         bool canEvolve();
 
+        //- Returns true if possible to log this step
+        bool log() const;
+
         //- Returns true if writing this step
         bool output() const;
 
diff --git a/src/lagrangian/intermediate/clouds/Templates/MPPICCloud/MPPICCloud.C b/src/lagrangian/intermediate/clouds/Templates/MPPICCloud/MPPICCloud.C
index 54549cbe8cff9269e0798a120f3edcc30d6eb3ab..14dcb633edc390285c80ca2364d658cd5a179e67 100644
--- a/src/lagrangian/intermediate/clouds/Templates/MPPICCloud/MPPICCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/MPPICCloud/MPPICCloud.C
@@ -286,8 +286,8 @@ void Foam::MPPICCloud<CloudType>::info()
     const scalar alphaMin = gMin(alpha().primitiveField());
     const scalar alphaMax = gMax(alpha().primitiveField());
 
-    Info<< "    Min cell volume fraction        = " << alphaMin << endl;
-    Info<< "    Max cell volume fraction        = " << alphaMax << endl;
+    Log_ << "    Min cell volume fraction        = " << alphaMin << nl
+         << "    Max cell volume fraction        = " << alphaMax << endl;
 
     if (alphaMax < SMALL)
     {
@@ -313,7 +313,7 @@ void Foam::MPPICCloud<CloudType>::info()
 
     reduce(nMin, minOp<scalar>());
 
-    Info<< "    Min dense number of parcels     = " << nMin << endl;
+    Log_<< "    Min dense number of parcels     = " << nMin << endl;
 }
 
 
diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C
index e1b91f54889f116f25874c92c5e50670828dc747..f50cdf9c439db6a8e87a4ad5cc8a7acbcafdf58a 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C
@@ -336,7 +336,7 @@ void Foam::ReactingCloud<CloudType>::info()
 {
     CloudType::info();
 
-    this->phaseChange().info(Info);
+    this->phaseChange().info();
 }
 
 
diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingHeterogeneousCloud/ReactingHeterogeneousCloud.C b/src/lagrangian/intermediate/clouds/Templates/ReactingHeterogeneousCloud/ReactingHeterogeneousCloud.C
index e11627b45a94849eb7a9ce658f6e5b6a134d9942..11f6214f0958e3e2875116c67378a9fe0c0f83ad 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ReactingHeterogeneousCloud/ReactingHeterogeneousCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/ReactingHeterogeneousCloud/ReactingHeterogeneousCloud.C
@@ -247,7 +247,8 @@ template<class CloudType>
 void Foam::ReactingHeterogeneousCloud<CloudType>::info()
 {
     CloudType::info();
-    heterogeneousReactionModel_->info(Info);
+
+    heterogeneousReactionModel_->info();
 }
 
 
diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C
index b2b68dae3f5ca5b1e9ac64354c1e486c77c9680e..be23dc5fa5e26354238dfd9dc6b1e979a287f62d 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C
@@ -287,8 +287,8 @@ void Foam::ReactingMultiphaseCloud<CloudType>::info()
 {
     CloudType::info();
 
-    this->devolatilisation().info(Info);
-    this->surfaceReaction().info(Info);
+    this->devolatilisation().info();
+    this->surfaceReaction().info();
 }
 
 
diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C
index 35a0e140b3d48f116a0e16966eadaf122ffc5191..8eacefd6aae0e6827cfa96c9036b218c56716f64 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C
@@ -484,7 +484,7 @@ void Foam::ThermoCloud<CloudType>::info()
 {
     CloudType::info();
 
-    Info<< "    Temperature min/max             = " << Tmin() << ", " << Tmax()
+    Log_<< "    Temperature min/max             = " << Tmin() << ", " << Tmax()
         << endl;
 }
 
diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H
index 6413a68b9bed9632f325f860107cbdfa6d48efb7..dac71f356e9425bec54fff43e91292abbdcb717d 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H
+++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H
@@ -226,13 +226,11 @@ template<class CloudType>
 inline Foam::tmp<Foam::fvScalarMatrix>
 Foam::ThermoCloud<CloudType>::Sh(volScalarField& hs) const
 {
-    if (debug)
-    {
-        Info<< "hsTrans min/max = " << min(hsTrans()).value() << ", "
-            << max(hsTrans()).value() << nl
-            << "hsCoeff min/max = " << min(hsCoeff()).value() << ", "
-            << max(hsCoeff()).value() << endl;
-    }
+    DebugInfo
+        << "hsTrans min/max = " << min(hsTrans()).value() << ", "
+        << max(hsTrans()).value() << nl
+        << "hsCoeff min/max = " << min(hsCoeff()).value() << ", "
+        << max(hsCoeff()).value() << endl;
 
     if (this->solution().coupled())
     {
diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FaceInteraction/FaceInteraction.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FaceInteraction/FaceInteraction.C
index bb2162c1b32728fc28341858a6651a27fabfc48b..0e06c6e16292fbac5c83311863535e5288c692a4 100644
--- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FaceInteraction/FaceInteraction.C
+++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FaceInteraction/FaceInteraction.C
@@ -70,7 +70,7 @@ void Foam::FaceInteraction<CloudType>::write()
     const fvMesh& mesh = this->owner().mesh();
     const faceZoneMesh& fzm = mesh.faceZones();
 
-    Info<< type() << " output:" << nl;
+    Log_<< type() << " output:" << nl;
 
     // Retrieve any stored data
     const label nZones = faceZoneIDs_.size();
@@ -98,7 +98,7 @@ void Foam::FaceInteraction<CloudType>::write()
     forAll(faceZoneIDs_, i)
     {
         const label zonei = faceZoneIDs_[i];
-        Info<< "    Zone : " << fzm[zonei].name() << nl
+        Log_<< "    Zone : " << fzm[zonei].name() << nl
             << "        Escape  : " << npe[i] << nl
             << "        Stick   : " << nps[i] << nl
             << "        Rebound : " << npr[i] << nl;
@@ -116,7 +116,7 @@ void Foam::FaceInteraction<CloudType>::write()
                 << endl;
         }
     }
-    Info<< endl;
+    Log_<< endl;
 
     // Set restart data
     this->setModelProperty("nEscape", npe);
diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.C
index f6970e42a975610195848fdadabd4d573aabd301..e358155e50ce4221cfa8ac28ad6147fa0e5661d1 100644
--- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.C
+++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.C
@@ -44,12 +44,9 @@ void Foam::FacePostProcessing<CloudType>::makeLogFile
 )
 {
     // Create the output file if not already created
-    if (log_)
+    if (logToFile_)
     {
-        if (debug)
-        {
-            Info<< "Creating output file." << endl;
-        }
+        DebugInfo << "Creating output file." << endl;
 
         if (Pstream::master())
         {
@@ -102,7 +99,7 @@ void Foam::FacePostProcessing<CloudType>::write()
 
     const label proci = Pstream::myProcNo();
 
-    Info<< type() << " output:" << nl;
+    Log_<< type() << " output:" << nl;
 
     List<scalarField> zoneMassTotal(mass_.size());
     List<scalarField> zoneMassFlowRate(massFlowRate_.size());
@@ -130,7 +127,7 @@ void Foam::FacePostProcessing<CloudType>::write()
             );
         const scalar sumMassFlowRate = sum(zoneMassFlowRate[zoneI]);
 
-        Info<< "    " << zoneName
+        Log_<< "    " << zoneName
             << ": total mass = " << sumMassTotal
             << "; average mass flow rate = " << sumMassFlowRate
             << nl;
@@ -143,7 +140,7 @@ void Foam::FacePostProcessing<CloudType>::write()
         }
     }
 
-    Info<< endl;
+    Log_<< endl;
 
 
     if (surfaceFormat_ != "none")
@@ -259,7 +256,7 @@ Foam::FacePostProcessing<CloudType>::FacePostProcessing
     faceZoneIDs_(),
     surfaceFormat_(this->coeffDict().getWord("surfaceFormat")),
     resetOnWrite_(this->coeffDict().getBool("resetOnWrite")),
-    log_(this->coeffDict().getBool("log")),
+    logToFile_(this->coeffDict().getBool("log")),
     totalTime_(0.0),
     mass_(),
     massTotal_(),
@@ -340,7 +337,7 @@ Foam::FacePostProcessing<CloudType>::FacePostProcessing
     faceZoneIDs_(pff.faceZoneIDs_),
     surfaceFormat_(pff.surfaceFormat_),
     resetOnWrite_(pff.resetOnWrite_),
-    log_(pff.log_),
+    logToFile_(pff.logToFile_),
     totalTime_(pff.totalTime_),
     mass_(pff.mass_),
     massTotal_(pff.massTotal_),
diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.H
index 087b116d4018c613039db075299d8949121ab46e..d729e491bfcfa154a29ac0542ea2d11706deb6bc 100644
--- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.H
+++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.H
@@ -78,7 +78,7 @@ class FacePostProcessing
         bool resetOnWrite_;
 
         //- Flag to indicate whether data should be written to file
-        bool log_;
+        bool logToFile_;
 
         //- Total time
         scalar totalTime_;
diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C
index 6cfb6c04d3c88ffcf6eacbc6794da48c0c54c341..63c165ab79f00021d5d1fe9ad24bbe194b489c26 100644
--- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C
+++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C
@@ -45,12 +45,9 @@ void Foam::ParticleCollector<CloudType>::makeLogFile
 )
 {
     // Create the output file if not already created
-    if (log_)
+    if (logToFile_)
     {
-        if (debug)
-        {
-            Info<< "Creating output file" << endl;
-        }
+        DebugInfo<< "Creating output file" << endl;
 
         if (Pstream::master())
         {
@@ -419,7 +416,7 @@ void Foam::ParticleCollector<CloudType>::write()
         massTotal_[facei] += mass_[facei];
     }
 
-    Info<< type() << " output:" << nl;
+    Log_<< type() << " output:" << nl;
 
     Field<scalar> faceMassTotal(mass_.size(), Zero);
     this->getModelProperty("massTotal", faceMassTotal);
@@ -452,7 +449,7 @@ void Foam::ParticleCollector<CloudType>::write()
         }
     }
 
-    Info<< "    sum(total mass) = " << sumTotalMass << nl
+    Log_<< "    sum(total mass) = " << sumTotalMass << nl
         << "    sum(average mass flow rate) = " << sumAverageMFR << nl
         << endl;
 
@@ -523,7 +520,7 @@ Foam::ParticleCollector<CloudType>::ParticleCollector
     parcelType_(this->coeffDict().getOrDefault("parcelType", -1)),
     removeCollected_(this->coeffDict().getBool("removeCollected")),
     resetOnWrite_(this->coeffDict().getBool("resetOnWrite")),
-    log_(this->coeffDict().getBool("log")),
+    logToFile_(this->coeffDict().getBool("log")),
     points_(),
     faces_(),
     faceTris_(),
@@ -608,7 +605,7 @@ Foam::ParticleCollector<CloudType>::ParticleCollector
     parcelType_(pc.parcelType_),
     removeCollected_(pc.removeCollected_),
     resetOnWrite_(pc.resetOnWrite_),
-    log_(pc.log_),
+    logToFile_(pc.logToFile_),
     points_(pc.points_),
     faces_(pc.faces_),
     faceTris_(pc.faceTris_),
diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.H
index b4bdd2ce3eb9db788dc2afaa44af6f0215ed03f7..a934557a0b2594fc4185601345091a59d0c3d01d 100644
--- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.H
+++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.H
@@ -144,7 +144,7 @@ private:
         bool resetOnWrite_;
 
         //- Flag to indicate whether data should be written to file
-        bool log_;
+        bool logToFile_;
 
         //- List of points
         Field<point> points_;
diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleZoneInfo/ParticleZoneInfo.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleZoneInfo/ParticleZoneInfo.C
index 62d38883429fac8338e82283c4fa8edcafd8582e..e78d65a5ee7933eb6bf9467f8deddbf10b428c0e 100644
--- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleZoneInfo/ParticleZoneInfo.C
+++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleZoneInfo/ParticleZoneInfo.C
@@ -287,7 +287,7 @@ void Foam::ParticleZoneInfo<CloudType>::postEvolve
     const typename parcelType::trackingData& td
 )
 {
-    Info<< this->type() << ":" << nl
+    Log_<< this->type() << ":" << nl
         << "    Cell zone                       = " << cellZoneName_ << nl
         << "    Contributions                   = "
         << returnReduce(movedParticles_.size(), sumOp<label>())
@@ -295,7 +295,7 @@ void Foam::ParticleZoneInfo<CloudType>::postEvolve
 
     if (!this->writeTime())
     {
-        Info<< endl;
+        Log_<< endl;
     }
 
     for (const auto& p : movedParticles_)
@@ -412,7 +412,7 @@ void Foam::ParticleZoneInfo<CloudType>::write()
                 }
             }
 
-            Info<< "    Number of particles             = " << nData << nl
+            Log_<< "    Number of particles             = " << nData << nl
                 << "    Written data to " << os.name() << endl;
 
             this->setModelProperty("data", globalParticles);
@@ -437,14 +437,14 @@ void Foam::ParticleZoneInfo<CloudType>::write()
             os << p << nl;
         }
 
-        Info<< "    Number of particles             = " << data_.size() << nl
+        Log_<< "    Number of particles             = " << data_.size() << nl
             << "    Written data to " << os.name() << endl;
 
         this->setModelProperty("data", data_);
         this->setModelProperty("maxIDs", maxIDs_);
     }
 
-    Info<< endl;
+    Log_<< endl;
 }
 
 
diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/RemoveParcels/RemoveParcels.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/RemoveParcels/RemoveParcels.C
index 62a7d40910f399237b5028fcae6e264675eb917a..dd92c540d52415d06a852b8d52a62f58560db311 100644
--- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/RemoveParcels/RemoveParcels.C
+++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/RemoveParcels/RemoveParcels.C
@@ -43,7 +43,7 @@ void Foam::RemoveParcels<CloudType>::makeLogFile
 )
 {
     // Create the output file if not already created
-    if (log_)
+    if (logToFile_)
     {
         DebugInfo<< "Creating output file." << endl;
 
@@ -81,7 +81,7 @@ void Foam::RemoveParcels<CloudType>::postEvolve
     const typename parcelType::trackingData& td
 )
 {
-    Info<< this->modelName() << " output:" << nl;
+    Log_<< this->modelName() << " output:" << nl;
 
     const fvMesh& mesh = this->owner().mesh();
     const faceZoneMesh& fzm = mesh.faceZones();
@@ -93,7 +93,7 @@ void Foam::RemoveParcels<CloudType>::postEvolve
         scalar zoneMass = returnReduce(mass_[i], sumOp<scalar>());
         label zoneNParcels = returnReduce(nParcels_[i], sumOp<label>());
 
-        Info<< "    faceZone " << zoneName
+        Log_<< "    faceZone " << zoneName
             << ": removed " << zoneNParcels
             << " parcels with mass " << zoneMass
             << nl;
@@ -127,7 +127,7 @@ void Foam::RemoveParcels<CloudType>::write()
         }
     }
 
-    Info<< endl;
+    Log_<< endl;
 
     if (resetOnWrite_)
     {
@@ -158,7 +158,7 @@ Foam::RemoveParcels<CloudType>::RemoveParcels
     nParcels_(),
     mass_(),
     typeId_(this->coeffDict().template getOrDefault<label>("parcelType", -1)),
-    log_(this->coeffDict().getBool("log")),
+    logToFile_(this->coeffDict().getBool("log")),
     resetOnWrite_(this->coeffDict().getBool("resetOnWrite")),
     resetOnStart_(this->coeffDict().getBool("resetOnStart")),
     outputFilePtr_()
@@ -239,7 +239,7 @@ Foam::RemoveParcels<CloudType>::RemoveParcels
     nParcels_(rpf.nParcels_),
     mass_(rpf.mass_),
     typeId_(rpf.typeId_),
-    log_(rpf.log_),
+    logToFile_(rpf.logToFile_),
     resetOnWrite_(rpf.resetOnWrite_),
     resetOnStart_(rpf.resetOnStart_),
     outputFilePtr_()
diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/RemoveParcels/RemoveParcels.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/RemoveParcels/RemoveParcels.H
index c89f5adffebd8d8c027658fd6f4041f6ebd06b7d..31d1469033e8279b99dcc24ed7becabc321134ae 100644
--- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/RemoveParcels/RemoveParcels.H
+++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/RemoveParcels/RemoveParcels.H
@@ -89,7 +89,7 @@ class RemoveParcels
         label typeId_;
 
         //- Flag to indicate whether data should be written to file
-        bool log_;
+        bool logToFile_;
 
         //- Flag to reset counters on write
         bool resetOnWrite_;
diff --git a/src/lagrangian/intermediate/submodels/CloudSubModelBase.C b/src/lagrangian/intermediate/submodels/CloudSubModelBase.C
index 1203dff816faf8016f84fb2e07910e917ec2461b..b2d2face2c979dfbff789fe34f85d188a97c0bdf 100644
--- a/src/lagrangian/intermediate/submodels/CloudSubModelBase.C
+++ b/src/lagrangian/intermediate/submodels/CloudSubModelBase.C
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2022 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -35,7 +36,9 @@ Foam::CloudSubModelBase<CloudType>::CloudSubModelBase(CloudType& owner)
 :
     subModelBase(owner.outputProperties()),
     owner_(owner)
-{}
+{
+    this->log = owner_.solution().log();
+}
 
 
 template<class CloudType>
@@ -57,7 +60,9 @@ Foam::CloudSubModelBase<CloudType>::CloudSubModelBase
         dictExt
     ),
     owner_(owner)
-{}
+{
+    this->log = owner_.solution().log();
+}
 
 
 template<class CloudType>
@@ -79,7 +84,9 @@ Foam::CloudSubModelBase<CloudType>::CloudSubModelBase
         modelType
     ),
     owner_(owner)
-{}
+{
+    this->log = owner_.solution().log();
+}
 
 
 template<class CloudType>
@@ -90,14 +97,9 @@ Foam::CloudSubModelBase<CloudType>::CloudSubModelBase
 :
     subModelBase(smb),
     owner_(smb.owner_)
-{}
-
-
-// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
-
-template<class CloudType>
-Foam::CloudSubModelBase<CloudType>::~CloudSubModelBase()
-{}
+{
+    this->log = owner_.solution().log();
+}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
@@ -138,6 +140,13 @@ Foam::fileName Foam::CloudSubModelBase<CloudType>::localPath() const
 }
 
 
+template<class CloudType>
+void Foam::CloudSubModelBase<CloudType>::info()
+{
+    this->log = owner_.solution().log();
+}
+
+
 template<class CloudType>
 void Foam::CloudSubModelBase<CloudType>::write(Ostream& os) const
 {
diff --git a/src/lagrangian/intermediate/submodels/CloudSubModelBase.H b/src/lagrangian/intermediate/submodels/CloudSubModelBase.H
index 500f4ddd49c38155ec3a1cc620992b946f7f7833..79a9db81bc3b834a1545e1abd2d8abf2d2460cdd 100644
--- a/src/lagrangian/intermediate/submodels/CloudSubModelBase.H
+++ b/src/lagrangian/intermediate/submodels/CloudSubModelBase.H
@@ -93,7 +93,7 @@ public:
 
 
     //- Destructor
-    virtual ~CloudSubModelBase();
+    virtual ~CloudSubModelBase() = default;
 
     //- Type of cloud this model was instantiated for
     typedef CloudType cloudType;
@@ -121,7 +121,10 @@ public:
 
         // I-O
 
-            //- Write
+            //- Write to info
+            virtual void info();
+
+            //- Write to os
             virtual void write(Ostream& os) const;
 };
 
diff --git a/src/lagrangian/intermediate/submodels/HeterogeneousReactingModel/HeterogeneousReactingModel/HeterogeneousReactingModel.C b/src/lagrangian/intermediate/submodels/HeterogeneousReactingModel/HeterogeneousReactingModel/HeterogeneousReactingModel.C
index 121ed5e2ef442863f3eb94697c27890ffa94cce4..7ca9590d4f9342054d3d80bb3b70a8bf04e27dac 100644
--- a/src/lagrangian/intermediate/submodels/HeterogeneousReactingModel/HeterogeneousReactingModel/HeterogeneousReactingModel.C
+++ b/src/lagrangian/intermediate/submodels/HeterogeneousReactingModel/HeterogeneousReactingModel/HeterogeneousReactingModel.C
@@ -87,12 +87,14 @@ Foam::label Foam::HeterogeneousReactingModel<CloudType>::nF() const
 
 
 template<class CloudType>
-void Foam::HeterogeneousReactingModel<CloudType>::info(Ostream& os)
+void Foam::HeterogeneousReactingModel<CloudType>::info()
 {
+    CloudSubModelBase<CloudType>::info();
+
     const scalar mass0 = this->template getBaseProperty<scalar>("mass");
     const scalar massTotal = mass0 + returnReduce(dMass_, sumOp<scalar>());
 
-    Info<< "    Mass transfer surface reaction  = " << massTotal << nl;
+    Log_<< "    Mass transfer surface reaction  = " << massTotal << nl;
 
     if (this->writeTime())
     {
diff --git a/src/lagrangian/intermediate/submodels/HeterogeneousReactingModel/HeterogeneousReactingModel/HeterogeneousReactingModel.H b/src/lagrangian/intermediate/submodels/HeterogeneousReactingModel/HeterogeneousReactingModel/HeterogeneousReactingModel.H
index 6e419bc5428d9717f0dc69b582fd45471ae0668c..3d2daa7524187c7cea45632b6c16e7e7cd533620 100644
--- a/src/lagrangian/intermediate/submodels/HeterogeneousReactingModel/HeterogeneousReactingModel/HeterogeneousReactingModel.H
+++ b/src/lagrangian/intermediate/submodels/HeterogeneousReactingModel/HeterogeneousReactingModel/HeterogeneousReactingModel.H
@@ -164,8 +164,8 @@ public:
         //- Number of progress variable
         virtual label nF() const;
 
-        //- Write injection info to stream
-        virtual void info(Ostream& os);
+        //- Write injection info
+        virtual void info();
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectedParticleDistributionInjection/InjectedParticleDistributionInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectedParticleDistributionInjection/InjectedParticleDistributionInjection.C
index d033f433eb313963562674602b1aa3bacdba1908..3cdad615aba9ca38d449b5534fe3d670ca204e8f 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectedParticleDistributionInjection/InjectedParticleDistributionInjection.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectedParticleDistributionInjection/InjectedParticleDistributionInjection.C
@@ -501,9 +501,9 @@ bool Foam::InjectedParticleDistributionInjection<CloudType>::validInjection
 
 
 template<class CloudType>
-void Foam::InjectedParticleDistributionInjection<CloudType>::info(Ostream& os)
+void Foam::InjectedParticleDistributionInjection<CloudType>::info()
 {
-    InjectionModel<CloudType>::info(os);
+    InjectionModel<CloudType>::info();
 
     if (this->writeTime())
     {
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectedParticleDistributionInjection/InjectedParticleDistributionInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectedParticleDistributionInjection/InjectedParticleDistributionInjection.H
index 9ab3544a604d370715175937222327dfbcf61b54..f78e5406d0dc9e0df763134227b24b42a0e99cad 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectedParticleDistributionInjection/InjectedParticleDistributionInjection.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectedParticleDistributionInjection/InjectedParticleDistributionInjection.H
@@ -243,8 +243,8 @@ public:
 
         // I-O
 
-            //- Write injection info to stream
-            void info(Ostream& os);
+            //- Write injection info
+            void info();
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectedParticleInjection/InjectedParticleInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectedParticleInjection/InjectedParticleInjection.C
index 9e8b6597e4c99f08c7663b053ff56a523a3bb3e2..76e05f08fa24b01b8fe2f7e3d153e0e6d8a6ebeb 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectedParticleInjection/InjectedParticleInjection.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectedParticleInjection/InjectedParticleInjection.C
@@ -364,9 +364,9 @@ bool Foam::InjectedParticleInjection<CloudType>::validInjection
 
 
 template<class CloudType>
-void Foam::InjectedParticleInjection<CloudType>::info(Ostream& os)
+void Foam::InjectedParticleInjection<CloudType>::info()
 {
-    InjectionModel<CloudType>::info(os);
+    InjectionModel<CloudType>::info();
 
     if (this->writeTime())
     {
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectedParticleInjection/InjectedParticleInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectedParticleInjection/InjectedParticleInjection.H
index 8c1a35752dbda49d04344d923d0bccc1a0c524dd..666808ee27e1c7b39c1b36f351754c28bcc14830 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectedParticleInjection/InjectedParticleInjection.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectedParticleInjection/InjectedParticleInjection.H
@@ -208,8 +208,8 @@ public:
 
         // I-O
 
-            //- Write injection info to stream
-            void info(Ostream& os);
+            //- Write injection info
+            void info();
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C
index 6578ff03dd6e19701d1dd6dad22543354e1b02e8..a8e76293c0f8a11f0d2109a9cf3dc920f79ef335 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C
@@ -237,7 +237,7 @@ void Foam::InjectionModel<CloudType>::postInjectCheck
 
     if (allParcelsAdded > 0)
     {
-        Info<< nl
+        Log_<< nl
             << "Cloud: " << this->owner().name()
             << " injector: " << this->modelName() << nl
             << "    Added " << allParcelsAdded << " new parcels" << nl << endl;
@@ -666,9 +666,11 @@ void Foam::InjectionModel<CloudType>::injectSteadyState
 
 
 template<class CloudType>
-void Foam::InjectionModel<CloudType>::info(Ostream& os)
+void Foam::InjectionModel<CloudType>::info()
 {
-    os  << "    Injector " << this->modelName() << ":" << nl
+    CloudSubModelBase<CloudType>::info();
+
+    Log_<< "    Injector " << this->modelName() << ":" << nl
         << "      - parcels added               = " << parcelsAddedTotal_ << nl
         << "      - mass introduced             = " << massInjected_ << nl;
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H
index 7de7e4cf6f488a629cef53f0881be90220267937..b5015077886fa8eb7462e09efaa232399cf63c43 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H
@@ -367,8 +367,8 @@ public:
 
         // I-O
 
-            //- Write injection info to stream
-            virtual void info(Ostream& os);
+            //- Write injection info
+            virtual void info();
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModelList.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModelList.C
index 4aa81a6726f7b7cac49e47eab8616501ecdd2df3..a4cc84a305bb14ba1c24c0ca61de3422cfcae157 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModelList.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModelList.C
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2012-2017 OpenFOAM Foundation
+    Copyright (C) 2022 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -105,22 +106,15 @@ Foam::InjectionModelList<CloudType>::InjectionModelList
 {}
 
 
-// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
-
-template<class CloudType>
-Foam::InjectionModelList<CloudType>::~InjectionModelList()
-{}
-
-
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class CloudType>
 Foam::scalar Foam::InjectionModelList<CloudType>::timeStart() const
 {
     scalar minTime = GREAT;
-    forAll(*this, i)
+    for (const auto& model : *this)
     {
-        minTime = min(minTime, this->operator[](i).timeStart());
+        minTime = min(minTime, model.timeStart());
     }
 
     return minTime;
@@ -131,9 +125,9 @@ template<class CloudType>
 Foam::scalar Foam::InjectionModelList<CloudType>::timeEnd() const
 {
     scalar maxTime = -GREAT;
-    forAll(*this, i)
+    for (const auto& model : *this)
     {
-        maxTime = max(maxTime, this->operator[](i).timeEnd());
+        maxTime = max(maxTime, model.timeEnd());
     }
 
     return maxTime;
@@ -148,9 +142,9 @@ Foam::scalar Foam::InjectionModelList<CloudType>::volumeToInject
 )
 {
     scalar vol = 0.0;
-    forAll(*this, i)
+    for (auto& model : *this)
     {
-        vol += this->operator[](i).volumeToInject(time0, time1);
+        vol += model.volumeToInject(time0, time1);
     }
 
     return vol;
@@ -162,10 +156,10 @@ Foam::scalar Foam::InjectionModelList<CloudType>::averageParcelMass()
 {
     scalar mass = 0.0;
     scalar massTotal = 0.0;
-    forAll(*this, i)
+    for (auto& model : *this)
     {
-        scalar mt = this->operator[](i).massTotal();
-        mass += mt*this->operator[](i).averageParcelMass();
+        scalar mt = model.massTotal();
+        mass += mt*model.averageParcelMass();
         massTotal += mt;
     }
 
@@ -176,9 +170,9 @@ Foam::scalar Foam::InjectionModelList<CloudType>::averageParcelMass()
 template<class CloudType>
 void Foam::InjectionModelList<CloudType>::updateMesh()
 {
-    forAll(*this, i)
+    for (auto& model : *this)
     {
-        this->operator[](i).updateMesh();
+        model.updateMesh();
     }
 }
 
@@ -191,9 +185,9 @@ void Foam::InjectionModelList<CloudType>::inject
     typename CloudType::parcelType::trackingData& td
 )
 {
-    forAll(*this, i)
+    for (auto& model : *this)
     {
-        this->operator[](i).inject(cloud, td);
+        model.inject(cloud, td);
     }
 }
 
@@ -207,19 +201,19 @@ void Foam::InjectionModelList<CloudType>::injectSteadyState
     const scalar trackTime
 )
 {
-    forAll(*this, i)
+    for (auto& model : *this)
     {
-        this->operator[](i).injectSteadyState(cloud, td, trackTime);
+        model.injectSteadyState(cloud, td, trackTime);
     }
 }
 
 
 template<class CloudType>
-void Foam::InjectionModelList<CloudType>::info(Ostream& os)
+void Foam::InjectionModelList<CloudType>::info()
 {
-    forAll(*this, i)
+    for (auto& model : *this)
     {
-        this->operator[](i).info(os);
+        model.info();
     }
 }
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModelList.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModelList.H
index 615f2cc9cd30d6e20893da51a14d779c40176977..2cf2888e035c8ee1227a3f26bd7e37e2c9159a65 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModelList.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModelList.H
@@ -78,7 +78,7 @@ public:
 
 
     //- Destructor
-    virtual ~InjectionModelList();
+    virtual ~InjectionModelList() = default;
 
 
 
@@ -127,8 +127,8 @@ public:
 
         // I-O
 
-            //- Write injection info to stream
-            virtual void info(Ostream& os);
+            //- Write injection info
+            virtual void info();
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/LocalInteraction/LocalInteraction.C b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/LocalInteraction/LocalInteraction.C
index 8a835dbd61bce3ddfc23628748d23232238075b0..6bf4fd64df43c90fe4f6c2c528239a3d15625996 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/LocalInteraction/LocalInteraction.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/LocalInteraction/LocalInteraction.C
@@ -341,9 +341,9 @@ bool Foam::LocalInteraction<CloudType>::correct
 
 
 template<class CloudType>
-void Foam::LocalInteraction<CloudType>::info(Ostream& os)
+void Foam::LocalInteraction<CloudType>::info()
 {
-    PatchInteractionModel<CloudType>::info(os);
+    PatchInteractionModel<CloudType>::info();
 
     // retrieve any stored data
     labelListList npe0(patchData_.size());
@@ -411,7 +411,7 @@ void Foam::LocalInteraction<CloudType>::info(Ostream& os)
             {
                 const word& patchName = patchData_[patchi].patchName();
 
-                os  << "    Parcel fate: patch " <<  patchName
+                Log_<< "    Parcel fate: patch " <<  patchName
                     << " (number, mass)" << nl
                     << "      - escape  (injector " << indexToInjector[indexi]
                     << " )  = " << npe[patchi][indexi]
@@ -428,7 +428,7 @@ void Foam::LocalInteraction<CloudType>::info(Ostream& os)
         {
             const word& patchName = patchData_[patchi].patchName();
 
-            os  << "    Parcel fate: patch " << patchName
+            Log_<< "    Parcel fate: patch " << patchName
                 << " (number, mass)" << nl
                 << "      - escape                      = "
                 << npe[patchi][0] << ", " << mpe[patchi][0] << nl
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/LocalInteraction/LocalInteraction.H b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/LocalInteraction/LocalInteraction.H
index 80d23d1f2882e405572e0a8e56f954a9e247b05d..ce74b5238085e3e59ababc1fdefae71e6e384d8b 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/LocalInteraction/LocalInteraction.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/LocalInteraction/LocalInteraction.H
@@ -145,8 +145,8 @@ public:
         );
 
 
-        //- Write patch interaction info to stream
-        virtual void info(Ostream& os);
+        //- Write patch interaction info
+        virtual void info();
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/MultiInteraction/MultiInteraction.C b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/MultiInteraction/MultiInteraction.C
index 3bc8234bd4e8a554369987db3fbd166d7db1cb22..09e74936c4fd5598f804b9c4894ff5dccdca0843 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/MultiInteraction/MultiInteraction.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/MultiInteraction/MultiInteraction.C
@@ -187,12 +187,14 @@ void Foam::MultiInteraction<CloudType>::postEvolve()
 
 
 template<class CloudType>
-void Foam::MultiInteraction<CloudType>::info(Ostream& os)
+void Foam::MultiInteraction<CloudType>::info()
 {
+    PatchInteractionModel<CloudType>::info();
+
     for (auto& m : models_)
     {
-        Info<< "Patch interaction model " << m.type() << ':' << endl;
-        m.info(os);
+        Log_<< "Patch interaction model " << m.type() << ':' << endl;
+        m.info();
     }
 }
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/MultiInteraction/MultiInteraction.H b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/MultiInteraction/MultiInteraction.H
index 18f82f38eccc82eb1a941d523ace831a6617a31a..98ac5d395386b33b16bedfe0f7bd83a5bd6886e1 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/MultiInteraction/MultiInteraction.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/MultiInteraction/MultiInteraction.H
@@ -152,8 +152,8 @@ public:
         //- Post-evolve hook
         virtual void postEvolve();
 
-        //- Write patch interaction info to stream
-        virtual void info(Ostream& os);
+        //- Write patch interaction
+        virtual void info();
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C
index 2c32af36f8a58633dedfe9d61bdba5f084bc7c1f..8c1e32e6bcff11ace74dbfd4c91e6287d6291560 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C
@@ -214,8 +214,10 @@ void Foam::PatchInteractionModel<CloudType>::postEvolve()
 
 
 template<class CloudType>
-void Foam::PatchInteractionModel<CloudType>::info(Ostream& os)
+void Foam::PatchInteractionModel<CloudType>::info()
 {
+    CloudSubModelBase<CloudType>::info();
+
     const label escapedParcels0 =
         this->template getBaseProperty<label>("escapedParcels");
     const label escapedParcelsTotal =
@@ -226,7 +228,7 @@ void Foam::PatchInteractionModel<CloudType>::info(Ostream& os)
     const scalar escapedMassTotal =
         escapedMass0 + returnReduce(escapedMass_, sumOp<scalar>());
 
-    os  << "    Parcel fate: system (number, mass)" << nl
+    Log_<< "    Parcel fate: system (number, mass)" << nl
         << "      - escape                      = " << escapedParcelsTotal
         << ", " << escapedMassTotal << endl;
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.H
index 17b3e62bbb407ca0d505a46438fb2c375a3c9630..aedf2ebf90c0538e5013c7a6b59b0d1aeb4438cc 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.H
@@ -191,8 +191,8 @@ public:
         //- Post-evolve hook
         virtual void postEvolve();
 
-        //- Write patch interaction info to stream
-        virtual void info(Ostream& os);
+        //- Write patch interaction info
+        virtual void info();
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/RecycleInteraction/RecycleInteraction.C b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/RecycleInteraction/RecycleInteraction.C
index d8d28820a4617b1e16cbce1fe39467501aa931cf..59c16af5e130020505c7ca7dcda5b6fd696533b6 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/RecycleInteraction/RecycleInteraction.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/RecycleInteraction/RecycleInteraction.C
@@ -349,9 +349,9 @@ void Foam::RecycleInteraction<CloudType>::postEvolve()
 
 
 template<class CloudType>
-void Foam::RecycleInteraction<CloudType>::info(Ostream& os)
+void Foam::RecycleInteraction<CloudType>::info()
 {
-    PatchInteractionModel<CloudType>::info(os);
+    PatchInteractionModel<CloudType>::info();
 
     labelListList npr0(nRemoved_.size());
     scalarListList mpr0(massRemoved_.size());
@@ -416,12 +416,12 @@ void Foam::RecycleInteraction<CloudType>::info(Ostream& os)
         {
             const word& outPatchName =  recyclePatches_[i].first();
 
-            os  << "    Parcel fate: patch " <<  outPatchName
+            Log_<< "    Parcel fate: patch " <<  outPatchName
                 << " (number, mass)" << nl;
 
             forAll(mpr[i], indexi)
             {
-                os  << "      - removed  (injector " << indexToInjector[indexi]
+                Log_<< "      - removed  (injector " << indexToInjector[indexi]
                     << ")  = " << npr[i][indexi]
                     << ", " << mpr[i][indexi] << nl;
 
@@ -431,12 +431,12 @@ void Foam::RecycleInteraction<CloudType>::info(Ostream& os)
 
             const word& inPatchName = recyclePatches_[i].second();
 
-            os  << "    Parcel fate: patch " <<  inPatchName
+            Log_<< "    Parcel fate: patch " <<  inPatchName
                 << " (number, mass)" << nl;
 
             forAll(mpi[i], indexi)
             {
-                os  << "      - injected  (injector " << indexToInjector[indexi]
+                Log_<< "      - injected  (injector " << indexToInjector[indexi]
                     << ")  = " << npi[i][indexi]
                     << ", " << mpi[i][indexi] << nl;
                 this->file()
@@ -452,7 +452,7 @@ void Foam::RecycleInteraction<CloudType>::info(Ostream& os)
         {
             const word& outPatchName =  recyclePatches_[i].first();
 
-            os  << "    Parcel fate: patch " <<  outPatchName
+            Log_<< "    Parcel fate: patch " <<  outPatchName
                 << " (number, mass)" << nl
                 << "      - removed    = " << npr[i][0] << ", " << mpr[i][0]
                 << nl;
@@ -465,7 +465,7 @@ void Foam::RecycleInteraction<CloudType>::info(Ostream& os)
         {
             const word& inPatchName = recyclePatches_[i].second();
 
-            os  << "    Parcel fate: patch " <<  inPatchName
+            Log_<< "    Parcel fate: patch " <<  inPatchName
                 << " (number, mass)" << nl
                 << "      - injected   = " << npi[i][0] << ", " << mpi[i][0]
                 << nl;
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/RecycleInteraction/RecycleInteraction.H b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/RecycleInteraction/RecycleInteraction.H
index 9ae191b6220b74eac2cdc0d5cb48c8c34bd2586c..5fd7165fa7dd41004e6c8747256e30dc9bea1d1b 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/RecycleInteraction/RecycleInteraction.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/RecycleInteraction/RecycleInteraction.H
@@ -204,8 +204,8 @@ public:
         //- Post-evolve hook
         virtual void postEvolve();
 
-        //- Write patch interaction info to stream
-        virtual void info(Ostream& os);
+        //- Write patch interaction info
+        virtual void info();
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/StandardWallInteraction/StandardWallInteraction.C b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/StandardWallInteraction/StandardWallInteraction.C
index c196a2ab7e88edec177a49c8d8f70ff2e0e74a10..5f9f1033a7e523860dee5154eab2180613bc3b00 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/StandardWallInteraction/StandardWallInteraction.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/StandardWallInteraction/StandardWallInteraction.C
@@ -257,9 +257,9 @@ bool Foam::StandardWallInteraction<CloudType>::correct
 
 
 template<class CloudType>
-void Foam::StandardWallInteraction<CloudType>::info(Ostream& os)
+void Foam::StandardWallInteraction<CloudType>::info()
 {
-    PatchInteractionModel<CloudType>::info(os);
+    PatchInteractionModel<CloudType>::info();
 
     labelListList npe0(nEscape_.size());
     scalarListList mpe0(nEscape_.size());
@@ -326,7 +326,7 @@ void Foam::StandardWallInteraction<CloudType>::info(Ostream& os)
             {
                 const word& patchName = mesh_.boundary()[patchi].name() ;
 
-                os  << "    Parcel fate: patch " <<  patchName
+                Log_<< "    Parcel fate: patch " <<  patchName
                     << " (number, mass)" << nl
                     << "      - escape  (injector " << indexToInjector[indexi]
                     << ")  = " << npe[patchi][indexi]
@@ -349,7 +349,7 @@ void Foam::StandardWallInteraction<CloudType>::info(Ostream& os)
         {
             const word& patchName = mesh_.boundary()[patchi].name();
 
-            os  << "    Parcel fate: patch (number, mass) "
+            Log_<< "    Parcel fate: patch (number, mass) "
                 << patchName << nl
                 << "      - escape                      = "
                 << npe[patchi][0] << ", " << mpe[patchi][0] << nl
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/StandardWallInteraction/StandardWallInteraction.H b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/StandardWallInteraction/StandardWallInteraction.H
index 71178cd36b53f442a1623e7c0b9aa02f387928cd..1b821e97029b83f86f1df50949a83dfbd1886f2b 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/StandardWallInteraction/StandardWallInteraction.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/StandardWallInteraction/StandardWallInteraction.H
@@ -155,8 +155,8 @@ public:
         );
 
 
-        //- Write patch interaction info to stream
-        virtual void info(Ostream& os);
+        //- Write patch interaction info
+        virtual void info();
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/KinematicSurfaceFilm/KinematicSurfaceFilm.C b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/KinematicSurfaceFilm/KinematicSurfaceFilm.C
index bb2a93fc58578a788a32684b6d822462d0ca2a6c..9805153880a76e3d680643d9d0fb43b8d157feda 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/KinematicSurfaceFilm/KinematicSurfaceFilm.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/KinematicSurfaceFilm/KinematicSurfaceFilm.C
@@ -184,10 +184,7 @@ void Foam::KinematicSurfaceFilm<CloudType>::absorbInteraction
     bool& keepParticle
 )
 {
-    if (debug)
-    {
-        Info<< "Parcel " << p.origId() << " absorbInteraction" << endl;
-    }
+    DebugInfo<< "Parcel " << p.origId() << " absorbInteraction" << endl;
 
     // Patch face normal
     const vector& nf = pp.faceNormals()[facei];
@@ -231,10 +228,7 @@ void Foam::KinematicSurfaceFilm<CloudType>::bounceInteraction
     bool& keepParticle
 ) const
 {
-    if (debug)
-    {
-        Info<< "Parcel " << p.origId() << " bounceInteraction" << endl;
-    }
+    DebugInfo<< "Parcel " << p.origId() << " bounceInteraction" << endl;
 
     // Patch face normal
     const vector& nf = pp.faceNormals()[facei];
@@ -265,10 +259,7 @@ void Foam::KinematicSurfaceFilm<CloudType>::drySplashInteraction
     bool& keepParticle
 )
 {
-    if (debug)
-    {
-        Info<< "Parcel " << p.origId() << " drySplashInteraction" << endl;
-    }
+    DebugInfo<< "Parcel " << p.origId() << " drySplashInteraction" << endl;
 
     // Patch face velocity and normal
     const vector& Up = this->owner().U().boundaryField()[pp.index()][facei];
@@ -321,10 +312,7 @@ void Foam::KinematicSurfaceFilm<CloudType>::wetSplashInteraction
     bool& keepParticle
 )
 {
-    if (debug)
-    {
-        Info<< "Parcel " << p.origId() << " wetSplashInteraction" << endl;
-    }
+    DebugInfo<< "Parcel " << p.origId() << " wetSplashInteraction" << endl;
 
     // Patch face velocity and normal
     const vector& Up = this->owner().U().boundaryField()[pp.index()][facei];
@@ -815,15 +803,15 @@ void Foam::KinematicSurfaceFilm<CloudType>::setParcelProperties
 
 
 template<class CloudType>
-void Foam::KinematicSurfaceFilm<CloudType>::info(Ostream& os)
+void Foam::KinematicSurfaceFilm<CloudType>::info()
 {
-    SurfaceFilmModel<CloudType>::info(os);
+    SurfaceFilmModel<CloudType>::info();
 
     label nSplash0 = this->template getModelProperty<label>("nParcelsSplashed");
     label nSplashTotal =
         nSplash0 + returnReduce(nParcelsSplashed_, sumOp<label>());
 
-    os  << "      - new splash parcels          = " << nSplashTotal << endl;
+    Log_<< "      - new splash parcels          = " << nSplashTotal << endl;
 
     if (this->writeTime())
     {
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/KinematicSurfaceFilm/KinematicSurfaceFilm.H b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/KinematicSurfaceFilm/KinematicSurfaceFilm.H
index b98ccd6d77167c63ab0a8a5b96ae1e246ddc456a..d0300ef2d67b74440262c9169f404c4a94189b8e 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/KinematicSurfaceFilm/KinematicSurfaceFilm.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/KinematicSurfaceFilm/KinematicSurfaceFilm.H
@@ -342,8 +342,8 @@ public:
 
         // I-O
 
-            //- Write surface film info to stream
-            virtual void info(Ostream& os);
+            //- Write surface film info
+            virtual void info();
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/NoSurfaceFilm/NoSurfaceFilm.C b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/NoSurfaceFilm/NoSurfaceFilm.C
index 924f5a37e1503e8ee45b227fa1b3ad0ff507a0ef..f098ad2f34b59f9f1a16ea8e6c6a155d77c35395 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/NoSurfaceFilm/NoSurfaceFilm.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/NoSurfaceFilm/NoSurfaceFilm.C
@@ -88,9 +88,4 @@ void Foam::NoSurfaceFilm<CloudType>::setParcelProperties
 {}
 
 
-template<class CloudType>
-void Foam::NoSurfaceFilm<CloudType>::info(Ostream&)
-{}
-
-
 // ************************************************************************* //
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/NoSurfaceFilm/NoSurfaceFilm.H b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/NoSurfaceFilm/NoSurfaceFilm.H
index aa44958c73746e3ba61c43aea121664a9a013df4..eb4f734d7462d3bbfa730b664296d07bf5fc91d1 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/NoSurfaceFilm/NoSurfaceFilm.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/NoSurfaceFilm/NoSurfaceFilm.H
@@ -114,12 +114,6 @@ public:
                 parcelType& p,
                 const label filmCelli
             ) const;
-
-
-        // I-O
-
-            //- Write surface film info to stream
-            virtual void info(Ostream& os);
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.C b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.C
index 7c647a80aa6a253b0945d66094226a62371bfa85..e097e5d3fba043966b7791fe68965fb54c2af42e 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.C
@@ -436,8 +436,10 @@ void Foam::SurfaceFilmModel<CloudType>::setParcelProperties
 
 
 template<class CloudType>
-void Foam::SurfaceFilmModel<CloudType>::info(Ostream& os)
+void Foam::SurfaceFilmModel<CloudType>::info()
 {
+    CloudSubModelBase<CloudType>::info();
+
     label nTrans0 =
         this->template getModelProperty<label>("nParcelsTransferred");
 
@@ -457,7 +459,7 @@ void Foam::SurfaceFilmModel<CloudType>::info(Ostream& os)
         massTransferred0 + returnReduce(totalMassTransferred_, sumOp<scalar>());
 
 
-    os  << "    Surface film:" << nl
+    Log_<< "    Surface film:" << nl
         << "      - parcels absorbed            = " << nTransTotal << nl
         << "      - mass absorbed               = " << massTransferredTotal << nl
         << "      - parcels ejected             = " << nInjectTotal << endl;
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.H b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.H
index 2c1410090e9fd89719c062572dc2f45f4c2ba4c6..9238a322dfc308a2f7ed0e7ab82788de2161ce6b 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.H
@@ -275,8 +275,8 @@ public:
 
     // I-O
 
-        //- Write surface film info to stream
-        virtual void info(Ostream& os);
+        //- Write surface film info
+        virtual void info();
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/PhaseChangeModel/PhaseChangeModel.C b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/PhaseChangeModel/PhaseChangeModel.C
index 0daa0a77d4a0e8e0a50eeb0f93e15f7f948eb4d8..8639c2f500da15f78e740f8d26c9a9ed4e007011 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/PhaseChangeModel/PhaseChangeModel.C
+++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/PhaseChangeModel/PhaseChangeModel.C
@@ -152,12 +152,14 @@ void Foam::PhaseChangeModel<CloudType>::addToPhaseChangeMass(const scalar dMass)
 
 
 template<class CloudType>
-void Foam::PhaseChangeModel<CloudType>::info(Ostream& os)
+void Foam::PhaseChangeModel<CloudType>::info()
 {
+    CloudSubModelBase<CloudType>::info();
+
     const scalar mass0 = this->template getBaseProperty<scalar>("mass");
     const scalar massTotal = mass0 + returnReduce(dMass_, sumOp<scalar>());
 
-    Info<< "    Mass transfer phase change      = " << massTotal << nl;
+    Log_<< "    Mass transfer phase change      = " << massTotal << nl;
 
     if (this->writeTime())
     {
diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/PhaseChangeModel/PhaseChangeModel.H b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/PhaseChangeModel/PhaseChangeModel.H
index 70a40083df40312270a165ce531376c7b4801ec9..0aa1a63b9c3d1f469e591f024b3e909103997c75 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/PhaseChangeModel/PhaseChangeModel.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/PhaseChangeModel/PhaseChangeModel.H
@@ -199,8 +199,8 @@ public:
 
         // I-O
 
-            //- Write injection info to stream
-            virtual void info(Ostream& os);
+            //- Write injection info
+            virtual void info();
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.C b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.C
index cb8afcd60ca5c6cdddc5d3c97b3aa99e5aeedc52..b9afc243084d5eff7fea43ef4c2435af2a2f6e40 100644
--- a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.C
+++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.C
@@ -84,12 +84,14 @@ void Foam::DevolatilisationModel<CloudType>::addToDevolatilisationMass
 
 
 template<class CloudType>
-void Foam::DevolatilisationModel<CloudType>::info(Ostream& os)
+void Foam::DevolatilisationModel<CloudType>::info()
 {
+    CloudSubModelBase<CloudType>::info();
+
     const scalar mass0 = this->template getBaseProperty<scalar>("mass");
     const scalar massTotal = mass0 + returnReduce(dMass_, sumOp<scalar>());
 
-    Info<< "    Mass transfer devolatilisation  = " << massTotal << nl;
+    Log_<< "    Mass transfer devolatilisation  = " << massTotal << nl;
 
     if (this->writeTime())
     {
diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.H b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.H
index 1d194439b8310604186e1b4e2507610f641c57e4..088080de8643eb14793a1a6d1ab9de1c2df0b116 100644
--- a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.H
+++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.H
@@ -142,8 +142,8 @@ public:
 
         // I-O
 
-            //- Write injection info to stream
-            virtual void info(Ostream& os);
+            //- Write injection info
+            virtual void info();
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.C b/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.C
index 569ef61711b982e33eec7a9650406761e87660f0..6c78bfe5f76da8a2d075a62373e2c58cc21cd60a 100644
--- a/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.C
+++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.C
@@ -78,12 +78,14 @@ void Foam::SurfaceReactionModel<CloudType>::addToSurfaceReactionMass
 
 
 template<class CloudType>
-void Foam::SurfaceReactionModel<CloudType>::info(Ostream& os)
+void Foam::SurfaceReactionModel<CloudType>::info()
 {
+    CloudSubModelBase<CloudType>::info();
+
     const scalar mass0 = this->template getBaseProperty<scalar>("mass");
     const scalar massTotal = mass0 + returnReduce(dMass_, sumOp<scalar>());
 
-    Info<< "    Mass transfer surface reaction  = " << massTotal << nl;
+    Log_<< "    Mass transfer surface reaction  = " << massTotal << nl;
 
     if (this->writeTime())
     {
diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H b/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H
index b5af159926ec4cb04046577814c9f7c85e778313..91a3d0870c7e1d98594b2787e6d8ff987036057d 100644
--- a/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H
+++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H
@@ -155,8 +155,8 @@ public:
 
         // I-O
 
-            //- Write injection info to stream
-            virtual void info(Ostream& os);
+            //- Write injection info
+            virtual void info();
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.C b/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.C
index 83ee9c19e000582e4ac763f55f48ba89db552be6..dbef189cc85c8d8ea4bba030ea6db129556423fc 100644
--- a/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.C
+++ b/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.C
@@ -275,9 +275,9 @@ void Foam::ThermoSurfaceFilm<CloudType>::setParcelProperties
 
 
 template<class CloudType>
-void Foam::ThermoSurfaceFilm<CloudType>::info(Ostream& os)
+void Foam::ThermoSurfaceFilm<CloudType>::info()
 {
-    KinematicSurfaceFilm<CloudType>::info(os);
+    KinematicSurfaceFilm<CloudType>::info();
 }
 
 
diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.H b/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.H
index de985f84175135bd4a2d3dc84122d1b16c99a339..03ed5a41b08858f3678996cc67e3316f3af50e52 100644
--- a/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.H
+++ b/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.H
@@ -157,8 +157,8 @@ public:
 
         // I-O
 
-            //- Write surface film info to stream
-            virtual void info(Ostream& os);
+            //- Write surface film info
+            virtual void info();
 };