diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.C b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.C
index f3037d7e1be31b60ee4715220221038a212c8051..e9b5e9aee1309414fcb261c3ec7505403195ad33 100644
--- a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.C
+++ b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.C
@@ -1092,6 +1092,10 @@ void Foam::GeometricField<Type, PatchField, GeoMesh>::relax(const scalar alpha)
         << "Relaxing" << nl << this->info() << " by " << alpha << endl;
 
     operator==(prevIter() + alpha*(*this - prevIter()));
+
+    // Make sure any e.g. jump-cyclic are updated. Note: unfortunately also
+    // triggers e.g. cyclic interpolation.
+    this->correctLocalBoundaryConditions();
 }
 
 
diff --git a/src/finiteArea/fields/faPatchFields/constraint/processor/processorFaPatchField.H b/src/finiteArea/fields/faPatchFields/constraint/processor/processorFaPatchField.H
index e50d5a2a9184834334522c1762c14477baca4426..65ebe8a830f957e0f5864a0c2082ee100fbae4aa 100644
--- a/src/finiteArea/fields/faPatchFields/constraint/processor/processorFaPatchField.H
+++ b/src/finiteArea/fields/faPatchFields/constraint/processor/processorFaPatchField.H
@@ -175,7 +175,7 @@ public:
         virtual bool ready() const;
 
         //- Return neighbour field given internal field
-        tmp<Field<Type>> patchNeighbourField() const;
+        virtual tmp<Field<Type>> patchNeighbourField() const;
 
 
     // Evaluation
diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/cyclic/cyclicFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/constraint/cyclic/cyclicFvPatchField.H
index b8199cb28eccaf38815d89da8d71d9770a2b94fb..84e8dcb6f9f6ee9a98951101206f3460150bdae4 100644
--- a/src/finiteVolume/fields/fvPatchFields/constraint/cyclic/cyclicFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/constraint/cyclic/cyclicFvPatchField.H
@@ -170,7 +170,7 @@ public:
         // Evaluation functions
 
             //- Return neighbour coupled internal cell data
-            tmp<Field<Type>> patchNeighbourField() const;
+            virtual tmp<Field<Type>> patchNeighbourField() const;
 
             //- Return reference to neighbour patchField
             const cyclicFvPatchField<Type>& neighbourPatchField() const;
diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/jumpCyclic/jumpCyclicFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/constraint/jumpCyclic/jumpCyclicFvPatchField.H
index 199215c62823a7def4e94a74b6a8a655219fdf22..5d46b8f67fbbc74854cfcd21cbf578edfd907f78 100644
--- a/src/finiteVolume/fields/fvPatchFields/constraint/jumpCyclic/jumpCyclicFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/constraint/jumpCyclic/jumpCyclicFvPatchField.H
@@ -128,7 +128,7 @@ public:
         // Evaluation functions
 
             //- Return neighbour coupled given internal cell data
-            tmp<Field<Type>> patchNeighbourField() const;
+            virtual tmp<Field<Type>> patchNeighbourField() const;
 
             //- Update result field based on interface functionality
             virtual void updateInterfaceMatrix
diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/jumpCyclicAMI/jumpCyclicAMIFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/constraint/jumpCyclicAMI/jumpCyclicAMIFvPatchField.H
index 4787e0ef0b08bc0a633b0c8a06f33ef3f0db42d2..236514fd042c75e69001492d32c304f1084c5eaf 100644
--- a/src/finiteVolume/fields/fvPatchFields/constraint/jumpCyclicAMI/jumpCyclicAMIFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/constraint/jumpCyclicAMI/jumpCyclicAMIFvPatchField.H
@@ -137,7 +137,7 @@ public:
             virtual void evaluate(const Pstream::commsTypes commsType);
 
             //- Initialise interface functionality
-            void initInterfaceMatrixUpdate
+            virtual void initInterfaceMatrixUpdate
             (
                 solveScalarField& result,
                 const bool add,