diff --git a/.gitignore b/.gitignore
index 1b8ce3cde3c2234cfe982189852129106303b871..e2c6f9b41f320800ffa96e192129bb90a8eab745 100644
--- a/.gitignore
+++ b/.gitignore
@@ -60,6 +60,8 @@ doc/[Dd]oxygen/man
 # untracked configuration files
 /etc/prefs.csh
 /etc/prefs.sh
+/etc/config/*.csh
+/etc/config/*.sh
 
 # source packages - anywhere
 *.tar.bz2
diff --git a/applications/utilities/miscellaneous/expandDictionary/expandDictionary.C b/applications/utilities/miscellaneous/expandDictionary/expandDictionary.C
index b28d976832232f00b3f5685a51ca77edb9242dde..c8beecc361677e5ae805de86375a0f8e346caca1 100644
--- a/applications/utilities/miscellaneous/expandDictionary/expandDictionary.C
+++ b/applications/utilities/miscellaneous/expandDictionary/expandDictionary.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) 2008-2011 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -28,12 +28,33 @@ Description
     Read the dictionary provided as an argument, expand the macros etc. and
     write the resulting dictionary to standard output.
 
+Usage
+    - expandDictionary inputDict [OPTION]
+
+    \param -list \n
+    Report the #include/#includeIfPresent to stdout only.
+
+Note
+    The \c -list option can be useful when determining which files
+    are actually included by a directory. It can also be used to
+    determine which files may need to be copied when transferring
+    simulation to another environment. The following code snippet
+    could be a useful basis for such cases:
+
+    \verbatim
+        for i in . 0 constant system
+        do
+            find $i -maxdepth 1 -type f -exec expandDictionary -list '{}' \;
+        done | sed -ne '/^"\//!{ s/^"//; s/"$//; p }' | sort | uniq
+    \endverbatim
+
 \*---------------------------------------------------------------------------*/
 
 #include "argList.H"
 #include "IFstream.H"
 #include "IOobject.H"
 #include "dictionary.H"
+#include "includeEntry.H"
 
 using namespace Foam;
 
@@ -48,6 +69,12 @@ int main(int argc, char *argv[])
         "the resulting dictionary to standard output."
     );
 
+    argList::addBoolOption
+    (
+        "list",
+        "Report the #include/#includeIfPresent to stdout only"
+    );
+
     argList::noBanner();
     argList::noParallel();
     argList::validArgs.append("inputDict");
@@ -55,12 +82,22 @@ int main(int argc, char *argv[])
 
     const string dictName = args[1];
 
-    IOobject::writeBanner(Info)
-        <<"//\n// " << dictName << "\n//\n";
+    const bool listOpt = args.optionFound("list");
+
+    if (listOpt)
+    {
+        Foam::functionEntries::includeEntry::report = true;
+    }
 
-    dictionary(IFstream(dictName)(), true).write(Info, false);
+    dictionary dict(IFstream(dictName)(), true);
 
-    IOobject::writeDivider(Info);
+    if (!listOpt)
+    {
+        IOobject::writeBanner(Info)
+            <<"//\n// " << dictName << "\n//\n";
+        dict.write(Info, false);
+        IOobject::writeDivider(Info);
+    }
 
     return 0;
 }
diff --git a/applications/utilities/surface/surfaceMeshInfo/Make/files b/applications/utilities/surface/surfaceMeshInfo/Make/files
new file mode 100644
index 0000000000000000000000000000000000000000..a008b33fd2bd29a071cf5d6a9cf43bed995f29bb
--- /dev/null
+++ b/applications/utilities/surface/surfaceMeshInfo/Make/files
@@ -0,0 +1,3 @@
+surfaceMeshInfo.C
+
+EXE = $(FOAM_APPBIN)/surfaceMeshInfo
diff --git a/applications/utilities/surface/surfaceMeshInfo/Make/options b/applications/utilities/surface/surfaceMeshInfo/Make/options
new file mode 100644
index 0000000000000000000000000000000000000000..42b30c86523f83efafbd2dbe5d52cc7487ec4101
--- /dev/null
+++ b/applications/utilities/surface/surfaceMeshInfo/Make/options
@@ -0,0 +1,5 @@
+EXE_INC = \
+    -I$(LIB_SRC)/meshTools/lnInclude \
+    -I$(LIB_SRC)/surfMesh/lnInclude
+
+EXE_LIBS = -lmeshTools -lsurfMesh
diff --git a/applications/utilities/surface/surfaceMeshInfo/surfaceMeshInfo.C b/applications/utilities/surface/surfaceMeshInfo/surfaceMeshInfo.C
new file mode 100644
index 0000000000000000000000000000000000000000..0e08e333fdbf02a43d877cbafbeffdea4c1034ba
--- /dev/null
+++ b/applications/utilities/surface/surfaceMeshInfo/surfaceMeshInfo.C
@@ -0,0 +1,177 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2011-2011 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/>.
+
+Application
+    surfaceMeshInfo
+
+Description
+    Miscellaneous information about surface meshes
+
+Usage
+    - surfaceMeshInfo surfaceFile [OPTION]
+
+    \param -areas \n
+    Report area for each face.
+
+    \param -scale \<scale\> \n
+    Specify a scaling factor when reading files.
+
+    \param -xml \n
+    Write output in XML format.
+
+Note
+    The filename extensions are used to determine the file format type.
+
+    The XML-like output can be useful for extraction with other tools,
+    but either output format can be easily extracted with a simple sed
+    command:
+    \verbatim
+        surfaceMeshInfo surfaceFile -areas | \
+            sed -ne '/areas/,/:/{ /:/!p }'
+
+        surfaceMeshInfo surfaceFile -areas -xml | \
+            sed -ne '/<areas/,/</{ /</!p }'
+    \endverbatim
+
+\*---------------------------------------------------------------------------*/
+
+#include "argList.H"
+#include "timeSelector.H"
+#include "Time.H"
+
+#include "UnsortedMeshedSurfaces.H"
+
+using namespace Foam;
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+//  Main program:
+
+int main(int argc, char *argv[])
+{
+    argList::addNote
+    (
+        "information about surface meshes"
+    );
+
+    argList::noBanner();
+    argList::noParallel();
+    argList::validArgs.append("surfaceFile");
+
+    argList::addOption
+    (
+        "scale",
+        "factor",
+        "geometry scaling factor - default is 1"
+    );
+    argList::addBoolOption
+    (
+        "areas",
+        "display area of each face"
+    );
+    argList::addBoolOption
+    (
+        "xml",
+        "write output in XML format"
+    );
+
+    argList args(argc, argv);
+    Time runTime(args.rootPath(), args.caseName());
+
+    const fileName importName = args[1];
+
+    // check that reading is supported
+    if (!UnsortedMeshedSurface<face>::canRead(importName, true))
+    {
+        return 1;
+    }
+
+    const bool writeXML = args.optionFound("xml");
+    const bool writeAreas = args.optionFound("areas");
+
+
+    // use UnsortedMeshedSurface, not MeshedSurface to maintain ordering
+    UnsortedMeshedSurface<face> surf(importName);
+
+    scalar scaling = 0;
+    if (args.optionReadIfPresent("scale", scaling) && scaling > 0)
+    {
+        Info<< " -scale " << scaling << endl;
+        surf.scalePoints(scaling);
+    }
+
+    scalar areaTotal = 0;
+
+    if (writeXML)
+    {
+        Info<<"<?xml version='1.0' encoding='utf-8'?>" << nl
+            <<"<surfaceMeshInfo>" << nl
+            << "<npoints>" << surf.nPoints() << "</npoints>" << nl
+            << "<nfaces>"  << surf.size() << "</nfaces>" << nl;
+
+        if (writeAreas)
+        {
+            Info<<"<areas size='" << surf.size() << "'>" << nl;
+        }
+    }
+    else
+    {
+        Info<< "nPoints   : " << surf.nPoints() << nl
+            << "nFaces    : " << surf.size() << nl;
+
+        if (writeAreas)
+        {
+            Info<< "areas     : " << nl;
+        }
+    }
+
+    forAll(surf, faceI)
+    {
+        const scalar fArea(surf[faceI].mag(surf.points()));
+        areaTotal += fArea;
+
+        if (writeAreas)
+        {
+            Info<< fArea << nl;
+        }
+    }
+
+    if (writeXML)
+    {
+        if (writeAreas)
+        {
+            Info<<"</areas>" << nl;
+        }
+
+        Info<< "<area>" << areaTotal << "</area>" << nl
+            << "</surfaceMeshInfo>" << nl;
+    }
+    else
+    {
+        Info<< "area      : " << areaTotal << nl;
+    }
+
+    return 0;
+}
+
+// ************************************************************************* //
diff --git a/bin/foamEtcFile b/bin/foamEtcFile
index a6859b6ae5a1a4f52e4b4084937acf8c1c0016de..8a1f5d97e627a1eed729cfb6d725f54a11f8cbf0 100755
--- a/bin/foamEtcFile
+++ b/bin/foamEtcFile
@@ -38,9 +38,13 @@
 #            && _foamSource $foamPrefs
 #     \endcode
 #
