diff --git a/src/OpenFOAM/Make/files b/src/OpenFOAM/Make/files
index 17da5aefef5c108eff6d9aa9e81ca5e23385bb5b..ed23f471d5dfdd72e8b49da31c544f3e07bfc739 100644
--- a/src/OpenFOAM/Make/files
+++ b/src/OpenFOAM/Make/files
@@ -506,6 +506,7 @@ $(constraintPointPatchFields)/empty/emptyPointPatchFields.C
 $(constraintPointPatchFields)/symmetry/symmetryPointPatchFields.C
 $(constraintPointPatchFields)/wedge/wedgePointPatchFields.C
 $(constraintPointPatchFields)/cyclic/cyclicPointPatchFields.C
+$(constraintPointPatchFields)/cyclicSlip/cyclicSlipPointPatchFields.C
 $(constraintPointPatchFields)/processor/processorPointPatchFields.C
 
 derivedPointPatchFields = $(pointPatchFields)/derived
diff --git a/src/OpenFOAM/fields/pointPatchFields/basic/basicSymmetry/basicSymmetryPointPatchField.H b/src/OpenFOAM/fields/pointPatchFields/basic/basicSymmetry/basicSymmetryPointPatchField.H
index 445a67281f2fa01b89d70cef0a418755b9bb3342..5d77b058045f1f0cc8a9ede2562c4d19b61775c8 100644
--- a/src/OpenFOAM/fields/pointPatchFields/basic/basicSymmetry/basicSymmetryPointPatchField.H
+++ b/src/OpenFOAM/fields/pointPatchFields/basic/basicSymmetry/basicSymmetryPointPatchField.H
@@ -36,6 +36,7 @@ SourceFiles
 #define basicSymmetryPointPatchField_H
 
 #include "pointPatchField.H"
+#include "symmetryPointPatch.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -120,6 +121,12 @@ public:
 
         // Evaluation functions
 
