diff --git a/bin/foamCleanPath b/bin/foamCleanPath
index 6049fa8bfea951051d2c1a54e7a35706e46a18bd..1fb86152d52e01c8c82daed62ccbcfee9d9afc81 100755
--- a/bin/foamCleanPath
+++ b/bin/foamCleanPath
@@ -4,7 +4,7 @@
 # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
 #  \\    /   O peration     |
 #   \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
-#    \\/     M anipulation  | Copyright (C) 2017 OpenCFD Ltd.
+#    \\/     M anipulation  | Copyright (C) 2017-2018 OpenCFD Ltd.
 #-------------------------------------------------------------------------------
 # License
 #     This file is part of OpenFOAM, licensed under GNU General Public License
@@ -15,6 +15,7 @@
 #
 # Description
 #     Usage: foamCleanPath [OPTION] path [wildcard] .. [wildcard]
+#            foamCleanPath [OPTION] -env=name [wildcard1] .. [wildcardN]
 #
 #     Prints its argument (which should be a ':' separated path)
 #     without the following:
@@ -23,24 +24,48 @@
 #         - inaccessible directories (with the -strip option)
 #
 # Note
-#     - this routine will fail when directories have embedded spaces
+#     - this routine fails when directories have embedded spaces
 #     - false matches possible if a wildcard contains '.' (sed regex)
 #     - the wildcards themselves can be written together and separated
 #       by colons or whitespace
+#
+# Examples for cleaning the path:
+#
+#     - Using explicit arguments
+#       cleaned=$(foamCleanPath "$PATH" dir1:dir2) && PATH=$cleaned
+#
+#     - Variable to clean passed as an option
+#       cleaned=$(foamCleanPath -env=PATH dir1:dir2) && PATH=$cleaned
+#
+#     - Using shell evaluation for the output
+#       eval $(foamCleanPath -sh=PATH "$PATH" dir1:dir2)
+#       eval $(foamCleanPath -sh=PATH -env=PATH dir1:dir2)
+#       eval $(foamCleanPath -sh-env=PATH dir1:dir2)
+#
+#     - Similarly for c-shell
+#       eval `foamCleanPath -csh-env=PATH dir1:dir2`
+#
 #------------------------------------------------------------------------------
 usage() {
     cat <<USAGE 1>&2
-Usage: ${0##*/} [OPTION] path [wildcard1] .. [wildcardN]
+Usage: foamCleanPath [OPTION] path [wildcard1] .. [wildcardN]]
+       foamCleanPath [OPTION] -env=name [wildcard1] .. [wildcardN]
+
 options:
+  -csh=NAME         Produce 'setenv NAME ...' output for csh eval
+  -sh=NAME          Produce 'NAME=...' output for sh eval
+  -csh-env=NAME     As per -csh, with -env for initial content
+  -sh-env=NAME      As per -sh,  with -env for initial content
+  -env=NAME         Evaluate NAME to obtain initial content
   -debug            print debug information to stderr
   -strip            remove inaccessible directories
   -verbose          report some progress (input, output, ...)
   -help             print the usage
 
 Prints its argument (which should be a ':' separated list) cleansed from
-  - duplicate elements
-  - elements whose start matches one of the wildcard(s)
-  - inaccessible directories (with the -strip option)
+  * duplicate elements
+  * elements whose start matches one of the wildcard(s)
+  * inaccessible directories (the -strip option)
 
 Exit status
     0  on success
@@ -51,15 +76,58 @@ USAGE
     exit 1
 }
 
+# Report error and exit
+die()
+{
+    exec 1>&2
+    echo
+    echo "Error encountered:"
+    while [ "$#" -ge 1 ]; do echo "    $1"; shift; done
+    echo
+    echo "See 'foamCleanPath -help' for usage"
+    echo
+    exit 1
+}
+
+#-------------------------------------------------------------------------------
+
+# Input and outputs
+unset dirList shellOutput
 
 # Parse options
-unset optDebug optStrip optVerbose
+unset optDebug optEnvName optStrip optVerbose
 while [ "$#" -gt 0 ]
 do
     case "$1" in
     -h | -help*)
         usage
         ;;
+    -csh=* | -sh=* | -csh-env=* | -sh-env=*)
+        name="${1#*=}"
+        [ -n "$name" ] || die "Option '$1' missing an ENVNAME"
+
+        # Output prefix
+        case "$1" in
+        -csh*)
+            shellOutput="setenv $name "     # eg, "setenv PATH xyz"
+            ;;
+        *)
+            shellOutput="$name="            # eg, "PATH=xyz"
+            ;;
+        esac
+
+        # For (-csh-env | -sh-env) also use name for input evaluation
+        case "$1" in
+        *-env=*)
+            optEnvName="$name"
+            ;;
+        esac
+        ;;
+    -env=*)
+        name="${1#*=}"
+        [ -n "$name" ] || die "Option '$1' missing an ENVNAME"
+        optEnvName="$name"
+        ;;
     -debug)
         optDebug=true
         ;;
@@ -76,11 +144,18 @@ do
     shift
 done
 
-# Basic checks, setup
-[ "$#" -ge 1 ] || usage
 
-dirList="$1"
-shift
+# Basic checks
+if [ -n "$optEnvName" ]
+then
+    eval "dirList=\$$optEnvName"
+elif [ "$#" -ge 1 ]
+then
+    dirList="$1"
+    shift
+else
+    die "Requires at least one argument, or use the -env option"
+fi
 
 [ -n "$dirList" ] || exit 2     # Quick exit on empty 'dirList'
 
@@ -105,8 +180,8 @@ fi
 # The "wildcard1 ... wildcardN" may have been passed as a single parameter
 # or may contain ':' separators
 
-oldIFS="$IFS"   # Preserve initial IFS
-IFS=': '        # Split on colon, whitespace
+oldIFS="$IFS"       # Preserve initial IFS
+IFS=': '            # Split on colon, whitespace
 set -- $*
 
 if [ -n "$optVerbose" ]
@@ -128,10 +203,10 @@ do
 done
 printDebug "intermediate>$dirList<"
 
-IFS=': '        # Split on colon, whitespace (to avoid surprises)
+IFS=': '            # Split on colon, whitespace (to avoid surprises)
 set -- $dirList
 
-IFS="$oldIFS"   # Restore initial IFS
+IFS="$oldIFS"       # Restore initial IFS
 
 # Rebuild the list
 unset dirList
@@ -153,12 +228,11 @@ do
 done
 
 printDebug "output>$dirList<"
-
 if [ -n "$optVerbose" ]
 then
     echo "output: $dirList" 1>&2
 fi
 
-echo "$dirList"
+echo "$shellOutput$dirList"
 
 #------------------------------------------------------------------------------
diff --git a/bin/foamEtcFile b/bin/foamEtcFile
index e61279b5913b076d27ac711ecaa3372b6f578e2a..ea1d1c3fbf2c16098c3af6b20f6cd818a6eb5fae 100755
--- a/bin/foamEtcFile
+++ b/bin/foamEtcFile
@@ -4,7 +4,7 @@
 # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
 #  \\    /   O peration     |
 #   \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
-#    \\/     M anipulation  | Copyright (C) 2017 OpenCFD Ltd.
+#    \\/     M anipulation  | Copyright (C) 2017-2018 OpenCFD Ltd.
 #-------------------------------------------------------------------------------
 # License
 #     This file is part of OpenFOAM, licensed under GNU General Public License
@@ -56,10 +56,13 @@ options:
   -mode=MODE        Any combination of u(user), g(group), o(other)
   -prefix=DIR       Specify an alternative installation prefix
   -version=VER      Specify alternative OpenFOAM version (eg, 3.0, 1612, ...)
-  -csh              Produce output suitable for a csh or sh 'eval'
-  -csh-verbose      As per -csh with additional verbosity
-  -sh               Produce output suitable for a csh or sh 'eval'
-  -sh-verbose       As per -sh  with additional verbosity
+  -csh              Produce 'source FILE' output for a csh eval
+  -sh               Produce '. FILE' output for a sh eval
+  -csh-verbose      As per -csh, with additional verbosity
+  -sh-verbose       As per -sh,  with additional verbosity
+  -config           Add config directory prefix for shell type:
+                        with -csh* for a config.csh/ prefix
+                        with -sh*  for a config.sh/ prefix
   -quiet (-q)       Suppress all normal output
   -silent (-s)      Suppress stderr, except -csh-verbose, -sh-verbose output
   -help             Print the usage
@@ -81,7 +84,6 @@ USAGE
     exit 0  # A clean exit
 }
 
-
 unset optQuiet optSilent
 # Report error and exit
 die()
@@ -183,7 +185,8 @@ setVersion()
 
 
 optMode=ugo         # Default mode is always 'ugo'
-unset optAll optList optShell optVersion
+unset shellOutput verboseOutput
+unset optAll optConfig optList optVersion
 
 # Parse options
 while [ "$#" -gt 0 ]
@@ -194,19 +197,24 @@ do
         ;;
     -a | -all)
         optAll=true
-        unset optShell
+        unset shellOutput verboseOutput
         ;;
     -l | -list)
         optList=true
-        unset optShell
         ;;
     -list-test)
         optList='test'
-        unset optShell
         ;;
-    -csh | -sh | -csh-verbose | -sh-verbose)
-        optShell="${1#-}"
-        unset optAll
+    -csh | -sh)
+        shellOutput="${1#-}"
+        unset verboseOutput
+        ;;
+    -csh-verbose | -sh-verbose)
+        shellOutput="${1#-}"
+        verboseOutput="source "         # Report: "source FILE"
+        ;;
+    -config)
+        optConfig=true
         ;;
     -mode=[ugo]*)
         optMode="${1#*=}"
@@ -260,7 +268,6 @@ do
     shift
 done
 
-
 #-------------------------------------------------------------------------------
 
 if [ -n "$optVersion" ]
@@ -309,27 +316,61 @@ case "$optMode" in (*o*) # (O)ther == shipped
 esac
 set -- $dirList
 
