diff --git a/validate_workflow.sh b/validate_workflow.sh
index 346d1f80ccb7d07d4c5f5e5819a3bb350f891c0c..c62b1e4b59f6a7e39c4ccb710234bff4b98dc125 100755
--- a/validate_workflow.sh
+++ b/validate_workflow.sh
@@ -346,14 +346,41 @@ exec_cmd() {
     ftype=$2
     workflow=$3
     stage=$4
+    log=$5
     start_t=$(date +"%s")
     debug "scan_file, calling cmd='$cmd'"
-    $cmd || ( error "failed call of '$cmd', $?"; exit 1 )
+    $cmd >>"$log" 2>&1
     is_valid=$?
     stop_t=$(date +"%s")
     duration=$((stop_t - start_t))
-    debug "scan_file, duration=$duration is_valid=$is_valid"
+    debug "scan_file, duration=$duration is_valid=$is_valid log=$log"
     update_statistics "$is_valid" "$duration" "$ftype" "$workflow" "$stage"
+    echo "$is_valid"
+}
+
+handle_input_if_requested() {
+    filename=$1
+    is_valid=$2
+    debug "handle_input_if_requested, filename=$filename is_valid=$is_valid"
+    if [ "$FILES_MODE" = "sort" ]; then
+        if [ "$is_valid" -eq 0 ]; then
+            debug "handle_input_if_requested, mv $filename to $VALID_FOLDER, because valid"
+            mv "$filename" "$VALID_FOLDER"
+        else
+            debug "handle_input_if_requested, mv $filename to $INVALID_FOLDER, because invalid"
+            mv "$filename" "$INVALID_FOLDER"
+        fi
+    elif [ "$FILES_MODE" = "delete" ]; then
+        debug "handle_input_if_requested, rm $filename from watchfolder $WATCH_FOLDER"
+        rm -f "$filename"
+    fi
+}
+
+get_logfile() {
+    filename=$1
+    logname=$(echo "$filename"| sed -e "s#^${WATCH_FOLDER}#${RESULT_FOLDER}#"  -e "s#\$#.log#")
+    debug "get_logfile, logname=$logname (filename=$filename)"
+    echo "$logname"
 }
 
 
@@ -362,19 +389,25 @@ scan_file() {
     debug "scan_file, using filename: $filename"
     mimetype=$(get_mimetype "$filename")
     ftype=$(prepare_ftype "$mimetype")
+    logname=$(get_logfile "$filename")
     if [ "$MODE" = "auto" ]; then
         # try best guess
         MODE=$(estimate_mode "$mimetype")
     fi
     if [ "$STAGE" = "any" ]; then
+        is_valid=0
         for stage in current upcoming; do
-            cmd=$(prepare_cmd "$MODE" "$ftype" "$stage" | sed -e "s#FILE#'$filename'#")
-            exec_cmd "$cmd" "$ftype" "$MODE" "$stage"
+            cmd=$(prepare_cmd "$MODE" "$ftype" "$stage" | sed -e "s#FILE#$filename#")
+            is_valid=$(exec_cmd "$cmd" "$ftype" "$MODE" "$stage" "$logname")
+            if [ "$is_valid" -eq 0 ]; then 
+                break
+            fi
         done
+        handle_input_if_requested "$filename" "$is_valid"
     else
-        cmd=$(prepare_cmd "$MODE" "$ftype" "$STAGE" | sed -e "s#FILE#'$filename'#")
-        exec_cmd "$cmd" "$ftype" "$MODE" "$stage"
-
+        cmd=$(prepare_cmd "$MODE" "$ftype" "$STAGE" | sed -e "s#FILE#$filename#")
+        is_valid=$(exec_cmd "$cmd" "$ftype" "$MODE" "$stage" "$logname")
+        handle_input_if_requested "$filename" "$is_valid"
     fi
 
 }