+            //- Return the constraint type this pointPatchField implements
+            virtual const word& constraintType() const
+            {
+                return symmetryPointPatch::typeName;
+            }
+
             //- Update the patch field
             virtual void evaluate
             (
diff --git a/src/OpenFOAM/fields/pointPatchFields/constraint/cyclic/cyclicPointPatchField.H b/src/OpenFOAM/fields/pointPatchFields/constraint/cyclic/cyclicPointPatchField.H
index 14785b36eba0709f8083dad628c9830ae045041f..72eabdaaf9f3552f3a412fa21a6a302863c234ed 100644
--- a/src/OpenFOAM/fields/pointPatchFields/constraint/cyclic/cyclicPointPatchField.H
+++ b/src/OpenFOAM/fields/pointPatchFields/constraint/cyclic/cyclicPointPatchField.H
@@ -127,6 +127,14 @@ public:
 
     // Member functions
 
+        //- Constraint handling
+
+            //- Return the constraint type this pointPatchField implements
+            virtual const word& constraintType() const
+            {
+                return cyclicPointPatch::typeName;
+            }
+
         //- Cyclic coupled interface functions
 
             //- Does the patch field perform the transfromation
diff --git a/src/OpenFOAM/fields/pointPatchFields/constraint/cyclicSlip/cyclicSlipPointPatchField.C b/src/OpenFOAM/fields/pointPatchFields/constraint/cyclicSlip/cyclicSlipPointPatchField.C
new file mode 100644
index 0000000000000000000000000000000000000000..7db347c5a6a041fdcd04ed5a8a35df5a3317519a
--- /dev/null
+++ b/src/OpenFOAM/fields/pointPatchFields/constraint/cyclicSlip/cyclicSlipPointPatchField.C
@@ -0,0 +1,122 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "cyclicSlipPointPatchField.H"
+#include "pointConstraint.H"
+#include "transformField.H"
+#include "symmTransformField.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+template<class Type>
+cyclicSlipPointPatchField<Type>::cyclicSlipPointPatchField
+(
+    const pointPatch& p,
+    const DimensionedField<Type, pointMesh>& iF
+)
+:
+    cyclicPointPatchField<Type>(p, iF)
+{}
+
+
+template<class Type>
+cyclicSlipPointPatchField<Type>::cyclicSlipPointPatchField
+(
+    const pointPatch& p,
+    const DimensionedField<Type, pointMesh>& iF,
+    const dictionary& dict
+)
+:
+    cyclicPointPatchField<Type>(p, iF, dict)
+{}
+
+
+template<class Type>
+cyclicSlipPointPatchField<Type>::cyclicSlipPointPatchField
+(
+    const cyclicSlipPointPatchField<Type>& ptf,
+    const pointPatch& p,
+    const DimensionedField<Type, pointMesh>& iF,
+    const pointPatchFieldMapper& mapper
+)
+:
+    cyclicPointPatchField<Type>(ptf, p, iF, mapper)
+{}
+
+
+template<class Type>
+cyclicSlipPointPatchField<Type>::cyclicSlipPointPatchField
+(
+    const cyclicSlipPointPatchField<Type>& ptf,
+    const DimensionedField<Type, pointMesh>& iF
+)
+:
+    cyclicPointPatchField<Type>(ptf, iF)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+template<class Type>
+void cyclicSlipPointPatchField<Type>::evaluate(const Pstream::commsTypes)
+{
+    const vectorField& nHat = this->patch().pointNormals();
+
+    tmp<Field<Type> > tvalues =
+    (
+        (
+            this->patchInternalField()
+          + transform(I - 2.0*sqr(nHat), this->patchInternalField())
+        )/2.0
+    );
+
+    // Get internal field to insert values into
+    Field<Type>& iF = const_cast<Field<Type>&>(this->internalField());
+
+    setInInternalField(iF, tvalues());
+}
+
+
+template<class Type>
+void cyclicSlipPointPatchField<Type>::applyConstraint
+(
+    const label pointi,
+    pointConstraint& pc
+) const
+{
+    pc.applyConstraint(this->patch().pointNormals()[pointi]);
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/src/OpenFOAM/fields/pointPatchFields/constraint/cyclicSlip/cyclicSlipPointPatchField.H b/src/OpenFOAM/fields/pointPatchFields/constraint/cyclicSlip/cyclicSlipPointPatchField.H
new file mode 100644
index 0000000000000000000000000000000000000000..52c59ab1b632fc0c1ac86d8cd64d0f6ecef5853a
--- /dev/null
+++ b/src/OpenFOAM/fields/pointPatchFields/constraint/cyclicSlip/cyclicSlipPointPatchField.H
@@ -0,0 +1,154 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::cyclicSlipPointPatchField
+
+Description
+    Specialisation of cyclic that constrains to the patch
+
+SourceFiles
+    cyclicSlipPointPatchField.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef cyclicSlipPointPatchField_H
+#define cyclicSlipPointPatchField_H
+
+#include "cyclicPointPatchField.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                    Class cyclicSlipPointPatchField Declaration
+\*---------------------------------------------------------------------------*/
+
+template<class Type>
+class cyclicSlipPointPatchField
+:
+    public cyclicPointPatchField<Type>
+{
+
+public:
+
+    //- Runtime type information
+    TypeName("cyclicSlip");
+
+
+    // Constructors
+
+        //- Construct from patch and internal field
+        cyclicSlipPointPatchField
+        (
+            const pointPatch&,
+            const DimensionedField<Type, pointMesh>&
+        );
+
+        //- Construct from patch, internal field and dictionary
+        cyclicSlipPointPatchField
+        (
+            const pointPatch&,
+            const DimensionedField<Type, pointMesh>&,
+            const dictionary&
+        );
+
+        //- Construct by mapping given patchField<Type> onto a new patch
+        cyclicSlipPointPatchField
+        (
+            const cyclicSlipPointPatchField<Type>&,
+            const pointPatch&,
+            const DimensionedField<Type, pointMesh>&,
+            const pointPatchFieldMapper&
+        );
+
+        //- Construct and return a clone
+        virtual autoPtr<pointPatchField<Type> > clone() const
+        {
+            return autoPtr<pointPatchField<Type> >
+            (
+                new cyclicSlipPointPatchField<Type>
+                (
+                    *this
+                )
+            );
+        }
+
+        //- Construct as copy setting internal field reference
+        cyclicSlipPointPatchField
+        (
+            const cyclicSlipPointPatchField<Type>&,
+            const DimensionedField<Type, pointMesh>&
+        );
+
+        //- Construct and return a clone setting internal field reference
+        virtual autoPtr<pointPatchField<Type> > clone
+        (
+            const DimensionedField<Type, pointMesh>& iF
+        ) const
+        {
+            return autoPtr<pointPatchField<Type> >
+            (
+                new cyclicSlipPointPatchField<Type>
+                (
+                    *this, iF
+                )
+            );
+        }
+
+
+    // Member functions
+
+        //- Update the patch field
+        virtual void evaluate
+        (
+            const Pstream::commsTypes commsType=Pstream::blocking
+        );
+
+        //- Accumulate the effect of constraint direction of this patch
+        virtual void applyConstraint
+        (
+            const label pointi,
+            pointConstraint&
+        ) const;
+
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+#    include "cyclicSlipPointPatchField.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/OpenFOAM/fields/pointPatchFields/constraint/cyclicSlip/cyclicSlipPointPatchFields.C b/src/OpenFOAM/fields/pointPatchFields/constraint/cyclicSlip/cyclicSlipPointPatchFields.C
new file mode 100644
index 0000000000000000000000000000000000000000..71e09f575fa47fae3a2795055481ef9268e49de3
--- /dev/null
+++ b/src/OpenFOAM/fields/pointPatchFields/constraint/cyclicSlip/cyclicSlipPointPatchFields.C
@@ -0,0 +1,43 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "cyclicSlipPointPatchFields.H"
+#include "pointPatchFields.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+makePointPatchFields(cyclicSlip);
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/src/OpenFOAM/fields/pointPatchFields/constraint/cyclicSlip/cyclicSlipPointPatchFields.H b/src/OpenFOAM/fields/pointPatchFields/constraint/cyclicSlip/cyclicSlipPointPatchFields.H
new file mode 100644
index 0000000000000000000000000000000000000000..da2196d9be549eb9ed34c27f68f2d80526b196fc
--- /dev/null
+++ b/src/OpenFOAM/fields/pointPatchFields/constraint/cyclicSlip/cyclicSlipPointPatchFields.H
@@ -0,0 +1,49 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef cyclicSlipPointPatchFields_H
+#define cyclicSlipPointPatchFields_H
+
+#include "cyclicSlipPointPatchField.H"
+#include "fieldTypes.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+makePointPatchFieldTypedefs(cyclicSlip);
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/OpenFOAM/fields/pointPatchFields/constraint/empty/emptyPointPatchField.H b/src/OpenFOAM/fields/pointPatchFields/constraint/empty/emptyPointPatchField.H
index cc578731a096aaa67c7a19a9c47dec75d34ff270..bb58e0eeead0e01e17ee04726caffacfd8332a5f 100644
--- a/src/OpenFOAM/fields/pointPatchFields/constraint/empty/emptyPointPatchField.H
+++ b/src/OpenFOAM/fields/pointPatchFields/constraint/empty/emptyPointPatchField.H
@@ -119,6 +119,17 @@ public:
                 )
             );
         }
