diff --git a/src/finiteArea/faMatrices/faMatrix/faMatrix.C b/src/finiteArea/faMatrices/faMatrix/faMatrix.C
index b98f60e66a2df840e92cce0a12121d73655f8634..b2d816979899e2d822a636dc20353f7beeae8aaf 100644
--- a/src/finiteArea/faMatrices/faMatrix/faMatrix.C
+++ b/src/finiteArea/faMatrices/faMatrix/faMatrix.C
@@ -328,14 +328,11 @@ void Foam::faMatrix<Type>::setValuesFromList
             GeometricField<Type, faPatchField, areaMesh>&
         >(psi_).primitiveFieldRef();
 
-    forAll(faceLabels, i)
-    {
-        const label facei = faceLabels[i];
-        const Type& value = values[i];
-
-        psi[facei] = value;
-        source_[facei] = value*Diag[facei];
-    }
+    // Following actions:
+    // - adjust local field psi
+    // - set local matrix to be diagonal (so adjust source)
+    //      - cut connections to neighbours
+    // - make (on non-adjusted cells) contribution explicit
 
     if (symmetric() || asymmetric())
     {
@@ -392,6 +389,17 @@ void Foam::faMatrix<Type>::setValuesFromList
             }
         }
     }
+
+    // Note: above loop might have affected source terms on adjusted cells
+    // so make sure to adjust them afterwards
+    forAll(faceLabels, i)
+    {
+        const label facei = faceLabels[i];
+        const Type& value = values[i];
+
+        psi[facei] = value;
+        source_[facei] = value*Diag[facei];
+    }
 }
 
 
diff --git a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C
index 0a0879db777daa92c044010025504c02e0afaeb1..a82341e6ce5fc60538c796886d95e3e8381d2916 100644
--- a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C
+++ b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C
@@ -242,14 +242,12 @@ void Foam::fvMatrix<Type>::setValuesFromList
             GeometricField<Type, fvPatchField, volMesh>&
         >(psi_).primitiveFieldRef();
 
-    forAll(cellLabels, i)
-    {
-        const label celli = cellLabels[i];
-        const Type& value = values[i];
 
-        psi[celli] = value;
-        source_[celli] = value*Diag[celli];
-    }
+    // Following actions:
+    // - adjust local field psi
+    // - set local matrix to be diagonal (so adjust source)
+    //      - cut connections to neighbours
+    // - make (on non-adjusted cells) contribution explicit
 
     if (symmetric() || asymmetric())
     {
@@ -306,6 +304,17 @@ void Foam::fvMatrix<Type>::setValuesFromList
             }
         }
     }
+
+    // Note: above loop might have affected source terms on adjusted cells
+    // so make sure to adjust them afterwards
+    forAll(cellLabels, i)
+    {
+        const label celli = cellLabels[i];
+        const Type& value = values[i];
+
+        psi[celli] = value;
+        source_[celli] = value*Diag[celli];
+    }
 }