diff --git a/README.md b/README.md
index 26ae185feb91b3c82549acc7bb628b5f821dd2c4..1f5abeb823e462d0da464959310d655fc222cd6c 100644
--- a/README.md
+++ b/README.md
@@ -27,10 +27,18 @@ export DETECTOR_MANAGER_IP=192.168.0.120
 export MONITORING_LIGIER_PORT=55530
 export WEBSERVER_PORT=8081
 export LOGGING_PORT=8082
-export LIGIER_CMD="JLigier"
-export TAGS_TO_MIRROR="IO_EVT, IO_SUM, IO_TSL, IO_TSL0, IO_TSL1, IO_TSL2, IO_TSSN, MSG, IO_MONIT"
+export DETX="KM3NeT_00000043_03062019_t0set-A02087174.detx"
+export ROYFIT_TIMERES="data/time_residuals.csv"
+export LIGIER_CMD="singularity exec /home/off1user/Software/Jpp_svn2git-rc9.sif JLigier"
+export TAGS_TO_MIRROR="IO_EVT, IO_SUM, IO_TSSN, MSG, IO_MONIT"
 ```
     
+Notice the `LIGIER_CMD` which in this case uses a Singularity image of Jpp.
+The `DETX` needs to point to a recently calibrated DETX file otherwise the
+live reconstruction will not work correctly.
+
+For the weblog you need to download the latest version of `frontail`:
+https://github.com/mthenw/frontail/releases
 
 After that, use the following command to start the ``supervisor``, which
 you only need to do once:
@@ -83,6 +91,10 @@ different kind of parameters, like plot attributes or ranges.
 Here is an example `pipeline.toml`:
 
 ```
+[WebServer]
+username = "km3net"
+password = "swordfish"
+
 [DOMRates]
 lowest_rate = 150  # [kHz]
 highest_rate = 350  # [kHz]
diff --git a/app/templates/base.html b/app/templates/base.html
index d412eb7a6c2890811fa04edfab3f8797966ccb27..683e27569567be4057d386e8b2badec4be4282a8 100644
--- a/app/templates/base.html
+++ b/app/templates/base.html
@@ -44,9 +44,9 @@
           <ul class="nav navbar-nav">
             <li class="active"><a href="rttc.html">RTTC</a></li>
           </ul>
-          <!-- <ul class="nav navbar&#45;nav"> -->
-          <!--   <li class="active"><a href="k40.html">K40</a></li> -->
-          <!-- </ul> -->
+          <ul class="nav navbar-nav">
+            <li class="active"><a href="k40.html">K40</a></li>
+          </ul>
           <ul class="nav navbar-nav">
             <li class="active"><a href="reco.html">Reco</a></li>
           </ul>
diff --git a/requirements.txt b/requirements.txt
index c21c5ce377c7c80567f4b65ad9eddf3ab31f4e78..b0941122e94b1264793350cfb80060c9501fa2b9 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,4 +1,4 @@
-km3pipe
+km3pipe>=8.18.1
 flask
 frozen-flask
 gunicorn
diff --git a/setenv_template.sh b/setenv_template.sh
index f90da16b11502ee3d80e14642f982e659f471ed5..3eda8e3d7a8150eea45f981a2b78d1ab66bf64df 100644
--- a/setenv_template.sh
+++ b/setenv_template.sh
@@ -9,4 +9,4 @@ export LOGGING_PORT=8082
 export DETX=""
 export ROYFIT_TIMERES="data/time_residuals.csv"
 export LIGIER_CMD="JLigier"
-export TAGS_TO_MIRROR="IO_EVT, IO_SUM, IO_TSL, IO_TSL0, IO_TSL1, IO_TSL2, IO_TSSN, MSG, IO_MONIT"
+export TAGS_TO_MIRROR="IO_EVT, IO_SUM, IO_TSL1, IO_TSSN, MSG, IO_MONIT"
diff --git a/supervisord.conf b/supervisord.conf
index b5673b9512221cafcdb972744086e2531830fcc2..ca5576fc7e4e48372ac6e584856075448e912f89 100644
--- a/supervisord.conf
+++ b/supervisord.conf
@@ -80,7 +80,7 @@ stdout_logfile=logs/%(program_name)s.out.log        ; stdout log path, NONE for
 stderr_logfile=logs/%(program_name)s.err.log        ; stderr log path, NONE for none; default AUTO
 
 [program:ahrs_calibration]
-command=python scripts/ahrs_calibration.py -d %(ENV_DETECTOR_ID)s -p %(ENV_MONITORING_LIGIER_PORT)s
+command=python -u scripts/ahrs_calibration.py -d %(ENV_DETECTOR_ID)s -p %(ENV_MONITORING_LIGIER_PORT)s
 ;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
 ;priority=999                  ; the relative start priority (default 999)
 ;startsecs=1                   ; # of secs prog must stay up to be running (def. 1)
@@ -91,37 +91,37 @@ stdout_logfile=logs/%(program_name)s.out.log        ; stdout log path, NONE for
 stderr_logfile=logs/%(program_name)s.err.log        ; stderr log path, NONE for none; default AUTO
 
 [program:dom_activity]
