diff --git a/applications/solvers/multiphase/bubbleFoam/wallFunctions.H b/applications/solvers/multiphase/bubbleFoam/wallFunctions.H
index bc9e93c63dfda8a7cebd087277b66547b16f7bf2..0d047468408c219a0cdb91d6f5fd81d4341b0de0 100644
--- a/applications/solvers/multiphase/bubbleFoam/wallFunctions.H
+++ b/applications/solvers/multiphase/bubbleFoam/wallFunctions.H
@@ -4,6 +4,7 @@
     scalar Cmu25 = ::pow(Cmu.value(), 0.25);
     scalar Cmu75 = ::pow(Cmu.value(), 0.75);
     scalar kappa_ = kappa.value();
+    scalar nub_ = nub.value();
 
     const fvPatchList& patches = mesh.boundary();
 
@@ -32,7 +33,7 @@
 
         if (isA<wallFvPatch>(currPatch))
         {
-            const scalarField& nuw = nutb.boundaryField()[patchi];
+            const scalarField& nutbw = nutb.boundaryField()[patchi];
 
             scalarField magFaceGradU(mag(Ub.boundaryField()[patchi].snGrad()));
 
@@ -43,7 +44,7 @@
                 scalar yPlus =
                     Cmu25*y[patchi][facei]
                     *::sqrt(k[faceCelli])
-                    /nub.value();
+                    /nub_;
 
 
                 // For corner cells (with two boundary or more faces),
@@ -59,7 +60,7 @@
                 if (yPlus > 11.6)
                 {
                     G[faceCelli] +=
-                        nuw[facei]*magFaceGradU[facei]
+                        (nutbw[facei] + nub_)*magFaceGradU[facei]
                         *Cmu25*::sqrt(k[faceCelli])
                         /(kappa_*y[patchi][facei]);
                 }
diff --git a/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCodeContext.C b/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCodeContext.C
index 81c1a50ceb7d4256e3b04a79dea884429b822a93..93d6ebbdd722790aecec848957251fed5e51fae2 100644
--- a/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCodeContext.C
+++ b/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCodeContext.C
@@ -46,7 +46,6 @@ Foam::dynamicCodeContext::dynamicCodeContext(const dictionary& dict)
         const entry& codeEntry = dict.lookupEntry("code", false, false);
         code_ = stringOps::trim(codeEntry.stream());
         stringOps::inplaceExpand(code_, dict);
-        addLineDirective(code_, codeEntry.startLineNumber(), dict.name());
     }
 
     // note: removes any leading/trailing whitespace
@@ -64,7 +63,6 @@ Foam::dynamicCodeContext::dynamicCodeContext(const dictionary& dict)
     {
         include_ = stringOps::trim(includePtr->stream());
         stringOps::inplaceExpand(include_, dict);
-        addLineDirective(include_, includePtr->startLineNumber(), dict.name());
     }
 
     // optional
@@ -92,6 +90,28 @@ Foam::dynamicCodeContext::dynamicCodeContext(const dictionary& dict)
     OSHA1stream os;
     os  << include_ << options_ << libs_ << localCode_ << code_;
     sha1_ = os.digest();
+
+
+
+    // Add line number after calculating sha1 since includes processorDDD
+    // in path which differs between processors.
+
+    {
+        const entry& codeEntry = dict.lookupEntry("code", false, false);
+        addLineDirective(code_, codeEntry.startLineNumber(), dict.name());
+    }
+    if (includePtr)
+    {
+        addLineDirective(include_, includePtr->startLineNumber(), dict.name());
+    }
+    if (optionsPtr)
+    {
+        addLineDirective(options_, optionsPtr->startLineNumber(), dict.name());
+    }
+    if (libsPtr)
+    {
+        addLineDirective(libs_, libsPtr->startLineNumber(), dict.name());
+    }
 }
 
 
diff --git a/src/OpenFOAM/meshes/primitiveShapes/plane/plane.C b/src/OpenFOAM/meshes/primitiveShapes/plane/plane.C
index c1a2b66f1ebc447bfa45f9dbebed2fe54fade000..85590cc5e27b74172509fe2e4a205c3e4062e1da 100644
--- a/src/OpenFOAM/meshes/primitiveShapes/plane/plane.C
+++ b/src/OpenFOAM/meshes/primitiveShapes/plane/plane.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
@@ -96,7 +96,8 @@ void Foam::plane::calcPntAndVec
             "    const point&,\n"
             "    const point&\n"
             ")\n"
-        ) << "Bad points." << abort(FatalError);
+        )   << "Bad points:" << point1 << ' ' << point2 << ' ' << point3
+            << abort(FatalError);
     }
 
     unitVector_ = line12 ^ line23;
@@ -112,7 +113,8 @@ void Foam::plane::calcPntAndVec
             "    const point&,\n"
             "    const point&\n"
             ")\n"
-        )   << "Plane normal defined with zero length"
+        )   << "Plane normal defined with zero length" << nl
+            << "Bad points:" << point1 << ' ' << point2 << ' ' << point3
             << abort(FatalError);
     }
 
