diff --git a/Control/AthenaCommon/CMakeLists.txt b/Control/AthenaCommon/CMakeLists.txt
index b2befffbf3cba79013c6ac7781b212897dbed7c7..023a4bf985c840c7b74c18e3eab55c8914ff25d9 100644
--- a/Control/AthenaCommon/CMakeLists.txt
+++ b/Control/AthenaCommon/CMakeLists.txt
@@ -13,7 +13,7 @@ atlas_depends_on_subdirs( PRIVATE
 atlas_install_headers( AthenaCommon )
 atlas_install_python_modules( python/*.py python/Utils )
 atlas_install_joboptions( share/Preparation.py share/Execution.py share/Atlas.UnixStandardJob.py test/*.py share/Atlas_Gen.UnixStandardJob.py share/MemTraceInclude.py share/runbatch.py )
-atlas_install_scripts( share/athena.py share/athena-app.py share/chappy.py share/find_cfg_dups.py share/test_cfg_pickling.py )
+atlas_install_scripts( share/athena.py share/athena_preload.sh share/athena-app.py share/chappy.py share/find_cfg_dups.py share/test_cfg_pickling.py )
 
 # Aliases:
 atlas_add_alias( athena-app "athena-app.py" )
diff --git a/Control/AthenaCommon/share/athena.py b/Control/AthenaCommon/share/athena.py
index 02d1d3402083ee1808735e3b126c2d3d43e9eb2a..d3c843be833e3b3a897419c17ac59e43056df02b 100755
--- a/Control/AthenaCommon/share/athena.py
+++ b/Control/AthenaCommon/share/athena.py
@@ -1,42 +1,21 @@
 #!/bin/sh
-
+#
+# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+#
+# athena.py is born as shell script to preload some optional libraries
+#
 """date"
 
-python_path=`which python`
-
-### Ugly hack to preload libtcmalloc.so
-
-#use tcmalloc by default if TCMALLOCDIR is defined, but only on non-macs
+# defaults
 export USETCMALLOC=0
+export USEIMF=0
 
-# possibly, allow user to run with full tcmalloc by setting this variable
-if [ -z $USETCMALLOCMINIMAL ]; then
-    export USETCMALLOCMINIMAL=1
+# but use tcmalloc by default if TCMALLOCDIR is defined
+if [ -n "$TCMALLOCDIR" ]; then
+    export USETCMALLOC=1
 fi
 
-# if any of these variables is defined, we use tcmalloc to do some
-# profiling, then we need the full library !
-
-if [ -n "$CPUPROFILE" ] || [ -n "$HEAPPROFILE" ] || [ -n "$HEAPCHECK" ]; then
-    USETCMALLOCMINIMAL=0
-fi
-
-if [ -z $TCMALLOCDIR ]; then
-   if [[ $CMTEXTRATAGS != *ManaCore* ]]; then
-    echo "WARNING: TCMALLOCDIR not defined, will use libc malloc"
-   fi
-else
-    USETCMALLOC=1
-fi
-
-export ATHENA_ADD_PRELOAD
-ATHENA_DROP_RELOAD=0
-
-export USEIMF=false
-export IMF_LIB1="libimf.so"
-export IMF_LIB2="libintlc.so.5"
-
-
+# parse command line arguments
 for a in ${@}
 do
     case "$a" in
@@ -46,79 +25,16 @@ do
 	--tcmalloc)      USETCMALLOC=1;;
 	--stdcmath)      USEIMF=0;;
 	--imf)           USEIMF=1;;
-	--preloadlib*)     ATHENA_ADD_PRELOAD=${a#*=};;
-	--drop-and-reload) ATHENA_DROP_RELOAD=1;;
+	--preloadlib*)     export ATHENA_ADD_PRELOAD=${a#*=};;
+	--drop-and-reload) export ATHENA_DROP_RELOAD=1;;
     esac
 done
 
-if [ "$USETCMALLOC" = "1" ] || [ "$USETCMALLOC" = "true" ] ; then
-    if [ -z $TCMALLOCDIR ]; then
-        echo "ERROR: TCMALLOCDIR not defined"
-        exit 1
-    fi
-    # test, if minimal tcmalloc is available. fallback to full library, if not
-    if [ "$USETCMALLOCMINIMAL" = "1" ] || [ "$USETCMALLOCMINIMAL" = "true" ] ; then
-        if [ ! -e "$TCMALLOCDIR/libtcmalloc_minimal.so" ]; then
-            echo "WARNING: $TCMALLOCDIR/libtcmalloc_minimal.so does not exist. Falling back to libtcmalloc"
-            USETCMALLOCMINIMAL=0
-        else
-            echo "Preloading tcmalloc_minimal.so"
-        fi
-    fi
-    # preload and run with correct tcmalloc, if requested
-    if [ "$USETCMALLOCMINIMAL" = "0" ]; then
-        if [ ! -e "$TCMALLOCDIR/libtcmalloc.so" ]; then
-            echo "ERROR: $TCMALLOCDIR/libtcmalloc.so does not exist"
-            exit 1
-        fi
-        echo "Preloading tcmalloc.so"
-
-        if [ -z $LD_PRELOAD ]; then
-            export LD_PRELOAD="$TCMALLOCDIR/libtcmalloc.so"
-        else
-            export LD_PRELOAD="$TCMALLOCDIR/libtcmalloc.so:$LD_PRELOAD"
-        fi
-    else
-        if [ -z $LD_PRELOAD ]; then
-            export LD_PRELOAD="$TCMALLOCDIR/libtcmalloc_minimal.so"
-        else
-            export LD_PRELOAD="$TCMALLOCDIR/libtcmalloc_minimal.so:$LD_PRELOAD"
-        fi
-    fi
-fi
-
-if [ $USEIMF == "1" ] || [ $USEIMF == true ]; then
-fullimf1="$ATLASMKLLIBDIR_PRELOAD/$IMF_LIB1"
-fullimf2="$ATLASMKLLIBDIR_PRELOAD/$IMF_LIB2"
-    if [ ! -e "$fullimf1" ]; then
-        echo "ERROR: $fullimf1 does not exit"
-        exit 1
-    elif [ ! -e "$fullimf2" ]; then
-        echo "ERROR: $fullimf2 does not exit"
-        exit 1
-    else
-        echo "Preloading $IMF_LIB1"
-        echo "Preloading $IMF_LIB2"
-        if [ -z $LD_PRELOAD ]; then
-            export LD_PRELOAD="$fullimf1:$fullimf2"
-        else
-            export LD_PRELOAD="$fullimf1:$fullimf2:$LD_PRELOAD"
-        fi
-    fi
-fi
-
-# optionally add user-specific preload library
-if [ "x$ATHENA_ADD_PRELOAD" != "x" ] && [ $ATHENA_DROP_RELOAD -eq 0 ]; then
-    echo "Preloading $ATHENA_ADD_PRELOAD"
-    if [ -z $LD_PRELOAD ]; then
-        export LD_PRELOAD="$ATHENA_ADD_PRELOAD"
-    else
-        export LD_PRELOAD="$ATHENA_ADD_PRELOAD:$LD_PRELOAD"
-    fi
-else
-    unset ATHENA_ADD_PRELOAD
-fi
+# Do the actual preloading via LD_PRELOAD
+source `which athena_preload.sh `
 
+# Now resurrect ourselves as python script
+python_path=`which python`
 "exec" "$python_path" "-tt" "$0" "$@";
 
 """
diff --git a/Control/AthenaCommon/share/athena_preload.sh b/Control/AthenaCommon/share/athena_preload.sh
new file mode 100755
index 0000000000000000000000000000000000000000..2ad52120603de22911a9ed90bd4ac09b5545add7
--- /dev/null
+++ b/Control/AthenaCommon/share/athena_preload.sh
@@ -0,0 +1,89 @@
+#!/bin/sh
+#
+# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+#
+# Shell script to handle the possible preload libraries for athena, steered by:
+#
+#   $TCMALLOCDIR            : tcmalloc directory
+#   $USETCMALLOC            : use tcmalloc (instead of std malloc)
+#   $USETCMALLOCMINIMAL     : use minimal version of tcmalloc
+#   $ATLASMKLLIBDIR_PRELOAD : location of Intel math library
+#   $USEIMF                 : use Intel math library
+#   $ATHENA_ADD_PRELOAD     : preload user specific library
+#   $ATHENA_DROP_RELOAD     : are we in drop/reload mode?
+#
+
+ld_preload()
+{
+    export LD_PRELOAD="$1${LD_PRELOAD:+:$LD_PRELOAD}"  # set or prepend
+}
+
+# possibly, allow user to run with full tcmalloc by setting this variable
+export USETCMALLOCMINIMAL
+if [ -z "$USETCMALLOCMINIMAL" ]; then
+    USETCMALLOCMINIMAL=1
+fi
+
+# for profiling we need the full tcmalloc library
+if [ -n "$CPUPROFILE" ] || [ -n "$HEAPPROFILE" ] || [ -n "$HEAPCHECK" ]; then
+    USETCMALLOCMINIMAL=0
+fi
+
+#
+# tcmalloc
+#
+if [ "$USETCMALLOC" = "1" ] || [ "$USETCMALLOC" = "true" ] ; then
+    if [ -z $TCMALLOCDIR ]; then
+        echo "ERROR: TCMALLOCDIR not defined"
+        exit 1
+    fi
+    # test, if minimal tcmalloc is available. fallback to full library, if not
+    if [ "$USETCMALLOCMINIMAL" = "1" ] || [ "$USETCMALLOCMINIMAL" = "true" ] ; then
+        if [ ! -e "$TCMALLOCDIR/libtcmalloc_minimal.so" ]; then
+            echo "WARNING: $TCMALLOCDIR/libtcmalloc_minimal.so does not exist. Falling back to libtcmalloc"
+            USETCMALLOCMINIMAL=0
+        fi
+    fi
+    # preload and run with correct tcmalloc, if requested
+    if [ "$USETCMALLOCMINIMAL" = "0" ]; then
+        if [ ! -e "$TCMALLOCDIR/libtcmalloc.so" ]; then
+            echo "ERROR: $TCMALLOCDIR/libtcmalloc.so does not exist"
+            exit 1
+        fi
+        echo "Preloading tcmalloc.so"
+        ld_preload "$TCMALLOCDIR/libtcmalloc.so"
+    else
+        echo "Preloading tcmalloc_minimal.so"
+        ld_preload "$TCMALLOCDIR/libtcmalloc_minimal.so"
+    fi
+fi
+
+#
+# Intel math library
+#
+if [ "$USEIMF" = "1" ] || [ "$USEIMF" = "true" ]; then
+    IMF_LIB1="$ATLASMKLLIBDIR_PRELOAD/libimf.so"
+    IMF_LIB2="$ATLASMKLLIBDIR_PRELOAD/libintlc.so.5"
+    if [ ! -e "$IMF_LIB1" ]; then
+        echo "ERROR: $IMF_LIB1 does not exit"
+        exit 1
+    elif [ ! -e "$IMF_LIB2" ]; then
+        echo "ERROR: $IMF_LIB2 does not exit"
+        exit 1
+    else
+        echo "Preloading `basename $IMF_LIB1`"
+        echo "Preloading `basename $IMF_LIB2`"
+        ld_preload "$IMF_LIB1"
+        ld_preload "$IMF_LIB2"
+    fi
+fi
+
+#
+# User specific preload
+#
+if [ -n "$ATHENA_ADD_PRELOAD" ] && [ "$ATHENA_DROP_RELOAD" != "1" ]; then
+    echo "Preloading $ATHENA_ADD_PRELOAD"
+    ld_preload "$ATHENA_ADD_PRELOAD"
+else
+    unset ATHENA_ADD_PRELOAD
+fi