-command=python scripts/dom_activity.py -d %(ENV_DETECTOR_ID)s -p %(ENV_MONITORING_LIGIER_PORT)s
+command=python -u scripts/dom_activity.py -d %(ENV_DETECTOR_ID)s -p %(ENV_MONITORING_LIGIER_PORT)s
 stdout_logfile=logs/%(program_name)s.out.log
 stderr_logfile=logs/%(program_name)s.err.log
 
 [program:dom_rates]
-command=python scripts/dom_rates.py -d %(ENV_DETECTOR_ID)s -p %(ENV_MONITORING_LIGIER_PORT)s
+command=python -u scripts/dom_rates.py -d %(ENV_DETECTOR_ID)s -p %(ENV_MONITORING_LIGIER_PORT)s
 stdout_logfile=logs/%(program_name)s.out.log
 stderr_logfile=logs/%(program_name)s.err.log
 
 [program:pmt_rates]
-command=python scripts/pmt_rates.py -d %(ENV_DETECTOR_ID)s -p %(ENV_MONITORING_LIGIER_PORT)s -i 20 -u 3
+command=python -u scripts/pmt_rates.py -d %(ENV_DETECTOR_ID)s -p %(ENV_MONITORING_LIGIER_PORT)s -i 20 -u 3
 stdout_logfile=logs/%(program_name)s.out.log
 stderr_logfile=logs/%(program_name)s.err.log
 
 [program:pmt_hrv]
-command=python scripts/pmt_hrv.py -d %(ENV_DETECTOR_ID)s -p %(ENV_MONITORING_LIGIER_PORT)s -i 20 -u 3
+command=python -u scripts/pmt_hrv.py -d %(ENV_DETECTOR_ID)s -p %(ENV_MONITORING_LIGIER_PORT)s -i 20 -u 3
 stdout_logfile=logs/%(program_name)s.out.log
 stderr_logfile=logs/%(program_name)s.err.log
 
 [program:trigger_rates]
-command=python scripts/trigger_rates.py -p %(ENV_MONITORING_LIGIER_PORT)s
+command=python -u scripts/trigger_rates.py -p %(ENV_MONITORING_LIGIER_PORT)s
 stdout_logfile=logs/%(program_name)s.out.log
 stderr_logfile=logs/%(program_name)s.err.log
  
 [program:triggermap]
-command=python scripts/live_triggermap.py -d %(ENV_DETECTOR_ID)s -p %(ENV_MONITORING_LIGIER_PORT)s
+command=python -u scripts/live_triggermap.py -d %(ENV_DETECTOR_ID)s -p %(ENV_MONITORING_LIGIER_PORT)s
 stdout_logfile=logs/%(program_name)s.out.log
 stderr_logfile=logs/%(program_name)s.err.log
 
 [program:ztplot]
-command=python scripts/ztplot.py -d %(ENV_DETECTOR_ID)s -p %(ENV_MONITORING_LIGIER_PORT)s
+command=python -u scripts/ztplot.py -d %(ENV_DETECTOR_ID)s -p %(ENV_MONITORING_LIGIER_PORT)s
 stdout_logfile=logs/%(program_name)s.out.log
 stderr_logfile=logs/%(program_name)s.err.log
 
@@ -131,17 +131,22 @@ stdout_logfile=logs/%(program_name)s.out.log
 stderr_logfile=logs/%(program_name)s.err.log
 
 [program:time_residuals]
-command=python scripts/time_residuals.py %(ENV_ROYFIT_TIMERES)s
+command=python -u scripts/time_residuals.py %(ENV_ROYFIT_TIMERES)s
 stdout_logfile=logs/%(program_name)s.out.log
 stderr_logfile=logs/%(program_name)s.err.log
 
 [program:rttc]
-command=python scripts/rttc.py -d %(ENV_DETECTOR_ID)s -l %(ENV_DETECTOR_MANAGER_IP)s
+command=python -u scripts/rttc.py -d %(ENV_DETECTOR_ID)s -l %(ENV_DETECTOR_MANAGER_IP)s
+stdout_logfile=logs/%(program_name)s.out.log
+stderr_logfile=logs/%(program_name)s.err.log
+
+[program:k40]
+command=python -u scripts/k40_calibration.py -d %(ENV_DETECTOR_ID)s -p %(ENV_MONITORING_LIGIER_PORT)s
 stdout_logfile=logs/%(program_name)s.out.log
 stderr_logfile=logs/%(program_name)s.err.log
 
 [program:msg_dumper]
-command=python scripts/msg_dumper.py -l 127.0.0.1 -p %(ENV_MONITORING_LIGIER_PORT)s -f logs/MSG.log
+command=python -u scripts/msg_dumper.py -l 127.0.0.1 -p %(ENV_MONITORING_LIGIER_PORT)s -f logs/MSG.log
 priority=200
 stdout_logfile=logs/%(program_name)s.out.log
 stderr_logfile=logs/%(program_name)s.err.log
@@ -169,6 +174,10 @@ priority=500
 programs=royfit,time_residuals
 priority=999
 
+[group:calibration]
+programs=k40
+priority=999
+
 ; The [include] section can just contain the "files" setting.  This
 ; setting can list multiple files (separated by whitespace or
 ; newlines).  It can also contain wildcards.  The filenames are