diff --git a/src/petsc4Foam/solvers/petscSolver.C b/src/petsc4Foam/solvers/petscSolver.C
index 77474c26cc5579e315c75675eb5509f334b3dca9..8a6097e5e804add4dbf1bdf1292761794437727a 100644
--- a/src/petsc4Foam/solvers/petscSolver.C
+++ b/src/petsc4Foam/solvers/petscSolver.C
@@ -263,38 +263,42 @@ Foam::solverPerformance Foam::petscSolver::scalarSolve
     }
 
     // Convergence testing
-    if (usePetscResidualNorm)
-    {
-        // Add monitor to record initial residual computed by PETSc
-        KSPMonitorSet
-        (
-            ksp,
-            PetscUtils::foamKSPMonitorRecordInit,
-            &ctx,
-            NULL
-        );
-    }
-    else
+    if (firsttimein)
     {
-        KSPSetConvergenceTest
-        (
-            ksp,
-            PetscUtils::foamKSPConverge,
-            &ctx,
-            NULL
-        );
-    }
+        if (usePetscResidualNorm)
+        {
+            // Add monitor to record initial residual computed by PETSc
+            KSPMonitorSet
+            (
+                ksp,
+                PetscUtils::foamKSPMonitorRecordInit,
+                &ctx,
+                NULL
+            );
+        }
+        else
+        {
+            ctx.useFoamTest = true;
+            KSPSetConvergenceTest
+            (
+                ksp,
+                PetscUtils::foamKSPConverge,
+                &ctx,
+                NULL
+            );
+        }
 
-    // Monitoring (print to stdout) residual reduction in OpenFOAM norm
-    if (monitorFoamResidualNorm)
-    {
-        KSPMonitorSet
-        (
-            ksp,
-            PetscUtils::foamKSPMonitorFoam,
-            &ctx,
-            NULL
-        );
+        // Monitoring (print to stdout) residual reduction in OpenFOAM norm
+        if (monitorFoamResidualNorm)
+        {
+            KSPMonitorSet
+            (
+                ksp,
+                PetscUtils::foamKSPMonitorFoam,
+                &ctx,
+                NULL
+            );
+        }
     }
 
     // Geometric multigrid support
diff --git a/src/petsc4Foam/utils/petscLinearSolverContext.H b/src/petsc4Foam/utils/petscLinearSolverContext.H
index 08a491668bd842d70e50292385c4f19e578c5f59..b288366f8fd2d7e64a5591a2df819433fbd19fec 100644
--- a/src/petsc4Foam/utils/petscLinearSolverContext.H
+++ b/src/petsc4Foam/utils/petscLinearSolverContext.H
@@ -69,7 +69,7 @@ public:
         Mat Amat;
         KSP ksp;
 
-        // Auxiliary vectors for the OpenFOAM-PETSc L1-norm
+        bool useFoamTest;
         Vec ArowsSum;
         Vec *res_l1_w;
 
@@ -95,6 +95,7 @@ public:
             init_aux_vectors_(false),
             Amat(nullptr),
             ksp(nullptr),
+            useFoamTest(false),
             ArowsSum(nullptr),
             res_l1_w(nullptr)
         {}
diff --git a/src/petsc4Foam/utils/petscUtils.C b/src/petsc4Foam/utils/petscUtils.C
index 3deb0a984653ecc10cc78720f3da918ecfc62bcf..4c2e0905ad931f42624ea33c1d6b2d7f8ad91772 100644
--- a/src/petsc4Foam/utils/petscUtils.C
+++ b/src/petsc4Foam/utils/petscUtils.C
@@ -160,12 +160,10 @@ PetscErrorCode Foam::PetscUtils::foamKSPMonitorFoam
     if (ntype != KSP_NORM_NONE) // Print both norms, KSP built-in and OpenFOAM built-in
     {
        char normtype[256];
-       PetscErrorCode (*converge)(KSP,PetscInt,PetscReal,KSPConvergedReason*,void*);
 
        ierr = PetscStrncpy(normtype,KSPNormTypes[ntype],sizeof(normtype));CHKERRQ(ierr);
        ierr = PetscStrtolower(normtype);CHKERRQ(ierr);
-       ierr = KSPGetConvergenceTest(ksp, &converge, NULL, NULL);CHKERRQ(ierr);
-       if (converge == Foam::PetscUtils::foamKSPConverge) // we are using foam convergence testing, list foam norm first
+       if (ctx->useFoamTest) // we are using foam convergence testing, list foam norm first
        {
           ierr = PetscViewerASCIIPrintf(viewer, "%3D KSP Residual foam norm %14.12e (PETSc %s norm %14.12e)\n", it, (double)fnorm, normtype, (double)rnorm);CHKERRQ(ierr);
        }