+# Note
+#     This script must exist in <foamInstall>/OpenFOAM-<VERSION>/bin/
+#     or <foamInstall>/openfoam<VERSION>/bin/ (for the debian version)
+#
 #-------------------------------------------------------------------------------
 usage() {
-    [ "$quietOpt" = true ] && exit 1
+    [ "${quietOpt:-$silentOpt}" = true ] && exit 1
 
     exec 1>&2
     while [ "$#" -ge 1 ]; do echo "$1"; shift; done
@@ -53,6 +57,7 @@ options:
   -mode <mode>      any combination of u(user), g(group), o(other)
   -prefix <dir>     specify an alternative installation prefix
   -quiet            suppress all normal output
+  -silent           suppress all stderr output
   -version <ver>    specify an alternative OpenFOAM version
                     in the form Maj.Min.Rev (eg, 1.7.0)
   -help             print the usage
@@ -72,13 +77,9 @@ USAGE
     exit 1
 }
 
-#
-# This script must exist in <foamInstall>/OpenFOAM-<VERSION>/bin/
-# or <foamInstall>/openfoam<VERSION>/bin/ (for the debian version)
-#
 #-------------------------------------------------------------------------------
 
-# the bindir:
+# the bin dir:
 binDir="${0%/*}"
 
 # the project dir:
@@ -128,7 +129,7 @@ esac
 
 # default mode is 'ugo'
 mode=ugo
-unset listOpt quietOpt
+unset listOpt quietOpt silentOpt
 
 # parse options
 while [ "$#" -gt 0 ]
@@ -162,6 +163,9 @@ do
     -q | -quiet)
         quietOpt=true
         ;;
+    -s | -silent)
+        silentOpt=true
+        ;;
     -v | -version)
         [ "$#" -ge 2 ] || usage "'$1' option requires an argument"
         version="$2"
@@ -241,7 +245,7 @@ then
     # list directories, or potential file locations
     [ "$nArgs" -le 1 ] || usage
 
-    # a silly combination, but -quiet has precedence
+    # a silly combination, but -quiet does have precedence
     [ "$quietOpt" = true ] && exit 0
 
     for dir
diff --git a/bin/foamExec b/bin/foamExec
index 26ad311349634023a0c9c17ddbfed2dc057f3f1b..fba65934cc9dbe55b91c3c810d46cadc9249f156 100755
--- a/bin/foamExec
+++ b/bin/foamExec
@@ -31,12 +31,21 @@
 #     Runs the <foamVersion> version of executable <foamCommand>
 #     with the rest of the arguments.
 #
-#     Can also be used for parallel runs e.g.
-#     mpirun -np <nProcs> \
-#         foamExec -v <foamVersion> <foamCommand> ... -parallel
+#     Can also be used for parallel runs. For example,
+#     \code
+#         mpirun -np <nProcs> \
+#             foamExec -version <foamVersion> <foamCommand> ... -parallel
+#     \endcode
+#
+# Note
+#     This script must exist in <foamInstall>/OpenFOAM-<VERSION>/bin/
+#     or <foamInstall>/openfoam<VERSION>/bin/ (for the debian version)
+#
+#     foamEtcFile must be found in the same directory as this script
 #
 # SeeAlso
 #    foamEtcFile
