diff --git a/validate_workflow.sh b/validate_workflow.sh
index 2eda2e576eaaecb603fe8892425b86c52b880641..6ebd0f88f1703c3ff1bb3157f163e436bb7d2c0c 100755
--- a/validate_workflow.sh
+++ b/validate_workflow.sh
@@ -108,7 +108,7 @@ set -e
 check_argument_count() {
     local count="$1"
     local expected="$2"
-    if [ "${count}" -ne "${expected}" ]; then
+    if [[ "${count}" -ne "${expected}" ]]; then
         error "called function ${FUNCNAME[1]} expected ${expected} params, but got ${count} by caller function ${FUNCNAME[2]} (line ${BASH_LINENO[2]})"
         exit 1
     fi
@@ -116,7 +116,7 @@ check_argument_count() {
 
 check_argument_notempty() {
     local param="$1"
-    if [ -z "${param}" ]; then
+    if [[ -z "${param}" ]]; then
         error "called function ${FUNCNAME[1]} expected non-empty params, but some are empty set in line ${BASH_LINENO[0]}, eventually taken from caller function ${FUNCNAME[1]} (line ${BASH_LINENO[1]})"
         exit 1
     fi
@@ -174,7 +174,7 @@ trim_statistics() {
 }
 
 debug() {
-    if [ "${WITH_DEBUG}" -eq 1 ]; then
+    if [[ "${WITH_DEBUG}" -eq 1 ]]; then
         >&2 echo "DEBUG: $1"
     fi
 }
@@ -264,67 +264,67 @@ get_cli_args() {
                 ;;
         esac
     done
-    if [ "${FILES_MODE}" != "sort" ] && [ "${FILES_MODE}" != "delete" ] && [ "${FILES_MODE}" != "nothing" ]; then
+    if [[ "${FILES_MODE}" != "sort" ]] && [[ "${FILES_MODE}" != "delete" ]] && [[ "${FILES_MODE}" != "nothing" ]]; then
         error "param --files-mode must be 'sort', 'delete' or 'nothing'!"
         exit 1
     fi
-    if [ "${MODE}" != "auto" ] \
-        && [ "${MODE}" != "mediathek" ] \
-        && [ "${MODE}" != "fotothek" ] \
-        && [ "${MODE}" != "save" ] \
-        && [ "${MODE}" != "ddz" ] \
-        && [ "${MODE}" != "digas" ]; then
+    if [[ "${MODE}" != "auto" ]] \
+        && [[ "${MODE}" != "mediathek" ]] \
+        && [[ "${MODE}" != "fotothek" ]] \
+        && [[ "${MODE}" != "save" ]] \
+        && [[ "${MODE}" != "ddz" ]] \
+        && [[ "${MODE}" != "digas" ]]; then
         error "param --mode must be 'auto', 'mediathek', 'fotothek', 'save', 'ddz' or 'digas'!"
         exit 1
     fi
-    if [ "${WITH_PIPE}" -eq 1 ]; then
+    if [[ "${WITH_PIPE}" -eq 1 ]]; then
         if 
-            [ "${WITH_DAEMON}" -eq 1 ] \
-            || [ -n "${WATCH_FOLDER}" ] \
-            || [ -n "${RESULT_FOLDER}" ] \
-            || [ -n "${VALID_FOLDER}" ] \
-            || [ -n "${INVALID_FOLDER}" ] \
-            || [ "${FILES_MODE}" = "sort" ] \
+            [[ "${WITH_DAEMON}" -eq 1 ]] \
+            || [[ -n "${WATCH_FOLDER}" ]] \
+            || [[ -n "${RESULT_FOLDER}" ]] \
+            || [[ -n "${VALID_FOLDER}" ]] \
+            || [[ -n "${INVALID_FOLDER}" ]] \
+            || [[ "${FILES_MODE}" = "sort" ]] \
             ; then 
             error "param --pipe not combinable with params --daemon, --result-folder, --watch-folder, --valid-folder, --invalid-folder, --files-mode"
             exit 1
         fi
     else
-        if [ "${WITH_DAEMON}" -eq 1 ] &&  [ "${FILES_MODE}" = "sort" ]; then
+        if [[ "${WITH_DAEMON}" -eq 1 ]] &&  [[ "${FILES_MODE}" = "sort" ]]; then
             error "param --daemon does only work with param --mode='delete' or --mode='nothing'!"
             exit 1
         fi
-        if [ "${STAGE}" != "current" ] && [ "${STAGE}" != "upcoming" ] && [ "${STAGE}" != "any" ]; then
+        if [[ "${STAGE}" != "current" ]] && [[ "${STAGE}" != "upcoming" ]] && [[ "${STAGE}" != "any" ]]; then
             error "--param stage must be 'any', 'current' or 'upcoming'!"
             exit 1
         fi
-        if [ ! -d "${WATCH_FOLDER}" ]; then
+        if [[ ! -d "${WATCH_FOLDER}" ]]; then
             error "watch folder '${WATCH_FOLDER}' does not exist!"
             exit 1
         fi
-        if [ ! -d "${RESULT_FOLDER}" ]; then
+        if [[ ! -d "${RESULT_FOLDER}" ]]; then
             error "result folder '${RESULT_FOLDER}' does not exist!"
             exit 1
         fi
-        if [ "${FILES_MODE}" = "sort" ]; then
-            if [ ! -d "${VALID_FOLDER}" ]; then
+        if [[ "${FILES_MODE}" = "sort" ]]; then
+            if [[ ! -d "${VALID_FOLDER}" ]]; then
                 error "valid folder '${VALID_FOLDER}' does not exist!"
                 exit 1
             fi
-            if [ ! -d "${INVALID_FOLDER}" ]; then
+            if [[ ! -d "${INVALID_FOLDER}" ]]; then
                 error "invalid folder '${INVALID_FOLDER}' does not exist!"
                 exit 1
             fi
         fi
     fi
     cachedir=$(dirname "${STATFILE}")
-    if [ ! -d "${cachedir}" ]; then
+    if [[ ! -d "${cachedir}" ]]; then
         mkdir -p "${cachedir}" || error "Could not create dir ${cachedir}, $?"
     fi
-    if [ -e "${STATFILE}" ]; then
+    if [[ -e "${STATFILE}" ]]; then
         lines=$( flock -x "${LOCKFILE}" wc -l "${STATFILE}" | cut -d " " -f 1)
         debug "found ${lines} lines in ${STATFILE})"
-        if [ "${lines}" -gt "${MAX_STAT_LINES}" ]; then
+        if [[ "${lines}" -gt "${MAX_STAT_LINES}" ]]; then
             (
             flock -n 9 || exit 1
             trim_statistics
@@ -442,15 +442,15 @@ handle_input_if_requested() {
     check_argument_notempty "${filename}"
     check_argument_notempty "${is_valid}"
     debug "handle_input_if_requested, filename=${filename} is_valid=${is_valid}"
-    if [ "${FILES_MODE}" = "sort" ]; then
-        if [ "${is_valid}" -eq 0 ]; then
+    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
+    elif [[ "${FILES_MODE}" = "delete" ]]; then
         debug "handle_input_if_requested, rm ${filename} from watch-folder ${WATCH_FOLDER}"
         rm -f "${filename}"
     fi
@@ -461,7 +461,7 @@ get_logfile() {
     local filename="$1"
     local logname
     check_argument_notempty "${filename}"
-    if [ -n "${WATCH_FOLDER}" ] && [ "${WITH_PIPE}" -eq 0 ]; then
+    if [[ -n "${WATCH_FOLDER}" ]] && [[ "${WITH_PIPE}" -eq 0 ]]; then
         logname=$(echo "${filename}"| sed -e "s#^${WATCH_FOLDER}#${RESULT_FOLDER}#"  -e "s#\$#.log#")
     else # pipe uses a temp filename
         logname="${filename}.log"
@@ -469,7 +469,7 @@ get_logfile() {
     check_argument_notempty "${logname}"
     logdir=$(dirname "${logname}")
     check_argument_notempty "${logdir}"
-    if [ ! -d "${logdir}" ]; then
+    if [[ ! -d "${logdir}" ]]; then
         debug "get_logfile, mkdir ${logdir}"
         mkdir -p "${logdir}"
     fi
@@ -491,7 +491,7 @@ scan_file() {
     mimetype=$(get_mimetype "${filename}")
     ftype=$(prepare_ftype "${mimetype}")
     logname=$(get_logfile "${filename}")
-    if [ "${MODE}" = "auto" ]; then
+    if [[ "${MODE}" = "auto" ]]; then
         # try best guess
         MODE=$(estimate_mode "${mimetype}")
     fi
@@ -500,12 +500,12 @@ scan_file() {
     check_argument_notempty "${logname}"
     trap "" SIGINT
     debug "scan_file, === entering protected area ==="
-    if [ "${STAGE}" = "any" ]; then
+    if [[ "${STAGE}" = "any" ]]; then
         is_valid=1
         for stage in upcoming current; do
             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 
+            if [[ "${is_valid}" -eq 0 ]]; then
                 debug "scan_file, early break"
                 break
             else 
@@ -535,7 +535,7 @@ scan_dir() {
 
 get_cli_args "$@"
 #trap signalhandler SIGINT SIGABRT #sigint
-if [ "${WITH_PIPE}" -eq 1 ]; then
+if [[ "${WITH_PIPE}" -eq 1 ]]; then
     #cli mode, use stdin
     debug "checking stream"
     filename=$(mktemp --tmpdir validate_wrg.XXXX)
@@ -545,7 +545,7 @@ if [ "${WITH_PIPE}" -eq 1 ]; then
     rm -f "${filename}.log"  || error "could not remove temporary file '${filename}.log'"
     rm -f "${filename}" || error "could not remove temporary file '${filename}'"
 else 
-    if [ "${WITH_DAEMON}" -eq 1 ]; then
+    if [[ "${WITH_DAEMON}" -eq 1 ]]; then
         # TODO: protect DAEMON from STRG-C for clean shutdown
         # echo daemon mode, use inotify to watch changes
         debug "starting daemon"