@@ -137,7 +139,7 @@ Foam::plane::plane(const vector& normalVector)
     else
     {
         FatalErrorIn("plane::plane(const vector&)")
-            << "plane normal has zero length"
+            << "plane normal has zero length. basePoint:" << basePoint_
             << abort(FatalError);
     }
 }
@@ -158,7 +160,7 @@ Foam::plane::plane(const point& basePoint, const vector& normalVector)
     else
     {
         FatalErrorIn("plane::plane(const point&, const vector&)")
-            << "plane normal has zero length"
+            << "plane normal has zero length. basePoint:" << basePoint_
             << abort(FatalError);
     }
 }
@@ -228,8 +230,7 @@ Foam::plane::plane(const dictionary& dict)
         (
             "plane::plane(const dictionary&)",
             dict
-        )
-            << "Invalid plane type: " << planeType
+        )   << "Invalid plane type: " << planeType
             << abort(FatalIOError);
     }
 }
@@ -250,7 +251,7 @@ Foam::plane::plane(Istream& is)
     else
     {
         FatalErrorIn("plane::plane(Istream& is)")
-            << "plane normal has zero length"
+            << "plane normal has zero length. basePoint:" << basePoint_
             << abort(FatalError);
     }
 }
diff --git a/src/OpenFOAM/primitives/strings/wordRe/wordRe.H b/src/OpenFOAM/primitives/strings/wordRe/wordRe.H
index 8fd3eabc63d6f4fbffdea305303bb3b05923dc79..4136aa02cb524588f4b4df17e68ff8d08f28e08b 100644
--- a/src/OpenFOAM/primitives/strings/wordRe/wordRe.H
+++ b/src/OpenFOAM/primitives/strings/wordRe/wordRe.H
@@ -52,6 +52,7 @@ SourceFiles
 
 #include "word.H"
 #include "regExp.H"
+#include "keyType.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -60,7 +61,6 @@ namespace Foam
 
 // Forward declaration of friend functions and operators
 class wordRe;
-
 class Istream;
 class Ostream;
 
@@ -119,6 +119,9 @@ public:
         //- Construct as copy
         inline wordRe(const wordRe&);
 
+        //- Construct from keyType
+        inline wordRe(const keyType&, const compOption=LITERAL);
+
         //- Construct as copy of word
         inline wordRe(const word&);
 
@@ -206,6 +209,10 @@ public:
             //- Copy word, never a regular expression
             inline const wordRe& operator=(const word&);
 
+            //- Copy keyType, auto-test for regular expression
+            //  Always case sensitive
+            inline const wordRe& operator=(const keyType&);
+
             //- Copy string, auto-test for regular expression
             //  Always case sensitive
             inline const wordRe& operator=(const string&);
diff --git a/src/OpenFOAM/primitives/strings/wordRe/wordReI.H b/src/OpenFOAM/primitives/strings/wordRe/wordReI.H
index 713c003064180706e4dc31781682e40a1a6b9630..fcbd1c384562015228967b69300937456b236ba1 100644
--- a/src/OpenFOAM/primitives/strings/wordRe/wordReI.H
+++ b/src/OpenFOAM/primitives/strings/wordRe/wordReI.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2009-2010 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2009-2011 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -65,6 +65,18 @@ inline Foam::wordRe::wordRe(const word& str)
 {}
 
 
+inline Foam::wordRe::wordRe(const keyType& str, const compOption opt)
+:
+    word(str, false),
+    re_()
+{
+    if (str.isPattern())
+    {
+        compile(opt);
+    }
+}
+
+
 inline Foam::wordRe::wordRe(const char* str, const compOption opt)
 :
     word(str, false),
@@ -236,6 +248,17 @@ inline const Foam::wordRe& Foam::wordRe::operator=(const word& str)
 }
 
 
+inline const Foam::wordRe& Foam::wordRe::operator=(const keyType& str)
+{
+    string::operator=(str);
+    if (str.isPattern())
+    {
+        compile();
+    }
+    return *this;
+}
+
+
 inline const Foam::wordRe& Foam::wordRe::operator=(const string& str)
 {
     string::operator=(str);
diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/combineFaces.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/combineFaces.C
index 0d5d6ef768677b7d56667389b52731329edd5902..e10e44d1efa510878a0a8a2c01e0ace3f250d1da 100644
--- a/src/dynamicMesh/polyTopoChange/polyTopoChange/combineFaces.C
+++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/combineFaces.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
@@ -109,6 +109,12 @@ bool Foam::combineFaces::validFace
         return false;
     }
 
+    bool isNonManifold = bigFace.checkPointManifold(false, NULL);
+    if (isNonManifold)
+    {
+        return false;
+    }
+
     // Check for convexness
     face f(getOutsideFace(bigFace));
 
@@ -984,6 +990,7 @@ void Foam::combineFaces::setUnrefinement
                 zoneFlip                        // face flip in zone
             )
         );
+        restoredFaces.insert(masterFaceI, masterFaceI);
 
         // Add the previously removed faces
         for (label i = 1; i < faces.size(); i++)
