diff --git a/icinga-cli.sh b/icinga-cli.sh
index 670c262fae27691ff56fa0a84bcb47e41805a64e..973b9df8b0f278a50a71d2372fc779b1a0aba352 100755
--- a/icinga-cli.sh
+++ b/icinga-cli.sh
@@ -21,12 +21,12 @@
 # 2023-02-17  v0.14  ah  add hostnamme into CFGSTORAGE
 # 2023-02-17  v0.15  ah  check inc_getconfig.sh exists and hostname -f has a value
 # 2023-11-01  v0.16  ah  generate json with "jo"
-# 2023-11-02  v0.17  ah  generate json with "jo"
+# 2023-11-02  v0.17  ah  fix line breaks of sent output, shell check fixes
 # ======================================================================
 
 
 _product="ICINGA PASSIVE CLIENT"
-_version="0.16"
+_version="0.17"
 _license="GNU GPL 3.0"
 _copyright='(c) Institute for Medical Education * University of Bern'
 
@@ -103,14 +103,6 @@ function _getFileSnapshot(){
 #
 function loopChecks(){
 
-      # TODO-MEMORY-CHECK
-      # echo ${MY_NAME} | egrep "^(kvm4|icinga)"
-      # echo ${MY_NAME} | egrep "^(monitortest)"
-      # if [ $? -ne 0 ]; then
-      #   echo "HARD EXIT - DO NOT EXECUTE ANY CHECK ON $MY_NAME"
-      #   exit 1
-      # fi
-
       local lockfile
       lockfile="${dir_data}/loop.pid"
       local snapShotStart
@@ -129,6 +121,8 @@ function loopChecks(){
       fi
 
       _log "---------- starting in a permanent loop"
+      icingaHostMustExist
+
       echo "Serviceloop started $(date) - process id $$" > "${lockfile}"
       if [ $? -ne 0 ]; then
           _elog "ABORT: Lock file is not writable ${lockfile}."
@@ -145,23 +139,21 @@ function loopChecks(){
       while true; do
         # typeset -i local iSleep=$(($RANDOM%$sleeptime))
         # sleep minimum is half of $sleeptime
-        typeset -i local iSleep=$(($RANDOM%$sleeptime/2+$sleeptime/2))
+        local iSleep
+        typeset -i iSleep=$(($RANDOM%$sleeptime/2+$sleeptime/2))
         _log "sleeping $iSleep sec ..."
         sleep $iSleep
         _log "______________________________________________________________________"
         _log ""
-        _getFileSnapshot>$snapShotCurrent
-        if [ $? -ne 0 ]; then
+        if ! _getFileSnapshot > "$snapShotCurrent"; then
             _elog "ABORT: Snapshot file is not writable ${snapShotCurrent}."
             _elog $( ls -l "${snapShotCurrent}" )
             exit 1
         fi
-        diff  $snapShotStart $snapShotCurrent >/dev/null
-        if [ $? -ne 0 ]; then
-          _elog "ABORT: Files were updated / overwritten. The loop must be restarted.\n`diff  $snapShotStart $snapShotCurrent`"
+        if ! diff "$snapShotStart" "$snapShotCurrent" >/dev/null; then
+          _elog "ABORT: Files were updated / overwritten. The loop must be restarted.\n$(diff  $snapShotStart $snapShotCurrent)"
           exit 1
         fi
-        icingaHostMustExist
         processAllChecks
       done
 }
@@ -172,13 +164,15 @@ function loopChecks(){
 #
 function processAllChecks(){
   # loop over all defined checks
-  typeset -i local iChecksTotal
+  local iChecksTotal; typeset -i iChecksTotal
+  local iCounter;     typeset -i iCounter
+  local iLoopStart;   typeset -i iLoopStart
+  local iLoopEnd;     typeset -i iLoopEnd
+  local iLoopTime;    typeset -i iLoopTime
+
   iChecksTotal=$(getChecks | wc -l)
-  typeset -i local iCounter
   iCounter=0
-
   _rc_all=0
-  typeset -i local iLoopStart
   iLoopStart=$(_getUnixTs)
 
   _log ""
@@ -191,48 +185,19 @@ function processAllChecks(){
     _log ""
 
   done
-  typeset -i local iLoopEnd
   iLoopEnd=$(_getUnixTs)
-  typeset -i local iLoopTime
   iLoopTime=$iLoopEnd-$iLoopStart
 
   _log "------ loop done - needed $iLoopTime sec - rc=$_rc_all"
 }
 
-# ......................................................................
-#
-# parse a config file and set global vars:
-#   checkName
-#   checkCommand
-#   checkInterval
-# param  string  full path of a config file
-#
-function UNUSED_parseCheckConfig(){
-  local _myconfig="$1"
-
-  if [ ! -r "$_myconfig" ]; then
-    _elog "ERROR: config file is not readable [$_myconfig]"
-    exit 1
-  fi
-
-  # EXAMPLE a config contains ...
-  # checkname=check_cronstatus
-  # command=check_cronstatus -param1 -param2
-  # interval=60
-
-  checkName=$(cat $_myconfig | grep ^checkname= | cut -f 2 -d "=")
-  checkCommand=$(cat $_myconfig | grep ^command= | cut -f 2 -d "=")
-  checkInterval=$(cat $_myconfig | grep ^interval= | cut -f 2 -d "=")
-
-}
-
 # actions for icinga host
 # param  string  action; "get" only
 function icingaHost(){
   local _logPrefix="${MY_NAME} :: API |"
   local _apiRequest=objects/hosts/${MY_NAME}
   local _localCache=${dir_data}/host_${MY_NAME}_deployed-at-icinga.txt
-  typeset -i local _iRefreshCache=120
+  local _iRefreshCache; typeset -i _iRefreshCache=120
 
   local sAction=$1
 
@@ -305,20 +270,23 @@ function processCheck(){
   local _myconfig=$1
   local _force=$2
 
-  typeset -i local iPipes
-  typeset -i local iCheckStart
-  iCheckStart=$(_getUnixTs)
-
-  _parseCheckConfig "${_myconfig}"
-  local _logPrefix="${checkName} |"
-  _log "${_logPrefix} INFO: every ${checkInterval} sec: ${checkCommand}"
+  local iPipes;      typeset -i iPipes
+  local iCheckStart; typeset -i iCheckStart
 
   local _outfile=${dir_data}/service__check__${checkName}__output.txt
   local _output
   local _FoundErrors
   local _response=${dir_data}/service__check__${checkName}__icinga_response.txt
-  typeset -i local _rc=0
+  local _rc; typeset -i _rc=0
 
+  local iTsEnd;   typeset -i iTsEnd
+  local iTsStart; typeset -i iTsStart
+
+  iCheckStart=$(_getUnixTs)
+
+  _parseCheckConfig "${_myconfig}"
+  local _logPrefix="${checkName} |"
+  _log "${_logPrefix} INFO: every ${checkInterval} sec: ${checkCommand}"
 
   _initHttp
 
@@ -328,7 +296,6 @@ function processCheck(){
     _log "${_logPrefix} INFO: Never executed before"
     doRun=1
   else
-    # typeset -i iAgeLastRun=$(($(date +%s) - $(date +%s -r "$_outfile")))
     typeset -i iAgeLastRun
     iAgeLastRun=$(_getFileAge "$_outfile")
     _log "${_logPrefix} INFO: last run was $iAgeLastRun sec ago ... vs Interval = $checkInterval ... sleeptime = $sleeptime"
@@ -355,37 +322,35 @@ function processCheck(){
       # --- this executes the check plugin ...
       #
       _log "${_logPrefix} starting $myFullscript $myparams"
-      typeset -i local iTsStart=`date +%s`
-      # $myFullscript $myparams | tee $_outfile
-      eval $myFullscript $myparams > $_outfile
+      iTsStart=$(date +%s)
+      eval $myFullscript $myparams > "$_outfile"
       rc=$?
       if [ ! -w $_outfile ]; then
             _elog "${_logPrefix} ERROR: output file $_outfile is not writable."
             _elog "${_logPrefix} $( ls -ld ${dir_data} $_outfile )"
             exit 1
       fi
-      test $rc -gt 0 && _FoundErrors+="Exitcode of check is $rc (greater zero).\n"
-      typeset -i local iTsEnd=`date +%s`
-      # outPerfdata=`grep '|' $_outfile | cut -f 2 -d '|'`
-      outPerfdata=`grep '|' $_outfile | rev | cut -f 1 -d '|' | rev`
+      test $rc -gt 0 && _FoundErrors+="Exitcode of check is greater zero ... "
+      iTsEnd=$(date +%s)
+      outPerfdata=$(grep '|' $_outfile | rev | cut -f 1 -d '|' | rev | grep "=")
       _output="$( cat "$_outfile" )"
       _echo
       _echo -------- check output:
       _echo "$_output"
 
       iPipes=$( grep -o "|" < "$_outfile" | wc -l )
-      _echo "Pipe chars: $iPipes"
+      # _echo "Pipe chars: $iPipes"
       if [[ $iPipes -gt 1 ]]; then
         _elog "WARNING - pipes were found in plugin output"
         _elog "command was: $myFullscript $myparams"
         _log "${_logPrefix} WARNING - pipes were found in plugin output"
       fi
-      # sed -i "s#|#:#g" "$_outfile"
 
       _echo
-      # echo -------- extracted performance data:
-      # echo $outPerfdata
-      # echo
+
+      #
+      # --- extract performance data:
+      #
       if ! test -n "$outPerfdata" && echo "$outPerfdata" | grep "=[0-9\.]*;[0-9\.]*;[0-9\.]*;[0-9\.]*;" >/dev/null; then
         _elog "WARNING - this does not look like performance data: $outPerfdata"
         _elog "command was: $myFullscript $myparams"
@@ -395,29 +360,24 @@ function processCheck(){
       _log "${_logPrefix} check command finished with returncode $rc"
 
       _rc=$_rc+$rc
+
       #
       # --- send check result to Icinga
       #     fields of the object
       #     https://icinga.com/docs/icinga2/latest/doc/12-icinga2-api/#process-check-result
-      
-
-      commandAsJson="$(jq -nR --arg data """${myFullscript} $myparams""" '$data')"
-      outAsJson="$(    jq -nR --arg data """${_output}""" '$data')"
-
-      local JSONPARAMS="
-        check_source=${MY_NAME}
-        check_command=${commandAsJson}
-        exit_status=$rc
-        ttl=$checkInterval
-        execution_start=$iTsStart
-        execution_end=$iTsEnd
-        performance_data="\"${outPerfdata}\""
-        plugin_output=$outAsJson
-      "
-     
-      data=$( eval jo -p -d. $JSONPARAMS )
-
-      slot="`_getName4Svcathost ${checkName} | sed 's# #%20#g'`"
+      #
+      data="$( jo  \
+          check_source=${MY_NAME}                 \
+          check_command="""${myFullscript} $myparams"""          \
+          exit_status=$rc                         \
+          ttl=$checkInterval                      \
+          execution_start=$iTsStart               \
+          execution_end=$iTsEnd                   \
+          performance_data="\"${outPerfdata}\""   \
+          plugin_output="""${_output}""" 
+      )"
+
+      slot="$(_getName4Svcathost ${checkName} | sed 's# #%20#g')"
 
       _log "${_logPrefix} starting POST of data to monitoring server"
       _echo POST actions/process-check-result?service=${MY_NAME}!${slot} "$data"
@@ -430,18 +390,20 @@ function processCheck(){
       fi
 
       # --- check if data were sent successfully
-      # fgrep "HTTP/1.1 200" ${_response} >/dev/null
-      # _testHttpOk ${_response} >/dev/null
-      http.isOk >/dev/null
-      if [ $? -eq 0 ]; then
+      if http.isOk >/dev/null; then
         _log "${_logPrefix} rc=$rc - OK, response was sent to Icinga"
       else
-        _elog "${_logPrefix} rc=$rc - WARNING: $(http.getStatuscode) the check response was NOT sent to Icinga"
+        local httpcode; httpcode=$(http.getStatuscode)
         _rc=$_rc+1
-        _FoundErrors+="Response was not sent to Icinga."
+        case $httpcode in
+          404) _FoundErrors+="Icinga response $httpcode: host or service check was not created in Icinga yet ... " ;;
+          *)   _FoundErrors+="Icinga response was not sent to Icinga: $httpcode ... " ;;
+        esac
         _echo
-        _echo For Debugging:
-        _echo "$data"
+        _elog "${_logPrefix} rc=$rc - $_FoundErrors"
+        # _echo
+        # _echo For Debugging:
+        # _echo "$data"
         _log "$data"
       fi
 
@@ -454,11 +416,13 @@ function processCheck(){
   # add current result to global returncode
   _rc_all=$_rc_all+$_rc
 
-  typeset -i local iCheckEnd=`_getUnixTs`
-  typeset -i local iCheckTime=$iCheckEnd-$iCheckStart
+  local iCheckEnd; typeset -i iCheckEnd
+  local iCheckTime; typeset -i iCheckTime
+
+  iCheckEnd=$(_getUnixTs)
+  iCheckTime=$iCheckEnd-$iCheckStart
 
   _log "${_logPrefix} finished after $iCheckTime sec with returncode $_rc"
-  test $_rc -eq 0 || (_echo; _echo "ERRORS: [${checkName}] $_FoundErrors"; _echo; _echo)
 }
 # ----------------------------------------------------------------------
 # help
@@ -466,7 +430,7 @@ function processCheck(){
 
 # show help text
 function showHelp(){
-self=`basename $0`
+self=$(basename $0)
 cat <<EOH
 
 
@@ -489,7 +453,7 @@ GENERAL PARAMETERS
     show this help and abort.
 
   --version or -v
-    show the version abd abort
+    show the version abd abort. It must be the 1st parameter.
 
 SERVICE ACTIONS
 
@@ -538,11 +502,7 @@ DEBUGGING
 EOH
 }
 
-function showVersion(){
-  echo "$_license"
-  echo "$_copyright"
-  echo
-}
+
 # ----------------------------------------------------------------------
 #
 # MAIN
@@ -551,6 +511,7 @@ function showVersion(){
 
 . "$( dirname $0 )/inc_functions.sh"
 
+# show version without header
 if [ "$1" = "--version" ] || [ "$1" = "-v" ]; then
   echo "$( basename $0) v$_version"
   echo "$_license .. $_copyright"
@@ -601,9 +562,6 @@ if [ -z "${dir_cfg}" ]; then
   exit 1
 fi
 
-icingaHostMustExist
-
-
 touch ${logfile}
 
 
@@ -615,11 +573,6 @@ do
       showHelp
       exit 0
       ;;
-    '--version' | '-v')
-      showVersion
-      exit 0
-      ;;
-
 
     '--list')
       getChecks