diff --git a/cms/digi/cms-digi/cms-digi-bmk.sh b/cms/digi/cms-digi/cms-digi-bmk.sh
index 1d8eeea46fd8c4e27bd30fbfab4acd9a287eb490..a121405a08d068eb0808767f4754a3e6c194214c 100755
--- a/cms/digi/cms-digi/cms-digi-bmk.sh
+++ b/cms/digi/cms-digi/cms-digi-bmk.sh
@@ -36,6 +36,25 @@ function doOne(){
   return $status
 }
 
+function getEvents(){
+  export CMSSW_RELEASE=CMSSW_10_2_9
+  export VO_CMS_SW_DIR=/cvmfs/cms.cern.ch
+  source $VO_CMS_SW_DIR/cmsset_default.sh
+  export SCRAM_ARCH=slc6_amd64_gcc700
+  [[ ! -e ${CMSSW_RELEASE} ]] && scram project CMSSW ${CMSSW_RELEASE} &> /dev/null
+  (pushd ${CMSSW_RELEASE}; eval `scramv1 runtime -sh`; popd) &> /dev/null
+  ln -s ${BMKDIR}/data/*.root .
+  evts=`python -c "import ROOT;f=ROOT.TFile.Open('gensim.root');print f.Get('Events').GetEntries();"`
+  STATUS=$?
+  rm -rf ${CMSSW_RELEASE}
+  rm -f gensim.root
+  if [[ $STATUS != 0 ]] ; then
+      return 0
+  else
+      return $evts
+  fi
+}
+
 # Optional function validateInputArguments may be defined in each benchmark
 # If it exists, it is expected to set NCOPIES, NTHREADS, NEVENTS_THREAD
 # (based on previous defaults and on user inputs USER_NCOPIES, USER_NTHREADS, USER_NEVENTS_THREADS)
@@ -59,6 +78,17 @@ function validateInputArguments(){
   fi
   # Number of events per thread
   if [ "$USER_NEVENTS_THREAD" != "" ]; then NEVENTS_THREAD=$USER_NEVENTS_THREAD; fi
+  # Extract number of events in input file
+  getEvents
+  evts=$?
+  if [[ $evts == 0 ]] ; then
+      s_msg="[ERROR] Cannot extract number of events from input file"
+      return 1
+  fi
+  if [[ $((NEVENTS_THREAD * NTHREADS)) -gt $evts ]] ; then
+      s_msg="[ERROR] Requested number of events ($((NEVENTS_THREAD * NTHREADS))) exceeds number of input events ($evts)"
+      return 1
+  fi
   # Return 0 if input arguments are valid, 1 otherwise
   # Report any issues to parseResults via s_msg
   export s_msg="ok"
diff --git a/cms/digi/cms-digi/parseResults.sh b/cms/digi/cms-digi/parseResults.sh
index 5df6841cebe9b365a676163369c4e81e18d20236..73a43fc396a14643e6e0666784c0f019d83018ed 100644
--- a/cms/digi/cms-digi/parseResults.sh
+++ b/cms/digi/cms-digi/parseResults.sh
@@ -1,5 +1,5 @@
 function generateSummary(){
-  echo -e "{\"copies\":$NCOPIES , \"threads_per_copy\":$NTHREADS , \"events_per_thread\" : $NEVENTS_THREAD , \"wl-scores\": $res_score, \"wl-stats\": {\"throughput_score\": $res_thr , \"CPU_score\": $res_cpu }, \"log\": \"${s_msg}\", \"app\": `cat $BMKDIR/version.json` }" > ${APP}_summary.json
+  echo -e "{\"copies\":$NCOPIES , \"threads_per_copy\":$NTHREADS , \"events_per_thread\" : $nevt_thr , \"wl-scores\": $res_score, \"wl-stats\": {\"throughput_score\": $res_thr , \"CPU_score\": $res_cpu }, \"log\": \"${s_msg}\", \"app\": `cat $BMKDIR/version.json` }" > ${APP}_summary.json
   cat ${APP}_summary.json
 }
 
@@ -33,23 +33,23 @@ function parseResults(){
     #-----------------------
     echo "[parseResults] parsing results from" proc_*/out_*.log
     # Documentation of cmssw time report at https://github.com/cms-sw/cmssw/blob/09c3fce6626f70fd04223e7dacebf0b485f73f54/FWCore/Services/plugins/Timing.cc#L240
-    # Parsing  Event Throughput: xxxx ev/s
-    res_thr=`grep -H "Event Throughput" proc_*/out_*.log | sed -e "s@[^:]*: Event Throughput: \([ 0-9\.]*\) ev/s@\1@" | awk 'BEGIN{amin=1000000;amax=0;count=0;}  { val=$1; a[count]=val; count+=1; sum+=val; if(amax<val) amax=val; if(amin>val) amin=val} END{n = asort(a); if (n % 2) {   median=a[(n + 1) / 2]; } else {median=(a[(n / 2)] + a[(n / 2) + 1]) / 2.0;};
-printf "{\"score\": %.4f, \"avg\": %.4f, \"median\": %.4f, \"min\": %.4f, \"max\": %.4f}", sum, sum/count, median, amin, amax
-}'  nevt=$NEVENTS_THREAD nthread=$NTHREADS || (echo "{}"; return 1)`
+    # Parsing Number of Events
+    nevt_thr=`grep -h "Number of Events" proc_*/out_*.log | sed -e "s@.*:\([ 0-9\.]*\).*@\1@" | awk 'BEGIN{n=0; count=0;} {n+=$1; count+=1} END{print n/count/nthreads}' nthreads=$NTHREADS || (echo "{}"; return 1)`
     STATUS_1=$?
 
-    #Duplicating above parsing, as quick and dirty. SHoudl be replaced by a python parser
-    res_score=`grep -H "Event Throughput" proc_*/out_*.log | sed -e "s@[^:]*: Event Throughput: \([ 0-9\.]*\) ev/s@\1@" | awk 'BEGIN{amin=1000000;amax=0;count=0;}  { val=$1; a[count]=val; count+=1; sum+=val; if(amax<val) amax=val; if(amin>val) amin=val} END{n = asort(a); if (n % 2) {   median=a[(n + 1) / 2]; } else {median=(a[(n / 2)] + a[(n / 2) + 1]) / 2.0;};
-printf "{\"digi\": %.4f}", sum
-}'  nevt=$NEVENTS_THREAD nthread=$NTHREADS || (echo "{}"; return 1)`
+    # Parsing  Event Throughput: xxxx ev/s
+    res_thr=`grep -H "Event Throughput" proc_*/out_*.log | sed -e "s@[^:]*: Event Throughput: \([ 0-9\.]*\) ev/s@\1@" | awk 'BEGIN{amin=1000000;amax=0;count=0;}  { val=$1; a[count]=val; count+=1; sum+=val; if(amax<val) amax=val; if(amin>val) amin=val} END{n = asort(a); if (n % 2) {   median=a[(n + 1) / 2]; } else {median=(a[(n / 2)] + a[(n / 2) + 1]) / 2.0;}; printf "{\"score\": %.4f, \"avg\": %.4f, \"median\": %.4f, \"min\": %.4f, \"max\": %.4f}", sum, sum/count, median, amin, amax}' || (echo "{}"; return 1)`
+    STATUS_2=$?
+
+    #Duplicating above parsing, as quick and dirty. Should be replaced by a python parser
+    res_score=`grep -H "Event Throughput" proc_*/out_*.log | sed -e "s@[^:]*: Event Throughput: \([ 0-9\.]*\) ev/s@\1@" | awk 'BEGIN{amin=1000000;amax=0;count=0;}  { val=$1; a[count]=val; count+=1; sum+=val; if(amax<val) amax=val; if(amin>val) amin=val} END{n = asort(a); if (n % 2) {   median=a[(n + 1) / 2]; } else {median=(a[(n / 2)] + a[(n / 2) + 1]) / 2.0;}; printf "{\"digi\": %.4f}", sum}' || (echo "{}"; return 1)`
+    STATUS_3=$?
 
     # Parsing  CPU Summary: \n- Total loop:: xxxx seconds of all CPUs
-    res_cpu=`grep -H -A2 "CPU Summary" proc_*/out_*.log | grep "Total loop" | sed -e "s@.*\sTotal loop: \([ 0-9\.]*\)@\1@" | awk 'BEGIN{amin=1000000;amax=0;count=0;}  { val=nevt*nthread/$1; a[count]=val; count+=1; sum+=val; if(amax<val) amax=val; if(amin>val) amin=val} END{n = asort(a); if (n % 2) {median=a[(n + 1) / 2]; } else {median=(a[(n / 2)] + a[(n / 2) + 1]) / 2.0;};
-printf "{\"score\": %.4f, \"avg\": %.4f, \"median\": %.4f, \"min\": %.4f, \"max\": %.4f}", sum, sum/count, median, amin, amax
-}' nevt=$NEVENTS_THREAD nthread=$NTHREADS || (echo "{}"; return 1)`
-    STATUS_2=$?
-    [[ "$STATUS_1" == "0" ]] && [[ "$STATUS_2" == "0" ]]
+    res_cpu=`grep -H -A2 "CPU Summary" proc_*/out_*.log | grep "Total loop" | sed -e "s@.*\sTotal loop: \([ 0-9\.]*\)@\1@" | awk 'BEGIN{amin=1000000;amax=0;count=0;}  { val=nevt*nthreads/$1; a[count]=val; count+=1; sum+=val; if(amax<val) amax=val; if(amin>val) amin=val} END{n = asort(a); if (n % 2) {median=a[(n + 1) / 2]; } else {median=(a[(n / 2)] + a[(n / 2) + 1]) / 2.0;}; printf "{\"score\": %.4f, \"avg\": %.4f, \"median\": %.4f, \"min\": %.4f, \"max\": %.4f}", sum, sum/count, median, amin, amax}' nevt=$nevt_thr nthreads=$NTHREADS || (echo "{}"; return 1)`
+    STATUS_4=$?
+
+    [[ "$STATUS_1" == "0" ]] && [[ "$STATUS_2" == "0" ]] && [[ "$STATUS_3" == "0" ]] && [[ "$STATUS_4" == "0" ]]
     STATUS=$?
     [[ "$STATUS" != "0" ]] && export s_msg="ERROR"
     echo "[parseResults] parsing completed (status=$STATUS)"