@@ -991,7 +998,7 @@ void Foam::combineFaces::setUnrefinement
             //Pout<< "Restoring removed face with vertices " << faces[i]
             //    << endl;
 
-            meshMod.setAction
+            label faceI = meshMod.setAction
             (
                 polyAddFace
                 (
@@ -1007,6 +1014,7 @@ void Foam::combineFaces::setUnrefinement
                     zoneFlip                // zoneFlip
                 )
             );
+            restoredFaces.insert(faceI, masterFaceI);
         }
 
         // Clear out restored set
diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C
index 9d8e9ba2ca2176f6ff13875d855470a4e16202b8..4441e3a00de078662809233350415c82eaf1a97b 100644
--- a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C
+++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.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
@@ -302,6 +302,35 @@ void Foam::polyTopoChange::getMergeSets
 }
 
 
+bool Foam::polyTopoChange::hasValidPoints(const face& f) const
+{
+    forAll(f, fp)
+    {
+        if (f[fp] < 0 || f[fp] >= points_.size())
+        {
+            return false;
+        }
+    }
+    return true;
+}
+
+
+Foam::pointField Foam::polyTopoChange::facePoints(const face& f) const
+{
+    pointField points(f.size());
+    forAll(f, fp)
+    {
+        if (f[fp] < 0 && f[fp] >= points_.size())
+        {
+            FatalErrorIn("polyTopoChange::facePoints(const face&) const")
+                << "Problem." << abort(FatalError);
+        }
+        points[fp] = points_[f[fp]];
+    }
+    return points;
+}
+
+
 void Foam::polyTopoChange::checkFace
 (
     const face& f,
@@ -329,7 +358,14 @@ void Foam::polyTopoChange::checkFace
                 << "f:" << f
                 << " faceI(-1 if added face):" << faceI
                 << " own:" << own << " nei:" << nei
-                << " patchI:" << patchI << abort(FatalError);
+                << " patchI:" << patchI << nl;
+            if (hasValidPoints(f))
+            {
+                FatalError
+                        << "points (removed points marked with "
+                        << vector::max << ") " << facePoints(f);
+            }
+            FatalError << abort(FatalError);
         }
     }
     else
@@ -344,7 +380,14 @@ void Foam::polyTopoChange::checkFace
                 << "f:" << f
                 << " faceI(-1 if added face):" << faceI
                 << " own:" << own << " nei:" << nei
-                << " patchI:" << patchI << abort(FatalError);
+                << " patchI:" << patchI << nl;
+            if (hasValidPoints(f))
+            {
+                FatalError
+                        << "points (removed points marked with "
+                        << vector::max << ") : " << facePoints(f);
+            }
+            FatalError << abort(FatalError);
         }
 
         if (nei <= own)
@@ -358,7 +401,14 @@ void Foam::polyTopoChange::checkFace
                 << "f:" << f
                 << " faceI(-1 if added face):" << faceI
                 << " own:" << own << " nei:" << nei
-                << " patchI:" << patchI << abort(FatalError);
+                << " patchI:" << patchI << nl;
+            if (hasValidPoints(f))
+            {
+                FatalError
+                        << "points (removed points marked with "
+                        << vector::max << ") : " << facePoints(f);
+            }
+            FatalError << abort(FatalError);
         }
     }
 
@@ -373,7 +423,14 @@ void Foam::polyTopoChange::checkFace
             << "f:" << f
             << " faceI(-1 if added face):" << faceI
             << " own:" << own << " nei:" << nei
-            << " patchI:" << patchI << abort(FatalError);
+            << " patchI:" << patchI << nl;
+            if (hasValidPoints(f))
+            {
+                FatalError
+                        << "points (removed points marked with "
+                        << vector::max << ") : " << facePoints(f);
+            }
+            FatalError << abort(FatalError);
     }
     if (faceI >= 0 && faceI < faces_.size() && faceRemoved(faceI))
     {
@@ -386,7 +443,14 @@ void Foam::polyTopoChange::checkFace
             << "f:" << f
             << " faceI(-1 if added face):" << faceI
             << " own:" << own << " nei:" << nei
-            << " patchI:" << patchI << abort(FatalError);
+            << " patchI:" << patchI << nl;
+            if (hasValidPoints(f))
+            {
+                FatalError
+                        << "points (removed points marked with "
+                        << vector::max << ") : " << facePoints(f);
+            }
+            FatalError << abort(FatalError);
     }
     forAll(f, fp)
     {
@@ -401,7 +465,14 @@ void Foam::polyTopoChange::checkFace
                 << "f:" << f
                 << " faceI(-1 if added face):" << faceI
                 << " own:" << own << " nei:" << nei
-                << " patchI:" << patchI << abort(FatalError);
+                << " patchI:" << patchI << nl;
+            if (hasValidPoints(f))
+            {
+                FatalError
+                        << "points (removed points marked with "
+                        << vector::max << ") : " << facePoints(f);
+            }
+            FatalError << abort(FatalError);
         }
     }
 }
@@ -729,8 +800,16 @@ void Foam::polyTopoChange::getFaceOrder
                 << " neighbour " << faceNeighbour_[faceI]
                 << " region " << region_[faceI] << endl
                 << "This is usually caused by not specifying a patch for"
