diff --git a/etc/bashrc b/etc/bashrc
index 94e01d6a18abf10bb3ab3f77e36209ddaea919b5..91da6b9e1b57963608db52410989dabc0884c782 100644
--- a/etc/bashrc
+++ b/etc/bashrc
@@ -136,10 +136,10 @@ export WM_PROJECT_USER_DIR=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION
 . $WM_PROJECT_DIR/etc/config.sh/functions
 
 # Add in preset user or site preferences:
-_foamSource $($WM_PROJECT_DIR/bin/foamEtcFile prefs.sh)
+_foamSourceEtc prefs.sh
 
-# Evaluate command-line parameters and record settings for later
-# these can be used to set/unset values, or specify alternative pref files
+# Evaluate command-line parameters and record settings for later.
+# These can be used to set/unset values, or specify alternative pref files.
 export FOAM_SETTINGS="$@"
 _foamEval $@
 
@@ -162,22 +162,22 @@ export PATH LD_LIBRARY_PATH MANPATH
 
 # Source project setup files
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~
-_foamSource $WM_PROJECT_DIR/etc/config.sh/settings
-_foamSource $WM_PROJECT_DIR/etc/config.sh/aliases
+_foamSourceEtc config.sh/settings
+_foamSourceEtc config.sh/aliases
 
 
 # Source user setup files for optional packages
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-_foamSource $($WM_PROJECT_DIR/bin/foamEtcFile config.sh/mpi)
-_foamSource $($WM_PROJECT_DIR/bin/foamEtcFile config.sh/paraview)
-_foamSource $($WM_PROJECT_DIR/bin/foamEtcFile config.sh/vtk)
-_foamSource $($WM_PROJECT_DIR/bin/foamEtcFile config.sh/ensight)
-_foamSource $($WM_PROJECT_DIR/bin/foamEtcFile config.sh/gperftools)
-
-##_foamSource $($WM_PROJECT_DIR/bin/foamEtcFile config.sh/ADIOS)
-_foamSource $($WM_PROJECT_DIR/bin/foamEtcFile config.sh/CGAL)
-_foamSource $($WM_PROJECT_DIR/bin/foamEtcFile config.sh/scotch)
-_foamSource $($WM_PROJECT_DIR/bin/foamEtcFile config.sh/FFTW)
+_foamSourceEtc config.sh/mpi
+_foamSourceEtc config.sh/paraview
+_foamSourceEtc config.sh/vtk
+_foamSourceEtc config.sh/ensight
+_foamSourceEtc config.sh/gperftools
+
+#_foamSourceEtc config.sh/ADIOS
+_foamSourceEtc config.sh/CGAL
+_foamSourceEtc config.sh/scotch
+_foamSourceEtc config.sh/FFTW
 
 
 # Clean environment paths again. Only remove duplicates
diff --git a/etc/config.csh/mpi b/etc/config.csh/mpi
index c56bbab3f922557f2a2013b88bc4b0560ead9da5..dca6ff23f7c2afa34e4629124f218e096423cab1 100644
--- a/etc/config.csh/mpi
+++ b/etc/config.csh/mpi
@@ -53,7 +53,7 @@ case SYSTEMOPENMPI:
 case OPENMPI:
     setenv FOAM_MPI openmpi-1.10.4
     # Optional configuration tweaks:
-    _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/openmpi`
+    _foamSourceEtc config.csh/openmpi
 
     setenv MPI_ARCH_PATH $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI
 
diff --git a/etc/config.csh/settings b/etc/config.csh/settings
index 74da787d227539bfd3e34cd4acbfe4a0f03b18d5..3a668acf2d15930f7634ba498aad213c72bd3eea 100644
--- a/etc/config.csh/settings
+++ b/etc/config.csh/settings
@@ -212,7 +212,7 @@ if ( ! $?WM_COMPILER_TYPE ) setenv WM_COMPILER_TYPE system
 
 # Load configured compiler versions, regardless of the compiler type
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/compiler`
+_foamSourceEtc config.csh/compiler
 
 switch ("$WM_COMPILER_TYPE")
 case system:
diff --git a/etc/config.sh/functions b/etc/config.sh/functions
index cf025c4023357cf50bdcefd22d1cb5220451a941..edc316528879eafaf44fd30993aff62076fdb10b 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  |
+#    \\/     M anipulation  | Copyright (C) 2017 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
 #     This file is part of OpenFOAM.
@@ -36,20 +36,31 @@ then
     # Temporary environment variable for automatically (un)loading functions
     WM_BASH_FUNCTIONS=loaded
 
-    # Source files, possibly with some verbosity
+    # Source a file, possibly with some verbosity
     _foamSource()
     {
-        while [ $# -ge 1 ]
-        do
-            [ "$FOAM_VERBOSE" -a "$PS1" ] && echo "Sourcing: $1" 1>&2
+        if [ $# -gt 0 -a -f "$1" ]
+        then
+            [ "$FOAM_VERBOSE" -a "$PS1" ] && echo "Using: $1" 1>&2
             . $1
-            shift
-        done
+        fi
+    }
+
+    # Source an etc file, possibly with some verbosity
+    _foamSourceEtc()
+    {
+        local file
+        if [ $# -gt 0 ] && file=$($WM_PROJECT_DIR/bin/foamEtcFile "$@")
+        then
+            [ "$FOAM_VERBOSE" -a "$PS1" ] && echo "Using: $file" 1>&2
+            . $file
+        fi
     }
 
     # Evaluate command-line parameters
     _foamEval()
     {
+        local file
         while [ $# -gt 0 ]
         do
             case "$1" in
@@ -71,9 +82,10 @@ then
                 # Filename: source it
                 if [ -f "$1" ]
                 then
-                    _foamSource "$1"
+                    [ "$FOAM_VERBOSE" -a "$PS1" ] && echo "Using: $1" 1>&2
+                    . "$1"
                 else
-                    _foamSource $($WM_PROJECT_DIR/bin/foamEtcFile -silent "$1")
+                    _foamSourceEtc -silent "$1"
                 fi
                 ;;
             esac
@@ -84,31 +96,19 @@ then
     # Prefix to PATH
     _foamAddPath()
     {
-        while [ $# -ge 1 ]
-        do
-            export PATH=$1:$PATH
-            shift
-        done
+        [ $# -gt 0 ] && export PATH=$1:$PATH;
     }
 
     # Prefix to LD_LIBRARY_PATH
     _foamAddLib()
     {
-        while [ $# -ge 1 ]
-        do
-            export LD_LIBRARY_PATH=$1:$LD_LIBRARY_PATH
-            shift
-        done
+        [ $# -gt 0 ] && export LD_LIBRARY_PATH=$1:$LD_LIBRARY_PATH
     }
 
     # Prefix to MANPATH
     _foamAddMan()
     {
-        while [ $# -ge 1 ]
-        do
-            export MANPATH=$1:$MANPATH
-            shift
-        done
+        [ $# -gt 0 ] && export MANPATH=$1:$MANPATH
     }
 
 else
@@ -117,6 +117,9 @@ else
     # ~~~~~~~~~~~~~~~~~~~~
     unset WM_BASH_FUNCTIONS
     unset -f _foamAddPath _foamAddLib _foamAddMan
-    unset -f _foamSource _foamEval
+    unset -f _foamSourceEtc _foamEval
+    unset -f _foamSource
 
 fi
+
+#------------------------------------------------------------------------------
diff --git a/etc/config.sh/mpi b/etc/config.sh/mpi
index 8f01dc20facb84f23b3c76865f8d9bd0afad3c28..d26e5eefb02abefe56570f7fcbe841592dc36862 100644
--- a/etc/config.sh/mpi
+++ b/etc/config.sh/mpi
@@ -56,7 +56,7 @@ SYSTEMOPENMPI)
 OPENMPI)
     export FOAM_MPI=openmpi-1.10.4
     # Optional configuration tweaks:
-    _foamSource $($WM_PROJECT_DIR/bin/foamEtcFile config.sh/openmpi)
+    _foamSourceEtc config.sh/openmpi
 
     export MPI_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI
 
diff --git a/etc/config.sh/settings b/etc/config.sh/settings
index f395db6207bcbcd06b52cb4703876e99dfdeaf86..d342ed47e43d490db631436436273d90ae475480 100644
--- a/etc/config.sh/settings
+++ b/etc/config.sh/settings
@@ -211,7 +211,7 @@ unset GMP_ARCH_PATH MPFR_ARCH_PATH
 
 # Load configured compiler versions, regardless of the compiler type
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-_foamSource $($WM_PROJECT_DIR/bin/foamEtcFile config.sh/compiler)
+_foamSourceEtc config.sh/compiler
 
 case "$WM_COMPILER_TYPE" in
 system)
diff --git a/etc/cshrc b/etc/cshrc
index 3e644242c24a0f2897c99e62707824bd3fcb3be2..e8319d258cf5147f164d66d5ecf5c38841368e58 100644
--- a/etc/cshrc
+++ b/etc/cshrc
@@ -144,20 +144,23 @@ endif
 # ~~~~~~~~~~~~~~~~~~~~~~
 setenv WM_PROJECT_USER_DIR $HOME/$WM_PROJECT/$LOGNAME-$WM_PROJECT_VERSION
 
-
-# Source files, possibly with some verbosity
-alias _foamSource 'if ($?FOAM_VERBOSE && $?prompt) echo "Sourcing: \!*"; if (\!* != "") source \!*'
+# Source etc files, possibly with some verbosity
+if ($?FOAM_VERBOSE && $?prompt) then
+    alias _foamSourceEtc 'eval `$WM_PROJECT_DIR/bin/foamEtcFile -csh-verbose \!*`'
+else
+    alias _foamSourceEtc 'eval `$WM_PROJECT_DIR/bin/foamEtcFile -csh \!*`'
+endif
 
 # Add in preset user or site preferences:
-_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile prefs.csh`
+_foamSourceEtc prefs.csh
 
-# Evaluate command-line parameters and record settings for later
-# these can be used to set/unset values, or specify alternative pref files
+# Evaluate command-line parameters and record settings for later.
+# These can be used to set/unset values, or specify alternative pref files.
 setenv FOAM_SETTINGS "${*}"
 while ( $#argv > 0 )
     switch ($argv[1])
     case -*:
-        # stray option (not meant for us here) -> get out
+        # Stray option (not meant for us here) -> get out
         break
         breaksw
     case *=:
@@ -171,11 +174,12 @@ while ( $#argv > 0 )
         eval "setenv $argv[1]:s/=/ /"
         breaksw
     default:
-        # filename: source it
+        # Filename: source it
         if ( -f "$1" ) then
-            _foamSource "$1"
+            if ($?FOAM_VERBOSE && $?prompt) echo "Using: $1"
+            source "$1"
         else
-            _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile -silent "$1"`
+            _foamSourceEtc -silent "$1"
         endif
         breaksw
     endsw
@@ -208,19 +212,19 @@ if ( $status == 0 ) setenv MANPATH $cleaned
 
 # Source project setup files
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~
-_foamSource $WM_PROJECT_DIR/etc/config.csh/settings
-_foamSource $WM_PROJECT_DIR/etc/config.csh/aliases
+_foamSourceEtc config.csh/settings
+_foamSourceEtc config.csh/aliases
 
 # Source user setup files for optional packages
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/mpi`
-_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/paraview`
-_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/vtk`
-_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/ensight`
+_foamSourceEtc config.csh/mpi
+_foamSourceEtc config.csh/paraview
+_foamSourceEtc config.csh/vtk
+_foamSourceEtc config.csh/ensight
 
-##_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/ADIOS`
-_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/CGAL`
-_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/FFTW`
+#_foamSourceEtc config.csh/ADIOS
+_foamSourceEtc config.csh/CGAL
+_foamSourceEtc config.csh/FFTW
 
 
 # Clean environment paths again. Only remove duplicates
@@ -247,6 +251,6 @@ endif
 # Cleanup environment:
 # ~~~~~~~~~~~~~~~~~~~~
 unset cleaned foamClean foamOldDirs
-unalias _foamSource
+unalias _foamSourceEtc
 
 #------------------------------------------------------------------------------