+[ "$#" -ge 1 ] || die "No directories to scan. Programming error?"
+exitCode=2  # Fallback is a FileNotFound error
+
+
+#
+# Preliminaries
+#
+
+# Special handling of config.sh/ , config.csh/ directories
+if [ -n "$optConfig" -a -n "$shellOutput" -a -n "$fileName" ]
+then
+    case "$shellOutput" in
+    csh*)
+        optConfig="config.csh/"
+        ;;
+    sh*)
+        optConfig="config.sh/"
+        ;;
+    *)
+        unset optConfig
+        ;;
+    esac
+
+    if [ -n "$optConfig" ]
+    then
+        case "$fileName" in
+        /* | config.csh* | config.sh*)
+            # Does not need or cannot add a prefix
+            unset optConfig
+            ;;
+        *)
+            fileName="$optConfig$fileName"
+            ;;
+        esac
+    fi
+fi
+
 
 #
 # The main routine
 #
 
-exitCode=0
 if [ -n "$optList" ]
 then
 
     # List directories, or potential file locations
     [ "$nArgs" -le 1 ] || \
-    die "-list expects 0 or 1 filename, but $nArgs provided"
+        die "-list options expect 0 or 1 filename, but $nArgs provided"
 
-    # A silly combination, but -quiet does have precedence
+    # A silly combination, but -quiet has absolute precedence
     [ -n "$optQuiet" ] && exit 0
 
     # Test for directory or file too?
     if [ "$optList" = "test" ]
     then
-        exitCode=2  # Fallback to a general error (file not found)
-
         if [ "$nArgs" -eq 1 ]
         then
             for dir
@@ -352,6 +393,7 @@ then
             done
         fi
     else
+        exitCode=0  # OK, already verified that $# != 0
         for dir
         do
             echo "$dir${fileName:+/}$fileName"
@@ -362,35 +404,39 @@ else
 
     [ "$nArgs" -eq 1 ] || die "One filename expected - $nArgs provided"
 
-    exitCode=2  # Fallback to a general error (file not found)
+    # Output for sourcing files ("source" for csh, "." for POSIX shell)
+    # Only allow sourcing a single file (disallow combination with -all)
+    case "$shellOutput" in
+    csh*)
+        shellOutput="source "   # eg, "source FILE"
+        ;;
+    sh*)
+        shellOutput=". "        # eg, ". FILE"
+        ;;
+    esac
+
+    # Anti-pattern: -all disables shell commands
+    if [ -n "$optAll" ]
+    then
+        unset shellOutput verboseOutput
+    fi
 
     for dir
     do
-        if [ -f "$dir/$fileName" ]
+        resolved="$dir/$fileName"
+        if [ -f "$resolved" ]
         then
-            exitCode=0
-            [ -n "$optQuiet" ] && break
-
-            case "$optShell" in
-            (*verbose)
-                echo "Using: $dir/$fileName" 1>&2
-                ;;
-            esac
-
-            case "$optShell" in
-            csh*)
-                echo "source $dir/$fileName"
+            exitCode=0  # OK
+            if [ -n "$optQuiet" ]
+            then
                 break
-                ;;
-            sh*)
-                echo ". $dir/$fileName"
-                break
-                ;;
-            *)
-                echo "$dir/$fileName"
-                [ -n "$optAll" ] || break
-                ;;
-            esac
+            elif [ -n "$verboseOutput" ]
+            then
+                echo "$verboseOutput$resolved" 1>&2
+            fi
+
+            echo "$shellOutput$resolved"
+            [ -n "$optAll" ] || break
         fi
     done
 
diff --git a/bin/tools/lib-dir b/bin/tools/lib-dir
new file mode 100755
index 0000000000000000000000000000000000000000..a61d5748266f59c64008d82b7e1cdcd335bc25d8
--- /dev/null
+++ b/bin/tools/lib-dir
@@ -0,0 +1,162 @@
+#!/bin/sh
+#------------------------------------------------------------------------------
+# =========                 |
+# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+#  \\    /   O peration     |
+#   \\  /    A nd           | Copyright (C) 2018 OpenCFD Ltd.
+#    \\/     M anipulation  |
+#-------------------------------------------------------------------------------
+# License
+#     This file is part of OpenFOAM, licensed under GNU General Public License
+#     <http://www.gnu.org/licenses/>.
+#
+# Script
+#     tools/lib-dir [OPTION] DIR [LIBEXT]
+#
+# Description
+#     Since csh/tcsh doesn't have functions, this script can be used to manage
+#     slightly more complex logic.
+#
+#     Resolves for the existence of DIR/lib64 and DIR/lib, or uses the fallback
+#     LIBEXT if these failed. A DIR ending in "-none" or "-system" is skipped.
+#
+#     output -csh:     setenv LD_LIBRARY_PATH dir/lib:$LD_LIBRARY_PATH
+#     output -make:    -Ldir/lib
+#     output -sh:      LD_LIBRARY_PATH=dir/lib:$LD_LIBRARY_PATH
+#
+#------------------------------------------------------------------------------
+printHelp() {
+    cat<<USAGE
+
+Usage: ${0##*/} [OPTION] DIR [LIBEXT]
+
+options:
+   -sh               Emit POSIX shell syntax (default)
+   -csh              Emit C-shell shell syntax
+   -make             Emit content for a makefile
+   -help             Print the usage
+
+Resolves for the existence of DIR/lib64 and DIR/lib, or uses the fallback
+LIBEXT if these failed. A DIR ending in "-none" or "-system" is skipped.
+
+With -sh             LD_LIBRARY_PATH=dir/lib:$LD_LIBRARY_PATH
+With -csh            setenv LD_LIBRARY_PATH dir/lib:$LD_LIBRARY_PATH
+With -make           -Ldir/lib
+
+Exit status is zero (success) or non-zero (failure)
+USAGE
+    exit 0  # A clean exit
+}
+
+# Report error and exit
+die()
+{
+    exec 1>&2
+    echo
+    echo "Error encountered:"
+    while [ "$#" -ge 1 ]; do echo "    $1"; shift; done
+    echo
+    echo "See '${Script##*/} -help' for usage"
+    echo
+    exit 1
+}
+
+
+#------------------------------------------------------------------------------
+
+optSyntax=sh
+
+# Parse options
+while [ "$#" -gt 0 ]
+do
+    case "$1" in
+    -h | -help*)
+        printHelp
+        ;;
+    -csh | -sh | -make)
+        optSyntax="${1#-}"
+        ;;
+    --)
+        shift
+        break
+        ;;
+    -*)
+        die "unknown option: '$1'"
+        ;;
+    *)
+        break
+        ;;
+    esac
+    shift
+done
+
+#------------------------------------------------------------------------------
+
+dir="$1"   # $1 = base directory for 'lib' or 'lib64'
+alt="$2"   # $2 = fallback libname ('lib' or 'lib64')
+
+unset resolved
+
+# 0)
+# Skip entirely if directory ends in "-none" or "-system".
+# These special cases (disabled, system directories) should not require
+# adjustment of LD_LIBRARY_PATH
+
+case "$dir" in
+none |  system  | *-none | *-system)
+    unset dir
+    ;;
+esac
+
+if [ -z "$dir" ]
+then
+    exit 1
+elif [ -d "$dir" ]
+then
+    # 1) Check for dir/lib64 and dir/lib
+    for end in lib$WM_COMPILER_LIB_ARCH lib
+    do
+        if [ -d "$dir/$end" ]
+        then
+            resolved=$dir/$end
+            break
+        fi
+    done
+fi
+
+# 2) Use fallback if the previous failed
+if [ -z "$resolved" -a -n "$alt" ]
+then
+    # Fallback
+    case "$alt" in
+    /*)
+        resolved=$alt
+        ;;
+    (*)
+        resolved=$dir/$alt
+        ;;
+    esac
+    return 0
+fi
+
+
+if [ -n "$resolved" ]
+then
+    case "$optSyntax" in
+    csh)
+        echo "setenv LD_LIBRARY_PATH $resolved:$LD_LIBRARY_PATH"
+        ;;
+    make)
+        printf "%s\n" "-L$resolved"
+        ;;
+    *)
+        echo "LD_LIBRARY_PATH=$resolved:$LD_LIBRARY_PATH"
+        ;;
+    esac
+    exit 0      # Good
+else
+    exit 1    # Error
+fi
+
+
+#------------------------------------------------------------------------------
diff --git a/etc/bashrc b/etc/bashrc
index b1a39aaed39619727462fb13cbba4703091b577c..c7f8b7eb771ec1b2612254e70846ff3c8743df6f 100644
--- a/etc/bashrc
+++ b/etc/bashrc
@@ -139,65 +139,55 @@ _foamEtc -mode=ug prefs.sh
 export FOAM_SETTINGS="$@"
 _foamEval $@
 
-# Clean standard environment variables (PATH, LD_LIBRARY_PATH, MANPATH)
+# Clean standard environment variables (PATH, MANPATH, LD_LIBRARY_PATH)
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-foamClean=$WM_PROJECT_DIR/bin/foamCleanPath
-
-# Clean PATH
-cleaned=$($foamClean "$PATH" "$foamOldDirs") && PATH="$cleaned"
-
-# Clean LD_LIBRARY_PATH
-cleaned=$($foamClean "$LD_LIBRARY_PATH" "$foamOldDirs") \
-    && LD_LIBRARY_PATH="$cleaned"
-
-# Clean MANPATH
-cleaned=$($foamClean "$MANPATH" "$foamOldDirs") && MANPATH="$cleaned"
-
-export PATH LD_LIBRARY_PATH MANPATH
-
+export PATH MANPATH LD_LIBRARY_PATH
+_foamClean PATH "$foamOldDirs"
+_foamClean MANPATH "$foamOldDirs"
+_foamClean LD_LIBRARY_PATH "$foamOldDirs"
 
 # Setup for OpenFOAM compilation etc
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-_foamEtc config.sh/settings
+_foamEtc -config  settings
 
 # Setup for third-party packages
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-_foamEtc config.sh/mpi
-_foamEtc config.sh/paraview
-_foamEtc config.sh/vtk
-_foamEtc config.sh/ensight
-_foamEtc config.sh/gperftools
-## _foamEtc config.csh/ADIOS
-_foamEtc config.sh/CGAL
-_foamEtc config.sh/scotch
-_foamEtc config.sh/FFTW
+_foamEtc -config  mpi
+_foamEtc -config  paraview
+_foamEtc -config  vtk
+_foamEtc -config  ensight
+_foamEtc -config  gperftools
+## _foamEtc -config  ADIOS
+_foamEtc -config  CGAL
+_foamEtc -config  scotch
+_foamEtc -config  FFTW
 
 # Interactive shell
 if /usr/bin/tty -s 2>/dev/null
 then
-    _foamEtc config.sh/aliases
-    [ "${BASH_VERSINFO:-0}" -ge 4 ] && _foamEtc config.sh/bash_completion
+    _foamEtc -config  aliases
+    [ "${BASH_VERSINFO:-0}" -ge 4 ] && _foamEtc -config  bash_completion
 fi
 
 
 # Clean environment paths again. Only remove duplicates
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-# Clean PATH
-cleaned=$($foamClean "$PATH") && PATH="$cleaned"
-
-# Clean LD_LIBRARY_PATH
-cleaned=$($foamClean "$LD_LIBRARY_PATH") && LD_LIBRARY_PATH="$cleaned"
+export PATH MANPATH LD_LIBRARY_PATH
 
-# Clean MANPATH (trailing ':' to find system pages)
-cleaned=$($foamClean "$MANPATH") && MANPATH="${cleaned}:"
+_foamClean PATH
+_foamClean MANPATH
+_foamClean LD_LIBRARY_PATH
 
-export PATH LD_LIBRARY_PATH MANPATH
+# Add trailing ':' for system manpages
+if [ -n "$MANPATH" ]
+then
+    MANPATH="${MANPATH}:"
+fi
 
-# Clean LD_PRELOAD
 if [ -n "$LD_PRELOAD" ]
 then
-    cleaned=$($foamClean "$LD_PRELOAD") && LD_PRELOAD="$cleaned"
     export LD_PRELOAD
+    _foamClean LD_PRELOAD
 fi
 
 
@@ -208,6 +198,6 @@ fi
 . $WM_PROJECT_DIR/etc/config.sh/functions
 
 # Variables (done as the last statement for a clean exit code)
-unset cleaned foamClean foamOldDirs
+unset cleaned foamOldDirs
 
 #------------------------------------------------------------------------------
diff --git a/etc/config.csh/ADIOS b/etc/config.csh/ADIOS
index 7ef241af600ce6650556a3296ecca70bce471a7c..bc7a7759e7de71cac6bb7b083a924f16719ae023 100644
--- a/etc/config.csh/ADIOS
+++ b/etc/config.csh/ADIOS
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.csh/ADIOS
+#     - sourced by OpenFOAM-*/etc/cshrc
 #
 # Description
 #     Setup for ADIOS include/libraries (usually ThirdParty installation).
-#     Sourced from OpenFOAM-<VERSION>/etc/cshrc
 #
 #     To disable its use:               adios_version=adios-none
 #     For system-wide installations:    adios_version=adios-system
diff --git a/etc/config.csh/ADIOS2 b/etc/config.csh/ADIOS2
index a78d06a7528564afc2addee658833b15684825b2..b375cd8ea41465d11ff0494f5a0612d790902f94 100644
--- a/etc/config.csh/ADIOS2
+++ b/etc/config.csh/ADIOS2
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.csh/ADIOS2
+#     - sourced by OpenFOAM-*/etc/cshrc
 #
 # Description
 #     Setup for ADIOS2 include/libraries (usually ThirdParty installation).
-#     Sourced from OpenFOAM-<VERSION>/etc/cshrc
 #
 #------------------------------------------------------------------------------
 # USER EDITABLE PART: Changes made here may be lost with the next upgrade
diff --git a/etc/config.csh/CGAL b/etc/config.csh/CGAL
index d4190c3a9749e4a6abe92ae8efd926718ece74b9..52b5070457368adb846a5628598d9ddaae910d3b 100644
--- a/etc/config.csh/CGAL
+++ b/etc/config.csh/CGAL
@@ -3,7 +3,7 @@
 # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
 #  \\    /   O peration     |
 #   \\  /    A nd           | Copyright (C) 2014-2016 OpenFOAM Foundation
