diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.C b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.C
index 3dace6a53e06dab9c8e3417f0f90e68df1aa0181..bd06a2755b8ea87e35540050192130c1380d7c95 100644
--- a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.C
+++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.C
@@ -194,6 +194,9 @@ void Foam::cyclicPolyPatch::calcTransforms
         vectorField half0Normals(half0Areas.size());
         vectorField half1Normals(half1Areas.size());
 
+        scalar maxCos = -GREAT;
+        label maxFacei = -1;
+
         forAll(half0, facei)
         {
             scalar magSf = mag(half0Areas[facei]);
@@ -233,9 +236,34 @@ void Foam::cyclicPolyPatch::calcTransforms
             {
                 half0Normals[facei] = half0Areas[facei] / magSf;
                 half1Normals[facei] = half1Areas[facei] / nbrMagSf;
+
+                if (transform_ == ROTATIONAL)
+                {
+                    scalar cos = mag(half0Normals[facei] & rotationAxis_);
+                    if (cos > maxCos)
+                    {
+                        maxCos = cos;
+                        maxFacei = facei;
+                    }
+                }
             }
         }
 
+        if (maxCos > sqrt(SMALL))
+        {
+            WarningIn
+            (
+                "cyclicPolyPatch::calcTransforms()"
+            )   << "on patch " << name()
+                << " face:" << maxFacei << " fc:" << half0Ctrs[maxFacei]
+                << " is not perpendicular to the rotationAxis."  << endl
+                << "This might cause conservation problems"
+                << " or problems with geometry or topology changes." << endl
+                << "rotation axis   : " << rotationAxis_ << endl
+                << "face normal     : " << half0Normals[maxFacei] << endl
+                << "cosine of angle : " << maxCos << endl;
+        }
+
         // Calculate transformation tensors
         calcTransformTensors
         (
@@ -450,6 +478,35 @@ Foam::cyclicPolyPatch::cyclicPolyPatch
 }
 
 
+Foam::cyclicPolyPatch::cyclicPolyPatch
+(
+    const word& name,
+    const label size,
+    const label start,
+    const label index,
+    const polyBoundaryMesh& bm,
+    const word& neighbPatchName,
+    const transformType transform,
+    const vector& rotationAxis,
+    const point& rotationCentre,
+    const vector& separationVector
+)
+:
+    coupledPolyPatch(name, size, start, index, bm),
+    neighbPatchName_(neighbPatchName),
+    neighbPatchID_(-1),
+    transform_(transform),
+    rotationAxis_(rotationAxis),
+    rotationCentre_(rotationCentre),
+    separationVector_(separationVector),
+    coupledPointsPtr_(NULL),
+    coupledEdgesPtr_(NULL)
+{
+    // Neighbour patch might not be valid yet so no transformation
+    // calculation possible.
+}
+
+
 Foam::cyclicPolyPatch::cyclicPolyPatch
 (
     const word& name,
diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.H b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.H
index 9e9e3510edd44877b35da74d4dea7a573691ff3f..cd3c3081a95afd7ced3bbb5e26608f79cf3f925e 100644
--- a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.H
+++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.H
@@ -213,6 +213,21 @@ public:
             const polyBoundaryMesh& bm
         );
 
+        //- Construct from components
+        cyclicPolyPatch
+        (
+            const word& name,
+            const label size,
+            const label start,
+            const label index,
+            const polyBoundaryMesh& bm,
+            const word& neighbPatchName,
+            const transformType transform,  // transformation type
+            const vector& rotationAxis,     // for rotation only
+            const point& rotationCentre,    // for rotation only
+            const vector& separationVector  // for translation only
+        );
+
         //- Construct from dictionary
         cyclicPolyPatch
         (