diff --git a/bin/test.sh b/bin/test.sh
index fd9a3c59ed00910fe3f4d12139be8df375711479..f38975ea98ce8a7386b49ee80f44f18e8f345595 100755
--- a/bin/test.sh
+++ b/bin/test.sh
@@ -24,6 +24,9 @@
 THIS_SCRIPT="$0"
 CONFIG="<all>"
 VERBOSE=
+CLEAN=
+PREPARE=
+PULLCACHE=
 UPDATE=
 LOGS=
 COMMIT=
@@ -130,6 +133,70 @@ function RequiredTools
     done
 }
 
+# --------------------------------------------------------------------------
+# ---  Command Line Processing
+# --------------------------------------------------------------------------
+
+while [ "$1" != "" ]
+do
+    case "$1" in
+        "-h"|"-help"|"--help")
+            Usage
+            exit 0
+            ;;
+        "-r"|"--clean")
+            CLEAN=yes
+            PREPARE=yes
+            ;;
+        "-p"|"--ptests")
+            PREPARE=yes
+            ;;
+        "-w"|"--wp-cache")
+            PULLCACHE=yes
+            ;;
+        "-u"|"--update")
+            DUNE_OPT+="--auto-promote"
+            UPDATE=yes
+            ;;
+        "-v"|"--verbose")
+            DUNE_OPT+="--display=short"
+            VERBOSE=yes
+            ;;
+        "-l"|"--logs")
+            LOGS=yes
+            ;;
+        "-k"|"--commit")
+            COMMIT=yes
+            ;;
+        "-s"|"--save" )
+            SAVE=yes
+            ;;
+        "-d"|"--default")
+            CONFIG="<default>"
+            ;;
+        "-c"|"--config")
+            CONFIG=$2
+            shift
+            ;;
+        "-n"|"--name")
+            ALIAS_NAME=$2
+            shift
+            ;;
+        "-a"|"--all")
+            TESTS=""
+            for dir in $TEST_DIRS ; do
+                if [ -d "$dir" ]; then
+                    TESTS="$TESTS $dir"
+                fi
+            done
+            ;;
+       *)
+            TESTS+=" $1"
+            ;;
+    esac
+    shift
+done
+
 # --------------------------------------------------------------------------
 # ---  WP Cache Environment
 # --------------------------------------------------------------------------
@@ -138,19 +205,25 @@ function SetEnv
 {
     if [ "$FRAMAC_WP_CACHE" = "" ]; then
         if [ "$UPDATE" = "yes" ]; then
+            Head "FRAMAC_WP_CACHE=update"
             export FRAMAC_WP_CACHE=update
         else
             export FRAMAC_WP_CACHE=offline
         fi
-        Echo "Set FRAMAC_WP_CACHE=$FRAMAC_WP_CACHE"
+    else
+        if [ "$UPDATE" = "yes" ]; then
+            Head "FRAMAC_WP_CACHE=$FRAMAC_WP_CACHE (overrides -u)"
+        else
+            Head "FRAMAC_WP_CACHE=$FRAMAC_WP_CACHE"
+        fi
     fi
 
     if [ "$FRAMAC_WP_QUALIF" != "" ]; then
         export FRAMAC_WP_CACHEDIR="$FRAMAC_WP_QUALIF"
-        Echo "Set FRAMAC_WP_CACHEDIR=$FRAMAC_WP_CACHEDIR"
+        Echo "# FRAMAC_WP_CACHEDIR=$FRAMAC_WP_CACHEDIR"
     elif [ "$FRAMAC_WP_CACHEDIR" = "" ]; then
         export FRAMAC_WP_CACHEDIR="$LOCAL_WP_CACHE"
-        Echo "Set FRAMAC_WP_CACHEDIR=$FRAMAC_WP_CACHEDIR"
+        Echo "# FRAMAC_WP_CACHEDIR=$FRAMAC_WP_CACHEDIR"
     fi
 
     [ ! -f "$FRAMAC_WP_CACHEDIR" ] || [ -d "$FRAMAC_WP_CACHEDIR" ] \
@@ -160,7 +233,6 @@ function SetEnv
         /*);;
         *) Error "Requires an absolute path to $FRAMAC_WP_CACHEDIR";;
     esac
-
 }
 
 function CloneCache
@@ -174,10 +246,31 @@ function CloneCache
 
 function PullCache
 {
-    CloneCache
-    Head "Pull WP cache (to $FRAMAC_WP_CACHEDIR)..."
-    RequiredTools git
-    Run git -C $FRAMAC_WP_CACHEDIR pull --rebase
+    if [ "$PULLCACHE" = "yes" ]
+    then
+        CloneCache
+        Head "Pull WP cache (to $FRAMAC_WP_CACHEDIR)..."
+        RequiredTools git
+        Run git -C $FRAMAC_WP_CACHEDIR pull --rebase
+    fi
+}
+
+# --------------------------------------------------------------------------
+# ---  Test Suite Preparation
+# --------------------------------------------------------------------------
+
+function PrepareTests
+{
+    if [ "$CLEAN" = "yes" ]
+    then
+        Head "Cleaning all tests..."
+        Cmd make clean-tests
+    fi
+    if [ "$PREPARE" = "yes" ]
+    then
+        Head "Generating dune files..."
+        Cmd make run-ptests
+    fi
 }
 
 # --------------------------------------------------------------------------
@@ -338,73 +431,15 @@ function Status
 }
 
 # --------------------------------------------------------------------------
-# ---  Command Line Processing
+# ---  Main Program
 # --------------------------------------------------------------------------
 
 SetEnv
-while [ "$1" != "" ]
-do
-    case "$1" in
-        "-h"|"-help"|"--help")
-            Usage
-            exit 0
-            ;;
-        "-r"|"--clean")
-            Head "Cleaning all tests..."
-            Cmd make clean-tests
-            Head "Generating dune files..."
-            Cmd make run-ptests
-            ;;
-        "-p"|"--ptests")
-            Head "Generating dune files..."
-            Cmd make run-ptests
-            ;;
-        "-w"|"--wp-cache")
-            PullCache
-            ;;
-        "-u"|"--update")
-            DUNE_OPT+="--auto-promote"
-            UPDATE=yes
-            ;;
-        "-v"|"--verbose")
-            DUNE_OPT+="--display=short"
-            VERBOSE=yes
-            ;;
-        "-l"|"--logs")
-            LOGS=yes
-            ;;
-        "-k"|"--commit")
-            COMMIT=yes
-            ;;
-        "-s"|"--save" )
-            SAVE=yes
-            ;;
-        "-d"|"--default")
-            CONFIG="<default>"
-            ;;
-        "-c"|"--config")
-            CONFIG=$2
-            shift
-            ;;
-        "-n"|"--name")
-            ALIAS_NAME=$2
-            shift
-            ;;
-        "-a"|"--all")
-            TESTS=""
-            for dir in $TEST_DIRS ; do
-                if [ -d "$dir" ]; then
-                    TESTS="$TESTS $dir"
-                fi
-            done
-            ;;
-       *)
-            TESTS+=" $1"
-            ;;
-    esac
-    shift
-done
+PullCache
+PrepareTests
 Register $TESTS
 RunAlias ${DUNE_ALIAS}
 Commits ${COMMITS}
 Status $DUNE_LOG
+
+# --------------------------------------------------------------------------