-                << " a boundary face."
-                << abort(FatalError);
+                << " a boundary face." << nl
+                << "Switch on the polyTopoChange::debug flag to catch"
+                << " this error earlier." << nl;
+            if (hasValidPoints(faces_[faceI]))
+            {
+                FatalError
+                        << "points (removed points marked with "
+                        << vector::max << ") " << facePoints(faces_[faceI]);
+            }
+            FatalError << abort(FatalError);
         }
     }
 }
diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.H b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.H
index 1e5ae305ff10926ec17541bab9b2e421b2cf7e68..48b7862646b6968fde7a52a5b18b6573a679454c 100644
--- a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.H
+++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.H
@@ -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
@@ -239,6 +239,12 @@ class polyTopoChange
             List<objectMap>& cellsFromCells
         );
 
+        //- Are all face vertices valid
+        bool hasValidPoints(const face&) const;
+
+        //- Return face points
+        pointField facePoints(const face& f) const;
+
         //- Check inputs to modFace or addFace
         void checkFace
         (
diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files
index 95ca51d2f6ae317721c9fbc1fe88fc8ff5b8e5b3..446b64460a033bb4f0c04ebe953614cd0d4a6656 100644
--- a/src/finiteVolume/Make/files
+++ b/src/finiteVolume/Make/files
@@ -208,9 +208,6 @@ $(interpolation)/interpolationPoint/pointMVCWeight.C
 $(interpolation)/interpolationPoint/makeInterpolationPoint.C
 
 volPointInterpolation = interpolation/volPointInterpolation
-/*
-$(volPointInterpolation)/pointPatchInterpolation/pointPatchInterpolation.C
-*/
 $(volPointInterpolation)/volPointInterpolation.C
 
 surfaceInterpolation = interpolation/surfaceInterpolation
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/correctedSnGrad/correctedSnGrad.C b/src/finiteVolume/finiteVolume/snGradSchemes/correctedSnGrad/correctedSnGrad.C
index 88f0bc01c9d3a01fe7c980a3147b5087607ae843..3440de6f66fd77a80aa8dfc777546125bcbcc188 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/correctedSnGrad/correctedSnGrad.C
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/correctedSnGrad/correctedSnGrad.C
@@ -56,7 +56,7 @@ Foam::fv::correctedSnGrad<Type>::fullGradCorrection
             gradScheme<Type>::New
             (
                 mesh,
-                mesh.gradScheme(vf.name())
+                mesh.gradScheme("grad(" + vf.name() + ')')
             )().grad(vf, "grad(" + vf.name() + ')')
         );
     tssf().rename("snGradCorr(" + vf.name() + ')');
@@ -108,7 +108,7 @@ Foam::fv::correctedSnGrad<Type>::correction
                 gradScheme<typename pTraits<Type>::cmptType>::New
                 (
                     mesh,
-                    mesh.gradScheme(ssf.name())
+                    mesh.gradScheme("grad(" + ssf.name() + ')')
                 )()
                 //gaussGrad<typename pTraits<Type>::cmptType>(mesh)
                .grad(vf.component(cmpt))
diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearUpwind/linearUpwind.H b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearUpwind/linearUpwind.H
index 6c00e4deb237d75829f6f45f6c796ab649342e90..13b98512df680f03e1d89f12f104f58af6a6257c 100644
--- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearUpwind/linearUpwind.H
+++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearUpwind/linearUpwind.H
@@ -111,7 +111,16 @@ public:
                     mesh.gradScheme(gradSchemeName_)
                 )
             )
-        {}
+        {
+            if (!schemeData.eof())
+            {
+                IOWarningIn("linearUpwind(const fvMesh&, Istream&)", schemeData)
+                    << "unexpected additional entries in stream." << nl
+                    << "    Only the name of the gradient scheme in the"
+                       " 'gradSchemes' dictionary should be specified."
+                    << endl;
+            }
+        }
 
         //- Construct from faceFlux and Istream
         linearUpwind
@@ -131,7 +140,16 @@ public:
                     mesh.gradScheme(gradSchemeName_)
                 )
             )
-        {}
+        {
+            if (!schemeData.eof())
+            {
+                IOWarningIn("linearUpwind(const fvMesh&, Istream&)", schemeData)
+                    << "unexpected additional entries in stream." << nl
+                    << "    Only the name of the gradient scheme in the"
+                       " 'gradSchemes' dictionary should be specified."
+                    << endl;
+            }
+        }
 
 
     // Member Functions
diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearUpwind/linearUpwindV.H b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearUpwind/linearUpwindV.H
index 262d54115db81ec24feb58b905593da4d9bbe610..ce07b1017bfe555861ae749b0e5ff3bd83c77fff 100644
--- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearUpwind/linearUpwindV.H
+++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearUpwind/linearUpwindV.H
@@ -110,7 +110,13 @@ public:
                     mesh.gradScheme(gradSchemeName_)
                 )
             )
