diff --git a/src/functionObjects/field/stabilityBlendingFactor/stabilityBlendingFactor.C b/src/functionObjects/field/stabilityBlendingFactor/stabilityBlendingFactor.C
index bda9620c394b5c78f24aaef911d0866e54a5cfa4..827d882b79723c894afb5726a29d4b8b828c9b87 100644
--- a/src/functionObjects/field/stabilityBlendingFactor/stabilityBlendingFactor.C
+++ b/src/functionObjects/field/stabilityBlendingFactor/stabilityBlendingFactor.C
@@ -50,6 +50,37 @@ namespace functionObjects
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
+Foam::volScalarField&
+Foam::functionObjects::stabilityBlendingFactor::indicator()
+{
+    const word fldName = "blendedIndicator" + fieldName_;
+
+    auto* fldPtr = mesh_.getObjectPtr<volScalarField>(fldName);
+
+    if (!fldPtr)
+    {
+        fldPtr = new volScalarField
+        (
+            IOobject
+            (
+                "blendedIndicator" + fieldName_,
+                time_.timeName(),
+                mesh_,
+                IOobject::NO_READ,
+                IOobject::NO_WRITE
+            ),
+            mesh_,
+            dimensionedScalar(dimless, Zero),
+            zeroGradientFvPatchScalarField::typeName
+        );
+
+        mesh_.objectRegistry::store(fldPtr);
+    }
+
+    return *fldPtr;
+}
+
+
 void Foam::functionObjects::stabilityBlendingFactor::calcStats
 (
     label& nCellsScheme1,
@@ -57,21 +88,31 @@ void Foam::functionObjects::stabilityBlendingFactor::calcStats
     label& nCellsBlended
 ) const
 {
-    forAll(indicator_, celli)
+    const auto* indicatorPtr =
+        mesh_.cfindObject<volScalarField>("blendedIndicator" + fieldName_);
+
+    if (!indicatorPtr)
     {
-        scalar i = indicator_[celli];
+        FatalErrorInFunction
+            << "Indicator field not set"
+            << abort(FatalError);
+    }
 
+    const auto& indicator = *indicatorPtr;
+
+    for (const scalar i : indicator)
+    {
         if (i < tolerance_)
         {
-            nCellsScheme2++;
+            ++nCellsScheme2;
         }
         else if (i > (1 - tolerance_))
         {
-            nCellsScheme1++;
+            ++nCellsScheme1;
         }
         else
         {
-            nCellsBlended++;
+            ++nCellsBlended;
         }
     }
 
@@ -106,13 +147,15 @@ bool Foam::functionObjects::stabilityBlendingFactor::init(bool first)
 {
     const auto* residualPtr = mesh_.findObject<IOField<scalar>>(residualName_);
 
+    auto& indicator = this->indicator();
+
     if (residuals_)
     {
         if (!residualPtr)
         {
              WarningInFunction
                 << "Could not find residual field : " << residualName_
-                << ". The residual mode won't be " << nl
+                << ". The residual mode will not be " << nl
                 << "    considered for the blended field in the stability "
                 << "blending factor. " << nl
                 << "    Please add the corresponding 'solverInfo'"
@@ -155,9 +198,9 @@ bool Foam::functionObjects::stabilityBlendingFactor::init(bool first)
                 )
             );
 
-            forAll(indicator_, i)
+            forAll(indicator, i)
             {
-                indicator_[i] = indicatorResidual[i];
+                indicator[i] = indicatorResidual[i];
             }
         }
     }
@@ -170,26 +213,26 @@ bool Foam::functionObjects::stabilityBlendingFactor::init(bool first)
         if (maxNonOrthogonality_ >= minNonOrthogonality_)
         {
             FatalErrorInFunction
-                << "    minNonOrthogonality should be larger than "
+                << "minNonOrthogonality should be larger than "
                 << "maxNonOrthogonality."
                 << exit(FatalError);
         }
 