+#
 #------------------------------------------------------------------------------
 usage() {
     exec 1>&2
@@ -46,9 +55,11 @@ usage() {
 Usage: ${0##*/} [OPTION] <application> ...
 
 options:
+  -prefix <dir>     specify an alternative installation prefix
+                    pass through to foamEtcFile and set as FOAM_INST_DIR
   -version <ver>    specify an alternative OpenFOAM version
                     pass through to foamEtcFile
-  -help             this usage
+  -help             print the usage
 
 * run a particular OpenFOAM version of <application>
 
@@ -56,13 +67,21 @@ USAGE
     exit 1
 }
 
-#
-# This script must exist in <foamInstall>/OpenFOAM-<VERSION>/bin/
-# or <foamInstall>/openfoam<VERSION>/bin/ (for the debian version)
-#
-# foamEtcFile must be found in the same directory as this script
 #-------------------------------------------------------------------------------
 
+# the bin dir:
+binDir="${0%/*}"
+
+# the project dir:
+projectDir="${binDir%/bin}"
+
+# the prefix dir (same as foamInstall):
+prefixDir="${projectDir%/*}"
+
+# # the name used for the project directory
+# projectDirName="${projectDir##*/}"
+
+
 unset etcOpts version
 # parse options
 while [ "$#" -gt 0 ]
@@ -71,15 +90,21 @@ do
     -h | -help)
         usage
         ;;
-    -v | -version)
+    -m | -mode)
+        [ "$#" -ge 2 ] || usage "'$1' option requires an argument"
+        etcOpts="$etcOpts $1 $2"    # pass-thru to foamEtcFile
+        shift
+        ;;
+    -p | -prefix)
         [ "$#" -ge 2 ] || usage "'$1' option requires an argument"
-        version="$2"
         etcOpts="$etcOpts $1 $2"    # pass-thru to foamEtcFile
+        prefixDir="$2"
         shift
         ;;
-    -m | -mode | -p | -prefix)
+    -v | -version)
         [ "$#" -ge 2 ] || usage "'$1' option requires an argument"
         etcOpts="$etcOpts $1 $2"    # pass-thru to foamEtcFile
+        version="$2"
         shift
         ;;
     --)
@@ -96,22 +121,21 @@ do
     shift
 done
 
-
 #
 # Find and source OpenFOAM settings (bashrc)
 # placed in function to preserve command-line arguments
 #
 sourceRc()
 {
-    # default is the current version
-    : ${version:=${WM_PROJECT_VERSION:-unknown}}
-
-    foamDotFile="$(${0%/*}/foamEtcFile $etcOpts bashrc)" || {
-        echo "Error : bashrc file could not be found for OpenFOAM-$version" 1>&2
+    foamDotFile="$($binDir/foamEtcFile $etcOpts bashrc)" || {
+        echo "Error : bashrc file could not be found for OpenFOAM-${version:-${WM_PROJECT_VERSION:-???}}" 1>&2
         exit 1
     }
 
-    . $foamDotFile
+    # set to consistent value before sourcing the bashrc
+    export FOAM_INST_DIR="$prefixDir"
+
+    . $foamDotFile $FOAM_SETTINGS
 }
 
 
diff --git a/bin/foamJob b/bin/foamJob
index 4380b3e14731b0dbcfb816b23b337cb839564139..70e2c39f28489556edec25237512b703a7ff63fc 100755
--- a/bin/foamJob
+++ b/bin/foamJob
@@ -26,6 +26,8 @@
 #     foamJob
 #
 # Description
+#     Run an OpenFOAM job in background.
+#     Redirects the output to 'log' in the case directory.
 #
 #------------------------------------------------------------------------------
 usage() {
@@ -36,9 +38,9 @@ usage() {
 Usage: ${0##*/} [OPTION] <application> ...
 options:
   -case <dir>       specify alternative case directory, default is the cwd
-  -p                parallel run of processors
-  -s                also sends output to screen
-  -v <ver>          specify OpenFOAM version
+  -parallel         parallel run of processors
+  -screen           also sends output to screen
+  -version <ver>    specify an alternative OpenFOAM version
   -help             print the usage
 
 * run an OpenFOAM job in background.
@@ -95,23 +97,22 @@ do
       usage
       ;;
    -case)
-      [ "$#" -ge 2 ] || usage "'-case' option requires an argument"
-      caseDir=$2
+      [ "$#" -ge 2 ] || usage "'$1' option requires an argument"
+      cd "$2" 2>/dev/null || usage "directory does not exist:  '$2'"
       shift 2
-      cd "$caseDir" 2>/dev/null || usage "directory does not exist:  '$caseDir'"
       ;;
-   -p)
+   -p | -parallel)
       parallelOpt=true
       shift
       ;;
-   -s)
+   -s | -screen)
       screenOpt=true
       shift
       ;;
-   -v)
-      shift
-      version=$1
-      shift
+   -v | -version)
+      [ "$#" -ge 2 ] || usage "'$1' option requires an argument"
+      version="$2"
+      shift 2
       ;;
    --)
       shift
@@ -126,29 +127,32 @@ do
    esac
 done
 
-if [ "$#" -lt 1 ]
-then
-    usage "No application specified"
-fi
+[ "$#" -ge 1 ] || usage "No application specified"
+
 
-# use foamExec for a specified version and for remote (parallel) runs
+# use foamExec for a specified version
+# also need foamExec for remote (parallel) runs
 if [ -n "$version" -o "$parallelOpt" = true ]
 then
-    APPLICATION=`findExec foamExec`
-    if [ $? -ne 0 ]
+    # when possible, determine if application even exists
+    if [ -z "$version" ]
     then
-        usage "'foamExec' not found"
+        findExec $1 >/dev/null || usage "Application '$1' not found"
     fi
-    if [ -n "$version" ]
+
+    # use foamExec for dispatching
+    APPLICATION=`findExec foamExec` || usage "'foamExec' not found"
+
+    [ -n "$version" ] && APPLICATION="$APPLICATION -version $version"
+
+    # attempt to preserve the installation directory 'FOAM_INST_DIR'
+    if [ -d "$FOAM_INST_DIR" ]
     then
-        APPLICATION="$APPLICATION -v $version"
+        APPLICATION="$APPLICATION -prefix $FOAM_INST_DIR"
     fi
+
 else
-    APPLICATION=`findExec $1`
-    if [ $? -ne 0 ]
-    then
-        usage "Application '$1' executable not found"
-    fi
+    APPLICATION=`findExec $1` || usage "Application '$1' not found"
     echo "Application : $1"
     shift
 fi
@@ -182,11 +186,7 @@ then
     #
     # locate mpirun
     #
-    mpirun=`findExec mpirun`
-    if [ $? -ne 0 ]
-    then
-        usage "'mpirun' not found"
-    fi
+    mpirun=`findExec mpirun` || usage "'mpirun' not found"
     mpiopts="-np $NPROCS"
 
     #
