diff --git a/bin/foamEtcFile b/bin/foamEtcFile
index 20b5be0fedf56828b9adb63e91e37c187874a090..a6859b6ae5a1a4f52e4b4084937acf8c1c0016de 100755
--- a/bin/foamEtcFile
+++ b/bin/foamEtcFile
@@ -204,15 +204,15 @@ fileName="${1#~OpenFOAM/}"
 unset dirList
 case "$mode" in
 *u*)  # user
-    dirList="$dirList $HOME/.${WM_PROJECT:-OpenFOAM}/$version"
-    dirList="$dirList $HOME/.${WM_PROJECT:-OpenFOAM}"
+    userDir="$HOME/.${WM_PROJECT:-OpenFOAM}"
+    dirList="$dirList $userDir/$version $userDir"
     ;;
 esac
 
 case "$mode" in
-*g*)  # group
-    dirList="$dirList $prefixDir/site/$version"
-    dirList="$dirList $prefixDir/site"
+*g*)  # group (site)
+    siteDir="${WM_PROJECT_SITE:-$prefixDir/site}"
+    dirList="$dirList $siteDir/$version $siteDir"
     ;;
 esac
 
diff --git a/bin/foamLog b/bin/foamLog
index b5ca4900b0caa6fe9ea851e2463db9f5c524c44d..c86dce622da99aa4c2cb7abf6748b61cc41b18b9 100755
--- a/bin/foamLog
+++ b/bin/foamLog
@@ -33,6 +33,8 @@
 #------------------------------------------------------------------------------
 Script=${0##*/}
 toolsDir=${0%/*}/tools
+siteDir=${WM_PROJECT_SITE:-${WM_PROJECT_INST_DIR:-<unknown>}/site}
+userDir=$HOME/.OpenFOAM
 
 usage() {
     exec 1>&2
@@ -84,10 +86,10 @@ The value taken will be the first (non-space)word after this column.
 The database ($Script.db) will taken from these locations:
 
     .
-    $HOME/.OpenFOAM/$WM_PROJECT_VERSION
-    $HOME/.OpenFOAM
-    $WM_PROJECT_INST_DIR/site/$WM_PROJECT_VERSION
-    $WM_PROJECT_INST_DIR/site
+    $userDir/$WM_PROJECT_VERSION
+    $userDir
+    $siteDir/$WM_PROJECT_VERSION
+    $siteDir
     $WM_PROJECT_DIR/etc
     $toolsDir
 
diff --git a/bin/foamNewCase b/bin/foamNewCase
index fda86b4bddaafabeca9c4ffa3dd6d3e7396cf6e7..3abbd76e1ef84b10b9fea0367d78fb465f8c7c12 100755
--- a/bin/foamNewCase
+++ b/bin/foamNewCase
@@ -30,7 +30,7 @@
 #     - requires rsync
 #
 #------------------------------------------------------------------------------
-siteDir=${WM_PROJECT_INST_DIR:-unknown}/site
+siteDir=${WM_PROJECT_SITE:-${WM_PROJECT_INST_DIR:-<unknown>}/site}
 userDir=$HOME/.OpenFOAM
 version=${WM_PROJECT_VERSION:-unknown}
 templateDir="appTemplates"
diff --git a/etc/aliases.csh b/etc/aliases.csh
index 76baa715855e3e481c93ba5b0556fc1a32f57cd5..314810bef659e79397c73367941a4108b2256c24 100644
--- a/etc/aliases.csh
+++ b/etc/aliases.csh
@@ -67,6 +67,11 @@ alias foamSol 'cd $FOAM_SOLVERS'
 alias foamTuts 'cd $FOAM_TUTORIALS'
 alias foamUtils 'cd $FOAM_UTILITIES'
 alias foam3rdParty 'cd $WM_THIRD_PARTY_DIR'
-alias foamSite 'cd $WM_PROJECT_INST_DIR/site'
+
+if ( $?WM_PROJECT_SITE ) then
+    alias foamSite 'cd $WM_PROJECT_SITE'
+else
+    alias foamSite 'cd $WM_PROJECT_INST_DIR/site'
+endif
 
 # -----------------------------------------------------------------------------
diff --git a/etc/aliases.sh b/etc/aliases.sh
index c3d05d4a72a4ea89f92cc2f2f4f0761e23b8d1de..2f3898a90ecc12e09d7e282918452b71741e9fdf 100644
--- a/etc/aliases.sh
+++ b/etc/aliases.sh
@@ -72,6 +72,12 @@ alias foamSol='cd $FOAM_SOLVERS'
 alias foamTuts='cd $FOAM_TUTORIALS'
 alias foamUtils='cd $FOAM_UTILITIES'
 alias foam3rdParty='cd $WM_THIRD_PARTY_DIR'
-alias foamSite='cd $WM_PROJECT_INST_DIR/site'
+
+if [ -n "$WM_PROJECT_SITE" ]
+then
+    alias foamSite='cd $WM_PROJECT_SITE'
+else
+    alias foamSite='cd $WM_PROJECT_INST_DIR/site'
+fi
 
 # -----------------------------------------------------------------------------
diff --git a/etc/settings.csh b/etc/settings.csh
index 5a6b6c273a78b9424eca62966190ae3864afe343..ae4da934d9efd4aaf8f653b1d608a4b85911e5af 100644
--- a/etc/settings.csh
+++ b/etc/settings.csh
@@ -148,6 +148,9 @@ setenv FOAM_LIBBIN $WM_PROJECT_DIR/platforms/$WM_OPTIONS/lib
 # external (ThirdParty) libraries
 setenv FOAM_EXT_LIBBIN $WM_THIRD_PARTY_DIR/platforms/$WM_OPTIONS/lib
 
+# default location of site-specific templates etc
+# setenv WM_PROJECT_SITE $WM_PROJECT_INST_DIR/site
+
 # shared site executables/libraries
 # similar naming convention as ~OpenFOAM expansion
 setenv FOAM_SITE_APPBIN $WM_PROJECT_INST_DIR/site/$WM_PROJECT_VERSION/platforms/$WM_OPTIONS/bin
diff --git a/etc/settings.sh b/etc/settings.sh
index e86de7de25e1cb4c27cd3bed0384284d43a789bd..17c8c091ee57a187f7c2bc9a59e74a1ddb3085eb 100644
--- a/etc/settings.sh
+++ b/etc/settings.sh
@@ -169,6 +169,9 @@ export FOAM_LIBBIN=$WM_PROJECT_DIR/platforms/$WM_OPTIONS/lib
 # external (ThirdParty) libraries
 export FOAM_EXT_LIBBIN=$WM_THIRD_PARTY_DIR/platforms/$WM_OPTIONS/lib
 
+# default location of site-specific templates etc
+# export WM_PROJECT_SITE=$WM_PROJECT_INST_DIR/site
+
 # shared site executables/libraries
 # similar naming convention as ~OpenFOAM expansion
 export FOAM_SITE_APPBIN=$WM_PROJECT_INST_DIR/site/$WM_PROJECT_VERSION/platforms/$WM_OPTIONS/bin
diff --git a/src/OSspecific/POSIX/POSIX.C b/src/OSspecific/POSIX/POSIX.C
index e6e54c32c055aa298ea10c417d861b86d1997af3..ff4c2e84ee1d6d973c6598bbd710931f5a0cb4e3 100644
--- a/src/OSspecific/POSIX/POSIX.C
+++ b/src/OSspecific/POSIX/POSIX.C
@@ -253,19 +253,20 @@ bool Foam::chDir(const fileName& dir)
 
 Foam::fileName Foam::findEtcFile(const fileName& name, bool mandatory)
 {
-    // Search user files:
-    // ~~~~~~~~~~~~~~~~~~
+    //
+    // search for user files in
+    // * ~/.OpenFOAM/VERSION
+    // * ~/.OpenFOAM
+    //
     fileName searchDir = home()/".OpenFOAM";
     if (isDir(searchDir))
     {
-        // Check for user file in ~/.OpenFOAM/VERSION
         fileName fullName = searchDir/FOAMversion/name;
         if (isFile(fullName))
         {
             return fullName;
         }
 
-        // Check for version-independent user file in ~/.OpenFOAM
         fullName = searchDir/name;
         if (isFile(fullName))
         {
@@ -274,32 +275,61 @@ Foam::fileName Foam::findEtcFile(const fileName& name, bool mandatory)
     }
 
 
-    // Search site files:
-    // ~~~~~~~~~~~~~~~~~~
-    searchDir = getEnv("WM_PROJECT_INST_DIR");
-    if (isDir(searchDir))
+    //
+    // search for group (site) files in
+    // * $WM_PROJECT_SITE/VERSION
+    // * $WM_PROJECT_SITE
+    //
+    searchDir = getEnv("WM_PROJECT_SITE");
+    if (searchDir.size())
     {
-        // Check for site file in $WM_PROJECT_INST_DIR/site/VERSION
-        fileName fullName = searchDir/"site"/FOAMversion/name;
-        if (isFile(fullName))
+        if (isDir(searchDir))
         {
-            return fullName;
-        }
+            fileName fullName = searchDir/FOAMversion/name;
+            if (isFile(fullName))
+            {
+                return fullName;
+            }
 
-        // Check for version-independent site file in $WM_PROJECT_INST_DIR/site
-        fullName = searchDir/"site"/name;
-        if (isFile(fullName))
+            fullName = searchDir/name;
+            if (isFile(fullName))
+            {
+                return fullName;
+            }
+        }
+    }
+    else
+    {
+        //
+        // OR search for group (site) files in
+        // * $WM_PROJECT_INST_DIR/site/VERSION
+        // * $WM_PROJECT_INST_DIR/site
+        //
+        searchDir = getEnv("WM_PROJECT_INST_DIR");
+        if (isDir(searchDir))
         {
-            return fullName;
+            fileName fullName = searchDir/"site"/FOAMversion/name;
+            if (isFile(fullName))
+            {
+                return fullName;
+            }
+
+            fullName = searchDir/"site"/name;
+            if (isFile(fullName))
+            {
+                return fullName;
+            }
         }
     }
 
-    // Search installation files:
-    // ~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    //
+    // search for other (shipped) files in
+    // * $WM_PROJECT_DIR/etc
+    //
     searchDir = getEnv("WM_PROJECT_DIR");
     if (isDir(searchDir))
     {
-        // Check for shipped OpenFOAM file in $WM_PROJECT_DIR/etc
         fileName fullName = searchDir/"etc"/name;
         if (isFile(fullName))
         {
@@ -311,7 +341,8 @@ Foam::fileName Foam::findEtcFile(const fileName& name, bool mandatory)
     // abort if the file is mandatory, otherwise return null
     if (mandatory)
     {
-        std::cerr<< "--> FOAM FATAL ERROR in Foam::findEtcFile() :"
+        std::cerr
+            << "--> FOAM FATAL ERROR in Foam::findEtcFile() :"
                " could not find mandatory file\n    '"
             << name.c_str() << "'\n\n" << std::endl;
         ::exit(1);
diff --git a/src/OpenFOAM/include/OSspecific.H b/src/OpenFOAM/include/OSspecific.H
index d68ae1661dbb052f12889e3714b083f853cc429b..ec1d5bdcc30c54f302f0d75e3cf53e04db301674 100644
--- a/src/OpenFOAM/include/OSspecific.H
+++ b/src/OpenFOAM/include/OSspecific.H
@@ -93,22 +93,22 @@ fileName cwd();
 //  else return false
 bool chDir(const fileName& dir);
 
-//- Search for \em name
-//  in the following hierarchy:
-//  -# personal settings:
-//    - ~/.OpenFOAM/\<VERSION\>/
-//      <em>for version-specific files</em>
+//- Search for a file from user/group/shipped directories.
+//  The search scheme allows for version-specific and
+//  version-independent files using the following hierarchy:
+//  - \b user settings:
+//    - ~/.OpenFOAM/\<VERSION\>
 //    - ~/.OpenFOAM/
-//      <em>for version-independent files</em>
-//  -# site-wide settings:
+//  - \b group (site) settings (when $WM_PROJECT_SITE is set):
+//    - $WM_PROJECT_SITE/\<VERSION\>
+//    - $WM_PROJECT_SITE
+//  - \b group (site) settings (when $WM_PROJECT_SITE is not set):
 //    - $WM_PROJECT_INST_DIR/site/\<VERSION\>
-//      <em>for version-specific files</em>
 //    - $WM_PROJECT_INST_DIR/site/
-//      <em>for version-independent files</em>
-//  -# shipped settings:
+//  - \b other (shipped) settings:
 //    - $WM_PROJECT_DIR/etc/
 //
-//  \return the full path name or fileName() if the name cannot be found
+//  \return The full path name or fileName() if the name cannot be found
 //  Optionally abort if the file cannot be found
 fileName findEtcFile(const fileName&, bool mandatory=false);