-        indicator_ =
-        max
-        (
-            indicator_,
-            min
+        indicator =
+            max
             (
-                max
+                indicator,
+                min
                 (
-                    scalar(0),
-                    (*nonOrthPtr - maxNonOrthogonality_)
-                  / (minNonOrthogonality_ - maxNonOrthogonality_)
-                ),
-                scalar(1)
-            )
-        );
+                    max
+                    (
+                        scalar(0),
+                        (*nonOrthPtr - maxNonOrthogonality_)
+                      / (minNonOrthogonality_ - maxNonOrthogonality_)
+                    ),
+                    scalar(1)
+                )
+            );
 
         if (first)
         {
@@ -198,33 +241,32 @@ bool Foam::functionObjects::stabilityBlendingFactor::init(bool first)
         }
     }
 
-    const volScalarField* skewnessPtr =
-        mesh_.findObject<volScalarField>(skewnessName_);
+    const auto* skewnessPtr = mesh_.cfindObject<volScalarField>(skewnessName_);
 
     if (skewness_)
     {
         if (maxSkewness_ >= minSkewness_)
         {
             FatalErrorInFunction
-                << "    minSkewness should be larger than maxSkewness."
+                << "minSkewness should be larger than maxSkewness."
                 << exit(FatalError);
         }
 
-        indicator_ =
-        max
-        (
-            indicator_,
-            min
+        indicator =
+            max
             (
-                max
+                indicator,
+                min
                 (
-                    scalar(0),
-                    (*skewnessPtr - maxSkewness_)
-                  / (minSkewness_ - maxSkewness_)
-                ),
-                scalar(1)
-            )
-        );
+                    max
+                    (
+                        scalar(0),
+                        (*skewnessPtr - maxSkewness_)
+                      / (minSkewness_ - maxSkewness_)
+                    ),
+                    scalar(1)
+                )
+            );
 
         if (first)
         {
@@ -233,22 +275,22 @@ bool Foam::functionObjects::stabilityBlendingFactor::init(bool first)
         }
     }
 