-        {}
+        {
+            IOWarningIn("linearUpwindV(const fvMesh&, Istream&)", schemeData)
+                << "unexpected additional entries in stream." << nl
+                << "    Only the name of the gradient scheme in the"
+                   " 'gradSchemes' dictionary should be specified."
+                << endl;
+        }
 
         //- Construct from faceFlux and Istream
         linearUpwindV
@@ -130,7 +136,13 @@ public:
                     mesh.gradScheme(gradSchemeName_)
                 )
             )
-        {}
+        {
+            IOWarningIn("linearUpwindV(const fvMesh&, Istream&)", schemeData)
+                << "unexpected additional entries in stream." << nl
+                << "    Only the name of the gradient scheme in the"
+                   " 'gradSchemes' dictionary should be specified."
+                << endl;
+        }
 
 
     // Member Functions
diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C
index cdaa9f83c773bee458239028bcd93945698b072d..a1e274d2c0862e4f95237a8f38728267d578461b 100644
--- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C
+++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C
@@ -2615,9 +2615,12 @@ void Foam::autoLayerDriver::addLayers
             extrudeStatus
         );
 
-        Info<< "Extruding " << countExtrusion(pp, extrudeStatus)
-            << " out of " << returnReduce(pp().size(), sumOp<label>())
-            << " faces. Removed extrusion at " << nTotChanged << " faces."
+        label nExtruded = countExtrusion(pp, extrudeStatus);
+        label nTotFaces = returnReduce(pp().size(), sumOp<label>());
+        Info<< "Extruding " << nExtruded
+            << " out of " << nTotFaces
+            << " faces (" << 100.0*nExtruded/nTotFaces << "%)."
+            << " Removed extrusion at " << nTotChanged << " faces."
             << endl;
 
         if (nTotChanged == 0)
diff --git a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementMerge.C b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementMerge.C
index dc16bd760f8f7b1985f380517979c69b54642034..6cc8d7c7bb5f7122f037386f0d1256ecab65c460 100644
--- a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementMerge.C
+++ b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementMerge.C
@@ -277,7 +277,11 @@ Foam::label Foam::meshRefinement::mergePatchFacesUndo
         }
     }
 
