diff --git a/src/TurbulenceModels/compressible/ThermalDiffusivity/ThermalDiffusivity.C b/src/TurbulenceModels/compressible/ThermalDiffusivity/ThermalDiffusivity.C
index b249146c06e43ac7d3c103101f5bee87ac5b4853..e658882d6a7934ab0d45fcd3112d1e92e252ca78 100644
--- a/src/TurbulenceModels/compressible/ThermalDiffusivity/ThermalDiffusivity.C
+++ b/src/TurbulenceModels/compressible/ThermalDiffusivity/ThermalDiffusivity.C
@@ -143,10 +143,7 @@ Foam::ThermalDiffusivity<BasicTurbulenceModel>::alphat
     const label patchi
 ) const
 {
-    return tmp<scalarField>
-    (
-        new scalarField(this->mesh_.boundary()[patchi].size(), Zero)
-    );
+    return tmp<scalarField>::New(this->mesh_.boundary()[patchi].size(), Zero);
 }
 
 
diff --git a/src/TurbulenceModels/turbulenceModels/DES/DESModel/DESModel.C b/src/TurbulenceModels/turbulenceModels/DES/DESModel/DESModel.C
index c99d84c6f7be60883989e39a6b2912ee555eb254..cf223102f42c314f1c4bf549841a269c068e36f2 100644
--- a/src/TurbulenceModels/turbulenceModels/DES/DESModel/DESModel.C
+++ b/src/TurbulenceModels/turbulenceModels/DES/DESModel/DESModel.C
@@ -168,16 +168,10 @@ tmp<volScalarField> DESModel<BasicTurbulenceModel>::Ssigma
 template<class BasicTurbulenceModel>
 tmp<volScalarField> DESModel<BasicTurbulenceModel>::fd() const
 {
-    return tmp<volScalarField>::New
+    return volScalarField::New
     (
-        IOobject
-        (
-            "fd",
-            this->mesh_.time().timeName(),
-            this->mesh_,
-            IOobject::NO_READ,
-            IOobject::NO_WRITE
-        ),
+        "fd",
+        IOobject::NO_REGISTER,
         this->mesh_,
         dimensionedScalar(dimless, Zero)
     );
diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/IDDESDelta/IDDESDelta.C b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/IDDESDelta/IDDESDelta.C
index 5ae16f229b9c904c065495b6d58c34c8481cd659..8386344061ae768f8e7209a32a0c8f376ff13422 100644
--- a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/IDDESDelta/IDDESDelta.C
+++ b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/IDDESDelta/IDDESDelta.C
@@ -53,21 +53,12 @@ void Foam::LESModels::IDDESDelta::calcDelta()
     // Wall-normal vectors
     const volVectorField& n = wallDist::New(mesh).n();
 
-    tmp<volScalarField> tfaceToFacenMax
+    auto tfaceToFacenMax = volScalarField::New
     (
-        new volScalarField
-        (
-            IOobject
-            (
-                "faceToFaceMax",
-                mesh.time().timeName(),
-                mesh,
-                IOobject::NO_READ,
-                IOobject::NO_WRITE
-            ),
-            mesh,
-            dimensionedScalar(dimLength, Zero)
-        )
+        "faceToFaceMax",
+        IOobject::NO_REGISTER,
+        mesh,
+        dimensionedScalar(dimLength, Zero)
     );
 
     scalarField& faceToFacenMax = tfaceToFacenMax.ref().primitiveFieldRef();
diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESfilters/anisotropicFilter/anisotropicFilter.C b/src/TurbulenceModels/turbulenceModels/LES/LESfilters/anisotropicFilter/anisotropicFilter.C
index f0b284fb7696757ca9eb27a468f2131671ea9501..1ef8a7673fed1d643b8e0e5d6a43aaf823a03547 100644
--- a/src/TurbulenceModels/turbulenceModels/LES/LESfilters/anisotropicFilter/anisotropicFilter.C
+++ b/src/TurbulenceModels/turbulenceModels/LES/LESfilters/anisotropicFilter/anisotropicFilter.C
@@ -182,19 +182,12 @@ Foam::tmp<Foam::volSymmTensorField> Foam::anisotropicFilter::operator()
 {
     correctBoundaryConditions(unFilteredField);
 
-    tmp<volSymmTensorField> tmpFilteredField
+    auto tmpFilteredField = volSymmTensorField::New
     (
-        new volSymmTensorField
-        (
-            IOobject
-            (
-                "anisotropicFilteredSymmTensorField",
-                mesh().time().timeName(),
-                mesh()
-            ),
-            mesh(),
-            unFilteredField().dimensions()
-        )
+        "anisotropicFilteredSymmTensorField",
+        IOobject::NO_REGISTER,
+        mesh(),
+        unFilteredField().dimensions()
     );
 
     for (direction d=0; d<symmTensor::nComponents; d++)
@@ -218,19 +211,12 @@ Foam::tmp<Foam::volTensorField> Foam::anisotropicFilter::operator()
 {
     correctBoundaryConditions(unFilteredField);
 
-    tmp<volTensorField> tmpFilteredField
+    auto tmpFilteredField = volTensorField::New
     (
-        new volTensorField
-        (
-            IOobject
-            (
-                "anisotropicFilteredTensorField",
-                mesh().time().timeName(),
-                mesh()
-            ),
-            mesh(),
-            unFilteredField().dimensions()
-        )
+        "anisotropicFilteredTensorField",
+        IOobject::NO_REGISTER,
+        mesh(),
+        unFilteredField().dimensions()
     );
 
     for (direction d=0; d<tensor::nComponents; d++)
diff --git a/src/TurbulenceModels/turbulenceModels/LES/dynamicKEqn/dynamicKEqn.C b/src/TurbulenceModels/turbulenceModels/LES/dynamicKEqn/dynamicKEqn.C
index 8a25b36b68741f50141dcf087f93a3baa5e9daad..25777c8b6123456e093a524ff936bfda9c66a982 100644
--- a/src/TurbulenceModels/turbulenceModels/LES/dynamicKEqn/dynamicKEqn.C
+++ b/src/TurbulenceModels/turbulenceModels/LES/dynamicKEqn/dynamicKEqn.C
@@ -138,14 +138,10 @@ void dynamicKEqn<BasicTurbulenceModel>::correctNut()
 template<class BasicTurbulenceModel>
 tmp<fvScalarMatrix> dynamicKEqn<BasicTurbulenceModel>::kSource() const
 {
-    return tmp<fvScalarMatrix>
+    return tmp<fvScalarMatrix>::New
     (
-        new fvScalarMatrix
-        (
-            k_,
-            dimVolume*this->rho_.dimensions()*k_.dimensions()
-            /dimTime
-        )
+        k_,
+        dimVolume*this->rho_.dimensions()*k_.dimensions()/dimTime
     );
 }
 
diff --git a/src/TurbulenceModels/turbulenceModels/LES/kEqn/kEqn.C b/src/TurbulenceModels/turbulenceModels/LES/kEqn/kEqn.C
index 50fb5f029ff4796d4f72510aa27a08b0a4cf207b..6ecd8118f65fa1edec5dbc02421ab973e77e8c37 100644
--- a/src/TurbulenceModels/turbulenceModels/LES/kEqn/kEqn.C
+++ b/src/TurbulenceModels/turbulenceModels/LES/kEqn/kEqn.C
@@ -52,14 +52,10 @@ void kEqn<BasicTurbulenceModel>::correctNut()
 template<class BasicTurbulenceModel>
 tmp<fvScalarMatrix> kEqn<BasicTurbulenceModel>::kSource() const
 {
-    return tmp<fvScalarMatrix>
+    return tmp<fvScalarMatrix>::New
     (
-        new fvScalarMatrix
-        (
-            k_,
-            dimVolume*this->rho_.dimensions()*k_.dimensions()
-            /dimTime
-        )
+        k_,
+        dimVolume*this->rho_.dimensions()*k_.dimensions()/dimTime
     );
 }
 
diff --git a/src/TurbulenceModels/turbulenceModels/RAS/LaunderSharmaKE/LaunderSharmaKE.C b/src/TurbulenceModels/turbulenceModels/RAS/LaunderSharmaKE/LaunderSharmaKE.C
index f0a84979f4a7c0dcb23a6debde23fb205144f44d..a414e8bc4e834e1ba0053df56e122880a0294001 100644
--- a/src/TurbulenceModels/turbulenceModels/RAS/LaunderSharmaKE/LaunderSharmaKE.C
+++ b/src/TurbulenceModels/turbulenceModels/RAS/LaunderSharmaKE/LaunderSharmaKE.C
@@ -69,14 +69,10 @@ void LaunderSharmaKE<BasicTurbulenceModel>::correctNut()
 template<class BasicTurbulenceModel>
 tmp<fvScalarMatrix> LaunderSharmaKE<BasicTurbulenceModel>::kSource() const
 {
-    return tmp<fvScalarMatrix>
+    return tmp<fvScalarMatrix>::New
     (
-        new fvScalarMatrix
-        (
-            k_,
-            dimVolume*this->rho_.dimensions()*k_.dimensions()
-            /dimTime
-        )
+        k_,
+        dimVolume*this->rho_.dimensions()*k_.dimensions()/dimTime
     );
 }
 
@@ -84,14 +80,10 @@ tmp<fvScalarMatrix> LaunderSharmaKE<BasicTurbulenceModel>::kSource() const
 template<class BasicTurbulenceModel>
 tmp<fvScalarMatrix> LaunderSharmaKE<BasicTurbulenceModel>::epsilonSource() const
 {
-    return tmp<fvScalarMatrix>
+    return tmp<fvScalarMatrix>::New
     (
-        new fvScalarMatrix
-        (
-            epsilon_,
-            dimVolume*this->rho_.dimensions()*epsilon_.dimensions()
-            /dimTime
-        )
+        epsilon_,
+        dimVolume*this->rho_.dimensions()*epsilon_.dimensions()/dimTime
     );
 }
 
diff --git a/src/TurbulenceModels/turbulenceModels/RAS/RASModel/RASModel.C b/src/TurbulenceModels/turbulenceModels/RAS/RASModel/RASModel.C
index 661f65ebba7f4e26e4a7ecc380c4d3b3be8459a9..aefac5045ef204ceae34cbe824fce42588ae39fa 100644
--- a/src/TurbulenceModels/turbulenceModels/RAS/RASModel/RASModel.C
+++ b/src/TurbulenceModels/turbulenceModels/RAS/RASModel/RASModel.C
@@ -193,14 +193,10 @@ Foam::RASModel<BasicTurbulenceModel>::epsilon() const
 {
     const scalar Cmu = 0.09;
 
-    return tmp<volScalarField>::New
+    return volScalarField::New
     (
-        IOobject
-        (
-            IOobject::groupName("epsilon", this->alphaRhoPhi_.group()),
-            this->mesh_.time().timeName(),
-            this->mesh_
-        ),
+        IOobject::groupName("epsilon", this->alphaRhoPhi_.group()),
+        IOobject::NO_REGISTER,
         Cmu*this->k()*this->omega()
     );
 }
@@ -213,14 +209,10 @@ Foam::RASModel<BasicTurbulenceModel>::omega() const
     const scalar betaStar = 0.09;
     const dimensionedScalar k0(sqr(dimLength/dimTime), SMALL);
 
-    return tmp<volScalarField>::New
+    return volScalarField::New
     (
-        IOobject
-        (
-            IOobject::groupName("omega", this->alphaRhoPhi_.group()),
-            this->mesh_.time().timeName(),
-            this->mesh_
-        ),
+        IOobject::groupName("omega", this->alphaRhoPhi_.group()),
+        IOobject::NO_REGISTER,
         this->epsilon()/(betaStar*(this->k() + k0))
     );
 }
diff --git a/src/TurbulenceModels/turbulenceModels/RAS/RNGkEpsilon/RNGkEpsilon.C b/src/TurbulenceModels/turbulenceModels/RAS/RNGkEpsilon/RNGkEpsilon.C
index 3f7df45d61766b0a2230b3477d1a7938acf290ae..6760dc826948366c0a3918035a94979114abf3fb 100644
--- a/src/TurbulenceModels/turbulenceModels/RAS/RNGkEpsilon/RNGkEpsilon.C
+++ b/src/TurbulenceModels/turbulenceModels/RAS/RNGkEpsilon/RNGkEpsilon.C
@@ -53,14 +53,10 @@ void RNGkEpsilon<BasicTurbulenceModel>::correctNut()
 template<class BasicTurbulenceModel>
 tmp<fvScalarMatrix> RNGkEpsilon<BasicTurbulenceModel>::kSource() const
 {
-    return tmp<fvScalarMatrix>
+    return tmp<fvScalarMatrix>::New
     (
-        new fvScalarMatrix
-        (
-            k_,
-            dimVolume*this->rho_.dimensions()*k_.dimensions()
-            /dimTime
-        )
+        k_,
+        dimVolume*this->rho_.dimensions()*k_.dimensions()/dimTime
     );
 }
 
@@ -68,14 +64,10 @@ tmp<fvScalarMatrix> RNGkEpsilon<BasicTurbulenceModel>::kSource() const
 template<class BasicTurbulenceModel>
 tmp<fvScalarMatrix> RNGkEpsilon<BasicTurbulenceModel>::epsilonSource() const
 {
-    return tmp<fvScalarMatrix>
+    return tmp<fvScalarMatrix>::New
     (
-        new fvScalarMatrix
-        (
-            epsilon_,
-            dimVolume*this->rho_.dimensions()*epsilon_.dimensions()
-            /dimTime
-        )
+        epsilon_,
+        dimVolume*this->rho_.dimensions()*epsilon_.dimensions()/dimTime
     );
 }
 
diff --git a/src/TurbulenceModels/turbulenceModels/RAS/kEpsilon/kEpsilon.C b/src/TurbulenceModels/turbulenceModels/RAS/kEpsilon/kEpsilon.C
index ead17ff204995edd0f6ae1e771b7830d0c1e0987..d66b80be90dc20a5b984cc5ff87179bbd66b60e9 100644
--- a/src/TurbulenceModels/turbulenceModels/RAS/kEpsilon/kEpsilon.C
+++ b/src/TurbulenceModels/turbulenceModels/RAS/kEpsilon/kEpsilon.C
@@ -53,14 +53,10 @@ void kEpsilon<BasicTurbulenceModel>::correctNut()
 template<class BasicTurbulenceModel>
 tmp<fvScalarMatrix> kEpsilon<BasicTurbulenceModel>::kSource() const
 {
-    return tmp<fvScalarMatrix>
+    return tmp<fvScalarMatrix>::New
     (
-        new fvScalarMatrix
-        (
-            k_,
-            dimVolume*this->rho_.dimensions()*k_.dimensions()
-            /dimTime
-        )
+        k_,
+        dimVolume*this->rho_.dimensions()*k_.dimensions()/dimTime
     );
 }
 
@@ -68,14 +64,10 @@ tmp<fvScalarMatrix> kEpsilon<BasicTurbulenceModel>::kSource() const
 template<class BasicTurbulenceModel>
 tmp<fvScalarMatrix> kEpsilon<BasicTurbulenceModel>::epsilonSource() const
 {
-    return tmp<fvScalarMatrix>
+    return tmp<fvScalarMatrix>::New
     (
-        new fvScalarMatrix
-        (
-            epsilon_,
-            dimVolume*this->rho_.dimensions()*epsilon_.dimensions()
-            /dimTime
-        )
+        epsilon_,
+        dimVolume*this->rho_.dimensions()*epsilon_.dimensions()/dimTime
     );
 }
 
diff --git a/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSSTLM/kOmegaSSTLM.C b/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSSTLM/kOmegaSSTLM.C
index b6911809369e3d2c79e080f1c64dde46333f4371..eb3acb2abd025bad6b3bc4dd68aa79d3fa1b6abb 100644
--- a/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSSTLM/kOmegaSSTLM.C
+++ b/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSSTLM/kOmegaSSTLM.C
@@ -95,11 +95,11 @@ tmp<volScalarField::Internal> kOmegaSSTLM<BasicTurbulenceModel>::Fthetat
     const volScalarField::Internal ReOmega(sqr(y)*omega/nu);
     const volScalarField::Internal Fwake(exp(-sqr(ReOmega/1e5)));
 
-    return tmp<volScalarField::Internal>
+    return volScalarField::Internal::New
     (
-        new volScalarField::Internal
+        IOobject::groupName("Fthetat", this->alphaRhoPhi_.group()),
+        IOobject::NO_REGISTER,
         (
-            IOobject::groupName("Fthetat", this->alphaRhoPhi_.group()),
             min
             (
                 max
@@ -118,21 +118,14 @@ template<class BasicTurbulenceModel>
 tmp<volScalarField::Internal>
 kOmegaSSTLM<BasicTurbulenceModel>::ReThetac() const
 {
-    tmp<volScalarField::Internal> tReThetac
+    auto tReThetac = volScalarField::Internal::New
     (
-        new volScalarField::Internal
-        (
-            IOobject
-            (
-                IOobject::groupName("ReThetac", this->alphaRhoPhi_.group()),
-                this->runTime_.timeName(),
-                this->mesh_
-            ),
-            this->mesh_,
-            dimless
-        )
+        IOobject::groupName("ReThetac", this->alphaRhoPhi_.group()),
+        IOobject::NO_REGISTER,
+        this->mesh_,
+        dimless
     );
-    volScalarField::Internal& ReThetac = tReThetac.ref();
+    auto& ReThetac = tReThetac.ref();
 
     forAll(ReThetac, celli)
     {
@@ -161,21 +154,14 @@ tmp<volScalarField::Internal> kOmegaSSTLM<BasicTurbulenceModel>::Flength
     const volScalarField::Internal& nu
 ) const
 {
-    tmp<volScalarField::Internal> tFlength
+    auto tFlength = volScalarField::Internal::New
     (
-        new volScalarField::Internal
-        (
-            IOobject
-            (
-                IOobject::groupName("Flength", this->alphaRhoPhi_.group()),
-                this->runTime_.timeName(),
-                this->mesh_
-            ),
-            this->mesh_,
-            dimless
-        )
+        IOobject::groupName("Flength", this->alphaRhoPhi_.group()),
+        IOobject::NO_REGISTER,
+        this->mesh_,
+        dimless
     );
-    volScalarField::Internal& Flength = tFlength.ref();
+    auto& Flength = tFlength.ref();
 
     const volScalarField::Internal& omega = this->omega_();
     const volScalarField::Internal& y = this->y_();
@@ -226,21 +212,14 @@ tmp<volScalarField::Internal> kOmegaSSTLM<BasicTurbulenceModel>::ReThetat0
     const volScalarField::Internal& nu
 ) const
 {
-    tmp<volScalarField::Internal> tReThetat0
+    auto tReThetat0 = volScalarField::Internal::New
     (
-        new volScalarField::Internal
-        (
-            IOobject
-            (
-                IOobject::groupName("ReThetat0", this->alphaRhoPhi_.group()),
-                this->runTime_.timeName(),
-                this->mesh_
-            ),
-            this->mesh_,
-            dimless
-        )
+        IOobject::groupName("ReThetat0", this->alphaRhoPhi_.group()),
+        IOobject::NO_REGISTER,
+        this->mesh_,
+        dimless
     );
-    volScalarField::Internal& ReThetat0 = tReThetat0.ref();
+    auto& ReThetat0 = tReThetat0.ref();
 
     const volScalarField& k = this->k_;
 
@@ -349,13 +328,11 @@ tmp<volScalarField::Internal> kOmegaSSTLM<BasicTurbulenceModel>::Fonset
 
     const volScalarField::Internal Fonset3(max(1 - pow3(RT/2.5), scalar(0)));
 
-    return tmp<volScalarField::Internal>
+    return volScalarField::Internal::New
     (
-        new volScalarField::Internal
-        (
-            IOobject::groupName("Fonset", this->alphaRhoPhi_.group()),
-            max(Fonset2 - Fonset3, scalar(0))
-        )
+        IOobject::groupName("Fonset", this->alphaRhoPhi_.group()),
+        IOobject::NO_REGISTER,
+        max(Fonset2 - Fonset3, scalar(0))
     );
 }
 
@@ -459,7 +436,8 @@ kOmegaSSTLM<BasicTurbulenceModel>::kOmegaSSTLM
             this->runTime_.timeName(),
             this->mesh_,
             IOobject::MUST_READ,
-            IOobject::AUTO_WRITE
+            IOobject::AUTO_WRITE,
+            IOobject::REGISTER
         ),
         this->mesh_
     ),
@@ -472,7 +450,8 @@ kOmegaSSTLM<BasicTurbulenceModel>::kOmegaSSTLM
             this->runTime_.timeName(),
             this->mesh_,
             IOobject::MUST_READ,
-            IOobject::AUTO_WRITE
+            IOobject::AUTO_WRITE,
+            IOobject::REGISTER
         ),
         this->mesh_
     ),
diff --git a/src/TurbulenceModels/turbulenceModels/RAS/realizableKE/realizableKE.C b/src/TurbulenceModels/turbulenceModels/RAS/realizableKE/realizableKE.C
index 6e08625a61a3e53f6f0236557a56dfb2e93d7857..b5712400c588d7dc77f27efc21f4efef6f68f8de 100644
--- a/src/TurbulenceModels/turbulenceModels/RAS/realizableKE/realizableKE.C
+++ b/src/TurbulenceModels/turbulenceModels/RAS/realizableKE/realizableKE.C
@@ -101,14 +101,10 @@ void realizableKE<BasicTurbulenceModel>::correctNut()
 template<class BasicTurbulenceModel>
 tmp<fvScalarMatrix> realizableKE<BasicTurbulenceModel>::kSource() const
 {
-    return tmp<fvScalarMatrix>
+    return tmp<fvScalarMatrix>::New
     (
-        new fvScalarMatrix
-        (
-            k_,
-            dimVolume*this->rho_.dimensions()*k_.dimensions()
-            /dimTime
-        )
+        k_,
+        dimVolume*this->rho_.dimensions()*k_.dimensions()/dimTime
     );
 }
 
@@ -116,14 +112,10 @@ tmp<fvScalarMatrix> realizableKE<BasicTurbulenceModel>::kSource() const
 template<class BasicTurbulenceModel>
 tmp<fvScalarMatrix> realizableKE<BasicTurbulenceModel>::epsilonSource() const
 {
-    return tmp<fvScalarMatrix>
+    return tmp<fvScalarMatrix>::New
     (
-        new fvScalarMatrix
-        (
-            epsilon_,
-            dimVolume*this->rho_.dimensions()*epsilon_.dimensions()
-            /dimTime
-        )
+        epsilon_,
+        dimVolume*this->rho_.dimensions()*epsilon_.dimensions()/dimTime
     );
 }
 
diff --git a/src/TurbulenceModels/turbulenceModels/eddyViscosity/eddyViscosity.C b/src/TurbulenceModels/turbulenceModels/eddyViscosity/eddyViscosity.C
index 65ae0c2d3eab09263961ce84a9b8e47b4e836906..f37ad54b4e36527de3595302c6daddd736224f5f 100644
--- a/src/TurbulenceModels/turbulenceModels/eddyViscosity/eddyViscosity.C
+++ b/src/TurbulenceModels/turbulenceModels/eddyViscosity/eddyViscosity.C
@@ -65,7 +65,8 @@ Foam::eddyViscosity<BasicTurbulenceModel>::eddyViscosity
             this->runTime_.timeName(),
             this->mesh_,
             IOobject::MUST_READ,
-            IOobject::AUTO_WRITE
+            IOobject::AUTO_WRITE,
+            IOobject::REGISTER
         ),
         this->mesh_
     )
