diff --git a/check_php-fpm-status b/check_php-fpm-status
index 7f55346b2a91c3c95772120f1caaaf3022f93260..7cbfb03c4867916c8a3a2ff12c16318610d66d4e 100755
--- a/check_php-fpm-status
+++ b/check_php-fpm-status
@@ -7,18 +7,32 @@
 # script checks output of fpm "/status" and counts scoreboard chars
 # ----------------------------------------------------------------------
 # 2021-09-22  v0.1  <axel.hahn@iml.unibe.ch>  initial version
+# 2021-10-01  v0.2  <axel.hahn@iml.unibe.ch>  fetch full status as json
 # ======================================================================
 
 . `dirname $0`/inc_pluginfunctions
 
 tmpfile=/tmp/check_fpm_processes_1
-
 defaulturl=localhost/status
 
 # ----------------------------------------------------------------------
 # functions
 # ----------------------------------------------------------------------
 
+# get service data from json output
+function _getServicedata(){
+    cat $tmpfile | jq | grep '^\ \ "' | grep -v "\[" | cut -f 1 -d ","
+}
+
+function _getWorkerStates(){
+    cat $tmpfile | jq | grep '"state": ' | cut -f 2 -d ":" | cut -f 1 -d "," | sort -u
+}
+
+
+function _getWorkerOfState(){
+    cat $tmpfile | jq -c ".processes[] | select(.state == \"$1\" )"
+}
+
 # get a value from fpm status
 #
 # example output:
@@ -39,9 +53,11 @@ defaulturl=localhost/status
 #
 # param  string  variable (part before ":")
 function _getvalue(){
-        grep "^$1:" $tmpfile | cut -d ":" -f 2 | awk '{ print $1 }'
+        # grep "^$1:" $tmpfile | cut -d ":" -f 2 | awk '{ print $1 }'
+        _getServicedata | grep "^\ \ \"$1\":" | cut -d ":" -f 2 | awk '{ print $1 }'
 }
 
+
 function showHelp(){
 cat <<EOF
 ______________________________________________________________________
@@ -100,7 +116,7 @@ esac
 # ----------------------------------------------------------------------
 # pre checks
 # ----------------------------------------------------------------------
-ph.require wget
+ph.require jq wget
 
 
 # ----------------------------------------------------------------------
@@ -113,18 +129,13 @@ typeset -i iCriticalLimit=` ph.getValueWithParam 90 c "$@"`
 url=$( ph.getValueWithParam $defaulturl u "$@" )
 
 # --- get /server-status page
-wget --no-check-certificate -O $tmpfile $url 2>/dev/null
+wget --no-check-certificate -O $tmpfile "$url?full&json" 2>/dev/null
 if [ $? -ne 0 ]; then
-    rm -f $tmpfile
-    ph.abort "UNKNOWN: request to url $url failed. `wget --no-check-certificate -O - -S $url`"
+   rm -f $tmpfile
+   ph.abort "UNKNOWN: request to url $url failed. `wget --no-check-certificate -O - -S $url`"
 fi
 
 # ----------------------------------------------------------------------
-# get values from status output
-# ----------------------------------------------------------------------
-
-# --- handled requests per sec
-typeset -i iConn=$(      _getvalue "accepted conn")
 typeset -i iSpeed=$(     ph.perfdeltaspeed "fpm-accepted" $iConn )
 
 # --- count slots
@@ -140,6 +151,11 @@ typeset -i iSlow=$(      ph.perfdeltaspeed "fpm-slow" $iSlowTotal )
 typeset -i iMaxChilds=$( _getvalue "max children reached")
 
 
+typeset -i iWorkerRunning=$( _getWorkerOfState "Running"         | wc -l )
+typeset -i iWorkerReading=$( _getWorkerOfState "Reading headers" | wc -l )
+typeset -i iWorkerIdle=$(    _getWorkerOfState "Idle"            | wc -l )
+
+
 # ----------------------------------------------------------------------
 # set status
 # ----------------------------------------------------------------------
@@ -153,20 +169,30 @@ if [ $iMaxChilds -gt 0 ]; then
     # ph.setStatus critical
     ph.setStatus warning
 fi
-if [ $iIdle -eq 0 ]; then
-    ph.setStatus critical
+if [ $iWorkerIdle -eq 0 ]; then
+    ph.setStatus warning
+fi
+if [ $iWorkerReading -eq 0 ]; then
+    ph.setStatus warning
 fi
 
-
 # ----------------------------------------------------------------------
 # output
 # ----------------------------------------------------------------------
 ph.status "PHP-FPM: active: $iActive (max: $iMaxActive) .. idle workers: $iIdle .. queue: $iQueue (max: $iMaxQueue) .. speed: $iSpeed req per sec ... slow: $iSlow req per sec (total: $iSlowTotal)"
+echo Worker states: running: $iWorkerRunning .. Reading headers: $iWorkerReading .. Idle: $iWorkerIdle
 echo
 hint="!! IMPORTANT !! Any non-OK status is still experimmental."
-if [ $iIdle -eq 0 ]; then
+if [ $iWorkerIdle -eq 0 ]; then
+    echo $hint
+    echo "WARNING: No idle workers available."
+    echo "         Maybe there is a current peak only."
+    echo "         Or count of allowed workers (pm.max_children) or spare servers (pm.XXX_spare_servers) is too low."
+    echo
+fi
+if [ $iWorkerReading -eq 0 ]; then
     echo $hint
-    echo "WARNING: $iIdle idle workers available."
+    echo "WARNING: No reading workers available."
     echo "         Maybe there is a current peak only."
     echo "         Or count of allowed workers (pm.max_children) or spare servers (pm.XXX_spare_servers) is too low."
     echo
@@ -187,20 +213,31 @@ if [ $iSlow -gt 0 ]; then
     echo
 fi
 
-cat $tmpfile
+echo "--- Status of service"
+_getServicedata
+
+echo
+echo "--- workers in state Running"
+_getWorkerOfState "Running"
 echo
 
 # --- add performnce data
 ph.perfadd "php-fpm-active"    "${iActive}"    "" "" 0 0
 ph.perfadd "php-fpm-maxactive" "${iMaxActive}" "" "" 0 0
-ph.perfadd "php-fpm-idle"      "${iIdle}"      "" "" 0 0
+# ph.perfadd "php-fpm-idle"      "${iIdle}"      "" "" 0 0
+
 ph.perfadd "php-fpm-queue"     "${iQueue}"     "" "" 0 0
 ph.perfadd "php-fpm-maxqueue"  "${iMaxQueue}"  "" "" 0 0
 ph.perfadd "php-fpm-slow"      "${iSlow}"      "" "" 0 0
 ph.perfadd "php-fpm-speed"     "${iSpeed}"     "" "" 0 0
 
-rm -f $tmpfile
+# use process infos to count by worker state:
+ph.perfadd "php-fpm-idle"      "${iWorkerIdle}"      "" "" 0 0
+ph.perfadd "php-fpm-running"   "${iWorkerRunning}"   "" "" 0 0
+ph.perfadd "php-fpm-reading"   "${iWorkerReading}"   "" "" 0 0
+
 
+rm -f $tmpfile
 ph.exit
 
 # ----------------------------------------------------------------------