-#    \\/     M anipulation  | Copyright (C) 2016-2017 OpenCFD Ltd.
+#    \\/     M anipulation  | Copyright (C) 2016-2018 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
 #     This file is part of OpenFOAM, licensed under GNU General Public License
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.csh/CGAL
+#     - sourced by OpenFOAM-*/etc/cshrc
 #
 # Description
-#     Setup file for CGAL (& boost) include/libraries.
-#     Sourced from OpenFOAM-<VERSION>/etc/cshrc
+#     Setup CGAL (& boost) include/libraries (usually ThirdParty installation).
 #
 #     To disable its use:
 #         boost_version=boost-none
@@ -29,6 +29,9 @@
 #       2. and provide full paths for BOOST_ARCH_PATH / CGAL_ARCH_PATH
 #
 # Note
+#     Define GMP_ARCH_PATH and MPFR_ARCH_PATH here, if required and when not
+#     using a ThirdParty gcc.
+#
 #     Changes made here MUST be made in the equivalent config.sh version too,
 #     since that is the one used in the build process.
 #
@@ -50,20 +53,19 @@ if ($?FOAM_VERBOSE && $?prompt) then
     echo "Using CGAL ($cgal_version)  ->  $CGAL_ARCH_PATH"
 endif
 
-# If BOOST_ARCH_PATH, CGAL_ARCH_PATH do not end with '-system' or '-none',
-# they are either located within ThirdParty, or a central installation
-# outside of ThirdParty and must be added to the lib-path.
+_foamAddLibAuto $BOOST_ARCH_PATH  lib$WM_COMPILER_LIB_ARCH
+_foamAddLibAuto $CGAL_ARCH_PATH   lib$WM_COMPILER_LIB_ARCH
 
-set ending="${BOOST_ARCH_PATH:t}"
-if ( "$ending" != "boost-none" && "$ending" != "boost-system" ) then
-    _foamAddLib $BOOST_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH
-endif
+# GMP/MPFR may have already been added with ThirdParty compiler, but cannot
+# be certain so add here. If they are duplicates, they will be removed later.
 
-set ending="${CGAL_ARCH_PATH:t}"
-if ( "$ending" != "cgal-none" && "$ending" != "cgal-system" ) then
-    _foamAddLib $CGAL_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH
+if ( $?GMP_ARCH_PATH ) then
+    _foamAddLibAuto $GMP_ARCH_PATH   # No fallback libdir
+endif
+if ( $?MPFR_ARCH_PATH ) then
+    _foamAddLibAuto $MPFR_ARCH_PATH  # No fallback libdir
 endif
 
-unset boost_version cgal_version ending
+unset boost_version cgal_version
 
 #------------------------------------------------------------------------------
diff --git a/etc/config.csh/FFTW b/etc/config.csh/FFTW
index 7cb78bb9430e03b17b7a25332026de65cc732524..2ac3bbc736db4d56900a2bd04d1589a07df26cf0 100644
--- a/etc/config.csh/FFTW
+++ b/etc/config.csh/FFTW
@@ -2,7 +2,7 @@
 # =========                 |
 # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
 #  \\    /   O peration     |
-#   \\  /    A nd           | Copyright (C) 2016-2017 OpenCFD Ltd.
+#   \\  /    A nd           | Copyright (C) 2016-2018 OpenCFD Ltd.
 #    \\/     M anipulation  |
 #------------------------------------------------------------------------------
 # License
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.csh/FFTW
+#     - sourced by OpenFOAM-*/etc/bashrc
 #
 # Description
 #     Setup for FFTW include/libraries (usually ThirdParty installation).
-#     Sourced from OpenFOAM-<VERSION>/etc/bashrc
 #
 #     To disable its use:               fftw_version=fftw-none
 #     For system-wide installations:    fftw_version=fftw-system
@@ -41,15 +41,8 @@ if ($?FOAM_VERBOSE && $?prompt) then
     echo "Using fftw ($fftw_version)  ->  $FFTW_ARCH_PATH"
 endif
 
-# If FFTW_ARCH_PATH does not end with '-system' or '-none',
-# it is either located within ThirdParty, or a central installation
-# outside of ThirdParty and must be added to the lib-path.
+_foamAddLibAuto $FFTW_ARCH_PATH  lib$WM_COMPILER_LIB_ARCH
 
-set ending="${FFTW_ARCH_PATH:t}"
-if ( "$ending" != "fftw-none" && "$ending" != "fftw-system" ) then
-    _foamAddLib $FFTW_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH
-endif
-
-unset fftw_version ending
+unset fftw_version
 
 #------------------------------------------------------------------------------
diff --git a/etc/config.csh/aliases b/etc/config.csh/aliases
index 31afd9850eb0edcbc507a334fa923e77fe053ad5..1f63a50900e052778a163d30db6ca6b6f32d1b4d 100644
--- a/etc/config.csh/aliases
+++ b/etc/config.csh/aliases
@@ -3,7 +3,7 @@
 # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
 #  \\    /   O peration     |
 #   \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
-#    \\/     M anipulation  | Copyright (C) 2017 OpenCFD Ltd.
+#    \\/     M anipulation  | Copyright (C) 2017-2018 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
 #     This file is part of OpenFOAM, licensed under GNU General Public License
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.csh/aliases
+#     - sourced by OpenFOAM-*/etc/cshrc  (or from the user's ~/.cshrc)
 #
 # Description
 #     Aliases for working with OpenFOAM
-#     Sourced from OpenFOAM-<VERSION>/etc/cshrc and/or ~/.cshrc
 #
 #------------------------------------------------------------------------------
 
diff --git a/etc/config.csh/compiler b/etc/config.csh/compiler
index 6b0a286b12bf7da0ead8766c1675c8ce5ad3f183..3543d732c53ed8ea077d9c341aa0ed731675d5c0 100644
--- a/etc/config.csh/compiler
+++ b/etc/config.csh/compiler
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.csh/compiler
+#     - sourced by OpenFOAM-*/etc/config.csh/settings
 #
 # Description
 #     Setup for custom compiler versions for OpenFOAM
-#     Sourced from OpenFOAM-<VERSION>/etc/config.csh/settings
 #
 #------------------------------------------------------------------------------
 
diff --git a/etc/config.csh/ensight b/etc/config.csh/ensight
index b294eeade3a58c93cbc6f8bd7408645ab5f2a499..a840cbda12e1f82b1f0af36d05935cae19569d4c 100644
--- a/etc/config.csh/ensight
+++ b/etc/config.csh/ensight
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.csh/ensight
+#     - sourced by OpenFOAM-*/etc/cshrc
 #
 # Description
 #     Setup for ENSIGHT
-#     Sourced from OpenFOAM-*/etc/cshrc
 #
 #------------------------------------------------------------------------------
 
diff --git a/etc/config.csh/example/compiler b/etc/config.csh/example/compiler
index ebc90c35b154f58eed2f02b1124a4192d6422cd6..607f780fff1dfad22dfc8b2f7632042f4a1f5897 100644
--- a/etc/config.csh/example/compiler
+++ b/etc/config.csh/example/compiler
@@ -11,15 +11,15 @@
 #
 # File
 #     config.csh/example/compiler
+#     - sourced by OpenFOAM-*/etc/config.csh/settings
 #
 # Description
 #     Example of fine tuning ThirdParty compiler settings for OpenFOAM
-#     Sourced from OpenFOAM-<VERSION>/etc/config.csh/settings
 #
 #------------------------------------------------------------------------------
 
 # Load the standard versions
-eval `$WM_PROJECT_DIR/bin/foamEtcFile -csh -mode=o config.csh/compiler`
+eval `$WM_PROJECT_DIR/bin/foamEtcFile -mode=o -csh -config compiler`
 
 # Modify/override compiler settings
 switch ("$WM_COMPILER")
diff --git a/etc/config.csh/example/openmpi b/etc/config.csh/example/openmpi
index a23e951db9bd28e8a1af85ab6e601635ab3d11b0..ae995100f4ab5c6c14c9e01f42be175f3e95a381 100644
--- a/etc/config.csh/example/openmpi
+++ b/etc/config.csh/example/openmpi
@@ -11,14 +11,13 @@
 #
 # File
 #     config.csh/example/openmpi
+#     - sourced by OpenFOAM-*/etc/config.csh/mpi
 #
 # Description
 #     Example of fine tuning openmpi settings for OpenFOAM
-#     Sourced from OpenFOAM-<VERSION>/etc/config.csh/settings
 #
 #------------------------------------------------------------------------------
 
-# Modified openmpi settings
 setenv FOAM_MPI openmpi-3.0.0
 
 #------------------------------------------------------------------------------
diff --git a/etc/config.csh/example/paraview b/etc/config.csh/example/paraview
index a2211ec2ec3065d5578c4f36d36ad7269b1ff7c1..ce07cea7c257cd9d433f9fe190cd390a9743102c 100644
--- a/etc/config.csh/example/paraview
+++ b/etc/config.csh/example/paraview
@@ -22,8 +22,7 @@
 #
 #------------------------------------------------------------------------------
 
-# Use shipped paraview config file (-mode=o) with a different ParaView_VERSION
-
+# Use standard paraview config file (-mode=o) with a different ParaView_VERSION
 set foamFile=`$WM_PROJECT_DIR/bin/foamEtcFile -mode=o config.csh/paraview`
 if ( $status == 0 ) source $foamFile ParaView_VERSION=5.4.0
 
diff --git a/etc/config.csh/example/prefs.csh b/etc/config.csh/example/prefs.csh
index 2d688b587b34ad98d7c8ddd29511435fadb2af17..daa27f80de8f387fa3dac5733eb75ecabd4920fc 100644
--- a/etc/config.csh/example/prefs.csh
+++ b/etc/config.csh/example/prefs.csh
@@ -11,12 +11,10 @@
 #
 # File
 #     config.csh/example/prefs.csh
+#     - sourced by OpenFOAM-*/etc/cshrc
 #
 # Description
-#     Preset variables for the OpenFOAM configuration - C-Shell shell syntax.
-#
-#     The prefs.csh file will be sourced by the OpenFOAM etc/cshrc when it is
-#     found by foamEtcFile.
+#     Example of preset variables for the OpenFOAM configuration (C-Shell shell)
 #
 # See also
 #     'foamEtcFile -help' or 'foamEtcFile -list' for information about the
@@ -24,13 +22,8 @@
 #
 #------------------------------------------------------------------------------
 
-#- Compiler location:
 setenv WM_COMPILER_TYPE ThirdParty
-
-#- Compiler:
 setenv WM_COMPILER Clang
-
-#- MPI implementation:
 setenv WM_MPLIB SYSTEMOPENMPI
 
 #------------------------------------------------------------------------------