@@ -104,22 +105,12 @@ Foam::eddyViscosity<BasicTurbulenceModel>::R() const
         }
     }
 
-    return tmp<volSymmTensorField>
+    return volSymmTensorField::New
     (
-        new volSymmTensorField
-        (
-            IOobject
-            (
-                IOobject::groupName("R", this->alphaRhoPhi_.group()),
-                this->runTime_.timeName(),
-                this->mesh_,
-                IOobject::NO_READ,
-                IOobject::NO_WRITE,
-                IOobject::NO_REGISTER
-            ),
-            ((2.0/3.0)*I)*tk() - (nut_)*devTwoSymm(fvc::grad(this->U_)),
-            patchFieldTypes
-        )
+        IOobject::groupName("R", this->alphaRhoPhi_.group()),
+        IOobject::NO_REGISTER,
+        ((2.0/3.0)*I)*tk() - (nut_)*devTwoSymm(fvc::grad(this->U_)),
+        patchFieldTypes
     );
 }
 
diff --git a/src/TurbulenceModels/turbulenceModels/laminar/Stokes/Stokes.C b/src/TurbulenceModels/turbulenceModels/laminar/Stokes/Stokes.C
index 0e42398ef3da19957a2d71e7b7ef8594e6a78b23..e45fab2853bcb957ed268b2206c8f1cbdc84a38c 100644
--- a/src/TurbulenceModels/turbulenceModels/laminar/Stokes/Stokes.C
+++ b/src/TurbulenceModels/turbulenceModels/laminar/Stokes/Stokes.C
@@ -89,17 +89,10 @@ template<class BasicTurbulenceModel>
 tmp<volScalarField>
 Stokes<BasicTurbulenceModel>::nut() const
 {
-    return tmp<volScalarField>::New
+    return volScalarField::New
     (
-        IOobject
-        (
-            IOobject::groupName("nut", this->alphaRhoPhi_.group()),
-            this->runTime_.timeName(),
-            this->mesh_,
-            IOobject::NO_READ,
-            IOobject::NO_WRITE,
-            IOobject::NO_REGISTER
-        ),
+        IOobject::groupName("nut", this->alphaRhoPhi_.group()),
+        IOobject::NO_REGISTER,
         this->mesh_,
         dimensionedScalar(dimViscosity, Zero)
     );
@@ -113,10 +106,7 @@ Stokes<BasicTurbulenceModel>::nut
     const label patchi
 ) const
 {
-    return tmp<scalarField>
-    (
-        new scalarField(this->mesh_.boundary()[patchi].size(), Zero)
-    );
+    return tmp<scalarField>::New(this->mesh_.boundary()[patchi].size(), Zero);
 }
 
 
