diff --git a/bin/foamEtcFile b/bin/foamEtcFile
new file mode 100755
index 000000000..e2d27ac81
--- /dev/null
+++ b/bin/foamEtcFile
@@ -0,0 +1,293 @@
+#!/bin/sh
+#------------------------------------------------------------------------------
+# ========= |
+# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+# \\ / O peration |
+# \\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
+# \\/ M anipulation |
+#-------------------------------------------------------------------------------
+# License
+# This file is part of OpenFOAM.
+#
+# OpenFOAM is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with OpenFOAM. If not, see .
+#
+# Script
+# foamEtcFile
+#
+# Description
+# Locate user/group/shipped file with semantics similar to the
+# ~OpenFOAM/fileName expansion.
+#
+# The -mode option can be used to allow chaining from
+# personal settings to site-wide settings.
+#
+# For example, within the user ~/.OpenFOAM//prefs.sh:
+# \code
+# foamPrefs=`$WM_PROJECT_DIR/bin/foamEtcFile -m go prefs.sh` \
+# && _foamSource $foamPrefs
+# \endcode
+#
+# Note
+# This script must exist in $FOAM_INST_DIR/OpenFOAM-/bin/
+# or $FOAM_INST_DIR/openfoam/bin/ (for the debian version)
+#
+#-------------------------------------------------------------------------------
+usage() {
+ [ "${optQuiet:-$optSilent}" = true ] && exit 1
+
+ exec 1>&2
+ while [ "$#" -ge 1 ]; do echo "$1"; shift; done
+ cat< any combination of u(user), g(group), o(other)
+ -prefix specify an alternative installation prefix
+ -quiet suppress all normal output
+ -silent suppress all stderr output
+ -version specify an alternative OpenFOAM version
+ in the form Maj.Min.Rev (eg, 1.7.0)
+ -help print the usage
+
+ Locate user/group/shipped file with semantics similar to the
+ ~OpenFOAM/fileName expansion.
+
+ The options can also be specified as a single character
+ (eg, '-q' instead of '-quiet'), but must not be grouped.
+
+ Exit status
+ 0 when the file is found. Print resolved path to stdout.
+ 1 for miscellaneous errors.
+ 2 when the file is not found.
+
+USAGE
+ exit 1
+}
+
+#-------------------------------------------------------------------------------
+
+# the bin dir:
+binDir="${0%/*}"
+
+# the project dir:
+projectDir="${binDir%/bin}"
+
+# the prefix dir (same as $FOAM_INST_DIR):
+prefixDir="${projectDir%/*}"
+
+# the name used for the project directory
+projectDirName="${projectDir##*/}"
+
+# version number used for debian packaging
+unset versionNum
+
+#
+# handle standard and debian naming convention
+#
+case "$projectDirName" in
+OpenFOAM-*) # standard naming convention OpenFOAM-
+ version="${projectDirName##OpenFOAM-}"
+ ;;
+
+openfoam[0-9]* | openfoam-dev) # debian naming convention 'openfoam'
+ versionNum="${projectDirName##openfoam}"
+ case "$versionNum" in
+ ??) # convert 2 digit version number to decimal delineated
+ version=$(echo "$versionNum" | sed -e 's@\(.\)\(.\)@\1.\2@')
+ ;;
+ ???) # convert 3 digit version number to decimal delineated
+ version=$(echo "$versionNum" | sed -e 's@\(.\)\(.\)\(.\)@\1.\2.\3@')
+ ;;
+ ????) # convert 4 digit version number to decimal delineated
+ version=$(echo "$versionNum" | sed -e 's@\(.\)\(.\)\(.\)\(.\)@\1.\2.\3.\4@')
+ ;;
+ *) # failback - use current environment setting
+ version="$WM_PROJECT_VERSION"
+ ;;
+ esac
+ ;;
+
+*)
+ echo "Error : unknown/unsupported naming convention"
+ exit 1
+ ;;
+esac
+
+
+# default mode is 'ugo'
+mode=ugo
+unset optAll optList optQuiet optSilent
+
+# parse options
+while [ "$#" -gt 0 ]
+do
+ case "$1" in
+ -h | -help)
+ usage
+ ;;
+ -a | -all)
+ optAll=true
+ ;;
+ -l | -list)
+ optList=true
+ ;;
+ -m | -mode)
+ [ "$#" -ge 2 ] || usage "'$1' option requires an argument"
+ mode="$2"
+
+ # sanity check:
+ case "$mode" in
+ *u* | *g* | *o* )
+ ;;
+ *)
+ usage "'$1' option with invalid mode '$mode'"
+ ;;
+ esac
+ shift
+ ;;
+ -p | -prefix)
+ [ "$#" -ge 2 ] || usage "'$1' option requires an argument"
+ prefixDir="$2"
+ shift
+ ;;
+ -q | -quiet)
+ optQuiet=true
+ ;;
+ -s | -silent)
+ optSilent=true
+ ;;
+ -v | -version)
+ [ "$#" -ge 2 ] || usage "'$1' option requires an argument"
+ version="$2"
+ # convert x.y.z -> xyz version (if installation looked like debian)
+ if [ -n "$versionNum" ]
+ then
+ versionNum=$(echo "$version" | sed -e 's@\.@@g')
+ fi
+ shift
+ ;;
+ --)
+ shift
+ break
+ ;;
+ -*)
+ usage "unknown option: '$*'"
+ ;;
+ *)
+ break
+ ;;
+ esac
+ shift
+done
+
+
+# debugging:
+# echo "Installed locations:"
+# for i in projectDir prefixDir projectDirName version versionNum
+# do
+# eval echo "$i=\$$i"
+# done
+
+
+# Save the essential bits of information
+# silently remove leading ~OpenFOAM/ (used in Foam::findEtcFile)
+nArgs=$#
+fileName="${1#~OpenFOAM/}"
+
+# Define the various places to be searched:
+unset dirList
+case "$mode" in
+*u*) # user
+ userDir="$HOME/.${WM_PROJECT:-OpenFOAM}"
+ dirList="$dirList $userDir/$version $userDir"
+ ;;
+esac
+
+case "$mode" in
+*g*) # group (site)
+ siteDir="${WM_PROJECT_SITE:-$prefixDir/site}"
+ dirList="$dirList $siteDir/$version $siteDir"
+ ;;
+esac
+
+case "$mode" in
+*o*) # other (shipped)
+ if [ -n "$versionNum" ]
+ then
+ # debian packaging
+ dirList="$dirList $prefixDir/openfoam$versionNum/etc"
+ else
+ # standard packaging
+ dirList="$dirList $prefixDir/${WM_PROJECT:-OpenFOAM}-$version/etc"
+ fi
+ ;;
+esac
+set -- $dirList
+
+
+#
+# The main routine
+#
+
+exitCode=0
+if [ "$optList" = true ]
+then
+
+ # list directories, or potential file locations
+ [ "$nArgs" -le 1 ] || usage
+
+ # a silly combination, but -quiet does have precedence
+ [ "$optQuiet" = true ] && exit 0
+
+ for dir
+ do
+ if [ "$nArgs" -eq 1 ]
+ then
+ echo "$dir/$fileName"
+ else
+ echo "$dir"
+ fi
+ done
+
+else
+
+ [ "$nArgs" -eq 1 ] || usage
+
+ # general error, eg file not found
+ exitCode=2
+
+ for dir
+ do
+ if [ -f "$dir/$fileName" ]
+ then
+ exitCode=0
+ if [ "$optQuiet" = true ]
+ then
+ break
+ else
+ echo "$dir/$fileName"
+ [ "$optAll" = true ] || break
+ fi
+ fi
+ done
+
+fi
+
+
+exit $exitCode
+
+#------------------------------------------------------------------------------