diff --git a/etc/config.csh/functions b/etc/config.csh/functions
new file mode 100644
index 0000000000000000000000000000000000000000..cd038150587fa4f258d93aff90452a2f6b79c27c
--- /dev/null
+++ b/etc/config.csh/functions
@@ -0,0 +1,62 @@
+#----------------------------------*-sh-*--------------------------------------
+# =========                 |
+# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+#  \\    /   O peration     |
+#   \\  /    A nd           | Copyright (C) 2018 OpenCFD Ltd.
+#    \\/     M anipulation  |
+#------------------------------------------------------------------------------
+# License
+#     This file is part of OpenFOAM, licensed under GNU General Public License
+#     <http://www.gnu.org/licenses/>.
+#
+# File
+#     etc/config.csh/functions
+#     - sourced by OpenFOAM-*/etc/cshrc
+#
+# Description
+#     C-shell aliases and variables used when sourcing the OpenFOAM environment
+#
+#     Some functionality implemented via bin/tools/lib-dir
+#
+#------------------------------------------------------------------------------
+
+# Cleaning environment variables
+alias _foamClean 'eval `$WM_PROJECT_DIR/bin/foamCleanPath -csh-env=\!*`'
+
+# Prepend PATH, MANPATH, LD_LIBRARY_PATH
+alias _foamAddPath 'setenv PATH \!*\:${PATH}'
+alias _foamAddMan  'setenv MANPATH \!*\:${MANPATH}'
+alias _foamAddLib  'setenv LD_LIBRARY_PATH \!*\:${LD_LIBRARY_PATH}'
+
+# Prefix to LD_LIBRARY_PATH with additional checking
+# $1 = base directory for 'lib' or 'lib64'
+# $2 = fallback libname ('lib' or 'lib64')
+alias _foamAddLibAuto 'eval `$WM_PROJECT_DIR/bin/tools/lib-dir -csh \!*`'
+
+# Source an etc file, possibly with some verbosity
+if ($?FOAM_VERBOSE && $?prompt) then
+    alias _foamEtc 'eval `$WM_PROJECT_DIR/bin/foamEtcFile -csh-verbose \!*`'
+else
+    alias _foamEtc 'eval `$WM_PROJECT_DIR/bin/foamEtcFile -csh \!*`'
+endif
+
+
+#------------------------------------------------------------------------------
+# Avoid any ThirdParty settings that may have 'leaked' into the environment
+
+unsetenv MPI_ARCH_PATH
+unsetenv ADIOS_ARCH_PATH
+unsetenv ADIOS1_ARCH_PATH
+unsetenv ADIOS2_ARCH_PATH
+unsetenv BOOST_ARCH_PATH
+unsetenv CCMIO_ARCH_PATH
+unsetenv CGAL_ARCH_PATH
+unsetenv FFTW_ARCH_PATH
+unsetenv GPERFTOOLS_ARCH_PATH
+unsetenv GMP_ARCH_PATH
+unsetenv MPFR_ARCH_PATH
+unsetenv MESA_ARCH_PATH
+unsetenv METIS_ARCH_PATH
+unsetenv SCOTCH_ARCH_PATH
+
+#------------------------------------------------------------------------------
diff --git a/etc/config.csh/mpi b/etc/config.csh/mpi
index 581bf0274bf9f1b31969f78828973c8edb43594f..795b62f4c814bfe5962619e40c8f6c81db5c4604 100644
--- a/etc/config.csh/mpi
+++ b/etc/config.csh/mpi
@@ -3,7 +3,7 @@
 # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
 #  \\    /   O peration     |
 #   \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
-#    \\/     M anipulation  | Copyright (C) 2017 OpenCFD Ltd.
+#    \\/     M anipulation  | Copyright (C) 2017-2018 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
 #     This file is part of OpenFOAM, licensed under GNU General Public License
@@ -11,10 +11,16 @@
 #
 # File
 #     etc/config.csh/mpi
+#     - sourced by OpenFOAM-*/etc/cshrc
 #
 # Description
 #     Setup for MPI communications library for OpenFOAM
-#     Sourced from OpenFOAM-<VERSION>/etc/cshrc
+#
+#     User adjustments are possible in these files:
+#       - config.csh/openmpi-system
+#       - config.csh/openmpi
+#       - config.csh/mpi-user
+#       - config.csh/mpi-system
 #
 #     For USERMPI, the user is responsible for supplying an appropriate
 #     wmake/rules/General/mplibUSERMPI file and managing all settings
@@ -25,25 +31,35 @@ setenv FOAM_MPI dummy  # Fallback value
 
 switch ("$WM_MPLIB")
 case SYSTEMOPENMPI:
-    # Use the system installed openmpi, get library directory via mpicc
+    # The system installed openmpi, locations discovery via mpicc.
     setenv FOAM_MPI openmpi-system
+    _foamEtc -config openmpi-system             # <- Adjustments (optional)
 
-    # Bit of a hack: strip off 'lib' and assume it is the prefix for openmpi
-    # include files and libraries.
-    set libDir=`mpicc --showme:link | sed -e 's/.*-L\([^ ]*\).*/\1/'`
+    # Respect MPI_ARCH_PATH if set to a valid directory (ie, from user adjustments)
+    if (! $?MPI_ARCH_PATH ) setenv MPI_ARCH_PATH
+    if ( -d "$MPI_ARCH_PATH" ) then
+        _foamAddLibAuto $MPI_ARCH_PATH
+    else
+        # Slight hack: strip off 'lib' to get presumed prefix for include and libs
+        set libDir=`mpicc --showme:link | sed -e 's/.*-L\([^ ]*\).*/\1/'`
 
-    setenv MPI_ARCH_PATH "${libDir:h}"
-    _foamAddLib     $libDir
-    unset libDir
+        setenv MPI_ARCH_PATH "${libDir:h}"
+        _foamAddLib $libDir
+        unset libDir
+    endif
     breaksw
 
 case OPENMPI:
     setenv FOAM_MPI openmpi-1.10.4
-    _foamEtc config.csh/openmpi                 # <- Adjustments (optional)
+    _foamEtc -config openmpi                    # <- Adjustments (optional)
 
-    setenv MPI_ARCH_PATH $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI
+    # Respect MPI_ARCH_PATH if set to a valid directory (ie, from user adjustments)
+    if (! $?MPI_ARCH_PATH ) setenv MPI_ARCH_PATH
+    if (! -d "$MPI_ARCH_PATH" ) then
+        setenv mpiDir=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI
+    endif
 
-    # Tell OpenMPI where to find its install directory
+    # Inform openmpi where to find its install directory
     setenv OPAL_PREFIX $MPI_ARCH_PATH
 
     if ($?FOAM_VERBOSE && $?prompt) then
@@ -53,19 +69,19 @@ case OPENMPI:
     endif
 
     _foamAddPath    $MPI_ARCH_PATH/bin
-    _foamAddLib     $MPI_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH
     _foamAddMan     $MPI_ARCH_PATH/share/man
+    _foamAddLibAuto $MPI_ARCH_PATH  lib$WM_COMPILER_LIB_ARCH
     breaksw
 
 case USERMPI:
     # Use an arbitrary, user-specified mpi implementation
     setenv FOAM_MPI mpi-user
-    _foamEtc config.csh/mpi-user                # <- Adjustments
+    _foamEtc -config mpi-user                   # <- Adjustments (optional)
     breaksw
 
 case SYSTEMMPI:
     setenv FOAM_MPI mpi-system
-    _foamEtc config.csh/mpi-system              # <- Adjustments (optional)
+    _foamEtc -config mpi-system                 # <- Adjustments (optional)
 
     if ( ! $?MPI_ROOT ) then
         echo
@@ -114,8 +130,8 @@ case MPICH:
     setenv MPI_HOME $MPI_ARCH_PATH
 
     _foamAddPath    $MPI_ARCH_PATH/bin
-    _foamAddLib     $MPI_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH
     _foamAddMan     $MPI_ARCH_PATH/share/man
+    _foamAddLibAuto $MPI_ARCH_PATH  lib$WM_COMPILER_LIB_ARCH
     breaksw
 
 case MPICH-GM:
diff --git a/etc/config.csh/paraview b/etc/config.csh/paraview
index 42a8f9a5884a58e465cbb31436bf1101b1b6667b..4282eb21a7620ec18abd3bcc40292d7522dc456a 100644
--- a/etc/config.csh/paraview
+++ b/etc/config.csh/paraview
@@ -3,7 +3,7 @@
 # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
 #  \\    /   O peration     |
 #   \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
-#    \\/     M anipulation  | Copyright (C) 2016-2017 OpenCFD Ltd.
+#    \\/     M anipulation  | Copyright (C) 2016-2018 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
 #     This file is part of OpenFOAM, licensed under GNU General Public License
@@ -11,10 +11,10 @@
 #
 # File
 #     config.csh/paraview
+#     - sourced by OpenFOAM-*/etc/cshrc or via foamPV alias
 #
 # Description
 #     Setup for PARAVIEW (partially cmake, qt too)
-#     Sourced from OpenFOAM-<VERSION>/etc/cshrc or from foamPV alias
 #
 #     For system-wide cmake:            cmake_version=cmake-system
 #     For system-wide qt:               ParaView_QT=qt-system
@@ -54,13 +54,8 @@ if (! $?WM_COMPILER_LIB_ARCH ) setenv WM_COMPILER_LIB_ARCH
 set archDir="$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER"
 
 # Clean PATH and LD_LIBRARY_PATH
-set cleaned=`$WM_PROJECT_DIR/bin/foamCleanPath "$PATH" "$ParaView_DIR $archDir/cmake- $archDir/qt- $archDir/ParaView-"`
-if ( $status == 0 ) setenv PATH $cleaned
-
-if ( $?LD_LIBRARY_PATH ) then
-    set cleaned=`$WM_PROJECT_DIR/bin/foamCleanPath "$LD_LIBRARY_PATH" "$ParaView_DIR $archDir/qt- $archDir/ParaView-"`
-    if ( $status == 0 ) setenv LD_LIBRARY_PATH $cleaned
-endif
+eval `$WM_PROJECT_DIR/bin/foamCleanPath -csh-env=PATH "$ParaView_DIR $archDir/ParaView- $archDir/qt- $archDir/cmake-"`
+eval `$WM_PROJECT_DIR/bin/foamCleanPath -csh-env=LD_LIBRARY_PATH "$ParaView_DIR $archDir/ParaView- $archDir/qt-"`
 
 # ThirdParty cmake
 set cmake=$archDir/$cmake_version
diff --git a/etc/config.csh/settings b/etc/config.csh/settings
index 8b7d27e2a3839094976e8a66dccb7318622a6f6c..73cba45fc1efc9f02d7b5e96cf1f1f4cd32471b8 100644
--- a/etc/config.csh/settings
+++ b/etc/config.csh/settings
@@ -3,7 +3,7 @@
 # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
 #  \\    /   O peration     |
 #   \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
-#    \\/     M anipulation  | Copyright (C) 2016-2017 OpenCFD Ltd.
+#    \\/     M anipulation  | Copyright (C) 2016-2018 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
 #     This file is part of OpenFOAM, licensed under GNU General Public License
@@ -11,19 +11,11 @@
 #
 # File
 #     etc/config.csh/settings
+#     - sourced by OpenFOAM-*/etc/cshrc
 #
 # Description
-#     Settings for OpenFOAM, sourced from OpenFOAM-<VERSION>/etc/cshrc
+#     Settings for OpenFOAM
 #
-#------------------------------------------------------------------------------
-
-# Prefix to PATH
-alias _foamAddPath 'setenv PATH \!*\:${PATH}'
-# Prefix to LD_LIBRARY_PATH
-alias _foamAddLib 'setenv LD_LIBRARY_PATH \!*\:${LD_LIBRARY_PATH}'
-# Prefix to MANPATH
-alias _foamAddMan 'setenv MANPATH \!*\:${MANPATH}'
-
 #------------------------------------------------------------------------------
 setenv WM_ARCH `uname -s`                   # System name
 if (! $?WM_OSTYPE ) setenv WM_OSTYPE POSIX  # System type (POSIX is default)
@@ -228,7 +220,7 @@ unsetenv GMP_ARCH_PATH MPFR_ARCH_PATH
 
 # Load pre-defined compiler versions
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-_foamEtc config.csh/compiler
+_foamEtc -config compiler
 
 # ThirdParty base for compilers
 set archDir=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER_ARCH
@@ -263,19 +255,19 @@ GCC_NOT_FOUND
     # Add ThirdParty compiler libraries to run-time environment
     _foamAddLib     $gccDir/lib$WM_COMPILER_LIB_ARCH
 
-    # Add ThirdParty gmp/mpfr/mpc libraries to run-time environment
+    # Add gmp/mpfr/mpc libraries to run-time environment.
+    # Require that they exist, automatically find lib64/ or lib/.
     if ( "${gmpDir:t}" != "gmp-system" ) then
-        _foamAddLib $gmpDir/lib$WM_COMPILER_LIB_ARCH
-        setenv GMP_ARCH_PATH $gmpDir        # For ThirdParty CGAL
+        _foamAddLibAuto $gmpDir
+        setenv GMP_ARCH_PATH $gmpDir    # For non-system CGAL
     endif
     if ( "${mpfrDir:t}" != "mpfr-system" ) then
-        _foamAddLib $mpfrDir/lib$WM_COMPILER_LIB_ARCH
-        setenv MPFR_ARCH_PATH $mpfrDir      # For ThirdParty CGAL
-    endif
-    if ( "${mpcDir:t}" != "mpc-system" ) then
-        _foamAddLib $mpcDir/lib$WM_COMPILER_LIB_ARCH
+        _foamAddLibAuto $mpfrDir
+        setenv MPFR_ARCH_PATH $mpfrDir  # For non-system CGAL
     endif
 
