diff --git a/scripts/dom_activity.py b/scripts/dom_activity.py
new file mode 100755
index 0000000000000000000000000000000000000000..fbb766531182b1234187a6e9cec4dcc812abb477
--- /dev/null
+++ b/scripts/dom_activity.py
@@ -0,0 +1,119 @@
+#!/usr/bin/env python
+# coding=utf-8
+# Filename: dom_activity.py
+# Author: Tamas Gal <tgal@km3net.de>
+# vim: ts=4 sw=4 et
+"""
+Monitors the DOM activity.
+
+Usage:
+    dom_activity.py [options]
+    dom_activity.py (-h | --help)
+
+Options:
+    -l LIGIER_IP    The IP of the ligier [default: 127.0.0.1].
+    -p LIGIER_PORT  The port of the ligier [default: 5553].
+    -d DET_ID       Detector ID [default: 29].
+    -o PLOT_DIR     The directory to save the plot [default: www/plots].
+    -h --help       Show this screen.
+
+"""
+from __future__ import division
+
+from collections import deque, defaultdict
+from functools import partial
+from io import BytesIO
+import os
+import time
+
+import km3pipe as kp
+import km3pipe.style
+from km3modules.plot import plot_dom_parameters
+
+
+VERSION = "1.0"
+
+km3pipe.style.use('km3pipe')
+log = kp.logger.get("DOMActivity")
+log.warn("Starting DOM Activity monitor")
+
+
+class DOMActivityPlotter(kp.Module):
+    def configure(self):
+        self.plots_path = self.require('plots_path')
+        det_id = self.require('det_id')
+        self.detector = kp.hardware.Detector(det_id=det_id)
+        self.index = 0
+        self.last_activity = defaultdict(partial(deque, maxlen=4000))
+        self.cuckoo = kp.time.Cuckoo(60, self.create_plot)
+
+    def process(self, blob):
+        self.index += 1
+        if self.index % 30:
+            return blob
+
+        tag = str(blob['CHPrefix'].tag)
+
+        if not tag == 'IO_SUM':
+            return blob
+
+        data = blob['CHData']
+        data_io = BytesIO(data)
+        preamble = kp.io.daq.DAQPreamble(file_obj=data_io)  # noqa
+        summaryslice = kp.io.daq.DAQSummaryslice(file_obj=data_io)
+        timestamp = summaryslice.header.time_stamp
+
+        for dom_id, _ in summaryslice.summary_frames.items():
+            du, dom, _ = self.detector.doms[dom_id]
+            self.last_activity[(du, dom)] = timestamp
+
+        self.cuckoo.msg()
+
+        return blob
+
+    def create_plot(self):
+        print(self.__class__.__name__ + ": updating plot.")
+        filename = os.path.join(self.plots_path, 'dom_activity.png')
+        now = kp.time.tai_timestamp()
+        now = time.time()
+        delta_ts = {}
+        inactive_doms = {}
+        for key, timestamp in self.last_activity.items():
+            delta_t = now - timestamp
+            delta_ts[key] = delta_t
+            if delta_t > 300:
+                inactive_doms[key] = delta_t
+        if inactive_doms:
+            msg = "WARNING: the following DOM(s) has been inactive:\n"
+            for key, delta_t in inactive_doms.items():
+                msg += "   DU{}-DOM{} for {:.1f}s\n"  \
+                  .format(key[0], key[1], delta_t)
+            log.warn(msg)
+        plot_dom_parameters(delta_ts, self.detector, filename,
+                            'last activity [s]',
+                            "DOM Activity - via Summary Slices",
+                            vmin=0.0, vmax=15*60)
+
+
+def main():
+    from docopt import docopt
+    args = docopt(__doc__, version=VERSION)
+
+    det_id = int(args['-d'])
+    plots_path = args['-o']
+    ligier_ip = args['-l']
+    ligier_port = int(args['-p'])
+
+    pipe = kp.Pipeline()
+    pipe.attach(kp.io.ch.CHPump, host=ligier_ip,
+                port=ligier_port,
+                tags='IO_SUM',
+                timeout=60*60*24*7,
+                max_queue=2000)
+    pipe.attach(kp.io.daq.DAQProcessor)
+    pipe.attach(DOMActivityPlotter, det_id=det_id, plots_path=plots_path)
+    pipe.drain()
+
+
+if __name__ == '__main__':
+    main()