diff --git a/README.md b/README.md
index a4a28b75b812bf4eb994bbd20c8423bf0151e4f6..e1d3af15908e416c6f3c565145771adade62baa6 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,8 @@
+# About this branch
+
+This branch is used for timing purposes. It will be periodically updated by merging `devel`, but no new features will be implemented here. The Scan Operator in this branch will produce a `.json` file containing detailed timing inforamation regarding all the functions that this framework is using. If we find this useful enough, we can always merge into  `devel` in a later stage.
+
+
 The Scan Operator is an integration tool for scan data and DCS data. These are its main features:
 
   - Calls Yarr repeatedly to **run a sequence of scans on Rd53a**.
diff --git a/ScanOperator.sh b/ScanOperator.sh
index 4fe3f74d7eaa0483bc777c4976ef72161564653c..a6d48113ee243b085af9bb4a9f09344bc4a176a8 100755
--- a/ScanOperator.sh
+++ b/ScanOperator.sh
@@ -1,5 +1,11 @@
 #!/bin/bash
 
+export SOBASE=$(cd $(dirname $0); pwd)
+export TIMING_OUT="$SOBASE/timing.json"
+jq -n '{"total"}' > tmp && mv tmp $TIMING_OUT
+jq '.total += {"type": "total"}' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
+START_ALL=$(date +%s.%N)
+
 dcsOnOff=false
 ivCurve=0
 quietMode=0
@@ -50,7 +56,10 @@ export YARR_DIR=`jq -j '.YARR.YARR_directory' $CFGFILE`
 export CFGFILE=$CFGFILE
 export SCAN_DIR=$YARR_DIR/configs/scans/rd53a/
 export RunCounter_path=$HOME/.yarr/runCounter
-export SOBASE=$(cd $(dirname $0); pwd)
+
+jq '. += {"modules"}' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
+jq '.modules += []' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
+
 
 if [ $dcsOnOff ] || [ $dcsMnitor ] || [$ivCurve]
 then
@@ -59,7 +68,12 @@ then
 fi
 if [ $ivCurve != 0 ]
 then
+    jq '.modules += [{"label": "iv/vi curves"}]' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
+    jq '.modules[-1] += {"type": "iv_script"}' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
+    START=$(date +%s.%N)
     python3 $SOBASE/libDCS/qaqc.py -e $(jq -j '.dcs_control.LR_config' $CFGFILE) -j $SOBASE/configs/ivscan.json -w $ivCurve
+    END=$(date +%s.%N)
+    jq --argjson a $(echo "($END - $START)*1000" | bc) '.modules[-1] += {"time_real": "\($a)"}' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
 fi
 if [ -z $module_id ];then
     echo "You didn't specify the Module ID (option '-m')."
@@ -76,6 +90,9 @@ if $createConfig ; then
 fi
 
 if $dcsOnOff ;then
+    jq '.modules += [{"label": "turn on DCS"}]' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
+    jq '.modules[-1] += {"type": "scan_operator"}' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
+    START=$(date +%s.%N)
     echo -e "\nTurning ON the DCS..."
     bin="$(jq -j '.dcs_control.LR_binary' $CFGFILE)"
     cfg="$(jq -j '.dcs_control.LR_config' $CFGFILE)"
@@ -88,6 +105,8 @@ if $dcsOnOff ;then
         I="$(jq -j ".dcs_control.channels[$i].current" $CFGFILE)"
         python3 $SOBASE/libDCS/qaqc.py -e $cfg -c $chn power-on 
     done
+    END=$(date +%s.%N)
+    jq --argjson a $(echo "($END - $START)*1000" | bc) '.modules[-1] += {"time_real": "\($a)"}' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
 fi
 
 echo -e "\nRunning the sequence of scans"
@@ -118,6 +137,9 @@ done
 
 
 if $dcsOnOff ;then
+    jq '.modules += [{"label": "turn off DCS"}]' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
+    jq '.modules[-1] += {"type": "scan_operator"}' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
+    START=$(date +%s.%N)
     echo -e "\nTurning OFF the DCS..."
     bin="$(jq -j '.dcs_control.LR_binary' $CFGFILE)"
     cfg="$(jq -j '.dcs_control.LR_config' $CFGFILE)"
@@ -128,4 +150,9 @@ if $dcsOnOff ;then
         chn="$(jq -j ".dcs_control.channels[$i].name" $CFGFILE)"
         python3 $SOBASE/libDCS/qaqc.py -e $cfg -c $chn power-off
     done