+    _foamAddLibAuto $mpcDir
+
     if ($?FOAM_VERBOSE && $?prompt) then
         echo "Using ThirdParty compiler"
         echo "    ${gccDir:t} (${gmpDir:t} ${mpfrDir:t} ${mpcDir:t})"
@@ -332,6 +324,6 @@ unset archDir
 unset gcc_version gccDir
 unset gmp_version gmpDir  mpfr_version mpfrDir  mpc_version mpcDir
 unset clang_version clangDir
-# Retain: _foamAddPath _foamAddLib _foamAddMan
+# Retain: _foamAddPath _foamAddLib _foamAddMan _foamAddLibAuto
 
 #------------------------------------------------------------------------------
diff --git a/etc/config.csh/tcsh_completion b/etc/config.csh/tcsh_completion
index f183e83387b7c550936bb209bc14f85cd827065c..569353f108127ad088d4c251306c19122892472c 100644
--- a/etc/config.csh/tcsh_completion
+++ b/etc/config.csh/tcsh_completion
@@ -11,6 +11,7 @@
 #
 # File
 #     etc/config.csh/tcsh_completion
+#     - sourced by OpenFOAM-*/etc/cshrc
 #
 # Description
 #     Tcsh completions for OpenFOAM applications
diff --git a/etc/config.csh/unset b/etc/config.csh/unset
index 9d62c3ac3873166b6503578dc61139754d20de53..818a405753d24f78c66100c8a8a75516535e9ba7 100644
--- a/etc/config.csh/unset
+++ b/etc/config.csh/unset
@@ -114,7 +114,7 @@ unsetenv PV_PLUGIN_PATH
 unsetenv VTK_DIR
 
 #------------------------------------------------------------------------------
-# unset other ThirdParty environment variables
+# Unset other ThirdParty environment variables
 
 unsetenv ADIOS_ARCH_PATH
 unsetenv ADIOS1_ARCH_PATH
@@ -136,18 +136,15 @@ unsetenv SCOTCH_ARCH_PATH
 
 if ( $?foamClean ) then
 
-    set cleaned=`$foamClean "$PATH" "$foamOldDirs"`
-    if ( $status == 0 ) setenv PATH $cleaned
+    eval `$foamClean -csh-env=PATH "$foamOldDirs"`
 
     if ($?LD_LIBRARY_PATH) then
-        set cleaned=`$foamClean "$LD_LIBRARY_PATH" "$foamOldDirs"`
-        if ( $status == 0 ) setenv LD_LIBRARY_PATH $cleaned
+        eval `$foamClean -csh-env=LD_LIBRARY_PATH "$foamOldDirs"`
         if ( ${%LD_LIBRARY_PATH} == 0 ) unsetenv LD_LIBRARY_PATH
     endif
 
     if ($?MANPATH) then
-        set cleaned=`$foamClean "$MANPATH" "$foamOldDirs"`
-        if ( $status == 0 ) setenv MANPATH $cleaned
+        eval `$foamClean -csh-env=MANPATH "$foamOldDirs"`
         if ( ${%MANPATH} == 0 ) unsetenv MANPATH
     endif
 
diff --git a/etc/config.csh/vtk b/etc/config.csh/vtk
index 1c660cfbd6603ff4532dc4209b21f5c24f639437..0e027e6d5cde7bb799d90ec9c6504c4800b1d5d6 100644
--- a/etc/config.csh/vtk
+++ b/etc/config.csh/vtk
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.csh/vtk
+#     - sourced by OpenFOAM-*/etc/cshrc
 #
 # Description
 #     Setup file for VTK (and MESA)
-#     Sourced from OpenFOAM-<VERSION>/etc/cshrc
 #
 #     The library path is only adjusted when the paths specified here
 #     actually exist at the time of sourcing.
diff --git a/etc/config.sh/ADIOS b/etc/config.sh/ADIOS
index 92d58a02e6d8ec795c794cbf58c0f30e7ee1ecd6..54534209ddf4fc32d2908753f9a834cfc78df036 100644
--- a/etc/config.sh/ADIOS
+++ b/etc/config.sh/ADIOS
@@ -2,7 +2,7 @@
 # =========                 |
 # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
 #  \\    /   O peration     |
-#   \\  /    A nd           | Copyright (C) 2016-2017 OpenCFD Ltd.
+#   \\  /    A nd           | Copyright (C) 2016-2018 OpenCFD Ltd.
 #    \\/     M anipulation  |
 #------------------------------------------------------------------------------
 # License
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.sh/ADIOS
+#     - sourced by OpenFOAM-*/etc/bashrc
 #
 # Description
 #     Setup for ADIOS include/libraries (usually ThirdParty installation).
-#     Sourced from OpenFOAM-<VERSION>/etc/bashrc
 #
 #     To disable its use:               adios_version=adios-none
 #     For system-wide installations:    adios_version=adios-system
@@ -42,7 +42,7 @@ then
     echo "Using adios ($adios_version)  ->  $ADIOS_ARCH_PATH" 1>&2
 fi
 
-if command -v _foamAddPath >/dev/null 2>&1  # normal sourcing
+if command -v _foamAddPath >/dev/null 2>&1      # Normal sourcing
 then
     # If ADIOS_ARCH_PATH does not end with '-system' or '-none',
     # it is located within ThirdParty, or a central installation
diff --git a/etc/config.sh/ADIOS2 b/etc/config.sh/ADIOS2
index 30677cf644fe474081ada9e7048433f0b0d00c1c..8fe60b0a1175d1f82dbd69e25cc977ede63ea8a0 100644
--- a/etc/config.sh/ADIOS2
+++ b/etc/config.sh/ADIOS2
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.sh/ADIOS2
+#     - sourced by OpenFOAM-*/etc/bashrc
 #
 # Description
 #     Setup for ADIOS2 include/libraries (usually ThirdParty installation).
-#     Sourced from OpenFOAM-<VERSION>/etc/bashrc
 #
 #------------------------------------------------------------------------------
 # USER EDITABLE PART: Changes made here may be lost with the next upgrade
@@ -29,7 +29,7 @@ then
     echo "Using adios ($adios2_version)  ->  $ADIOS2_ARCH_PATH" 1>&2
 fi
 
-if command -v _foamAddPath >/dev/null 2>&1  # normal sourcing
+if command -v _foamAddPath >/dev/null 2>&1      # Normal sourcing
 then
     # If *_ARCH_PATH does not end with '-system' or '-none',
     # it is located within ThirdParty, or a central installation
diff --git a/etc/config.sh/CGAL b/etc/config.sh/CGAL
index abec7c04b3bcb55c821f4e2feb8f88d560e6c752..aaa5470b0be1170c610e2cf5c23b16c02fc40d53 100644
--- a/etc/config.sh/CGAL
+++ b/etc/config.sh/CGAL
@@ -3,7 +3,7 @@
 # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
 #  \\    /   O peration     |
 #   \\  /    A nd           | Copyright (C) 2014-2016 OpenFOAM Foundation
-#    \\/     M anipulation  | Copyright (C) 2016-2017 OpenCFD Ltd.
+#    \\/     M anipulation  | Copyright (C) 2016-2018 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
 #     This file is part of OpenFOAM, licensed under GNU General Public License
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.sh/CGAL
+#     - sourced by OpenFOAM-*/etc/bashrc
 #
 # Description
-#     Setup file for CGAL (& boost) include/libraries.
-#     Sourced from OpenFOAM-<VERSION>/etc/bashrc
+#     Setup CGAL (& boost) include/libraries (usually ThirdParty installation).
 #
 #     To disable its use:
 #         boost_version=boost-none
@@ -29,7 +29,10 @@
 #       2. and provide full paths for BOOST_ARCH_PATH / CGAL_ARCH_PATH
 #
 # Note
-#     When _foamAddLib is unset (eg, called from makeCGAL):
+#     Define GMP_ARCH_PATH and MPFR_ARCH_PATH here, if required and when not
+#     using a ThirdParty gcc.
+#
+#     When _foamAddLibAuto is unset (eg, called from makeCGAL):
 #       - boost_version / cgal_version variables are retained.
 #       - the LD_LIBRARY_PATH is not adjusted.
 #
@@ -52,26 +55,18 @@ then
     echo "Using CGAL ($cgal_version)  ->  $CGAL_ARCH_PATH" 1>&2
 fi
 
-if command -v _foamAddLib > /dev/null 2>&1  # normal sourcing
+if command -v _foamAddLibAuto > /dev/null 2>&1  # Normal sourcing (not makeCGAL)
 then
+    _foamAddLibAuto $BOOST_ARCH_PATH  lib$WM_COMPILER_LIB_ARCH
+    _foamAddLibAuto $CGAL_ARCH_PATH   lib$WM_COMPILER_LIB_ARCH
 
-    # If BOOST_ARCH_PATH, CGAL_ARCH_PATH do not end with '-system' or '-none',
-    # they are either located within ThirdParty, or a central installation
-    # outside of ThirdParty and must be added to the lib-path.
-
-    ending="${BOOST_ARCH_PATH##*-}"
-    if [ "$ending" != none -a "$ending" != system ]
-    then
-        _foamAddLib $BOOST_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH
-    fi
+    # GMP/MPFR may have already been added with ThirdParty compiler, but cannot
+    # be certain so add here. Any duplicates will be removed later.
 
-    ending="${CGAL_ARCH_PATH##*-}"
-    if [ "$ending" != none -a "$ending" != system ]
-    then
-        _foamAddLib $CGAL_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH
-    fi
+    _foamAddLibAuto $GMP_ARCH_PATH   # No fallback libdir
+    _foamAddLibAuto $MPFR_ARCH_PATH  # No fallback libdir
 
-    unset boost_version cgal_version ending
+    unset boost_version cgal_version
 
 fi
 
diff --git a/etc/config.sh/FFTW b/etc/config.sh/FFTW
index ce961f544af19079657bd3090bab160fcd2754e6..854bc819171551ece48d6352dd149ae414c7b8f8 100644
--- a/etc/config.sh/FFTW
+++ b/etc/config.sh/FFTW
@@ -2,7 +2,7 @@
 # =========                 |
 # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
 #  \\    /   O peration     |
-#   \\  /    A nd           | Copyright (C) 2016-2017 OpenCFD Ltd.
+#   \\  /    A nd           | Copyright (C) 2016-2018 OpenCFD Ltd.
 #    \\/     M anipulation  |
 #------------------------------------------------------------------------------
 # License
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.sh/FFTW
+#     - sourced by OpenFOAM-*/etc/bashrc
 #
 # Description
 #     Setup for FFTW include/libraries (usually ThirdParty installation).
-#     Sourced from OpenFOAM-<VERSION>/etc/bashrc
 #
 #     To disable its use:               fftw_version=fftw-none
 #     For system-wide installations:    fftw_version=fftw-system
@@ -24,7 +24,7 @@
 #       2. and provide full path for FFTW_ARCH_PATH
 #
 # Note
-#     When _foamAddLib is unset (eg, called from makeFFTW):
+#     When _foamAddLibAuto is unset (eg, called from makeFFTW):
 #       - fftw_version variable is retained.
 #       - LD_LIBRARY_PATH is not adjusted.
 #
@@ -43,20 +43,12 @@ then
     echo "Using fftw ($fftw_version)  ->  $FFTW_ARCH_PATH" 1>&2
 fi
 
-if command -v _foamAddLib > /dev/null 2>&1  # normal sourcing
+if command -v _foamAddLibAuto > /dev/null 2>&1  # Normal sourcing (not makeFFTW)
 then
 
-    # If FFTW_ARCH_PATH does not end with '-system' or '-none',
-    # it is either located within ThirdParty, or a central installation
-    # outside of ThirdParty and must be added to the lib-path.
+    _foamAddLibAuto $FFTW_ARCH_PATH  lib$WM_COMPILER_LIB_ARCH
 
-    ending="${FFTW_ARCH_PATH##*-}"
-    if [ "$ending" != none -a "$ending" != system ]
-    then
-        _foamAddLib $FFTW_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH
-    fi
-
-    unset fftw_version ending
+    unset fftw_version
 
 fi
 
