diff --git a/bin/preinstall_cleanup.sh b/bin/preinstall_cleanup.sh
new file mode 100755
index 0000000000000000000000000000000000000000..526621c417ade76dd902d57492d3d970a6895c8c
--- /dev/null
+++ b/bin/preinstall_cleanup.sh
@@ -0,0 +1,120 @@
+#!/bin/bash
+# ======================================================================
+#
+# CLEANUP BEFORE DEPLOYING A TGZ ON A SERVER
+#
+# ----------------------------------------------------------------------
+#
+# This script compares the content of a tgz with the data in
+# the webroot. Additional files will be deleted
+#
+# SYNTAX:
+# with 2 parameters it show infos only
+# preinstall_cleanup.sh /var/www/preview.mmmu.iml.unibe.ch/ /var/puppet-tgz/mmmu.tgz
+#
+# with (any) 3rd parameter deletion will be activated
+# preinstall_cleanup.sh /var/www/preview.mmmu.iml.unibe.ch/ /var/puppet-tgz/mmmu.tgz forcedelete
+#
+# ----------------------------------------------------------------------
+# 2013-11-06  axel.hahn@iml.unibe.ch
+# ======================================================================
+
+# ----------------------------------------------------------------------
+# CONFIG
+# ----------------------------------------------------------------------
+
+        prjdir=$1
+        tgz=$2
+        bForceDelete=$3
+        filelist=/tmp/keepdirslist_$$
+        filetgz=/tmp/list_in_tgz_$$
+        fileprj=/tmp/list_in_webroot_$$
+        keepfile=".htkeep"
+
+
+# ----------------------------------------------------------------------
+# HEADER
+# ----------------------------------------------------------------------
+
+        echo
+        echo ===== CLEANUP BEFORE DEPLOYING A TGZ =====
+        echo
+
+        if [ $# -lt 2 ]; then
+                echo Syntax is
+                echo `basename $0` [webroot] [tgz-archive] [[deleteflag]]
+                exit 1
+        fi
+
+# ----------------------------------------------------------------------
+# CHECKS
+# ----------------------------------------------------------------------
+
+        # check $prjdir to prevent deletetion of a complete server
+        # the directory must exist, must have a subdir "public_html" or
+        # "public" and a part must be "/www/" (i.e. /var/www/)
+        cd $prjdir || exit 2
+
+        # see #2235 - for nodejs apps the target dir is different
+        # ls -ld $prjdir/public_html/ || ls -ld $prjdir/public/ || exit 2
+        # echo $prjdir | fgrep "/www/" || exit 2
+        ls -l $prjdir/*.json || exit 2
+
+        # check tgz
+        file $tgz | fgrep "gzip compressed" || exit 3
+
+# ----------------------------------------------------------------------
+# MAIN
+# ----------------------------------------------------------------------
+
+
+        echo --- scanning for $keepfile in $prjdir ...
+        cd $prjdir
+        find . -type f -name $keepfile | sort | sed "s#/$keepfile##g" >$filelist
+        ls -l $filelist
+        cat $filelist
+        echo
+
+        echo --- scanning archive $tgz
+        tar -tzf $tgz | sed 's#/$##g' | sort >$filetgz
+        ls -l $filetgz
+        wc -l $filetgz
+        head $filetgz
+        echo
+
+        echo --- scanning web $prjdir
+        cd $prjdir
+        find . -print | sort >$fileprj
+        ls -l $fileprj
+        wc -l $fileprj
+        head $fileprj
+        echo
+
+        echo --- compare ...
+        # diff $filetgz $fileprj | grep "^>" | cut -f 2 -d " " | while read delfile
+        diff $filetgz $fileprj | grep "^>" | cut -f 2 -d " " | grep -vf $filelist | while read delfile
+        do
+                bDelete=1
+                testfile=$delfile
+                if [ ! -d $delfile ]; then
+                        testfile=`dirname $delfile`
+                fi
+                echo $testfile | fgrep -f $filelist >/dev/null
+                if [ $? -eq 0 ]; then
+                        echo KEEP: $delfile
+                else
+                        if [ -z $bForceDelete ]; then
+                                echo WILL-BE-DELETED: $delfile
+                        else
+                                echo DELETE: $delfile
+                                rm -rf $delfile
+                        fi
+                fi
+        done
+
+# ----------------------------------------------------------------------
+# CLEANUP
+# ----------------------------------------------------------------------
+
+        rm -f $filelist $filetgz $fileprj
+        echo done.
diff --git a/deploy_app.sh b/deploy_app.sh
index 7450e40c789e01f9b45926b8c654a420ea99ba35..850d314299ecca3d06e0d6b15e7b37a26dc888a5 100755
--- a/deploy_app.sh
+++ b/deploy_app.sh
@@ -112,7 +112,8 @@ if [ $# -eq 0 ]; then
     rc=$?
     profile=
     header "loop over projects is finished"
-    exit $?
+    echo exiting with statuscode $rc
+    exit $rc
 fi
 
 echo
@@ -168,6 +169,15 @@ header "PRE tasks"
 run_task "${profiledir}/tasks_preinstall.sh"
 
 
+# ----------------------------------------------------------------------
+header "PRE tasks II - cleanup"
+test "$cleanup_preview" -eq "1" || echo "SKIP: preview of cleanup is disabled."
+test "$cleanup_preview" -eq "1" && "${selfdir}/bin/preinstall_cleanup.sh" "${installdir}" "${downloadfile}"
+
+test "$cleanup_force" -eq "1"   || echo "SKIP: cleanup files is disabled."
+test "$cleanup_force" -eq "1"   && "${selfdir}/bin/preinstall_cleanup.sh" "${installdir}" "${downloadfile}" "force"
+
+
 # ----------------------------------------------------------------------
 header "Extract ${downloadfile} $( pwd )"
 tar -xzf "${downloadfile}" . || exit 3
diff --git a/profiles/example/config.sh.dist b/profiles/example/config.sh.dist
index 7360d33e48cc7c92c19c7d930952d70b258e55cf..ac61c21db40b532992edd771f33131c726911d48 100644
--- a/profiles/example/config.sh.dist
+++ b/profiles/example/config.sh.dist
@@ -10,9 +10,10 @@ installdir=/var/www/FQDN
 
 # ----- settings for CI server software package 
 
-# override global value 
-# export IMLCI_PHASE=preview
+IMLCI_PROJECT=example
 
-# see output of
-export IMLCI_PROJECT=example
+# override global value 
+# IMLCI_PHASE=preview
 
+cleanup_preview=0
+cleanup_force=0
\ No newline at end of file
diff --git a/readme.md b/readme.md
index 542b4a936158df48fe55f7d32fa7603c0cea1c9c..22af2b8270bf95c02ceb0b64737a7e01a0e4b6d1 100644
--- a/readme.md
+++ b/readme.md
@@ -46,11 +46,16 @@ installdir=/var/www/myapp
 
 # ----- settings for CI server software package 
 
+
+IMLCI_PROJECT=id-in-ci-server
+
 # override global value 
-# export IMLCI_PHASE=preview
+# IMLCI_PHASE=preview
 
-# see output of
-export IMLCI_PROJECT=id-in-ci-server
+# cleanup after pre install tasks and bevore extracting data
+# set both to 0 .. or only one of them to 1
+cleanup_preview=0
+cleanup_force=0
 ```
 
 Make a testrun: `./deploy_app.sh` in application root.