-    const volScalarField* faceWeightsPtr =
-        mesh_.findObject<volScalarField>(faceWeightName_);
+    const auto* faceWeightsPtr =
+        mesh_.cfindObject<volScalarField>(faceWeightName_);
 
     if (faceWeight_)
     {
         if (maxFaceWeight_ >= minFaceWeight_)
         {
             FatalErrorInFunction
-                << "    minFaceWeight should be larger than maxFaceWeight."
+                << "minFaceWeight should be larger than maxFaceWeight."
                 << exit(FatalError);
         }
 
-        indicator_ =
+        indicator =
             max
             (
-                indicator_,
+                indicator,
                 min
                 (
                     max
@@ -274,7 +316,7 @@ bool Foam::functionObjects::stabilityBlendingFactor::init(bool first)
         if (maxGradCc_ >= minGradCc_)
         {
             FatalErrorInFunction
-                << "    minGradCc should be larger than maxGradCc."
+                << "minGradCc should be larger than maxGradCc."
                 << exit(FatalError);
         }
 
@@ -322,10 +364,10 @@ bool Foam::functionObjects::stabilityBlendingFactor::init(bool first)
                 << endl;
         }
 
-        indicator_ =
+        indicator =
             max
             (
-                indicator_,
+                indicator,
                 min
                 (
                     max
@@ -340,15 +382,14 @@ bool Foam::functionObjects::stabilityBlendingFactor::init(bool first)
     }
 
 
-    const volVectorField* UNamePtr =
-        mesh_.findObject<volVectorField>(UName_);
+    const auto* UNamePtr = mesh_.findObject<volVectorField>(UName_);
 
     if (Co_)
     {
         if (Co1_ >= Co2_)
         {
             FatalErrorInFunction
-                << "    Co2 should be larger than Co1."
+                << "Co2 should be larger than Co1."
                 << exit(FatalError);
         }
 
@@ -372,10 +413,10 @@ bool Foam::functionObjects::stabilityBlendingFactor::init(bool first)
         Co.primitiveFieldRef() =
             mesh_.time().deltaT()*mag(*UNamePtr)/cbrt(mesh_.V());
 
-        indicator_ =
+        indicator =
             max
             (
-                indicator_,
+                indicator,
                 min(max(scalar(0), (Co - Co1_)/(Co2_ - Co1_)), scalar(1))
             );
 
@@ -406,15 +447,14 @@ bool Foam::functionObjects::stabilityBlendingFactor::init(bool first)
         << endl;
     }
 
-    indicator_.correctBoundaryConditions();
-    indicator_.min(1.0);
-    indicator_.max(0.0);
+    indicator.correctBoundaryConditions();
+    indicator.min(1.0);
+    indicator.max(0.0);
 
     // Update the blended surface field
-    surfaceScalarField& surBlended =
-        mesh_.lookupObjectRef<surfaceScalarField>(resultName_);
+    auto& surBlended = mesh_.lookupObjectRef<surfaceScalarField>(resultName_);
 
-    surBlended = fvc::interpolate(indicator_);
+    surBlended = fvc::interpolate(indicator);
 
     return true;
 }
@@ -431,20 +471,6 @@ Foam::functionObjects::stabilityBlendingFactor::stabilityBlendingFactor
 :
     fieldExpression(name, runTime, dict),
     writeFile(obr_, name, typeName, dict),
-    indicator_
-    (
-        IOobject
-        (
-            "blendedIndicator" + fieldName_,
-            time_.timeName(),
-            mesh_,
-            IOobject::NO_READ,
-            IOobject::NO_WRITE
-        ),
-        mesh_,
-        dimensionedScalar(dimless, Zero),
-        zeroGradientFvPatchScalarField::typeName
-    ),
     nonOrthogonality_(dict.getOrDefault<Switch>("switchNonOrtho", false)),
     gradCc_(dict.getOrDefault<Switch>("switchGradCc", false)),
     residuals_(dict.getOrDefault<Switch>("switchResiduals", false)),
@@ -522,104 +548,93 @@ Foam::functionObjects::stabilityBlendingFactor::stabilityBlendingFactor
     );
     store(resultName_, faceBlendedPtr);
 
-    const volScalarField* nonOrthPtr =
+    const auto* nonOrthPtr =
         mesh_.findObject<volScalarField>(nonOrthogonalityName_);
 
-    if (nonOrthogonality_)
+    if (nonOrthogonality_ && !nonOrthPtr)
     {
-        if (!nonOrthPtr)
-        {
-            IOobject fieldHeader
-            (
-                nonOrthogonalityName_,
-                mesh_.time().constant(),
-                mesh_,
-                IOobject::MUST_READ,
-                IOobject::NO_WRITE
-            );
+        IOobject fieldHeader
+        (
+            nonOrthogonalityName_,
+            mesh_.time().constant(),
+            mesh_,
+            IOobject::MUST_READ,
+            IOobject::NO_WRITE
+        );
 
-            if (fieldHeader.typeHeaderOk<volScalarField>(true, true, false))
-            {
-                volScalarField* vfPtr(new volScalarField(fieldHeader, mesh_));
-                mesh_.objectRegistry::store(vfPtr);
-            }
-            else
-            {
-                FatalErrorInFunction
-                    << "    Field : " << nonOrthogonalityName_ << " not found."
-                    << " The function object will not be used"
-                    << exit(FatalError);
-            }
+        if (fieldHeader.typeHeaderOk<volScalarField>(true, true, false))
+        {
+            volScalarField* vfPtr = new volScalarField(fieldHeader, mesh_);
+            mesh_.objectRegistry::store(vfPtr);
+        }
+        else
+        {
+            FatalErrorInFunction
+                << "Field : " << nonOrthogonalityName_ << " not found."
+                << " The function object will not be used"
+                << exit(FatalError);
         }
     }
 
 
-    const volScalarField* faceWeightsPtr =
+    const auto* faceWeightsPtr =
         mesh_.findObject<volScalarField>(faceWeightName_);
 
-    if (faceWeight_)
+    if (faceWeight_ && !faceWeightsPtr)
     {
-        if (!faceWeightsPtr)
-        {
-            IOobject fieldHeader
-            (
-                faceWeightName_,
-                mesh_.time().constant(),
-                mesh_,
-                IOobject::MUST_READ,
-                IOobject::NO_WRITE
-            );
+        IOobject fieldHeader
+        (
+            faceWeightName_,
+            mesh_.time().constant(),
+            mesh_,
+            IOobject::MUST_READ,
+            IOobject::NO_WRITE
+        );
 
-            if (fieldHeader.typeHeaderOk<volScalarField>(true, true, false))
-            {
-                volScalarField* vfPtr(new volScalarField(fieldHeader, mesh_));
-                mesh_.objectRegistry::store(vfPtr);
-            }
-            else
-            {
-                FatalErrorInFunction
-                    << "    Field : " << faceWeightName_ << " not found."
-                    << " The function object will not be used"
-                    << exit(FatalError);
-            }
+        if (fieldHeader.typeHeaderOk<volScalarField>(true, true, false))
+        {
+            volScalarField* vfPtr = new volScalarField(fieldHeader, mesh_);
+            mesh_.objectRegistry::store(vfPtr);
+        }
+        else
+        {
+            FatalErrorInFunction
+                << "Field : " << faceWeightName_ << " not found."
+                << " The function object will not be used"
+                << exit(FatalError);
         }
     }
 
-    const volScalarField* skewnessPtr =
-        mesh_.findObject<volScalarField>(skewnessName_);
+    const auto* skewnessPtr = mesh_.findObject<volScalarField>(skewnessName_);
 
-    if (skewness_)
+    if (skewness_ && !skewnessPtr)
     {
-        if (!skewnessPtr)
-        {
-            IOobject fieldHeader
-            (
-                skewnessName_,
-                mesh_.time().constant(),
-                mesh_,
-                IOobject::MUST_READ,
-                IOobject::NO_WRITE
-            );
+        IOobject fieldHeader
+        (
+            skewnessName_,
+            mesh_.time().constant(),
+            mesh_,
+            IOobject::MUST_READ,
+            IOobject::NO_WRITE
+        );
 
-            if (fieldHeader.typeHeaderOk<volScalarField>(true, true, false))
-            {
-                volScalarField* vfPtr(new volScalarField(fieldHeader, mesh_));
-                mesh_.objectRegistry::store(vfPtr);
-            }
-            else
-            {
-                FatalErrorInFunction
-                    << "    Field : " << skewnessName_ << " not found."
-                    << " The function object will not be used"
-                    << exit(FatalError);
-            }
+        if (fieldHeader.typeHeaderOk<volScalarField>(true, true, false))
+        {
+            volScalarField* vfPtr(new volScalarField(fieldHeader, mesh_));
+            mesh_.objectRegistry::store(vfPtr);
+        }
+        else
+        {
+            FatalErrorInFunction
+                << "Field : " << skewnessName_ << " not found."
+                << " The function object will not be used"
+                << exit(FatalError);
         }
     }
 
     if (log)
     {
-        indicator_.writeOpt(IOobject::AUTO_WRITE);
-
+        indicator().writeOpt(IOobject::AUTO_WRITE);
     }
 
     if (writeToFile_)
diff --git a/src/functionObjects/field/stabilityBlendingFactor/stabilityBlendingFactor.H b/src/functionObjects/field/stabilityBlendingFactor/stabilityBlendingFactor.H
index 579ad13c0ba388ab54356f9fb3219fc6f95f344c..5823e654951f0c5c0094b35882ff2d0332c9a3b8 100644
--- a/src/functionObjects/field/stabilityBlendingFactor/stabilityBlendingFactor.H
+++ b/src/functionObjects/field/stabilityBlendingFactor/stabilityBlendingFactor.H
@@ -340,9 +340,6 @@ class stabilityBlendingFactor
 {
     // Private Member Data
 
-        //- Cell based blended indicator
-        volScalarField indicator_;
-
         // Switches
 
             //- Switch for non-orthogonality
@@ -443,6 +440,9 @@ class stabilityBlendingFactor
         //- Init fields
         bool init(bool first);
 
+        //- Return access to the indicator field
+        volScalarField& indicator();
+
         //- Calculate statistics
         void calcStats(label&, label&, label&) const ;