diff --git a/etc/config.sh/aliases b/etc/config.sh/aliases
index 81b9196b88441bfe02b409fca5cc7c14d4dde29d..088d653ce0b3e0e89fbed556dc1048e570fe8e9e 100644
--- a/etc/config.sh/aliases
+++ b/etc/config.sh/aliases
@@ -3,7 +3,7 @@
 # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
 #  \\    /   O peration     |
 #   \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
-#    \\/     M anipulation  | Copyright (C) 2016 OpenCFD Ltd.
+#    \\/     M anipulation  | Copyright (C) 2016-2018 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
 #     This file is part of OpenFOAM, licensed under GNU General Public License
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.sh/aliases
+#     - sourced by OpenFOAM-*/etc/bashrc (or from the user's ~/.bashrc)
 #
 # Description
-#     Aliases for working with OpenFOAM
-#     Sourced from OpenFOAM-<VERSION>/etc/bashrc and/or ~/.bashrc
+#     Aliases for working with OpenFOAM.
 #
 #------------------------------------------------------------------------------
 
diff --git a/etc/config.sh/bash_completion b/etc/config.sh/bash_completion
index e0117ea48bec0a81fa4e7f0e27fbae11cd4408f3..acd7f9fcd1892dfb6ed01cfc8d399f9f02cf40e2 100644
--- a/etc/config.sh/bash_completion
+++ b/etc/config.sh/bash_completion
@@ -11,6 +11,7 @@
 #
 # File
 #     etc/config.sh/bash_completion
+#     - sourced by OpenFOAM-*/etc/bashrc
 #
 # Description
 #     Bash completion handler for OpenFOAM applications and automatic
diff --git a/etc/config.sh/ccmio b/etc/config.sh/ccmio
index e58250dd0cf6243ea653c7a723fb7abcb66056be..dbf4b5c74989d7d5004f6fb74b2f4f2a3c1ec755 100644
--- a/etc/config.sh/ccmio
+++ b/etc/config.sh/ccmio
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.sh/ccmio
+#     - sourced during wmake process only.
 #
 # Description
 #     Setup for LIBCCMIO include/libraries.
-#     Sourced during wmake process only.
 #
 #     Static libraries (recommended) are found under CCMIO_ARCH_PATH/lib.
 #     Dynamic libraries are found under FOAM_EXT_LIBBIN path.
diff --git a/etc/config.sh/compiler b/etc/config.sh/compiler
index bd16912d13d3ac910b9a146d9c4b14ed96ada8f4..0a5e8f54e354cb372b3e37c961f75441ed33f9df 100644
--- a/etc/config.sh/compiler
+++ b/etc/config.sh/compiler
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.sh/compiler
+#     - sourced by OpenFOAM-*/etc/config.sh/settings
 #
 # Description
 #     Setup for custom compiler versions for OpenFOAM
-#     Sourced from OpenFOAM-<VERSION>/etc/config.sh/settings
 #
 #------------------------------------------------------------------------------
 
diff --git a/etc/config.sh/ensight b/etc/config.sh/ensight
index 6c06f4fa306e8128b1939d61b6b0b1b3fe9d9c6e..933aa6c9df2d03396de201e5879b93ad00dbeddd 100644
--- a/etc/config.sh/ensight
+++ b/etc/config.sh/ensight
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.sh/ensight
+#     - sourced by OpenFOAM-*/etc/bashrc
 #
 # Description
 #     Setup for ENSIGHT
-#     Sourced from OpenFOAM-*/etc/bashrc
 #
 #------------------------------------------------------------------------------
 
diff --git a/etc/config.sh/example/compiler b/etc/config.sh/example/compiler
index 8b3f412db082ae687600409f27b36dc5126ad6ba..3d3d748b4d5ae2bcb17049265fe9ddbf3e70e98d 100644
--- a/etc/config.sh/example/compiler
+++ b/etc/config.sh/example/compiler
@@ -11,15 +11,15 @@
 #
 # File
 #     config.sh/example/compiler
+#     - sourced by OpenFOAM-*/etc/config.sh/settings
 #
 # Description
 #     Example of fine tuning compiler versions and settings for OpenFOAM
-#     Sourced from OpenFOAM-<VERSION>/etc/config.sh/settings
 #
 #------------------------------------------------------------------------------
 
 # Load the standard versions
-eval $($WM_PROJECT_DIR/bin/foamEtcFile -sh -mode=o config.sh/compiler)
+eval $($WM_PROJECT_DIR/bin/foamEtcFile -mode=o -sh -config compiler)
 
 # Modify/override compiler settings
 case "$WM_COMPILER" in
diff --git a/etc/config.sh/example/openmpi b/etc/config.sh/example/openmpi
index 4a6b2ddfd555303db34768fd458f780fc42dc75f..34f31cdbb2192af1d740cf3957def69c85658584 100644
--- a/etc/config.sh/example/openmpi
+++ b/etc/config.sh/example/openmpi
@@ -11,14 +11,13 @@
 #
 # File
 #     config.sh/example/openmpi
+#     - sourced by OpenFOAM-*/etc/config.sh/mpi
 #
 # Description
 #     Example of fine tuning openmpi settings for OpenFOAM
-#     Sourced from OpenFOAM-<VERSION>/etc/config.sh/settings
 #
 #------------------------------------------------------------------------------
 
-# Modified openmpi settings
 export FOAM_MPI=openmpi-3.0.0
 
 #------------------------------------------------------------------------------
diff --git a/etc/config.sh/example/paraview b/etc/config.sh/example/paraview
index 9f045e684c2b88bf654d0e30003ff3bfd241d066..88ae895f8f14fd513542ca391a6cb14230332372 100644
--- a/etc/config.sh/example/paraview
+++ b/etc/config.sh/example/paraview
@@ -22,7 +22,7 @@
 #
 #------------------------------------------------------------------------------
 
-# Use shipped paraview config file (-mode=o) with a different ParaView_VERSION
+# Use standard paraview config file (-mode=o) with a different ParaView_VERSION
 
 foamFile=$($WM_PROJECT_DIR/bin/foamEtcFile -mode=o config.sh/paraview 2>/dev/null)
 [ $? -eq 0 ] && . $foamFile ParaView_VERSION=5.4.0
diff --git a/etc/config.sh/example/prefs.sh b/etc/config.sh/example/prefs.sh
index fc7abeebf5d0fcfe92de02cac429b672192d9461..62cead90d7688d7432f73c6354017e5df4fe65fe 100644
--- a/etc/config.sh/example/prefs.sh
+++ b/etc/config.sh/example/prefs.sh
@@ -11,12 +11,10 @@
 #
 # File
 #     config.sh/example/prefs.sh
+#     - sourced by OpenFOAM-*/etc/bashrc
 #
 # Description
-#     Preset variables for the OpenFOAM configuration - POSIX shell syntax.
-#
-#     The prefs.sh file will be sourced by the OpenFOAM etc/bashrc when it is
-#     found by foamEtcFile.
+#     Example of preset variables for the OpenFOAM configuration (POSIX shell)
 #
 # See also
 #     'foamEtcFile -help' or 'foamEtcFile -list' for information about the
@@ -24,13 +22,8 @@
 #
 #------------------------------------------------------------------------------
 
-#- Compiler location:
-WM_COMPILER_TYPE=ThirdParty
-
-#- Compiler:
+export WM_COMPILER_TYPE=ThirdParty
 export WM_COMPILER=Clang
-
-#- MPI implementation:
 export WM_MPLIB=SYSTEMOPENMPI
 
 #------------------------------------------------------------------------------
diff --git a/etc/config.sh/functions b/etc/config.sh/functions
index 5ebf2222dabf7787c42b6c1d7b70bab1ba7dcf99..99a5ea5b1dd209d1f1cd4308b50f7f9eaa499696 100644
--- a/etc/config.sh/functions
+++ b/etc/config.sh/functions
@@ -3,7 +3,7 @@
 # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
 #  \\    /   O peration     |
 #   \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
-#    \\/     M anipulation  | Copyright (C) 2017 OpenCFD Ltd.
+#    \\/     M anipulation  | Copyright (C) 2017-2018 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
 #     This file is part of OpenFOAM, licensed under GNU General Public License
@@ -11,10 +11,12 @@
 #
 # File
 #     etc/config.sh/functions
+#     - sourced by OpenFOAM-*/etc/bashrc
 #
 # Description
-#     Initialization script functions for the bashrc environment
-#     Sourced from OpenFOAM-<VERSION>/etc/config.sh/bashrc
+#     Shell functions and variables used when sourcing the OpenFOAM environment
+#
+#     Some functionality is shadowed in bin/tools/lib-dir
 #
 #------------------------------------------------------------------------------
 
@@ -25,24 +27,91 @@ then
     # Temporary environment variable to track loading/unloading of functions
     WM_SHELL_FUNCTIONS=loaded
 