+
+    // Member functions
+
+        //- Constraint handling
+
+            //- Return the constraint type this pointPatchField implements
+            virtual const word& constraintType() const
+            {
+                return type();
+            }
+
 };
 
 
diff --git a/src/OpenFOAM/fields/pointPatchFields/constraint/processor/processorPointPatchField.H b/src/OpenFOAM/fields/pointPatchFields/constraint/processor/processorPointPatchField.H
index b5474e46d7a20cd6ee8b125516d1b926e5e3f0e8..cc1760a7b2b1d3c2cd1540670d796e48425b2a8b 100644
--- a/src/OpenFOAM/fields/pointPatchFields/constraint/processor/processorPointPatchField.H
+++ b/src/OpenFOAM/fields/pointPatchFields/constraint/processor/processorPointPatchField.H
@@ -158,6 +158,15 @@ public:
             }
 
 
+        //- Constraint handling
+
+            //- Return the constraint type this pointPatchField implements
+            virtual const word& constraintType() const
+            {
+                return type();
+            }
+
+
         // Evaluation functions
 
             //- Evaluate the patch field
diff --git a/src/OpenFOAM/fields/pointPatchFields/constraint/wedge/wedgePointPatchField.H b/src/OpenFOAM/fields/pointPatchFields/constraint/wedge/wedgePointPatchField.H
index 5f01f592e55b7fcf8bfd7fcda8beccf6c61f162f..8c62f3e47b42e1db22119271e1daa87c4ac49c04 100644
--- a/src/OpenFOAM/fields/pointPatchFields/constraint/wedge/wedgePointPatchField.H
+++ b/src/OpenFOAM/fields/pointPatchFields/constraint/wedge/wedgePointPatchField.H
@@ -122,6 +122,14 @@ public:
 
     // Member functions
 