@@ -217,10 +217,10 @@ then
     #
     if [ "$screenOpt" = true ]
     then
-        echo "Executing: mpirun $mpiopts $APPLICATION $@ -parallel | tee log"
-        $mpirun $mpiopts $APPLICATION $@ -parallel  | tee log
+        echo "Executing: $mpirun $mpiopts $APPLICATION $@ -parallel | tee log"
+        $mpirun $mpiopts $APPLICATION $@ -parallel | tee log
     else
-        echo "Executing: mpirun $mpiopts $APPLICATION $@ -parallel > log 2>&1"
+        echo "Executing: $mpirun $mpiopts $APPLICATION $@ -parallel > log 2>&1"
         $mpirun $mpiopts $APPLICATION $@ -parallel > log 2>&1 &
     fi
 
diff --git a/doc/changes/inotify.txt b/doc/changes/inotify.txt
index 0f91d7c03b35140c3fa0f33656638165fe231e47..74e2fc7bb4adb50e007fd659817fbdeddae76661 100644
--- a/doc/changes/inotify.txt
+++ b/doc/changes/inotify.txt
@@ -55,15 +55,25 @@ timestamps as before or the (linux-specific) 'inotify' system framework
         - the slave processor directories have no system directory and the
           constant directory only contains the mesh.
     - start the job in distributed mode by specifying the slave roots
-      (so one less than the number of processors) with
-      the -roots command line option:
+      (so one fewer than the number of processors) with
+      the -roots command-line option:
 
-        mpirun -np 2 icoFoam -roots '("/tmp")' -parallel
+        mpirun -np 4 icoFoam -roots '("/tmp" "/tmp" "/tmp")' -parallel
 
     - the alternative to the -roots option is to have a
       cavity/system/decomposeParDict on the master with
             distributed     yes;
-            roots           ("/tmp");
+            roots           ("/tmp" "/tmp" "/tmp");
+
+    - as a convenience for cases when the slave roots are identical,
+      a single root entry is interpreted as being the same for all slaves.
+      With the -roots command-line option, this can take one of two forms:
+
+        mpirun -np 4 icoFoam -roots '("/tmp")' -parallel
+
+      or simply
+
+        mpirun -np 4 icoFoam -roots '"/tmp"' -parallel
 
 
 Details:
diff --git a/etc/apps/paraview3/bashrc b/etc/apps/paraview3/bashrc
index e0e6122946c900da0f723fc35d0355ade480ffbe..1dd5386829359ddd134b8d74ee62f3eb157906f0 100644
--- a/etc/apps/paraview3/bashrc
+++ b/etc/apps/paraview3/bashrc
@@ -56,16 +56,22 @@ export ParaView_MAJOR=detect
 
 
 # Evaluate command-line parameters for ParaView
-while [ $# -gt 0 ]
-do
-    case "$1" in
-    ParaView*=*)
-        # name=value  -> export name=value
-        eval "export $1"
-        ;;
-    esac
-    shift
-done
+_foamParaviewEval()
+{
+    while [ $# -gt 0 ]
+    do
+        case "$1" in
+        ParaView*=*)
+            # name=value  -> export name=value
+            eval "export $1"
+            ;;
+        esac
+        shift
+    done
+}
+
+# Evaluate command-line parameters
+_foamParaviewEval $@
 
 
 # set MAJOR version to correspond to VERSION
@@ -108,6 +114,7 @@ else
 fi
 
 
+unset _foamParaviewEval
 unset cleaned cmake paraviewInstDir paraviewPython
 
 # -----------------------------------------------------------------------------
diff --git a/etc/bashrc b/etc/bashrc
index 2de27d05134c1c5fd6833c80ef383da814120287..d2539c5b5012bcf606366ef7d4d33bc24f617f1a 100644
--- a/etc/bashrc
+++ b/etc/bashrc
@@ -144,6 +144,10 @@ _foamEval()
     while [ $# -gt 0 ]
     do
         case "$1" in
+        -*)
+            # stray option (not meant for us here) -> get out
+            break
+            ;;
         *=)
             # name=       -> unset name
             [ "$FOAM_VERBOSE" -a "$PS1" ] && echo "unset ${1%=}"
@@ -160,7 +164,7 @@ _foamEval()
             then
                 _foamSource "$1"
             else
-                _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile "$1"`
+                _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile -silent "$1"`
             fi
             ;;
         esac