-    # Prefix to PATH
+    # Cleaning environment variables
+    foamClean=$WM_PROJECT_DIR/bin/foamCleanPath
+
+    # Cleaning environment variables
+    _foamClean()
+    {
+         local var=$1
+         shift
+         eval $($WM_PROJECT_DIR/bin/foamCleanPath -sh-env=$var "$@")
+    }
+
+    # Prepend PATH
     _foamAddPath()
     {
-        [ $# -gt 0 ] && export PATH=$1:$PATH
+        [ -n "$1" ] && export PATH=$1:$PATH
     }
 
-    # Prefix to LD_LIBRARY_PATH
+    # Prepend MANPATH
+    _foamAddMan()
+    {
+        [ -n "$1" ] && export MANPATH=$1:$MANPATH
+    }
+
+    # Prepend LD_LIBRARY_PATH
     _foamAddLib()
     {
-        [ $# -gt 0 ] && export LD_LIBRARY_PATH=$1:$LD_LIBRARY_PATH
+        [ -n "$1" ] && export LD_LIBRARY_PATH=$1:$LD_LIBRARY_PATH
     }
 
-    # Prefix to MANPATH
-    _foamAddMan()
+    # Prefix to LD_LIBRARY_PATH with additional checking
+    # $1 = base directory for 'lib' or 'lib64'
+    # $2 = fallback libname ('lib' or 'lib64')
+    #
+    # 0) Skip entirely if directory ends in "-none" or "-system".
+    #    These special cases (disabled, system directories) should not require
+    #    adjustment of LD_LIBRARY_PATH
+    # 1) Check for dir/lib64 and dir/lib
+    # 2) Use fallback if the previous failed
+    #
+    # Return 0 on success
+    _foamAddLibAuto()
     {
-        [ $# -gt 0 ] && export MANPATH=$1:$MANPATH
+        # Note ksh doesn't have 'local' thus these ugly variable names
+        foamVar_prefix="$1"
+        foamVar_end="${1##*-}"
+
+        # Do not add (none) or a system directory
+        if [ -z "$foamVar_prefix" -o "$foamVar_end" = none -o "$foamVar_end" = system ]
+        then
+            unset foamVar_prefix foamVar_end
+            return 1
+        elif [ -d "$foamVar_prefix" ]
+        then
+            for foamVar_end in lib$WM_COMPILER_LIB_ARCH lib
+            do
+                if [ -d "$foamVar_prefix/$foamVar_end" ]
+                then
+                    export LD_LIBRARY_PATH=$foamVar_prefix/$foamVar_end:$LD_LIBRARY_PATH
+                    unset foamVar_prefix foamVar_end
+                    return 0
+                fi
+            done
+        fi
+
+        # Use fallback. Add without checking existence of the directory
+        foamVar_end=$2
+        if [ -n "$foamVar_end" ]
+        then
+            case "$foamVar_end" in
+            /*)     # An absolute path
+                export LD_LIBRARY_PATH=$foamVar_end:$LD_LIBRARY_PATH
+                ;;
+            (*)     # Relative to prefix
+                export LD_LIBRARY_PATH=$foamVar_prefix/$foamVar_end:$LD_LIBRARY_PATH
+                ;;
+            esac
+            unset foamVar_prefix foamVar_end
+            return 0
+        fi
+
+        unset foamVar_prefix foamVar_end
+        return 1    # Nothing set
     }
 
+
     # Source an etc file, possibly with some verbosity
     # - use eval to avoid intermediate variables (ksh doesn't have 'local')
     if [ "$FOAM_VERBOSE" -a "$PS1" ]
@@ -87,11 +156,31 @@ then
         done
     }
 
+
+    #--------------------------------------------------------------------------
+    # Avoid any ThirdParty settings that may have 'leaked' into the environment
+
+    unset MPI_ARCH_PATH
+    unset ADIOS_ARCH_PATH
+    unset ADIOS1_ARCH_PATH
+    unset ADIOS2_ARCH_PATH
+    unset BOOST_ARCH_PATH
+    unset CCMIO_ARCH_PATH
+    unset CGAL_ARCH_PATH
+    unset FFTW_ARCH_PATH
+    unset GPERFTOOLS_ARCH_PATH
+    unset GMP_ARCH_PATH
+    unset MPFR_ARCH_PATH
+    unset MESA_ARCH_PATH
+    unset METIS_ARCH_PATH
+    unset SCOTCH_ARCH_PATH
+
 else
     # Was previously loaded/defined - now unset
 
-    unset -f _foamAddPath _foamAddLib _foamAddMan 2>/dev/null
-    unset -f _foamEtc _foamEval 2>/dev/null
+    unset -f _foamAddPath _foamAddMan _foamAddLib _foamAddLibAuto 2>/dev/null
+    unset -f _foamClean _foamEtc _foamEval 2>/dev/null
+    unset foamClean
     unset WM_SHELL_FUNCTIONS
 
 fi
diff --git a/etc/config.sh/gperftools b/etc/config.sh/gperftools
index a4b13ec44bc184966bea029fb45f62efbe8df302..f23ee42bbb059668b72b050d9b712fb789a8006a 100644
--- a/etc/config.sh/gperftools
+++ b/etc/config.sh/gperftools
@@ -3,7 +3,7 @@
 # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
 #  \\    /   O peration     |
 #   \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
-#    \\/     M anipulation  | Copyright (C) 2016 OpenCFD Ltd.
+#    \\/     M anipulation  | Copyright (C) 2016-2018 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
 #     This file is part of OpenFOAM, licensed under GNU General Public License
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.sh/gperftools
+#     - sourced by OpenFOAM-*/etc/bashrc
 #
 # Description
 #     Setup file for GPERFTOOLS binaries/libraries.
-#     Sourced from OpenFOAM-<VERSION>/etc/bashrc
 #
 #     To disable its use:               gperftools_version=gperftools-none
 #     For system-wide installations:    gperftools_version=gperftools-system
@@ -45,7 +45,7 @@ then
     echo "Using gperftools ($gperftools_version)  ->  $GPERFTOOLS_ARCH_PATH" 1>&2
 fi
 
-if command -v _foamAddLib > /dev/null 2>&1  # normal sourcing
+if command -v _foamAddLib > /dev/null 2>&1      # Normal sourcing
 then
 
     # If GPERFTOOLS_ARCH_PATH does not end with '-system' or '-none',
diff --git a/etc/config.sh/kahip b/etc/config.sh/kahip
index 0c764bdc29cc1c496b8c46daae7806c0fa126af0..294db422ee246a5e8a54d7f53a78b0be70a313b0 100644
--- a/etc/config.sh/kahip
+++ b/etc/config.sh/kahip
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.sh/kahip
+#     - sourced during wmake process only.
 #
 # Description
 #     Setup for KAHIP include/libraries (usually ThirdParty installation).
-#     Sourced during wmake process only.
 #
 #     To disable its use:               KAHIP_VERSION=kahip-none
 #     For system-wide installations:    KAHIP_VERSION=kahip-system
diff --git a/etc/config.sh/metis b/etc/config.sh/metis
index cedca16b2aad9a1837ac683b7773d92646bd9bfa..bde5498c44695ce92b7d55030c43d0df351ada13 100644
--- a/etc/config.sh/metis
+++ b/etc/config.sh/metis
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.sh/metis
+#     - sourced during wmake process only.
 #
 # Description
 #     Setup for METIS include/libraries (usually ThirdParty installation).
-#     Sourced during wmake process only.
 #
 #     To disable its use:               METIS_VERSION=metis-none
 #     For system-wide installations:    METIS_VERSION=metis-system
diff --git a/etc/config.sh/mgridgen b/etc/config.sh/mgridgen
index dfa06d066634aaccecab41fcd744e9b3546d702b..1cd825f4765c52ab6f76713fb188f7f74d87cdf7 100644
--- a/etc/config.sh/mgridgen
+++ b/etc/config.sh/mgridgen
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.sh/mgridgen
+#     - sourced during wmake process only.
 #
 # Description
 #     Setup for MGRIDGEN include/libraries (usually ThirdParty installation).
-#     Sourced during wmake process only.
 #
 #     Normally used to specify the MGridGen version and location for a
 #     ThirdParty installation.
diff --git a/etc/config.sh/mpi b/etc/config.sh/mpi
index a0f48693e47f747f3671aa53a381ffdeb3ef1a7b..55e7cda57b91cfaf0a8416ce5d40e128fa0b79f7 100644
--- a/etc/config.sh/mpi
+++ b/etc/config.sh/mpi
@@ -3,7 +3,7 @@
 # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
 #  \\    /   O peration     |
 #   \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
-#    \\/     M anipulation  | Copyright (C) 2017 OpenCFD Ltd.
+#    \\/     M anipulation  | Copyright (C) 2017-2018 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
 #     This file is part of OpenFOAM, licensed under GNU General Public License
@@ -11,10 +11,16 @@
 #
 # File
 #     etc/config.sh/mpi
+#     - sourced by OpenFOAM-*/etc/bashrc
 #
 # Description
 #     Setup for MPI communications library for OpenFOAM
-#     Sourced from OpenFOAM-<VERSION>/etc/bashrc
+#
+#     User adjustments are possible in these files:
+#       - config.sh/openmpi-system
+#       - config.sh/openmpi
+#       - config.sh/mpi-user
+#       - config.sh/mpi-system
 #
 #     For USERMPI, the user is responsible for supplying an appropriate
 #     wmake/rules/General/mplibUSERMPI file and managing all settings
@@ -25,31 +31,41 @@ export FOAM_MPI=dummy  # Fallback value
 
 case "$WM_MPLIB" in
 SYSTEMOPENMPI)
-    # Use the system installed openmpi, get library directory via mpicc
+    # The system installed openmpi, locations discovery via mpicc.
     export FOAM_MPI=openmpi-system
 
     # Undefine OPAL_PREFIX if set to one of the paths on foamOldDirs
-    if [ -z "$($foamClean "$OPAL_PREFIX" "$foamOldDirs")" ]
+    if [ -z "$($foamClean -env=OPAL_PREFIX "$foamOldDirs")" ]
     then
         unset OPAL_PREFIX
     fi
+    _foamEtc -config  openmpi-system            # <- Adjustments (optional)
 
-    # Bit of a hack: strip off 'lib' and assume it is the prefix for openmpi
-    # include files and libraries.
-    libDir=$(mpicc --showme:link | sed -e 's/.*-L\([^ ]*\).*/\1/')
+    # Respect MPI_ARCH_PATH if set to a valid directory (ie, from user adjustments)
+    if [ -d "$MPI_ARCH_PATH" ]
+    then
+        _foamAddLibAuto $MPI_ARCH_PATH
+    else
+        # Slight hack: strip off 'lib' to get presumed prefix for include and libs
+        libDir=$(mpicc --showme:link | sed -e 's/.*-L\([^ ]*\).*/\1/')
 
-    export MPI_ARCH_PATH="${libDir%/*}"
-    _foamAddLib     $libDir
-    unset libDir
+        export MPI_ARCH_PATH="${libDir%/*}"
+        _foamAddLib  $libDir
+        unset libDir
+    fi
     ;;
 
 OPENMPI)
     export FOAM_MPI=openmpi-1.10.4
-    _foamEtc config.sh/openmpi                  # <- Adjustments (optional)
+    _foamEtc -config  openmpi                   # <- Adjustments (optional)
 
-    export MPI_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI
+    # Respect MPI_ARCH_PATH if set to a valid directory (ie, from user adjustments)
+    if [ ! -d "$MPI_ARCH_PATH" ]
+    then
+        export MPI_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI
+    fi
 
-    # Tell OpenMPI where to find its install directory
+    # Inform openmpi where to find its install directory
     export OPAL_PREFIX=$MPI_ARCH_PATH
 
     if [ "$FOAM_VERBOSE" -a "$PS1" ]
@@ -60,23 +76,23 @@ OPENMPI)
     fi
 
     # Could be sourced from ThirdParty with incomplete environment
-    if command -v _foamAddLib > /dev/null 2>&1  # normal sourcing
+    if command -v _foamAddLibAuto > /dev/null 2>&1  # Normal sourcing
     then
         _foamAddPath    $MPI_ARCH_PATH/bin
-        _foamAddLib     $MPI_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH
         _foamAddMan     $MPI_ARCH_PATH/share/man
+        _foamAddLibAuto $MPI_ARCH_PATH  lib$WM_COMPILER_LIB_ARCH
     fi
     ;;
 
 USERMPI)
     # Use an arbitrary, user-specified mpi implementation
     export FOAM_MPI=mpi-user
-    _foamEtc config.sh/mpi-user                 # <- Adjustments
+    _foamEtc -config  mpi-user                  # <- Adjustments (optional)
     ;;
 
 SYSTEMMPI)
     export FOAM_MPI=mpi-system
-    _foamEtc config.sh/mpi-system               # <- Adjustments (optional)
+    _foamEtc -config  mpi-system                # <- Adjustments (optional)
 
     if [ -z "$MPI_ROOT" ]
     then
@@ -129,11 +145,11 @@ MPICH)
     export MPI_HOME=$MPI_ARCH_PATH
 
     # Could be sourced from ThirdParty with incomplete environment
-    if command -v _foamAddLib > /dev/null 2>&1  # normal sourcing
+    if command -v _foamAddLibAuto > /dev/null 2>&1  # Normal sourcing
     then
         _foamAddPath    $MPI_ARCH_PATH/bin
-        _foamAddLib     $MPI_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH
         _foamAddMan     $MPI_ARCH_PATH/share/man
+        _foamAddLibAuto $MPI_ARCH_PATH  lib$WM_COMPILER_LIB_ARCH
     fi
     ;;
 
diff --git a/etc/config.sh/paraview b/etc/config.sh/paraview
index 1ccd7e1e13216b75ea02009a805ba13a86c7557e..20f60412d333e12e0555a825e6ea5c3bd74533e6 100644
--- a/etc/config.sh/paraview
+++ b/etc/config.sh/paraview
@@ -3,7 +3,7 @@
 # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
 #  \\    /   O peration     |
 #   \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
-#    \\/     M anipulation  | Copyright (C) 2016-2017 OpenCFD Ltd.
+#    \\/     M anipulation  | Copyright (C) 2016-2018 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
 #     This file is part of OpenFOAM, licensed under GNU General Public License
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.sh/paraview
+#     - sourced by OpenFOAM-*/etc/bashrc or via foamPV alias
 #
 # Description
 #     Setup for PARAVIEW (partially cmake, qt too)
-#     Sourced from OpenFOAM-<VERSION>/etc/bashrc or from foamPV alias
 #
 #     For system-wide cmake:            cmake_version=cmake-system
 #     For system-wide qt:               ParaView_QT=qt-system
@@ -54,16 +54,11 @@ pv_api=auto             # Normally auto or pair of digits (eg, '5.4' etc)
 archDir="$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER"
 
 # Clean PATH and LD_LIBRARY_PATH
-cleaned=$($WM_PROJECT_DIR/bin/foamCleanPath "$PATH" \
-    "$ParaView_DIR $archDir/cmake- $archDir/qt- $archDir/ParaView-" \
-) && PATH="$cleaned"
+eval $($WM_PROJECT_DIR/bin/foamCleanPath -sh-env=PATH \
+    "$ParaView_DIR $archDir/ParaView- $archDir/qt- $archDir/cmake-")
 
-if [ -n "$LD_LIBRARY_PATH" ]
-then
-    cleaned=$($WM_PROJECT_DIR/bin/foamCleanPath "$LD_LIBRARY_PATH" \
-        "$ParaView_DIR $archDir/qt- $archDir/ParaView-" \
-    ) && LD_LIBRARY_PATH="$cleaned"
-fi
+eval $($WM_PROJECT_DIR/bin/foamCleanPath -sh-env=LD_LIBRARY_PATH \
+    "$ParaView_DIR $archDir/ParaView- $archDir/qt-")
 
 # ThirdParty cmake
 cmake=$archDir/$cmake_version