+        //- Constraint handling
+
+            //- Return the constraint type this pointPatchField implements
+            virtual const word& constraintType() const
+            {
+                return type();
+            }
+
         // Evaluation functions
 
             //- Update the patch field
diff --git a/src/OpenFOAM/fields/pointPatchFields/pointPatchField/newPointPatchField.C b/src/OpenFOAM/fields/pointPatchFields/pointPatchField/newPointPatchField.C
index c77236f80d05c1299c4b12913b20c59ca6245b20..b14fbeac8fff19d4f196f196301bf01fd5aa1541 100644
--- a/src/OpenFOAM/fields/pointPatchFields/pointPatchField/newPointPatchField.C
+++ b/src/OpenFOAM/fields/pointPatchFields/pointPatchField/newPointPatchField.C
@@ -50,7 +50,7 @@ Foam::autoPtr<Foam::pointPatchField<Type> > Foam::pointPatchField<Type>::New
         (
             "PointPatchField<Type>::New"
             "(const word&, const pointPatch&, const Field<Type>&)"
-        )   << "Unknown patchTypefield type "
+        )   << "Unknown patchFieldType type "
             << patchFieldType
             << endl << endl
             << "Valid patchField types are :" << endl
@@ -58,16 +58,32 @@ Foam::autoPtr<Foam::pointPatchField<Type> > Foam::pointPatchField<Type>::New
             << exit(FatalError);
     }
 
-    typename pointPatchConstructorTable::iterator patchTypeCstrIter =
-        pointPatchConstructorTablePtr_->find(p.type());
+    autoPtr<pointPatchField<Type> > pfPtr(cstrIter()(p, iF));
 
-    if (patchTypeCstrIter != pointPatchConstructorTablePtr_->end())
+    if (pfPtr().constraintType() == p.constraintType())
     {
-        return autoPtr<pointPatchField<Type> >(patchTypeCstrIter()(p, iF));
+        // Compatible (constraint-wise) with the patch type
+        return pfPtr;
     }
     else
     {
-        return autoPtr<pointPatchField<Type> >(cstrIter()(p, iF));
+        // Use default constraint type
+        typename pointPatchConstructorTable::iterator patchTypeCstrIter =
+            pointPatchConstructorTablePtr_->find(p.type());
+
+        if (patchTypeCstrIter == pointPatchConstructorTablePtr_->end())
+        {
+            FatalErrorIn
+            (
+                "PointPatchField<Type>::New"
+                "(const word&, const pointPatch&, const Field<Type>&)"
+            )   << "inconsistent patch and patchField types for \n"
+                << "    patch type " << p.type()
+                << " and patchField type " << patchFieldType
+                << exit(FatalError);
+        }
+
+        return patchTypeCstrIter()(p, iF);
     }
 }
 