diff --git a/etc/config/compiler.csh-EXAMPLE b/etc/config/compiler.csh-EXAMPLE
new file mode 100644
index 0000000000000000000000000000000000000000..6d54edbd479480932a8d0ddcb15d27529592e77b
--- /dev/null
+++ b/etc/config/compiler.csh-EXAMPLE
@@ -0,0 +1,51 @@
+#----------------------------------*-sh-*--------------------------------------
+# =========                 |
+# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+#  \\    /   O peration     |
+#   \\  /    A nd           | Copyright (C) 2011-2011 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/>.
+#
+# File
+#     config/compiler.csh
+#
+# Description
+#     Fine tuning of ThirdParty compiler settings for OpenFOAM
+#     Sourced from OpenFOAM-<VERSION>/etc/settings.csh
+#
+#------------------------------------------------------------------------------
+
+# Modified compiler settings
+switch ("$WM_COMPILER")
+case Gcc46:
+case Gcc46++0x:
+    set gcc_version=gcc-4.6.0
+    set gmp_version=gmp-5.0.1
+    set mpfr_version=mpfr-2.4.2
+    set mpc_version=mpc-0.8.1
+    breaksw
+case Gcc45:
+case Gcc45++0x:
+    set gcc_version=gcc-4.5.2
+    set gmp_version=gmp-5.0.1
+    set mpfr_version=mpfr-2.4.2
+    set mpc_version=mpc-0.8.1
+    breaksw
+endsw
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/etc/config/compiler.sh-EXAMPLE b/etc/config/compiler.sh-EXAMPLE
new file mode 100644
index 0000000000000000000000000000000000000000..bc6aada36e279d1857642f9fcb062d9e359dd22a
--- /dev/null
+++ b/etc/config/compiler.sh-EXAMPLE
@@ -0,0 +1,49 @@
+#----------------------------------*-sh-*--------------------------------------
+# =========                 |
+# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+#  \\    /   O peration     |
+#   \\  /    A nd           | Copyright (C) 2011-2011 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/>.
+#
+# File
+#     config/compiler.sh
+#
+# Description
+#     Fine tuning of ThirdParty compiler settings for OpenFOAM
+#     Sourced from OpenFOAM-<VERSION>/etc/settings.sh
+#
+#------------------------------------------------------------------------------
+
+# Modified compiler settings
+case "$WM_COMPILER" in
+Gcc46 | Gcc46++0x)
+    gcc_version=gcc-4.6.0
+    gmp_version=gmp-5.0.1
+    mpfr_version=mpfr-2.4.2
+    mpc_version=mpc-0.8.1
+    ;;
+Gcc45 | Gcc45++0x)
+    gcc_version=gcc-4.5.2
+    gmp_version=gmp-5.0.1
+    mpfr_version=mpfr-2.4.2
+    mpc_version=mpc-0.8.1
+    ;;
+esac
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/etc/config/openmpi.csh-EXAMPLE b/etc/config/openmpi.csh-EXAMPLE
new file mode 100644
index 0000000000000000000000000000000000000000..94be702e9d7c051524390808d288609d80a7dc01
--- /dev/null
+++ b/etc/config/openmpi.csh-EXAMPLE
@@ -0,0 +1,36 @@
+#----------------------------------*-sh-*--------------------------------------
+# =========                 |
+# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+#  \\    /   O peration     |
+#   \\  /    A nd           | Copyright (C) 2011-2011 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/>.
+#
+# File
+#     config/openmpi.csh
+#
+# Description
+#     Fine tuning of openmpi settings for OpenFOAM
+#     Sourced from OpenFOAM-<VERSION>/etc/settings.csh
+#
+#------------------------------------------------------------------------------
+
+# Modified openmpi settings
+setenv FOAM_MPI openmpi-1.4.3
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/etc/config/openmpi.sh-EXAMPLE b/etc/config/openmpi.sh-EXAMPLE
new file mode 100644
index 0000000000000000000000000000000000000000..b7c5035b0487fc65c9c29563772e5c7af0b9fd4e
--- /dev/null
+++ b/etc/config/openmpi.sh-EXAMPLE
@@ -0,0 +1,36 @@
+#----------------------------------*-sh-*--------------------------------------
+# =========                 |
+# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+#  \\    /   O peration     |
+#   \\  /    A nd           | Copyright (C) 2011-2011 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/>.
+#
+# File
+#     config/openmpi.sh
+#
+# Description
+#     Fine tuning of openmpi settings for OpenFOAM
+#     Sourced from OpenFOAM-<VERSION>/etc/settings.sh
+#
+#------------------------------------------------------------------------------
+
+# Modified openmpi settings
+export FOAM_MPI=openmpi-1.4.3
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/etc/cshrc b/etc/cshrc
index a23a607fff1e0fc4c21bab62777bb2a77b935164..c2c1b12a9b7757074536e74a937a034b7e07ad58 100644
--- a/etc/cshrc
+++ b/etc/cshrc
@@ -142,6 +142,10 @@ _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile prefs.csh`
 setenv FOAM_SETTINGS "${*}"
 while ( $#argv > 0 )
     switch ($argv[1])
+    case -*:
+        # stray option (not meant for us here) -> get out
+        break
+        breaksw
     case *=:
         # name=       -> unsetenv name
         if ($?FOAM_VERBOSE && $?prompt) echo "unsetenv $argv[1]:s/=//"
@@ -157,7 +161,7 @@ while ( $#argv > 0 )
         if ( -f "$1" ) then
             _foamSource "$1"
         else
-            _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile "$1"`
+            _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile -silent "$1"`
         endif
         breaksw
     endsw
diff --git a/etc/settings.csh b/etc/settings.csh
index 5b4c41df822789c03d1c2cb96f1aa1d7eebc41b2..b3daf1e2884c471bb3ff465c21f540dc43838b63 100644
--- a/etc/settings.csh
+++ b/etc/settings.csh
@@ -248,6 +248,9 @@ case ThirdParty:
         breaksw
     endsw
 
+    # optional configuration tweaks:
+    _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config/compiler.csh`
+
     if ( $?gcc_version ) then
         set gccDir=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER_ARCH/$gcc_version
         set gmpDir=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER_ARCH/$gmp_version
@@ -367,8 +370,10 @@ unsetenv MPI_ARCH_PATH MPI_HOME FOAM_MPI_LIBBIN
 
 switch ("$WM_MPLIB")
 case OPENMPI:
-    #setenv FOAM_MPI openmpi-1.4.3
     setenv FOAM_MPI openmpi-1.5.3
+    # optional configuration tweaks:
+    _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config/openmpi.csh`
+
     setenv MPI_ARCH_PATH $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI
 
     # Tell OpenMPI where to find its install directory
diff --git a/etc/settings.sh b/etc/settings.sh
index 84c6fd0bc1a3f38aca695c570d5da8a510c33539..954868dad157e58c271ae94d02e808128bb1cb58 100644
--- a/etc/settings.sh
+++ b/etc/settings.sh
@@ -265,6 +265,9 @@ OpenFOAM | ThirdParty)
         ;;
     esac
 
+    # optional configuration tweaks:
+    _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config/compiler.sh`
+
     if [ -n "$gcc_version" ]
     then
         gccDir=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER_ARCH/$gcc_version
@@ -387,8 +390,10 @@ unset MPI_ARCH_PATH MPI_HOME FOAM_MPI_LIBBIN
 
 case "$WM_MPLIB" in
 OPENMPI)
-    #export FOAM_MPI=openmpi-1.4.3
     export FOAM_MPI=openmpi-1.5.3
