diff --git a/src/meshTools/triSurface/orientedSurface/orientedSurface.C b/src/meshTools/triSurface/orientedSurface/orientedSurface.C
index 9cc473f3a32bf8c06734e39eb7d3b6173ea2b159..25035a24f6ebf6d69b2d29455ff4ed27937da845 100644
--- a/src/meshTools/triSurface/orientedSurface/orientedSurface.C
+++ b/src/meshTools/triSurface/orientedSurface/orientedSurface.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2004-2010 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2004-2011 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -102,7 +102,7 @@ Foam::labelList Foam::orientedSurface::edgeToFace
             {
                 if (flip[face1] == UNVISITED)
                 {
-                    FatalErrorIn("orientedSurface::edgeToFace") << "Problem"
+                    FatalErrorIn("orientedSurface::edgeToFace(..)") << "Problem"
                         << abort(FatalError);
                 }
                 else
@@ -283,8 +283,10 @@ bool Foam::orientedSurface::flipSurface
         }
     }
     // Recalculate normals
-    s.clearOut();
-
+    if (hasFlipped)
+    {
+        s.clearOut();
+    }
     return hasFlipped;
 }
 
@@ -352,8 +354,28 @@ bool Foam::orientedSurface::orient
         //      FLIP: need to flip
         labelList flipState(s.size(), UNVISITED);
 
-        flipState[0] = NOFLIP;
-        walkSurface(s, 0, flipState);
+        label faceI = 0;
+        while (true)
+        {
+            label startFaceI = -1;
+            while (faceI < s.size())
+            {
+                if (flipState[faceI] == UNVISITED)
+                {
+                    startFaceI = faceI;
+                    break;
+                }
+                faceI++;
+            }
+
+            if (startFaceI == -1)
+            {
+                break;
+            }
+
+            flipState[startFaceI] = NOFLIP;
+            walkSurface(s, startFaceI, flipState);
+        }
 
         anyFlipped = flipSurface(s, flipState);
     }