@@ -124,12 +114,11 @@ template<class BasicTurbulenceModel>
 tmp<volScalarField>
 Stokes<BasicTurbulenceModel>::nuEff() const
 {
-    return tmp<volScalarField>
+    return volScalarField::New
     (
-        new volScalarField
-        (
-            IOobject::groupName("nuEff", this->alphaRhoPhi_.group()), this->nu()
-        )
+        IOobject::groupName("nuEff", this->alphaRhoPhi_.group()),
+        IOobject::NO_REGISTER,
+        this->nu()
     );
 }
 
diff --git a/src/TurbulenceModels/turbulenceModels/laminar/laminarModel/laminarModel.C b/src/TurbulenceModels/turbulenceModels/laminar/laminarModel/laminarModel.C
index 22e7af0fbcf2042781c05b145e28f4c5af264ad8..41444d6420a73221bbae1c6d762b72acabcb5345 100644
--- a/src/TurbulenceModels/turbulenceModels/laminar/laminarModel/laminarModel.C
+++ b/src/TurbulenceModels/turbulenceModels/laminar/laminarModel/laminarModel.C
@@ -189,17 +189,10 @@ template<class BasicTurbulenceModel>
 Foam::tmp<Foam::volScalarField>
 Foam::laminarModel<BasicTurbulenceModel>::nut() const
 {
-    return tmp<volScalarField>::New
+    return volScalarField::New
     (
-        IOobject
-        (
-            IOobject::groupName("nut", this->alphaRhoPhi_.group()),
-            this->runTime_.timeName(),
-            this->mesh_,
-            IOobject::NO_READ,
-            IOobject::NO_WRITE,
-            IOobject::NO_REGISTER
-        ),
+        IOobject::groupName("nut", this->alphaRhoPhi_.group()),
+        IOobject::NO_REGISTER,
         this->mesh_,
         dimensionedScalar(dimViscosity, Zero)
     );
@@ -213,10 +206,7 @@ Foam::laminarModel<BasicTurbulenceModel>::nut
     const label patchi
 ) const
 {
-    return tmp<scalarField>
-    (
-        new scalarField(this->mesh_.boundary()[patchi].size(), Zero)
-    );
+    return tmp<scalarField>::New(this->mesh_.boundary()[patchi].size(), Zero);
 }
 
 
