diff --git a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalPoints.C b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalPoints.C
index caad93731ceaeae68f0e87139d9864cb2ea006df..2b6b17da92d3e4fe0fc885200ee59b12029a5ec4 100644
--- a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalPoints.C
+++ b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalPoints.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -90,6 +90,11 @@ Foam::labelPairList Foam::globalPoints::addSendTransform
     const labelPairList& info
 ) const
 {
+    scalar tol = refCast<const coupledPolyPatch>
+    (
+        mesh_.boundaryMesh()[patchI]
+    ).matchTolerance();
+
     labelPairList sendInfo(info.size());
 
     forAll(info, i)
@@ -111,7 +116,8 @@ Foam::labelPairList Foam::globalPoints::addSendTransform
             (
                 globalIndexAndTransform::transformIndex(info[i]),
                 patchI,
-                true           // patchI is sending side
+                true,           // patchI is sending side
+                tol             // tolerance for comparison
             )
         );
     }
diff --git a/src/OpenFOAM/primitives/globalIndexAndTransform/globalIndexAndTransform.H b/src/OpenFOAM/primitives/globalIndexAndTransform/globalIndexAndTransform.H
index 408b1f2d32d6373c94b5135f0730b504fd6ad78f..7cb4bab495609f9e0ce649d8bb996f21a944af3f 100644
--- a/src/OpenFOAM/primitives/globalIndexAndTransform/globalIndexAndTransform.H
+++ b/src/OpenFOAM/primitives/globalIndexAndTransform/globalIndexAndTransform.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -195,7 +195,8 @@ public:
         (
             const label transformIndex,
             const label patchI,
-            const bool isSendingSide = true
+            const bool isSendingSide = true,
+            const scalar tol = SMALL
         ) const;
 
         //- Combine two transformIndices
diff --git a/src/OpenFOAM/primitives/globalIndexAndTransform/globalIndexAndTransformI.H b/src/OpenFOAM/primitives/globalIndexAndTransform/globalIndexAndTransformI.H
index bb72f8d43dc4bc8a0dc5b5f9ef44b0e0156d7977..9227e6a990baf0c6b87c81a892382a2b52b52d0d 100644
--- a/src/OpenFOAM/primitives/globalIndexAndTransform/globalIndexAndTransformI.H
+++ b/src/OpenFOAM/primitives/globalIndexAndTransform/globalIndexAndTransformI.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -190,7 +190,8 @@ Foam::label Foam::globalIndexAndTransform::addToTransformIndex
 (
     const label transformIndex,
     const label patchI,
-    const bool isSendingSide
+    const bool isSendingSide,
+    const scalar tol
 ) const
 {
     const Pair<label>& transSign = patchTransformSign_[patchI];
@@ -228,21 +229,49 @@ Foam::label Foam::globalIndexAndTransform::addToTransformIndex
             }
             else if (sign == permutation[matchTransI])
             {
-                FatalErrorIn
-                (
-                    "Foam::label "
-                    "Foam::globalIndexAndTransform::addToTransformIndex\n"
-                    "(\n"
-                        "const label,\n"
-                        "const label,\n"
-                        "const bool\n"
-                    ") const\n"
-                )   << "More than one patch accessing the same transform "
-                    << "but not of the same sign." << endl
-                    << "patch:" << mesh_.boundaryMesh()[patchI].name()
-                    << " transform:" << matchTransI << " sign:" << sign
-                    << "  current transforms:" << permutation
-                    << exit(FatalError);
+                // This is usually illegal. The only exception is for points
+                // on the axis of a 180 degree cyclic wedge when the
+                // transformation is going to be (-1 0 0 0 -1 0 0 0 +1)
+                // (or a different permutation but always two times -1 and
+                // once +1)
+                bool antiCyclic = false;
+
+                const vectorTensorTransform& vt = transforms_[matchTransI];
+                if (mag(vt.t()) < SMALL && vt.hasR())
+                {
+                    const tensor& R = vt.R();
+                    scalar sumDiag = tr(R);
+                    scalar sumMagDiag = mag(R.xx())+mag(R.yy())+mag(R.zz());
+
+                    if (mag(sumMagDiag-3) < tol && mag(sumDiag+1) < tol)
+                    {
+                        antiCyclic = true;
+                    }
+                }
+
+                if (antiCyclic)
+                {
+                    // 180 degree rotational. Reset transformation.
+                    permutation[matchTransI] = 0;
+                }
+                else
+                {
+                    FatalErrorIn
+                    (
+                        "Foam::label "
+                        "Foam::globalIndexAndTransform::addToTransformIndex\n"
+                        "(\n"
+                            "const label,\n"
+                            "const label,\n"
+                            "const bool\n"
+                        ") const\n"
+                    )   << "More than one patch accessing the same transform "
+                        << "but not of the same sign." << endl
+                        << "patch:" << mesh_.boundaryMesh()[patchI].name()
+                        << " transform:" << matchTransI << " sign:" << sign
+                        << "  current transforms:" << permutation
+                        << exit(FatalError);
+                }
             }
             else
             {