+    END=$(date +%s.%N)
+    jq --argjson a $(echo "($END - $START)*1000" | bc) '.modules[-1] += {"time_real": "\($a)"}' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
 fi
+
+END_ALL=$(date +%s.%N)
+jq --argjson a $(echo "($END_ALL - $START_ALL)*1000" | bc) '.total += {"time_real": "\($a)"}' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
diff --git a/scanLauncher.sh b/scanLauncher.sh
index f83342dcb26928e96fae7aa1c1c3d6dbaf8f5c6c..7b1819036e1ecf7d0fe5deb43e130750e483706b 100755
--- a/scanLauncher.sh
+++ b/scanLauncher.sh
@@ -64,6 +64,7 @@ do
 done
 check_value $module_id
 check_value $scan
+ScanName=${scan##*/}
 
 if [ ! -e $scan ] ;then
     scan="$SCAN_DIR$scan.json"
@@ -86,6 +87,11 @@ LOGFILE="${result_data_DIR}OperatorLog."`date "+%Y%m%d_%H%M%S"`
 ###############################################
 
 if ${dcsMonitor} ;then
+
+    jq '.modules += [{"label": "Read Single DCS"}]' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
+    jq --argjson a $ScanName '.modules[-1] += {"type": "\($a)"}' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
+    START=$(date +%s.%N)
+
     echo " | | [INFO] Getting single [V, I] measurement"
     cfg="$(jq -j '.dcs_control.LR_config' $CFGFILE)"
     chn=""
@@ -98,11 +104,19 @@ if ${dcsMonitor} ;then
     done
     chn="${chn::-1}"
 
+    END=$(date +%s.%N)
+    jq --argjson a $(echo "($END - $START)*1000" | bc) '.modules[-1] += {"time_real": "\($a)"}' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
+
     python3 $SOBASE/libDCS/qaqc.py -e $cfg -c $chn measure
     # Tell read_dcs_background.sh that we're performing a scan
     echo "1" > $SOBASE/.tmp
     $SOBASE/libDCS/read_dcs_background.sh &
 fi
+
+jq '.modules += [{"label": "chip config"}]' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
+jq --argjson a $ScanName '.modules[-1] += {"type": "\($a)"}' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
+START=$(date +%s.%N)
+
 targetCharge=$(jq -j '.YARR.scan.target_charge' $CFGFILE)
 targetPreamp=$(jq -j '.YARR.scan.target_preamp' $CFGFILE)
 targetTot=$(jq -j '.YARR.scan.target_tot' $CFGFILE)
@@ -137,6 +151,13 @@ do
     jq --argjson a $specNum '.ctrlCfg.cfg.specNum = $a' $ctrlFile > tmp && mv tmp $ctrlFile
 done
 
+END=$(date +%s.%N)
+jq --argjson a $(echo "($END - $START)*1000" | bc) '.modules[-1] += {"time_real": "\($a)"}' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
+
+jq '.modules += [{"label": "scan"}]' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
+jq --argjson a $ScanName '.modules[-1] += {"type": "\($a)"}' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
+START=$(date +%s.%N)
+
 comm="$YARR_DIR/bin/scanConsole -r $ctrlFile -c $cnctFile -p -t ${targetAmpOrCharge} ${targetTot} -s ${scan} -m 1 $localdbOpt" #> /dev/null 2>1
 echo " | | [INFO] Calling Yarr's scanConsole"
 echo "$comm"
@@ -154,6 +175,10 @@ else
     cd $YARR_DIR && $comm
 fi
 
+END=$(date +%s.%N)
+jq --argjson a $(echo "($END - $START)*1000" | bc) '.modules[-1] += {"time_real": "\($a)"}' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
+
+
 if [ ! -z ${result_data_DIR} ]; then
     scan_result_path=$(readlink -f $YARR_DIR/data/last_scan)
 
@@ -175,6 +200,10 @@ fi
 # cmd="$YARR_DIR/bin/dbAccessor -F $SOBASE/configs/influxdb_connectivity.json -n $module_id -s ${result_data_DIR}/YARR_result/scanLog.json"
 # echo " | | [INFO] $cmd"
 
+jq '.modules += [{"label": "db sync"}]' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
+jq --argjson a $ScanName '.modules[-1] += {"type": "\($a)"}' $TIMING_OUT > tmp && mv tmp $TIMING_OUT
+START=$(date +%s.%N)
+
 END=$(date +%s.%N)
 echo -ne "done $scan $(echo "$END - $START" | bc)\t\n" >> $SOBASE/temp.txt
 #echo -ne "$(echo "$END - $START" | bc)\t" >> ./temp.txt