@@ -115,34 +131,44 @@ Foam::autoPtr<Foam::pointPatchField<Type> > Foam::pointPatchField<Type>::New
         }
     }
 
+    // Construct (but not necesarily returned)
+    autoPtr<pointPatchField<Type> > pfPtr(cstrIter()(p, iF, dict));
+
     if
     (
        !dict.found("patchType")
      || word(dict.lookup("patchType")) != p.type()
     )
     {
-        typename dictionaryConstructorTable::iterator patchTypeCstrIter
-            = dictionaryConstructorTablePtr_->find(p.type());
-
-        if
-        (
-            patchTypeCstrIter != dictionaryConstructorTablePtr_->end()
-         && patchTypeCstrIter() != cstrIter()
-        )
+        if (pfPtr().constraintType() == p.constraintType())
         {
-            FatalIOErrorIn
-            (
-                "PointPatchField<Type>const pointPatch&, "
-                "const Field<Type>&, const dictionary&)",
-                dict
-            )   << "inconsistent patch and patchField types for \n"
-                << "    patch type " << p.type()
-                << " and patchField type " << patchFieldType
-                << exit(FatalIOError);
+            // Compatible (constraint-wise) with the patch type
+            return pfPtr;
+        }
+        else
+        {
+            // Use default constraint type
+            typename dictionaryConstructorTable::iterator patchTypeCstrIter
+                = dictionaryConstructorTablePtr_->find(p.type());
+
+            if (patchTypeCstrIter == pointPatchConstructorTablePtr_->end())
+            {
+                FatalIOErrorIn
+                (
+                    "PointPatchField<Type>const pointPatch&, "
+                    "const Field<Type>&, const dictionary&)",
+                    dict
+                )   << "inconsistent patch and patchField types for \n"
+                    << "    patch type " << p.type()
+                    << " and patchField type " << patchFieldType
+                    << exit(FatalIOError);
+            }
+
+            return patchTypeCstrIter()(p, iF, dict);
         }
     }
 
-    return autoPtr<pointPatchField<Type> >(cstrIter()(p, iF, dict));
+    return cstrIter()(p, iF, dict);
 }
 
 
@@ -185,7 +211,7 @@ Foam::autoPtr<Foam::pointPatchField<Type> > Foam::pointPatchField<Type>::New
             << exit(FatalError);
     }
 
-    return autoPtr<pointPatchField<Type> >(cstrIter()(ptf, p, iF, pfMapper));
+    return cstrIter()(ptf, p, iF, pfMapper);
 }
 
 
diff --git a/src/OpenFOAM/fields/pointPatchFields/pointPatchField/pointPatchField.H b/src/OpenFOAM/fields/pointPatchFields/pointPatchField/pointPatchField.H
index 8961fbb9dbebe63aed7637ad76ce04847a6f2df6..98604bb4bff9fc6c8bbcf587f191ec9fcb49e58b 100644
--- a/src/OpenFOAM/fields/pointPatchFields/pointPatchField/pointPatchField.H
+++ b/src/OpenFOAM/fields/pointPatchFields/pointPatchField/pointPatchField.H
@@ -336,9 +336,15 @@ public:
                 const Field<Type1>& pF
             ) const;
 
-            //- Return the type of the calculated for of pointPatchField
+            //- Return the type of the calculated form of pointPatchField
             static const word& calculatedType();
 
+            //- Return the constraint type this pointPatchField implements.
+            virtual const word& constraintType() const
+            {
+                return word::null;
+            }
+
 
         // Mapping functions
 
diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.H
index 4b7090ae432a9ff23ad325115e5c4e9ddb5de585..2682c194c8ecb921db0ba971ba5e97025435b74c 100644
--- a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.H
+++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.H
@@ -113,6 +113,12 @@ public:
 
         // Access
 