+    # optional configuration tweaks:
+    _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config/openmpi.sh`
+
     export MPI_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI
 
     # Tell OpenMPI where to find its install directory
diff --git a/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.C b/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.C
index ee20e33191c14bc05e5a780cee322ffbb631217f..c45ef4f29132f0315ae90d9bae4eae06a5ca19fd 100644
--- a/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.C
+++ b/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.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
@@ -39,6 +39,9 @@ const Foam::word Foam::functionEntries::includeEntry::typeName
 // might include includeEntry
 int Foam::functionEntries::includeEntry::debug(0);
 
+bool Foam::functionEntries::includeEntry::report(false);
+
+
 namespace Foam
 {
 namespace functionEntries
@@ -89,10 +92,15 @@ bool Foam::functionEntries::includeEntry::execute
     Istream& is
 )
 {
-    IFstream ifs(includeFileName(is));
+    const fileName fName(includeFileName(is));
+    IFstream ifs(fName);
 
     if (ifs)
     {
+        if (Foam::functionEntries::includeEntry::report)
+        {
+            Info<< fName << endl;
+        }
         parentDict.read(ifs);
         return true;
     }
@@ -119,10 +127,15 @@ bool Foam::functionEntries::includeEntry::execute
     Istream& is
 )
 {
-    IFstream ifs(includeFileName(is));
+    const fileName fName(includeFileName(is));
+    IFstream ifs(fName);
 
     if (ifs)
     {
+        if (Foam::functionEntries::includeEntry::report)
+        {
+            Info<< fName << endl;
+        }
         entry.read(parentDict, ifs);
         return true;
     }
diff --git a/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.H b/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.H
index 5145b742ae69ce331399881dc0151e17ce4aed9b..be99bf588afd91bae67f2ed5f4606165145dbec7 100644
--- a/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.H
+++ b/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.H
@@ -82,6 +82,12 @@ protected:
 
 public:
 
+    // Static data members
+
+        //- Report which file is included to stdout
+        static bool report;
+
+
     //- Runtime type information
     ClassName("include");
 
diff --git a/src/OpenFOAM/db/dictionary/functionEntries/includeIfPresentEntry/includeIfPresentEntry.C b/src/OpenFOAM/db/dictionary/functionEntries/includeIfPresentEntry/includeIfPresentEntry.C
index 86f16181637017f9b4fd3c2c69bf90473da846c9..8e1bc9b7f11f99df0778e688432bf37708d6a2c7 100644
--- a/src/OpenFOAM/db/dictionary/functionEntries/includeIfPresentEntry/includeIfPresentEntry.C
+++ b/src/OpenFOAM/db/dictionary/functionEntries/includeIfPresentEntry/includeIfPresentEntry.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
@@ -69,10 +69,15 @@ bool Foam::functionEntries::includeIfPresentEntry::execute
     Istream& is
 )
 {
-    IFstream ifs(includeFileName(is));
+    const fileName fName(includeFileName(is));
+    IFstream ifs(fName);
 
     if (ifs)
     {
+        if (Foam::functionEntries::includeEntry::report)
+        {
+            Info<< fName << endl;
+        }
         parentDict.read(ifs);
     }
 
@@ -87,10 +92,15 @@ bool Foam::functionEntries::includeIfPresentEntry::execute
     Istream& is
 )
 {
-    IFstream ifs(includeFileName(is));
+    const fileName fName(includeFileName(is));
+    IFstream ifs(fName);
 
     if (ifs)
     {
+        if (Foam::functionEntries::includeEntry::report)
+        {
+            Info<< fName << endl;
+        }
         entry.read(parentDict, ifs);
     }
 
diff --git a/src/OpenFOAM/global/argList/argList.C b/src/OpenFOAM/global/argList/argList.C
index f055011bce90f4de68a76783b2b0cc185bfb6652..a020f3e5bdca03111bb057e80410af55fec0d0f8 100644
--- a/src/OpenFOAM/global/argList/argList.C
+++ b/src/OpenFOAM/global/argList/argList.C
@@ -548,10 +548,14 @@ Foam::argList::argList
 
             if (options_.found("roots"))
             {
-                source = "'-roots' option";
-                IStringStream str(options_["roots"]);
-                str >> roots;
-                dictNProcs = roots.size()+1;
+                source = "-roots";
+                IStringStream is(options_["roots"]);
+                roots = readList<fileName>(is);
+
+                if (roots.size() != 1)
+                {
+                    dictNProcs = roots.size()+1;
+                }
             }
             else
             {
@@ -579,6 +583,21 @@ Foam::argList::argList
                 }
             }
 
+            // convenience:
+            // when a single root is specified, use it for all processes
+            if (roots.size() == 1)
+            {
+                const fileName rootName(roots[0]);
+                roots.setSize(Pstream::nProcs()-1, rootName);
+
+                // adjust dictNProcs for command-line '-roots' option
+                if (dictNProcs < 0)
+                {
+                    dictNProcs = roots.size()+1;
+                }
+            }
+
+
             // Check number of processors.
             // nProcs     => number of actual procs
             // dictNProcs => number of procs specified in decompositionDict
@@ -602,11 +621,6 @@ Foam::argList::argList
             // distributed data
             if (roots.size())
             {
-                forAll(roots, i)
-                {
-                    roots[i].expand();
-                }
-
                 if (roots.size() != Pstream::nProcs()-1)
                 {
                     FatalError
@@ -617,6 +631,11 @@ Foam::argList::argList
                         << exit(FatalError);
                 }
 
+                forAll(roots, i)
+                {
+                    roots[i].expand();
+                }
+
                 // Distribute the master's argument list (with new root)
                 bool hadCaseOpt = options_.found("case");
                 for
@@ -626,11 +645,7 @@ Foam::argList::argList
                     slave++
                 )
                 {
-                    options_.set
-                    (
-                        "case",
-                        fileName(roots[slave-1])/globalCase_
-                    );
+                    options_.set("case", roots[slave-1]/globalCase_);
 
                     OPstream toSlave(Pstream::scheduled, slave);
                     toSlave << args_ << options_;
diff --git a/src/OpenFOAM/meshes/meshShapes/face/face.C b/src/OpenFOAM/meshes/meshShapes/face/face.C
index 7dbd202335067831d33b8c138c903c2604a1d126..4060404af7e5e8323f2497a364368e4e0df247d0 100644
--- a/src/OpenFOAM/meshes/meshShapes/face/face.C
+++ b/src/OpenFOAM/meshes/meshShapes/face/face.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
@@ -491,51 +491,52 @@ void Foam::face::flip()
 }
 
 
-Foam::point Foam::face::centre(const pointField& meshPoints) const
+Foam::point Foam::face::centre(const pointField& points) const
 {
     // Calculate the centre by breaking the face into triangles and
     // area-weighted averaging their centres
 
+    const label nPoints = size();
+
     // If the face is a triangle, do a direct calculation
-    if (size() == 3)
+    if (nPoints)
     {
         return
             (1.0/3.0)
            *(
-               meshPoints[operator[](0)]
-             + meshPoints[operator[](1)]
-             + meshPoints[operator[](2)]
+               points[operator[](0)]
+             + points[operator[](1)]
+             + points[operator[](2)]
             );
     }
 
-    label nPoints = size();
 
     point centrePoint = point::zero;
-    for (register label pI=0; pI<nPoints; pI++)
+    for (register label pI=0; pI<nPoints; ++pI)
     {
-        centrePoint += meshPoints[operator[](pI)];
+        centrePoint += points[operator[](pI)];
     }
     centrePoint /= nPoints;
 
     scalar sumA = 0;
     vector sumAc = vector::zero;
 
-    for (register label pI=0; pI<nPoints; pI++)
+    for (register label pI=0; pI<nPoints; ++pI)
     {
-        const point& nextPoint = meshPoints[operator[]((pI + 1) % nPoints)];
+        const point& nextPoint = points[operator[]((pI + 1) % nPoints)];
 
         // Calculate 3*triangle centre
-        vector ttc
+        const vector ttc
         (
-            meshPoints[operator[](pI)]
+            points[operator[](pI)]
           + nextPoint
           + centrePoint
         );
 
         // Calculate 2*triangle area
-        scalar ta = Foam::mag
+        const scalar ta = Foam::mag
         (
-            (meshPoints[operator[](pI)] - centrePoint)
+            (points[operator[](pI)] - centrePoint)
           ^ (nextPoint - centrePoint)
         );
 
@@ -545,7 +546,7 @@ Foam::point Foam::face::centre(const pointField& meshPoints) const
 
     if (sumA > VSMALL)
     {
-        return sumAc/(3*sumA);
+        return sumAc/(3.0*sumA);
     }
     else
     {
@@ -556,6 +557,8 @@ Foam::point Foam::face::centre(const pointField& meshPoints) const
 
 Foam::vector Foam::face::normal(const pointField& p) const
 {
+    const label nPoints = size();
+
     // Calculate the normal by summing the face triangle normals.
     // Changed to deal with small concavity by using a central decomposition
     //
@@ -563,7 +566,7 @@ Foam::vector Foam::face::normal(const pointField& p) const
     // If the face is a triangle, do a direct calculation to avoid round-off
     // error-related problems
     //
-    if (size() == 3)
+    if (nPoints == 3)
     {
         return triPointRef
         (
@@ -573,12 +576,10 @@ Foam::vector Foam::face::normal(const pointField& p) const
         ).normal();
     }
 
-    label nPoints = size();
-
     register label pI;
 
     point centrePoint = vector::zero;
-    for (pI = 0; pI < nPoints; pI++)
+    for (pI = 0; pI < nPoints; ++pI)
     {
         centrePoint += p[operator[](pI)];
     }
@@ -588,7 +589,7 @@ Foam::vector Foam::face::normal(const pointField& p) const
 
     point nextPoint = centrePoint;
 
-    for (pI = 0; pI < nPoints; pI++)
+    for (pI = 0; pI < nPoints; ++pI)
     {
         if (pI < nPoints - 1)
         {
diff --git a/src/OpenFOAM/meshes/meshShapes/face/face.H b/src/OpenFOAM/meshes/meshShapes/face/face.H
index 34a66b85242bf25d7a5d6c31bcc9a3bb46fec162..723d9bbfb70717641948e3c94533c0feaae8f818 100644
--- a/src/OpenFOAM/meshes/meshShapes/face/face.H
+++ b/src/OpenFOAM/meshes/meshShapes/face/face.H
@@ -178,7 +178,7 @@ public:
         void flip();
 
         //- Return the points corresponding to this face
-        inline pointField points(const pointField& meshPoints) const;
+        inline pointField points(const pointField&) const;
 
         //- Centre point of face
         point centre(const pointField&) const;
@@ -187,7 +187,7 @@ public:
         template<class Type>
         Type average(const pointField&, const Field<Type>&) const;
 
-        //- Scalar magnitude
+        //- Magnitude of face area
         inline scalar mag(const pointField&) const;
 
         //- Vector normal; magnitude is equal to area of face
@@ -228,8 +228,8 @@ public:
 
         //- Return potential intersection with face with a ray starting
         //  at p, direction n (does not need to be normalized)
-        //  Does face-center decomposition and returns triangle intersection
-        //  point closest to p. Face-center is calculated from point average.
+        //  Does face-centre decomposition and returns triangle intersection
+        //  point closest to p. Face-centre is calculated from point average.
         //  For a hit, the distance is signed.  Positive number
         //  represents the point in front of triangle
         //  In case of miss the point is the nearest point on the face
@@ -242,20 +242,20 @@ public:
         (
             const point& p,
             const vector& n,
-            const pointField& meshPoints,
+            const pointField&,
             const intersection::algorithm alg = intersection::FULL_RAY,
             const intersection::direction dir = intersection::VECTOR
         ) const;
 
         //- Fast intersection with a ray.
-        //  Does face-center decomposition and returns triangle intersection
+        //  Does face-centre decomposition and returns triangle intersection
         //  point closest to p. See triangle::intersection for details.
         pointHit intersection
         (
             const point& p,
             const vector& q,
             const point& ctr,
-            const pointField& meshPoints,
+            const pointField&,
             const intersection::algorithm alg,
             const scalar tol = 0.0
         ) const;
@@ -264,7 +264,7 @@ public:
         pointHit nearestPoint
         (
             const point& p,
-            const pointField& meshPoints
+            const pointField&
         ) const;
 
         //- Return nearest point to face and classify it:
@@ -276,7 +276,7 @@ public:
         pointHit nearestPointClassify
         (
             const point& p,
-            const pointField& meshPoints,
+            const pointField&,
             label& nearType,
             label& nearLabel
         ) const;
@@ -286,13 +286,13 @@ public:
         (
             const point& p,
             const vector& n,
-            const pointField& meshPoints
+            const pointField&
         ) const;
 
         //- Return area in contact, given the displacement in vertices
         scalar areaInContact
         (
-            const pointField& points,
+            const pointField&,
             const scalarField& v
         ) const;
 
diff --git a/src/OpenFOAM/meshes/meshShapes/triFace/triFace.H b/src/OpenFOAM/meshes/meshShapes/triFace/triFace.H
index 03e992575f3eebeabfa76968177236ec70eb1a44..933cb522391b253b8d03d7ec6ff28e8bed2e8a28 100644
--- a/src/OpenFOAM/meshes/meshShapes/triFace/triFace.H
+++ b/src/OpenFOAM/meshes/meshShapes/triFace/triFace.H
@@ -103,7 +103,7 @@ public:
         inline void flip();
 
         //- Return the points corresponding to this face
-        inline pointField points(const pointField& meshPoints) const;
+        inline pointField points(const pointField&) const;
 
         //- Return triangle as a face
         inline face triFaceFace() const;
@@ -118,10 +118,10 @@ public:
         template<class Type>
         Type average(const pointField&, const Field<Type>&) const;
 
-        //- Return scalar magnitude
+        //- Magnitude of face area
         inline scalar mag(const pointField&) const;
 
-        //- Return vector normal
+        //- Vector normal; magnitude is equal to area of face
         inline vector normal(const pointField&) const;
 
         //- Number of triangles after splitting
diff --git a/src/OpenFOAM/meshes/meshShapes/triFace/triFaceI.H b/src/OpenFOAM/meshes/meshShapes/triFace/triFaceI.H
index e12f17567524cbe10413a3e2b26c2dbd97a549fe..af62aa1aa323b211f5b8d645da65090081eaddc4 100644
--- a/src/OpenFOAM/meshes/meshShapes/triFace/triFaceI.H
+++ b/src/OpenFOAM/meshes/meshShapes/triFace/triFaceI.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
@@ -176,6 +176,7 @@ inline Foam::scalar Foam::triFace::mag(const pointField& points) const
     return ::Foam::mag(normal(points));
 }
 
+
 // could also delegate to triPointRef(...).normal()
 inline Foam::vector Foam::triFace::normal(const pointField& points) const
 {
diff --git a/src/Pstream/Allwmake b/src/Pstream/Allwmake
index 613263d7bc026a47d5907270b58e8137bea14252..50ccb5fe1d1e175dc705a861cf7fa7454c33839d 100755
--- a/src/Pstream/Allwmake
+++ b/src/Pstream/Allwmake
@@ -1,8 +1,31 @@
 #!/bin/sh
 cd ${0%/*} || exit 1    # run from this directory
 makeType=${1:-libso}
-set -x
 
+
+#
+# define how to create an mpi-versioned library of $makeType
+# compile into qualified directory
+# use sentinel file to handle version changes
+#
+wmakeMpiLib()
+{
+    set +x
+    for libName
+    do
+    (
+        WM_OPTIONS="$WM_OPTIONS$WM_MPLIB"
+        whichmpi="$libName/Make/$WM_OPTIONS/using:$FOAM_MPI"
+        [ -e "$whichmpi" ] || wclean $libName
+        echo "wmake $makeType $libName"
+        wmake $makeType $libName
+        touch "$whichmpi"
+    )
+    done
+    set -x
+}
+
+set -x
 wmake $makeType dummy
 
 case "$WM_MPLIB" in
@@ -11,9 +34,7 @@ case "$WM_MPLIB" in
     echo
     echo "Note: ignore spurious warnings about missing mpicxx.h headers"
     echo
-    set -x
-    # force compilation into qualified directory
-    WM_OPTIONS=${WM_OPTIONS}$WM_MPLIB  wmake $makeType mpi
+    wmakeMpiLib mpi
     ;;
 
 #GAMMA)
diff --git a/src/parallel/decompose/Allwmake b/src/parallel/decompose/Allwmake
index 38898b1ea310da0649bd9918ff1a42a894e2648b..cded295a7e274c66c4c11769013d0957e9beb42d 100755
--- a/src/parallel/decompose/Allwmake
+++ b/src/parallel/decompose/Allwmake
@@ -3,8 +3,7 @@ cd ${0%/*} || exit 1    # run from this directory
 makeType=${1:-libso}
 
 # get SCOTCH_VERSION, SCOTCH_ARCH_PATH
-settings=`$WM_PROJECT_DIR/bin/foamEtcFile apps/scotch/bashrc`
-if [ -f "$settings" ]
+if settings=`$WM_PROJECT_DIR/bin/foamEtcFile apps/scotch/bashrc`
 then
     . $settings
     echo "using SCOTCH_ARCH_PATH=$SCOTCH_ARCH_PATH"
@@ -13,21 +12,45 @@ else
     echo "Error: no apps/scotch/bashrc settings"
     echo
 fi
+
+
+#
+# define how to create an mpi-versioned library of $makeType
+# compile into qualified directory
+# use sentinel file to handle version changes
+#
+wmakeMpiLib()
+{
+    set +x
+    for libName
+    do
+    (
+        WM_OPTIONS="$WM_OPTIONS$WM_MPLIB"
+        whichmpi="$libName/Make/$WM_OPTIONS/using:$FOAM_MPI"
+        whichscotch="$libName/Make/$WM_OPTIONS/using:$SCOTCH_VERSION"
+        [ -e "$whichmpi" -a -e "$whichscotch" ] || wclean $libName
+        echo "wmake $makeType $libName"
+        wmake $makeType $libName
+        touch "$whichmpi" "$whichscotch"
+    )
+    done
+    set -x
+}
+
 set -x
 
 wmakeLnInclude decompositionMethods
 
-wmake $makeType scotchDecomp
-
-if [ -d "$FOAM_LIBBIN/$FOAM_MPI" ]
+if [ -n "$SCOTCH_ARCH_PATH" ]
 then
-(
-    WM_OPTIONS=${WM_OPTIONS}$WM_MPLIB
-    wmake $makeType ptscotchDecomp
-)
+    wmake $makeType scotchDecomp
+    [ -d "$FOAM_LIBBIN/$FOAM_MPI" ] && wmakeMpiLib ptscotchDecomp
+else
+    echo
+    echo "Skipping scotchDecomp (ptscotchDecomp)"
+    echo
 fi
 
 wmake $makeType decompositionMethods
 
-
 # ----------------------------------------------------------------- end-of-file
diff --git a/src/parallel/decompose/scotchDecomp/Make/options b/src/parallel/decompose/scotchDecomp/Make/options
index a198db40af8be9f9ca1d982920b3c2003f2822bc..b2f7015e2468f922d206bb5aae2fd650906c85d7 100644
--- a/src/parallel/decompose/scotchDecomp/Make/options
+++ b/src/parallel/decompose/scotchDecomp/Make/options
@@ -1,6 +1,7 @@
-# Note including of mplib compilation rules. This
-# is purely to avoid scotch.h including mpicxx.h
-# which causes problems.
+/*
+ * Note including of mplib compilation rules.
+ * This is purely to avoid scotch.h including mpicxx.h, which causes problems.
+ */
 sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB)
 sinclude $(RULES)/mplib$(WM_MPLIB)