diff --git a/modules/foamCreateModuleInclude b/modules/foamCreateModuleInclude
new file mode 100755
index 0000000000000000000000000000000000000000..25f3a5dfb619b57edd75b5dcffa129a0b8818748
--- /dev/null
+++ b/modules/foamCreateModuleInclude
@@ -0,0 +1,328 @@
+#!/bin/sh
+#------------------------------------------------------------------------------
+# =========                 |
+# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+#  \\    /   O peration     |
+#   \\  /    A nd           | Copyright (C) 2017 OpenCFD Ltd.
+#    \\/     M anipulation  | Copyright (C) 2016-2017 CINECA
+#------------------------------------------------------------------------------
+# License
+#     This file is part of OpenFOAM.
+#
+#     OpenFOAM is free software: you can redistribute it and/or modify it
+#     under the terms of the GNU General Public License as published by
+#     the Free Software Foundation, either version 3 of the License, or
+#     (at your option) any later version.
+#
+#     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+#     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+#     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+#     for more details.
+#
+#     You should have received a copy of the GNU General Public License
+#     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+#
+# Script
+#     foamCreateModuleInclude
+#
+# Description
+#     Script to create module settings.
+#     This is still incomplete, but can be a useful basis when using a module
+#     system.
+#------------------------------------------------------------------------------
+usage() {
+    exec 1>&2
+    while [ "$#" -ge 1 ]; do echo "$1"; shift; done
+    cat<<USAGE
+
+usage: ${0##*/} [OPTION] projectDir
+options:
+  -output=file      The output name (default: ModuleInclude.tcl)
+  -preload=file     Specify (module) file to preload. Can use multiple times
+  -tmpdir=file      The tmp directory to use.
+  -help             print the usage
+
+Create module settings for inclusion in a top-level openfoam module.
+
+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 '${0##*/} -help' for usage"
+    echo
+    exit 1
+}
+
+#------------------------------------------------------------------------------
+
+unset optBackend optDebug preload projectDir
+unset moduleOutput moduleTmpDir
+
+# Parse some options
+while [ "$#" -gt 0 ]
+do
+    case "$1" in
+    '')
+        # Ignore empty args
+        ;;
+    -h | -help)
+        usage
+        ;;
+    -debug)
+        optDebug=true
+        ;;
+    -preload=*)
+        preload="$preload${preload:+ }${1#*=}"
+        ;;
+    --recursive-backend--)
+        optBackend=true
+        ;;
+    --output=*)
+        moduleOutput="${1#*=}"
+        ;;
+    --tmpdir=*)
+        moduleTmpDir="${1#*=}"
+        ;;
+    -*)
+        die "unknown option: $1"
+        ;;
+    *)
+        break
+        ;;
+    esac
+    shift
+done
+
+[ "$#" -eq 1 ] || die "missing projectDir, or too many arguments"
+projectDir="${1%/}"
+
+#------------------------------------------------------------------------------
+
+# Filter accepts system paths only
+syspath() {
+    local path
+
+    set -- $(echo "${1}" | tr ':' '\n' )
+    for i in $@
+    do
+        case $i in
+        /bin | /usr/bin | /usr/lib*)
+            path="${path}${path:+:}$i";;
+        esac
+    done
+    echo "$path"
+}
+
+
+# Frontend: do all basic sanity checks in the front-end only
+if [ -z "$optBackend" ]
+then
+    # Check that it appears to be an OpenFOAM installation
+    [ -d "$projectDir" -a -f "$projectDir/etc/bashrc" ] || \
+        die "Incorrect projectDir? $projectDir"
+
+    # Check preloads
+    for file in $preloads
+    do
+        [ -f "$file" ] || echo "No such file to preload: $file" 1>&2
+    done
+
+    # Call itself with clean environment.
+    # Tag the start/end of the original PATH, LD_LIBRARY_PATH
+    exec env -i \
+        HOME=$HOME \
+        USER=$USER \
+        PATH=":MOD_PREPEND:$(syspath $PATH):MOD_APPEND:" \
+        LD_LIBRARY_PATH=":MOD_PREPEND:$(syspath $LD_LIBRARY_PATH):MOD_APPEND:" \
+        $0 \
+        --recursive-backend-- \
+        "${optDebug:+-debug}" \
+        "${output:+-output=$moduleOutput}" \
+        "${preloads:+-preload=$preloads}" \
+        "${moduleTmpDir:+-tmpdir=$moduleTmpDir}" \
+        $projectDir
+
+    exitCode=$? # exec failed?
+
+    echo "exec somehow failed?" 1>&2
+    exit $exitCode
+fi
+
+#------------------------------------------------------------------------------
+# Backend
+
+: ${moduleOutput:=ModuleInclude.tcl}
+: ${moduleTmpDir:=${TMPDIR:-/tmp}}
+
+# Preload any/all modules
+for file in $preloads
+do
+    [ -f "$file" ] && . "$file" ''
+done
+
+# Temporary files
+tmpFiles="$moduleTmpDir/modules-$USER.$$"
+if [ -n "$optDebug" ]
+then
+    echo "Preserving intermediate files: $tmpFiles.*" 1>&2
+else
+    trap 'rm -f $tmpFiles.* 2>/dev/null; exit 0' EXIT TERM INT
+fi
+
+
+#
+# Initial snapshot of the environment, without any functions
+#
+env   | sed -n -e '/^[^ {}]/p' | sort -f > $tmpFiles.env.pre.log
+alias | sort -f > $tmpFiles.alias.pre.log
+
+# OpenFOAM settings
+. $projectDir/etc/bashrc ''
+
+echo "Using openfoam: $WM_PROJECT_DIR" 1>&2
+echo "==> $moduleOutput" 1>&2
+
+# Remove some cruft
+unset FOAM_JOB_DIR FOAM_RUN FOAM_SETTINGS FOAM_INST_DIR
+unset WM_PROJECT_USER_DIR WM_THIRD_PARTY_DIR
+unset SCOTCH_VERSION
+
+foamOldDirs="$CEI_HOME $BOOST_ARCH_PATH $CGAL_ARCH_PATH $FFTW_ARCH_PATH $MPI_ARCH_PATH $SCOTCH_ARCH_PATH \
+$FOAM_SITE_APPBIN $FOAM_SITE_LIBBIN $WM_PROJECT_SITE \
+$FOAM_USER_APPBIN $FOAM_USER_LIBBIN"
+foamClean=$WM_PROJECT_DIR/bin/foamCleanPath
+
+if [ -x "$foamClean" ]
+then
+    cleaned=$($foamClean "$PATH" "$foamOldDirs") && PATH="$cleaned"
+    cleaned=$($foamClean "$LD_LIBRARY_PATH" "$foamOldDirs") \
+        && LD_LIBRARY_PATH="$cleaned"
+
+    # May not have/need any third party at all
+    if [ -n "$FOAM_EXT_LIBBIN" -a ! -d "$FOAM_EXT_LIBBIN" ]
+    then
+        cleaned=$($foamClean "$LD_LIBRARY_PATH" "$FOAM_EXT_LIBBIN") \
+            && LD_LIBRARY_PATH="$cleaned"
+
+        unset FOAM_EXT_LIBBIN
+    fi
+fi
+unset CEI_HOME
+unset ENSIGHT9_INPUT  ENSIGHT9_READER
+unset ENSIGHT10_INPUT ENSIGHT10_READER
+
+# Always consider site to be bogus. If needed, should be done elsewhere.
+unset FOAM_SITE_APPBIN FOAM_SITE_LIBBIN WM_PROJECT_SITE
+
+# Make user directories more generic.
+export FOAM_USER_APPBIN='$env(HOME)/OpenFOAM/$env(USER)-'"$WM_PROJECT_VERSION/platforms/$WM_OPTIONS/bin"
+export FOAM_USER_LIBBIN='$env(HOME)/OpenFOAM/$env(USER)-'"$WM_PROJECT_VERSION/platforms/$WM_OPTIONS/lib"
+
+
+# Remove non-essential aliases
+unalias wmDP        2>/dev/null
+unalias wmInt32     2>/dev/null
+unalias wmInt64     2>/dev/null
+unalias wmSP        2>/dev/null
+unalias wmSchedOff  2>/dev/null
+unalias wmSchedOn   2>/dev/null
+unalias wmSet       2>/dev/null
+unalias wmUnset     2>/dev/null
+unalias app         2>/dev/null
+unalias foamSite    2>/dev/null
+unalias lib         2>/dev/null
+unalias run         2>/dev/null
+unalias sol         2>/dev/null
+unalias src         2>/dev/null
+unalias tut         2>/dev/null
+unalias util        2>/dev/null
+
+#------------------------------------------------
+
+#
+# Updated snapshot of the environment, without any functions
+#
+env   | sed -n -e '/^[^ {}]/p' | sort -f > $tmpFiles.env.post.log
+alias | sort -f > $tmpFiles.alias.post.log
+
+# Create a diff of the environment and aliases
+diff $tmpFiles.env.pre.log    $tmpFiles.env.post.log   > $tmpFiles.env.diff.log
+diff $tmpFiles.alias.pre.log  $tmpFiles.alias.post.log > $tmpFiles.alias.diff.log
+
+echo "# -------------------"  > $moduleOutput
+
+# -------------------
+# Environment other than PATH, LD_LIBRARY_PATH
+echo "# Environment"  >> $moduleOutput
+grep '> ' $tmpFiles.env.diff.log | \
+sed \
+    -e '/^> *PATH=/d' \
+    -e '/^> *LD_LIBRARY_PATH=/d' \
+    -e 's/^>/setenv     /' \
+    -e 's/=/ "/' -e 's/$/\"/' >> $moduleOutput
+
+
+# -------------------
+# Changes in PATH - without junk and system directories
+echo "# PATH"  >> $moduleOutput
+
+sed -ne 's/^< *PATH=//p' $tmpFiles.env.diff.log | tr ':' '\n' > $tmpFiles.path.pre.log
+sed -ne 's/^> *PATH=//p' $tmpFiles.env.diff.log | tr ':' '\n' > $tmpFiles.path.post.log
+
+grep -vxFf $tmpFiles.path.pre.log $tmpFiles.path.post.log | \
+sed \
+    -e '\@^/bin$@d' \
+    -e '\@^/usr/bin$@d' \
+    -e '\@^/usr/local/bin$@d' \
+    -e '\@^[.]$@d' \
+    -e '\@^$@d' \
+    > $tmpFiles.path.diff.log
+
+sed \
+    -e 's/^/append-path PATH "/' \
+    -e 's/$/\"/' \
+    $tmpFiles.path.diff.log  >> $moduleOutput
+# -------------------
+
+# -------------------
+# Changes in LD_LIBRARY_PATH - without junk and system directories
+echo "# LD_LIBRARY_PATH"  >> $moduleOutput
+
+sed -ne 's/^< *LD_LIBRARY_PATH=//p' $tmpFiles.env.diff.log | tr ':' '\n' > $tmpFiles.ldpath.pre.log
+sed -ne 's/^> *LD_LIBRARY_PATH=//p' $tmpFiles.env.diff.log | tr ':' '\n' > $tmpFiles.ldpath.post.log
+
+grep -vxFf $tmpFiles.ldpath.pre.log $tmpFiles.ldpath.post.log | \
+sed \
+    -e '\@^/lib.*$@d' \
+    -e '\@^/usr/lib.*$@d' \
+    -e '\@^/usr/local/lib.*$@d' \
+    -e '\@^[.]$@d' \
+    -e '\@^$@d' \
+    > $tmpFiles.ldpath.diff.log
+
+sed \
+    -e 's/^/append-path LD_LIBRARY_PATH "/' \
+    -e 's/$/\"/' \
+    $tmpFiles.ldpath.diff.log >> $moduleOutput
+
+
+# -------------------
+# aliases
+# Some diff give "> alias". Others give ">", needed extended regular expressions '-r'
+
+echo "# aliases"  >> $moduleOutput
+cat $tmpFiles.alias.diff.log | \
+    sed -r -n -e 's/^> (alias)?/set-alias   /p' | \
+    sed -e "s/='/ \"/" -e "s/'/\"/g" >> $moduleOutput
+
+echo "# -------------------"   >> $moduleOutput
+
+# -----------------------------------------------------------------------------