+            //- Return the constraint type this pointPatch implements.
+            virtual const word& constraintType() const
+            {
+                return type();
+            }
+
             //- Return the underlying cyclicPolyPatch
             const cyclicPolyPatch& cyclicPatch() const
             {
diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/empty/emptyPointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/empty/emptyPointPatch.H
index c0450f1ce77a15b343cc177a87457c70ab483c49..1352a71aa3010b383b71723a92b41e0d6e2a9fe9 100644
--- a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/empty/emptyPointPatch.H
+++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/empty/emptyPointPatch.H
@@ -73,6 +73,12 @@ public:
 
     // Member Functions
 
+        //- Return the constraint type this pointPatch implements.
+        virtual const word& constraintType() const
+        {
+            return type();
+        }
+
         //- Accumulate the effect of constraint direction of this patch
         virtual void applyConstraint
         (
diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.H
index ef30fb27f21bb963b75b111e413cf270111366dd..1654b58d4bf03582abfbaad1bd47aaa9cf0408a8 100644
--- a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.H
+++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.H
@@ -129,6 +129,12 @@ public:
             }
         }
 
+        //- Return the constraint type this pointPatch implements.
+        virtual const word& constraintType() const
+        {
+            return type();
+        }
+
         //- Return processor number
         int myProcNo() const
         {
diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/symmetry/symmetryPointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/symmetry/symmetryPointPatch.H
index 16d66dccf844d07378e8a7910cc5d213e49ab327..cc66f9c50531c062d522a54ad884250cefe4f682 100644
--- a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/symmetry/symmetryPointPatch.H
+++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/symmetry/symmetryPointPatch.H
@@ -73,6 +73,12 @@ public:
 
     // Member Functions
 
+        //- Return the constraint type this pointPatch implements.
+        virtual const word& constraintType() const
+        {
+            return type();
+        }
+
         //- Accumulate the effect of constraint direction of this patch
         virtual void applyConstraint
         (
diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/wedge/wedgePointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/wedge/wedgePointPatch.H
index 0de34e86614806c154d4ea3979f4fa28857d1c2c..0841de7f9c241b14e46c19294f647643096b085e 100644
--- a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/wedge/wedgePointPatch.H
+++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/wedge/wedgePointPatch.H
@@ -73,6 +73,12 @@ public:
 
     // Member Functions
 
+        //- Return the constraint type this pointPatch implements.
+        virtual const word& constraintType() const
+        {
+            return type();
+        }
+
         //- Accumulate the effect of constraint direction of this patch
         virtual void applyConstraint
         (
diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/pointPatch/pointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/pointPatch/pointPatch.H
index 76f04d1d1241534c13ca104ee95d06793b0e7d92..e2e01c4553ab52434146729614beb01cc7f51dfb 100644
--- a/src/OpenFOAM/meshes/pointMesh/pointPatches/pointPatch/pointPatch.H
+++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/pointPatch/pointPatch.H
@@ -157,6 +157,12 @@ public:
         //- Return  point normals
         virtual const vectorField& pointNormals() const = 0;
 
+        //- Return the constraint type this pointPatch implements.
+        virtual const word& constraintType() const
+        {
+            return word::null;
+        }
+
         //- Accumulate the effect of constraint direction of this patch
         virtual void applyConstraint
         (
diff --git a/src/finiteVolume/interpolation/volPointInterpolation/volPointInterpolation.C b/src/finiteVolume/interpolation/volPointInterpolation/volPointInterpolation.C
index 37e61081eda29b3dc26567b785f8abc0863c0c05..36a92ca66b9610da9e921d49fb0effeb09384094 100644
--- a/src/finiteVolume/interpolation/volPointInterpolation/volPointInterpolation.C
+++ b/src/finiteVolume/interpolation/volPointInterpolation/volPointInterpolation.C
@@ -620,6 +620,7 @@ volPointInterpolation::~volPointInterpolation()
 void volPointInterpolation::updateMesh()
 {
     makeWeights();
+    makePatchPatchAddressing();
 }