-    // Get all sets of faces that can be merged
+    // Get all sets of faces that can be merged. Since only faces on the same
+    // patch get merged there is no risk of e.g. patchID faces getting merged
+    // with original patches (or even processor patches). There is a risk
+    // though of original patchfaces getting merged if they make a small
+    // angle. Would be pretty weird starting mesh though.
     labelListList allFaceSets
     (
         faceCombiner.getMergeSets
@@ -352,27 +356,20 @@ Foam::label Foam::meshRefinement::mergePatchFacesUndo
         // Get the kept faces that need to be recalculated.
         // Merging two boundary faces might shift the cell centre
         // (unless the faces are absolutely planar)
-        labelHashSet retestFaces(6*allFaceSets.size());
+        labelHashSet retestFaces(2*allFaceSets.size());
 
         forAll(allFaceSets, setI)
         {
             label oldMasterI = allFaceSets[setI][0];
-
-            label faceI = map().reverseFaceMap()[oldMasterI];
-
-            // faceI is always uncoupled boundary face
-            const cell& cFaces = mesh_.cells()[mesh_.faceOwner()[faceI]];
-
-            forAll(cFaces, i)
-            {
-                retestFaces.insert(cFaces[i]);
-            }
+            retestFaces.insert(map().reverseFaceMap()[oldMasterI]);
         }
-        updateMesh(map, retestFaces.toc());
+        updateMesh(map, growFaceCellFace(retestFaces));
 
         if (debug)
         {
             // Check sync
+            Pout<< "Checking sync after initial merging " << nFaceSets
+                << " faces." << endl;
             checkData();
 
             Pout<< "Writing initial merged-faces mesh to time "
@@ -555,26 +552,18 @@ Foam::label Foam::meshRefinement::mergePatchFacesUndo
             // Get the kept faces that need to be recalculated.
             // Merging two boundary faces might shift the cell centre
             // (unless the faces are absolutely planar)
-            labelHashSet retestFaces(6*restoredFaces.size());
+            labelHashSet retestFaces(2*restoredFaces.size());
 
-            forAll(restoredFaces, setI)
+            forAllConstIter(Map<label>, restoredFaces, iter)
             {
-                label faceI = restoredFaces[setI];
-                // faceI is always uncoupled boundary face
-                const cell& cFaces = mesh_.cells()[mesh_.faceOwner()[faceI]];
-
-                forAll(cFaces, i)
-                {
-                    retestFaces.insert(cFaces[i]);
-                }
+                retestFaces.insert(iter.key());
             }
 
-
             // Experimental:restore all points/face/cells in maps
             updateMesh
             (
                 map,
-                retestFaces.toc(),
+                growFaceCellFace(retestFaces),
                 restoredPoints,
                 restoredFaces,
                 restoredCells
@@ -583,6 +572,8 @@ Foam::label Foam::meshRefinement::mergePatchFacesUndo
             if (debug)
             {
                 // Check sync
+                Pout<< "Checking sync after restoring " << retestFaces.size()
+                    << " faces." << endl;
                 checkData();
 
                 Pout<< "Writing merged-faces mesh to time "
@@ -635,7 +626,26 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::doRemovePoints
     mesh_.setInstance(timeName());
 
     pointRemover.updateMesh(map);
-    updateMesh(map, labelList(0));
+
+
+    // Retest all affected faces and all the cells using them
+    labelHashSet retestFaces(pointRemover.savedFaceLabels().size());
+    forAll(pointRemover.savedFaceLabels(), i)
+    {
+        label faceI = pointRemover.savedFaceLabels()[i];
+        if (faceI >= 0)
+        {
+            retestFaces.insert(faceI);
+        }
+    }
+    updateMesh(map, growFaceCellFace(retestFaces));
+
+    if (debug)
+    {
+        // Check sync
+        Pout<< "Checking sync after removing points." << endl;
+        checkData();
+    }
 
     return map;
 }
@@ -689,7 +699,25 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::doRestorePoints
     mesh_.setInstance(timeName());
 
     pointRemover.updateMesh(map);
-    updateMesh(map, labelList(0));
+
+    labelHashSet retestFaces(2*facesToRestore.size());
+    forAll(facesToRestore, i)
+    {
+        label faceI = map().reverseFaceMap()[facesToRestore[i]];
+        if (faceI >= 0)
+        {
+            retestFaces.insert(faceI);
+        }
+    }
+    updateMesh(map, growFaceCellFace(retestFaces));
+
+    if (debug)
+    {
+        // Check sync
+        Pout<< "Checking sync after restoring points on "
+            << facesToRestore.size() << " faces." << endl;
+        checkData();
+    }
 
     return map;
 }
diff --git a/src/parallel/decompose/scotchDecomp/scotchDecomp.C b/src/parallel/decompose/scotchDecomp/scotchDecomp.C
index 7efb29d40ca2f29542e59130777f8e785c1c8a49..17ff685d49e2cfd6b32342b79e128f0d97f65aed 100644
--- a/src/parallel/decompose/scotchDecomp/scotchDecomp.C
+++ b/src/parallel/decompose/scotchDecomp/scotchDecomp.C
@@ -65,7 +65,7 @@ License
     The current default mapping strategy in Scotch can be seen by using the
     "-vs" option of program gmap. It is, to date:
 
-    b
+    r
     {
         job=t,
         map=t,
@@ -76,11 +76,17 @@ License
             {
                 asc=b
                 {
-                    bnd=d{pass=40,dif=1,rem=1}f{move=80,pass=-1,bal=0.005},
-                    org=f{move=80,pass=-1,bal=0.005},
+                    bnd=
+                    (
+                        d{pass=40,dif=1,rem=1}
+                     |
+                    )
+                    f{move=80,pass=-1,bal=0.002491},
+                    org=f{move=80,pass=-1,bal=0.002491},
                     width=3
                 },
-                low=h{pass=10}f{move=80,pass=-1,bal=0.0005},
+                low=h{pass=10}
+                f{move=80,pass=-1,bal=0.002491},
                 type=h,
                 vert=80,
                 rat=0.8
@@ -89,11 +95,17 @@ License
             {
                 asc=b
                 {
-                    bnd=d{pass=40,dif=1,rem=1}f{move=80,pass=-1,bal=0.005},
-                    org=f{move=80,pass=-1,bal=0.005},
+                    bnd=
+                    (
+                        d{pass=40,dif=1,rem=1}
+                      |
+                    )
+                    f{move=80,pass=-1,bal=0.002491},
+                    org=f{move=80,pass=-1,bal=0.002491},
                     width=3
                 },
-                low=h{pass=10}f{move=80,pass=-1,bal=0.0005},
+                low=h{pass=10}
+                f{move=80,pass=-1,bal=0.002491},
                 type=h,
                 vert=80,
                 rat=0.8
@@ -102,6 +114,9 @@ License
     }
 
 
+    Note: instead of gmap run gpart <nProcs> -vs <grfFile>
+    where <grfFile> can be obtained by running with 'writeGraph=true'
+
 \*---------------------------------------------------------------------------*/
 
 #include "scotchDecomp.H"
diff --git a/src/turbulenceModels/compressible/RAS/kOmegaSST/kOmegaSST.C b/src/turbulenceModels/compressible/RAS/kOmegaSST/kOmegaSST.C
index 54ebb5aa9a1ea91346f23e6335a5c670128a4760..1c9d53d391861712c843b0f50c42fa6e28398108 100644
--- a/src/turbulenceModels/compressible/RAS/kOmegaSST/kOmegaSST.C
+++ b/src/turbulenceModels/compressible/RAS/kOmegaSST/kOmegaSST.C
@@ -390,7 +390,7 @@ void kOmegaSST::correct()
     }
 
     tmp<volTensorField> tgradU = fvc::grad(U_);
-    volScalarField S2(magSqr(symm(tgradU())));
+    volScalarField S2(2*magSqr(symm(tgradU())));
     volScalarField GbyMu((tgradU() && dev(twoSymm(tgradU()))));
     volScalarField G("RASModel::G", mut_*GbyMu);
     tgradU.clear();
@@ -448,7 +448,7 @@ void kOmegaSST::correct()
 
 
     // Re-calculate viscosity
-    mut_ = a1_*rho_*k_/max(a1_*omega_, F2()*sqrt(2.0*S2));
+    mut_ = a1_*rho_*k_/max(a1_*omega_, F2()*sqrt(S2));
     mut_.correctBoundaryConditions();
 
     // Re-calculate thermal diffusivity
diff --git a/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.C b/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.C
index c94f2f1bad0e0907182a015749f6587e299f8907..f8ab7acf602464c0e1c04a12913f047eac8f423f 100644
--- a/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.C
+++ b/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2008-2010 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2008-2011 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -328,7 +328,7 @@ kOmegaSSTSAS::kOmegaSSTSAS
     bound(k_, kMin_);
     bound(omega_, omegaMin_);
 
-    updateSubGridScaleFields(magSqr(2.0*symm(fvc::grad(U))));
+    updateSubGridScaleFields(2.0*magSqr(symm(fvc::grad(U))));
 
     printCoeffs();
 }
@@ -345,7 +345,7 @@ void kOmegaSSTSAS::correct(const tmp<volTensorField>& gradU)
         y_.correct();
     }
 
-    volScalarField S2(magSqr(2.0*symm(gradU())));
+    volScalarField S2(2.0*magSqr(symm(gradU())));
     gradU.clear();
 
     volVectorField gradK(fvc::grad(k_));
diff --git a/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.H b/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.H
index 5ff2022a296b13f657a082023bb3ef2f25c6e45e..bf7ef1b54abf2a592639cfd6fffe962dbaf1badb 100644
--- a/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.H
+++ b/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.H
@@ -28,6 +28,12 @@ Description
     kOmegaSSTSAS LES turbulence model for incompressible flows
 
     References:
+    Evaluation of the SST-SAS model: Channel flow, asymmetric diffuser and axi-
+    symmetric hill
+    European Conference on Computational Fluid Dynamics
+    ECCOMAS CFD 2006
+    Lars Davison
+
     A Scale-Adaptive Simulation Model using Two-Equation Models
     AIAA 2005-1095
     F. R. Menter and Y. Egorov
diff --git a/src/turbulenceModels/incompressible/RAS/kOmegaSST/kOmegaSST.C b/src/turbulenceModels/incompressible/RAS/kOmegaSST/kOmegaSST.C
index 9e34f054b7c84c34da220c8336f45754fa79275b..6baeaf5a0ed226d49157978d9d2813cb4a4e2b4b 100644
--- a/src/turbulenceModels/incompressible/RAS/kOmegaSST/kOmegaSST.C
+++ b/src/turbulenceModels/incompressible/RAS/kOmegaSST/kOmegaSST.C
@@ -347,8 +347,8 @@ void kOmegaSST::correct()
         y_.correct();
     }
 