diff --git a/etc/config.sh/scotch b/etc/config.sh/scotch
index 00302dfd35400cb7d846d449bc2836d91ef4db31..d2cb9f059dd29079399f245a8d3b73927c22253e 100644
--- a/etc/config.sh/scotch
+++ b/etc/config.sh/scotch
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.sh/scotch
+#     - sourced during wmake process only.
 #
 # Description
 #     Setup for SCOTCH include/libraries (usually ThirdParty installation).
-#     Sourced during wmake process only.
 #
 #     To disable its use:               SCOTCH_VERSION=scotch-none
 #     For system-wide installations:    SCOTCH_VERSION=scotch-system
diff --git a/etc/config.sh/settings b/etc/config.sh/settings
index 330f197af1fa54efa0ae0374a8da5b49224b8ae7..73de9fa6811e0800a60ea4c0bc1fe5d08bced312 100644
--- a/etc/config.sh/settings
+++ b/etc/config.sh/settings
@@ -3,7 +3,7 @@
 # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
 #  \\    /   O peration     |
 #   \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
-#    \\/     M anipulation  | Copyright (C) 2016-2017 OpenCFD Ltd.
+#    \\/     M anipulation  | Copyright (C) 2016-2018 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
 #     This file is part of OpenFOAM, licensed under GNU General Public License
@@ -11,9 +11,10 @@
 #
 # File
 #     etc/config.sh/settings
+#     - sourced by OpenFOAM-*/etc/bashrc
 #
 # Description
-#     Settings for OpenFOAM, sourced from OpenFOAM-<VERSION>/etc/bashrc
+#     Settings for OpenFOAM.
 #
 #------------------------------------------------------------------------------
 export WM_ARCH=$(uname -s)                  # System name
@@ -216,7 +217,7 @@ unset GMP_ARCH_PATH MPFR_ARCH_PATH
 
 # Load pre-defined compiler versions
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-_foamEtc config.sh/compiler
+_foamEtc -config compiler
 
 # ThirdParty base for compilers
 archDir=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER_ARCH
@@ -246,21 +247,15 @@ GCC_NOT_FOUND
     # Add ThirdParty compiler libraries to run-time environment
     _foamAddLib     $gccDir/lib$WM_COMPILER_LIB_ARCH
 
-    # Add ThirdParty gmp/mpfr/mpc libraries to run-time environment
-    if [ "${gmpDir##*-}" != system ]
-    then
-        _foamAddLib $gmpDir/lib$WM_COMPILER_LIB_ARCH
-        export GMP_ARCH_PATH=$gmpDir        # For ThirdParty CGAL
-    fi
-    if [ "${mpfrDir##*-}" != system ]
-    then
-        _foamAddLib $mpfrDir/lib$WM_COMPILER_LIB_ARCH
-        export MPFR_ARCH_PATH=$mpfrDir      # For ThirdParty CGAL
-    fi
-    if [ "${mpcDir##*-}" != system ]
-    then
-        _foamAddLib $mpcDir/lib$WM_COMPILER_LIB_ARCH
-    fi
+    # Add gmp/mpfr/mpc libraries to run-time environment.
+    # Require that they exist, automatically find lib64/ or lib/.
+    _foamAddLibAuto $gmpDir   && \
+        export GMP_ARCH_PATH=$gmpDir    # For non-system CGAL
+
+    _foamAddLibAuto $mpfrDir && \
+        export MPFR_ARCH_PATH=$mpfrDir  # For non-system CGAL
+
+    _foamAddLibAuto $mpcDir
 
     if [ "$FOAM_VERBOSE" -a "$PS1" ]
     then
diff --git a/etc/config.sh/unset b/etc/config.sh/unset
index d5d4a8530e33649679fe4278d26e50ecc1b5b0b4..d1df193478f450a1b7c5e38474c52ace185fc0e7 100644
--- a/etc/config.sh/unset
+++ b/etc/config.sh/unset
@@ -3,7 +3,7 @@
 # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
 #  \\    /   O peration     |
 #   \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
-#    \\/     M anipulation  | Copyright (C) 2016-2017 OpenCFD Ltd.
+#    \\/     M anipulation  | Copyright (C) 2016-2018 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
 #     This file is part of OpenFOAM, licensed under GNU General Public License
@@ -93,7 +93,7 @@ unset MPI_ARCH_PATH
 unset MPI_BUFFER_SIZE
 
 # Undefine OPAL_PREFIX if set to one of the paths on foamOldDirs
-if [ -z "$($foamClean "$OPAL_PREFIX" "$foamOldDirs")" ]
+if [ -z "$($foamClean -env=OPAL_PREFIX "$foamOldDirs")" ]
 then
     unset OPAL_PREFIX
 fi
@@ -110,7 +110,7 @@ unset PV_PLUGIN_PATH
 unset VTK_DIR
 
 #------------------------------------------------------------------------------
-# unset other ThirdParty environment variables
+# Unset other ThirdParty environment variables
 
 unset ADIOS_ARCH_PATH
 unset ADIOS1_ARCH_PATH
@@ -133,9 +133,9 @@ unset SCOTCH_ARCH_PATH
 
 if [ -n "$foamClean" ]
 then
-    cleaned=$($foamClean "$PATH" "$foamOldDirs") && PATH="$cleaned"
-    cleaned=$($foamClean "$LD_LIBRARY_PATH" "$foamOldDirs") && LD_LIBRARY_PATH="$cleaned"
-    cleaned=$($foamClean "$MANPATH" "$foamOldDirs") && MANPATH="$cleaned"
+    eval $($foamClean -sh-env=PATH "$foamOldDirs")
+    eval $($foamClean -sh-env=LD_LIBRARY_PATH "$foamOldDirs")
+    eval $($foamClean -sh-env=MANPATH "$foamOldDirs")
 fi
 
 [ -n "$LD_LIBRARY_PATH" ] || unset LD_LIBRARY_PATH
diff --git a/etc/config.sh/vtk b/etc/config.sh/vtk
index 3e73ce564dba0ca4273f4ce9218af16be17f09ce..add026831a0a3be56894b5e73c5bd70a2ac9559f 100644
--- a/etc/config.sh/vtk
+++ b/etc/config.sh/vtk
@@ -11,10 +11,10 @@
 #
 # File
 #     etc/config.sh/vtk
+#     - sourced by OpenFOAM-*/etc/bashrc
 #
 # Description
 #     Setup file for VTK (and MESA)
-#     Sourced from OpenFOAM-<VERSION>/etc/bashrc
 #
 #     The library path is only adjusted when the paths specified here
 #     actually exist at the time of sourcing.
diff --git a/etc/cshrc b/etc/cshrc
index 4dc34be99e9f64c6923ae1b8fb8a76bba09097c9..a678eda3c11960c3054503650476688d2685a0e5 100644
--- a/etc/cshrc
+++ b/etc/cshrc
@@ -3,7 +3,7 @@
 # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
 #  \\    /   O peration     |
 #   \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
-#    \\/     M anipulation  | Copyright (C) 2016-2017 OpenCFD Ltd.
+#    \\/     M anipulation  | Copyright (C) 2016-2018 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
 #     This file is part of OpenFOAM, licensed under GNU General Public License
@@ -136,12 +136,8 @@ endif
 # [WM_PROJECT_USER_DIR] - Location of user files
 setenv WM_PROJECT_USER_DIR $HOME/$WM_PROJECT/$LOGNAME-$WM_PROJECT_VERSION
 
-# Source an etc file, possibly with some verbosity
-if ($?FOAM_VERBOSE && $?prompt) then
-    alias _foamEtc 'eval `$WM_PROJECT_DIR/bin/foamEtcFile -csh-verbose \!*`'
-else
-    alias _foamEtc 'eval `$WM_PROJECT_DIR/bin/foamEtcFile -csh \!*`'
-endif
+# Load shell "functions" (actually aliases)
+source $WM_PROJECT_DIR/etc/config.csh/functions
 
 # Override definitions via prefs, with 'other' first so the sys-admin
 # can provide base values independent of WM_PROJECT_SITE
@@ -181,68 +177,53 @@ while ( $#argv > 0 )
 end
 
 
-# Clean standard environment variables (PATH, LD_LIBRARY_PATH, MANPATH)
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-set foamClean=$WM_PROJECT_DIR/bin/foamCleanPath
-
+# Clean standard environment variables (PATH, MANPATH, LD_LIBRARY_PATH)
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 # Prevent local variables from shadowing setenv variables
 unset PATH MANPATH LD_LIBRARY_PATH LD_PRELOAD
-
 if (! $?LD_LIBRARY_PATH ) setenv LD_LIBRARY_PATH
 if (! $?MANPATH ) setenv MANPATH
 
-# Clean PATH (path)
-set cleaned=`$foamClean "$PATH" "$foamOldDirs"`
-if ( $status == 0 ) setenv PATH $cleaned
-
-# Clean LD_LIBRARY_PATH
-set cleaned=`$foamClean "$LD_LIBRARY_PATH" "$foamOldDirs"`
-if ( $status == 0 ) setenv LD_LIBRARY_PATH $cleaned
-
-# Clean MANPATH
-set cleaned=`$foamClean "$MANPATH" "$foamOldDirs"`
-if ( $status == 0 ) setenv MANPATH $cleaned
+_foamClean PATH "$foamOldDirs"
+_foamClean MANPATH "$foamOldDirs"
+_foamClean LD_LIBRARY_PATH "$foamOldDirs"
 
 
 # Setup for OpenFOAM compilation etc
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-_foamEtc config.csh/settings
+_foamEtc -config  settings
 
 # Setup for third-party packages
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-_foamEtc config.csh/mpi
-_foamEtc config.csh/paraview
-_foamEtc config.csh/vtk
-_foamEtc config.csh/ensight
-## _foamEtc config.csh/ADIOS
-_foamEtc config.csh/CGAL
-_foamEtc config.csh/FFTW
+_foamEtc -config  mpi
+_foamEtc -config  paraview
+_foamEtc -config  vtk
+_foamEtc -config  ensight
+## _foamEtc -config  ADIOS
+_foamEtc -config  CGAL
+_foamEtc -config  FFTW
 
 # Interactive shell
 if ($?prompt) then
-    _foamEtc config.csh/aliases
-    _foamEtc config.csh/tcsh_completion
+    _foamEtc -config  aliases
+    _foamEtc -config  tcsh_completion
 endif
 
 
 # Clean environment paths again. Only remove duplicates
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-# Clean PATH (path)
-set cleaned=`$foamClean "$PATH"`
-if ( $status == 0 ) setenv PATH $cleaned
 
-# Clean LD_LIBRARY_PATH
-set cleaned=`$foamClean "$LD_LIBRARY_PATH"`
-if ( $status == 0 ) setenv LD_LIBRARY_PATH $cleaned
+_foamClean PATH
+_foamClean MANPATH
+_foamClean LD_LIBRARY_PATH
 
-# Clean MANPATH (trailing ':' to find system pages)
-set cleaned=`$foamClean "$MANPATH"`
-if ( $status == 0 ) setenv MANPATH "${cleaned}:"
+# Add trailing ':' for system manpages
+if ( $?MANPATH ) then
+    setenv MANPATH "${MANPATH}:"
+endif
 
-# Clean LD_PRELOAD
 if ( $?LD_PRELOAD ) then
-    set cleaned=`$foamClean "$LD_PRELOAD"`
-    if ( $status == 0 ) setenv LD_PRELOAD $cleaned
+    _foamClean LD_PRELOAD
 endif
 
 
@@ -250,11 +231,14 @@ endif
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 # Unload shell "functions"
+unalias _foamClean
 unalias _foamEtc
 unalias _foamAddPath
-unalias _foamAddLib
 unalias _foamAddMan
+unalias _foamAddLib
+unalias _foamAddLibAuto
 
-unset cleaned foamClean foamOldDirs
+# Variables (done as the last statement for a clean exit code)
+unset cleaned foamOldDirs
 
 #------------------------------------------------------------------------------