@@ -224,12 +214,11 @@ template<class BasicTurbulenceModel>
 Foam::tmp<Foam::volScalarField>
 Foam::laminarModel<BasicTurbulenceModel>::nuEff() const
 {
-    return tmp<volScalarField>
+    return volScalarField::New
     (
-        new volScalarField
-        (
-            IOobject::groupName("nuEff", this->alphaRhoPhi_.group()), this->nu()
-        )
+        IOobject::groupName("nuEff", this->alphaRhoPhi_.group()),
+        IOobject::NO_REGISTER,
+        this->nu()
     );
 }
 
@@ -249,17 +238,10 @@ template<class BasicTurbulenceModel>
 Foam::tmp<Foam::volScalarField>
 Foam::laminarModel<BasicTurbulenceModel>::k() const
 {
-    return tmp<volScalarField>::New
+    return volScalarField::New
     (
-        IOobject
-        (
-            IOobject::groupName("k", this->alphaRhoPhi_.group()),
-            this->runTime_.timeName(),
-            this->mesh_,
-            IOobject::NO_READ,
-            IOobject::NO_WRITE,
-            IOobject::NO_REGISTER
-        ),
+        IOobject::groupName("k", this->alphaRhoPhi_.group()),
+        IOobject::NO_REGISTER,
         this->mesh_,
         dimensionedScalar(sqr(this->U_.dimensions()), Zero)
     );
@@ -270,17 +252,10 @@ template<class BasicTurbulenceModel>
 Foam::tmp<Foam::volScalarField>
 Foam::laminarModel<BasicTurbulenceModel>::epsilon() const
 {
-    return tmp<volScalarField>::New
+    return volScalarField::New
     (
-        IOobject
-        (
-            IOobject::groupName("epsilon", this->alphaRhoPhi_.group()),
-            this->runTime_.timeName(),
-            this->mesh_,
-            IOobject::NO_READ,
-            IOobject::NO_WRITE,
-            IOobject::NO_REGISTER
-        ),
+        IOobject::groupName("epsilon", this->alphaRhoPhi_.group()),
+        IOobject::NO_REGISTER,
         this->mesh_,
         dimensionedScalar(sqr(this->U_.dimensions())/dimTime, Zero)
     );
@@ -291,17 +266,10 @@ template<class BasicTurbulenceModel>
 Foam::tmp<Foam::volScalarField>
 Foam::laminarModel<BasicTurbulenceModel>::omega() const
 {
-    return tmp<volScalarField>::New
+    return volScalarField::New
     (
-        IOobject
-        (
-            IOobject::groupName("omega", this->alphaRhoPhi_.group()),
-            this->runTime_.timeName(),
-            this->mesh_,
-            IOobject::NO_READ,
-            IOobject::NO_WRITE,
-            IOobject::NO_REGISTER
-        ),
+        IOobject::groupName("omega", this->alphaRhoPhi_.group()),
+        IOobject::NO_REGISTER,
         this->mesh_,
         dimensionedScalar(dimless/dimTime, Zero)
     );
@@ -312,17 +280,10 @@ template<class BasicTurbulenceModel>
 Foam::tmp<Foam::volSymmTensorField>
 Foam::laminarModel<BasicTurbulenceModel>::R() const
 {
-    return tmp<volSymmTensorField>::New
+    return volSymmTensorField::New
     (
-        IOobject
-        (
-            IOobject::groupName("R", this->alphaRhoPhi_.group()),
-            this->runTime_.timeName(),
-            this->mesh_,
-            IOobject::NO_READ,
-            IOobject::NO_WRITE,
-            IOobject::NO_REGISTER
-        ),
+        IOobject::groupName("R", this->alphaRhoPhi_.group()),
+        IOobject::NO_REGISTER,
         this->mesh_,
         dimensionedSymmTensor(sqr(this->U_.dimensions()), Zero)
     );
diff --git a/src/atmosphericModels/turbulenceModels/RAS/kL/kL.C b/src/atmosphericModels/turbulenceModels/RAS/kL/kL.C
index 982e3cc70582ab10ee458c520f32880ae3c16968..7fded669b35ea7cf59afc4e91e9587fea9885756 100644
--- a/src/atmosphericModels/turbulenceModels/RAS/kL/kL.C
+++ b/src/atmosphericModels/turbulenceModels/RAS/kL/kL.C
@@ -80,17 +80,10 @@ tmp<volScalarField> kL<BasicTurbulenceModel>::epsilonCanopy() const
         return Cd*LAD*mag(U)*k_;
     }
 
-    return tmp<volScalarField>::New
+    return volScalarField::New
     (
-        IOobject
-        (
-            IOobject::groupName("epsilonCanopy", this->alphaRhoPhi_.group()),
-            this->runTime_.timeName(),
-            this->mesh_,
-            IOobject::NO_READ,
-            IOobject::NO_WRITE,
-            IOobject::NO_REGISTER
-        ),
+        IOobject::groupName("epsilonCanopy", this->alphaRhoPhi_.group()),
+        IOobject::NO_REGISTER,
         this->mesh_,
         dimensionedScalar(sqr(dimLength)/pow3(dimTime), Zero)
     );
@@ -118,26 +111,22 @@ tmp<volScalarField> kL<BasicTurbulenceModel>::epsilon() const
 template<class BasicTurbulenceModel>
 tmp<volScalarField> kL<BasicTurbulenceModel>::canopyHeight() const
 {
-    const auto* canopyHeightPtr =
-        this->mesh_.template findObject<volScalarField>("canopyHeight");
+    tmp<volScalarField> tcanopy;
 
-    if (canopyHeightPtr)
+    tcanopy.cref
+    (
+        this->mesh_.template cfindObject<volScalarField>("canopyHeight")
+    );
+
+    if (tcanopy)
     {
-        const auto& canopyHeight = *canopyHeightPtr;
-        return canopyHeight;
+        return tcanopy;
     }
 
-    return tmp<volScalarField>::New
+    return volScalarField::New
     (
-        IOobject
-        (
-            IOobject::groupName("canopyHeight", this->alphaRhoPhi_.group()),
-            this->runTime_.timeName(),
-            this->mesh_,
-            IOobject::NO_READ,
-            IOobject::NO_WRITE,
-            IOobject::NO_REGISTER
-        ),
+        IOobject::groupName("canopyHeight", this->alphaRhoPhi_.group()),
+        IOobject::NO_REGISTER,
         this->mesh_,
         dimensionedScalar(dimLength, Zero)
     );
diff --git a/src/waveModels/fvOptions/multiphaseMangrovesSource/multiphaseMangrovesSource.C b/src/waveModels/fvOptions/multiphaseMangrovesSource/multiphaseMangrovesSource.C
index 6c9ad94b3eb8ed760165d2a193c9fba044c60284..8be3cd40043eb83c410ba2549d5c786973ad43d8 100644
--- a/src/waveModels/fvOptions/multiphaseMangrovesSource/multiphaseMangrovesSource.C
+++ b/src/waveModels/fvOptions/multiphaseMangrovesSource/multiphaseMangrovesSource.C
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2017 IH-Cantabria
-    Copyright (C) 2017-2021 OpenCFD Ltd.
+    Copyright (C) 2017-2023 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -56,16 +56,10 @@ namespace fv
 Foam::tmp<Foam::volScalarField>
 Foam::fv::multiphaseMangrovesSource::dragCoeff(const volVectorField& U) const
 {
-    auto tdragCoeff = tmp<volScalarField>::New
+    auto tdragCoeff = volScalarField::New
     (
-        IOobject
-        (
-            typeName + ":dragCoeff",
-            mesh_.time().timeName(),
-            mesh_.time(),
-            IOobject::NO_READ,
-            IOobject::NO_WRITE
-        ),
+        IOobject::scopedName(typeName, "dragCoeff"),
+        IOobject::NO_REGISTER,
         mesh_,
         dimensionedScalar(dimless/dimTime, Zero)
     );
@@ -101,16 +95,10 @@ Foam::fv::multiphaseMangrovesSource::dragCoeff(const volVectorField& U) const
 Foam::tmp<Foam::volScalarField>
 Foam::fv::multiphaseMangrovesSource::inertiaCoeff() const
 {
-    auto tinertiaCoeff = tmp<volScalarField>::New
+    auto tinertiaCoeff = volScalarField::New
     (
-        IOobject
-        (
-            typeName + ":inertiaCoeff",
-            mesh_.time().timeName(),
-            mesh_.time(),
-            IOobject::NO_READ,
-            IOobject::NO_WRITE
-        ),
+        IOobject::scopedName(typeName, "inertiaCoeff"),
+        IOobject::NO_REGISTER,
         mesh_,
         dimensionedScalar(dimless, Zero)
     );
diff --git a/src/waveModels/fvOptions/multiphaseMangrovesTurbulenceModel/multiphaseMangrovesTurbulenceModel.C b/src/waveModels/fvOptions/multiphaseMangrovesTurbulenceModel/multiphaseMangrovesTurbulenceModel.C
index e9fd781b4d767af2b0462c1f922849395bb2222f..4d5effb1141cfde52256bf6986857421a0cfe5f8 100644
--- a/src/waveModels/fvOptions/multiphaseMangrovesTurbulenceModel/multiphaseMangrovesTurbulenceModel.C
+++ b/src/waveModels/fvOptions/multiphaseMangrovesTurbulenceModel/multiphaseMangrovesTurbulenceModel.C
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2017 IH-Cantabria
-    Copyright (C) 2017-2021 OpenCFD Ltd.
+    Copyright (C) 2017-2023 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -58,21 +58,14 @@ Foam::fv::multiphaseMangrovesTurbulenceModel::kCoeff
     const volVectorField& U
 ) const
 {
-    auto tkCoeff = tmp<volScalarField>::New
+    auto tkCoeff = volScalarField::New
     (
-        IOobject
-        (
-            typeName + ":kCoeff",
-            mesh_.time().timeName(),
-            mesh_.time(),
-            IOobject::NO_READ,
-            IOobject::NO_WRITE
-        ),
+        IOobject::scopedName(typeName, "kCoeff"),
+        IOobject::NO_REGISTER,
         mesh_,
         dimensionedScalar(dimless/dimTime, Zero)
     );
-
-    volScalarField& kCoeff = tkCoeff.ref();
+    auto& kCoeff = tkCoeff.ref();
 
     forAll(zoneIDs_, i)
     {
@@ -104,21 +97,13 @@ Foam::fv::multiphaseMangrovesTurbulenceModel::epsilonCoeff
     const volVectorField& U
 ) const
 {
-    auto tepsilonCoeff = tmp<volScalarField>::New
+    auto tepsilonCoeff = volScalarField::New
     (
-        IOobject
-        (
-            typeName + ":epsilonCoeff",
-            mesh_.time().timeName(),
-            mesh_.time(),
-            IOobject::NO_READ,
-            IOobject::NO_WRITE
-        ),
+        IOobject::scopedName(typeName, "epsilonCoeff"),
         mesh_,
         dimensionedScalar(dimless/dimTime, Zero)
     );
-
-    volScalarField& epsilonCoeff = tepsilonCoeff.ref();
+    auto& epsilonCoeff = tepsilonCoeff.ref();
 
     forAll(zoneIDs_, i)
     {