-    const volScalarField S2(magSqr(symm(fvc::grad(U_))));
-    volScalarField G("RASModel::G", nut_*2*S2);
+    const volScalarField S2(2*magSqr(symm(fvc::grad(U_))));
+    volScalarField G("RASModel::G", nut_*S2);
 
     // Update omega and G at the wall
     omega_.boundaryField().updateCoeffs();
@@ -368,7 +368,7 @@ void kOmegaSST::correct()
       - fvm::Sp(fvc::div(phi_), omega_)
       - fvm::laplacian(DomegaEff(F1), omega_)
      ==
-        gamma(F1)*2*S2
+        gamma(F1)*S2
       - fvm::Sp(beta(F1)*omega_, omega_)
       - fvm::SuSp
         (
@@ -402,7 +402,7 @@ void kOmegaSST::correct()
 
 
     // Re-calculate viscosity
-    nut_ = a1_*k_/max(a1_*omega_, F2()*sqrt(2*S2));
+    nut_ = a1_*k_/max(a1_*omega_, F2()*sqrt(S2));
     nut_.correctBoundaryConditions();
 }
 
diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/fvSchemes b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/fvSchemes
index 641e6fd3be40cecf656c784660dcf46cb5d8f539..fa9f78a717235ee45937773133b9172255eab4f5 100644
--- a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/fvSchemes
+++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/fvSchemes
@@ -34,7 +34,7 @@ divSchemes
     div(phi,epsilon) Gauss upwind;
     div(phi,R)      Gauss upwind;
     div(R)          Gauss linear;
-    div(Ji,Ii_h)    Gauss linearUpwind Gauss linear; //Gauss upwind;
+    div(Ji,Ii_h)    Gauss linearUpwind grad(Ii_h);
     div((muEff*dev2(T(grad(U))))) Gauss linear;
 }
 
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/bottomAir/fvSchemes b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/bottomAir/fvSchemes
index 9a1e63c22091e59ecf0ab5af1e19ee2d4edaf68e..bc70aee53f10b174191fb7d18f0a6a5e8c9ff835 100644
--- a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/bottomAir/fvSchemes
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/bottomAir/fvSchemes
@@ -34,7 +34,7 @@ divSchemes
     div(phi,epsilon) Gauss upwind;
     div(phi,R)      Gauss upwind;
     div(R)          Gauss linear;
-    div(Ji,Ii_h)    Gauss linearUpwind Gauss linear; //Gauss upwind;
+    div(Ji,Ii_h)    Gauss linearUpwind grad(U);
     div((muEff*dev2(T(grad(U))))) Gauss linear;
 }
 
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/topAir/fvSchemes b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/topAir/fvSchemes
index 9a1e63c22091e59ecf0ab5af1e19ee2d4edaf68e..bc70aee53f10b174191fb7d18f0a6a5e8c9ff835 100644
--- a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/topAir/fvSchemes
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/topAir/fvSchemes
@@ -34,7 +34,7 @@ divSchemes
     div(phi,epsilon) Gauss upwind;
     div(phi,R)      Gauss upwind;
     div(R)          Gauss linear;
-    div(Ji,Ii_h)    Gauss linearUpwind Gauss linear; //Gauss upwind;
+    div(Ji,Ii_h)    Gauss linearUpwind grad(U);
     div((muEff*dev2(T(grad(U))))) Gauss linear;
 }
 
diff --git a/tutorials/incompressible/boundaryFoam/boundaryWallFunctionsProfile/Allrun b/tutorials/incompressible/boundaryFoam/boundaryWallFunctionsProfile/Allrun
index 99209508d7e56c0d6c77b41dd3d2f0e7ddae8ef3..d30f1362fcadcbec82ad6537e7b846d481719847 100755
--- a/tutorials/incompressible/boundaryFoam/boundaryWallFunctionsProfile/Allrun
+++ b/tutorials/incompressible/boundaryFoam/boundaryWallFunctionsProfile/Allrun
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 cd ${0%/*} || exit 1    # run from this directory
 
 # Source tutorial run functions
diff --git a/tutorials/incompressible/simpleFoam/airFoil2D/system/fvSchemes b/tutorials/incompressible/simpleFoam/airFoil2D/system/fvSchemes
index 74a0e5bc10c9e3d904bc9bc9dfffee3599b95715..64136cf6f85bc76d01e02e800b7049660e03d753 100644
--- a/tutorials/incompressible/simpleFoam/airFoil2D/system/fvSchemes
+++ b/tutorials/incompressible/simpleFoam/airFoil2D/system/fvSchemes
@@ -30,8 +30,8 @@ gradSchemes
 divSchemes
 {
     default         none;
-    div(phi,U)      Gauss linearUpwind Gauss linear;
-    div(phi,nuTilda) Gauss linearUpwind Gauss linear;
+    div(phi,U)      Gauss linearUpwind grad(U);
+    div(phi,nuTilda) Gauss linearUpwind grad(nuTilda);
     div((nuEff*dev(T(grad(U))))) Gauss linear;
 }
 
diff --git a/tutorials/multiphase/LTSInterFoam/wigleyHull/system/fvSchemes b/tutorials/multiphase/LTSInterFoam/wigleyHull/system/fvSchemes
index 77c9b176542b5a0b7bf6f36500b78b47d274e170..77816cabb7317e4849c79954bbed1c64a42d7dc2 100644
--- a/tutorials/multiphase/LTSInterFoam/wigleyHull/system/fvSchemes
+++ b/tutorials/multiphase/LTSInterFoam/wigleyHull/system/fvSchemes
@@ -27,7 +27,7 @@ gradSchemes
 
 divSchemes
 {
-    div(rho*phi,U)  Gauss linearUpwind Gauss linear;
+    div(rho*phi,U)  Gauss linearUpwind grad(U);
     div(phi,alpha)  Gauss vanLeer;
     div(phirb,alpha) Gauss interfaceCompression;
     div(phi,k)      Gauss upwind;
diff --git a/tutorials/multiphase/interPhaseChangeFoam/cavitatingBullet/system/fvSchemes b/tutorials/multiphase/interPhaseChangeFoam/cavitatingBullet/system/fvSchemes
index c7632224d4e3942a8a5f13cc74b517943e348650..c3762a5d7aa2413c5c5793d409b56387380f6058 100644
--- a/tutorials/multiphase/interPhaseChangeFoam/cavitatingBullet/system/fvSchemes
+++ b/tutorials/multiphase/interPhaseChangeFoam/cavitatingBullet/system/fvSchemes
@@ -27,9 +27,9 @@ interpolationSchemes
 divSchemes
 {
     default              none;
-    div(rhoPhi,U)        Gauss linearUpwind Gauss linear 1;
-    div(phi,omega)       Gauss linearUpwind Gauss linear 1;
-    div(phi,k)           Gauss linearUpwind Gauss linear 1;
+    div(rhoPhi,U)        Gauss linearUpwind grad(U);
+    div(phi,omega)       Gauss linearUpwind grad(omega);
+    div(phi,k)           Gauss linearUpwind grad(k);
 
     div(phi,alpha)       Gauss vanLeer;
     div(phirb,alpha)     Gauss interfaceCompression;