diff --git a/docker-compose/.env b/docker-compose/.env
index eb952e41424380f649d797ec6f2fa6c8879f961c..50751ff6a5ed2a57225e747b56a30b97c28beba6 100644
--- a/docker-compose/.env
+++ b/docker-compose/.env
@@ -9,7 +9,7 @@ TANGO_CPP_VERSION=9.3.9
 TANGO_DB_VERSION=10.4.14
 TANGO_DSCONFIG_VERSION=1.5.3
 TANGO_HDBPP_VIEWER_VERSION=2021-05-28
-TANGO_ITANGO_VERSION=9.3.7
+TANGO_ITANGO_VERSION=9.3.9
 TANGO_JAVA_VERSION=9.3.6
 TANGO_POGO_VERSION=9.6.34
 TANGO_REST_VERSION=1.14.6
diff --git a/docker-compose/device-antennafield.yml b/docker-compose/device-antennafield.yml
index 0e16043f1170a937d0fe16e3e2853801c3b1339b..ec08ce0f28fd0817d663f122983fcbcfef8ed060 100644
--- a/docker-compose/device-antennafield.yml
+++ b/docker-compose/device-antennafield.yml
@@ -33,12 +33,16 @@ services:
       - control
     ports:
       - "5715:5715" # unique port for this DS
+      - "5815:5815" # ZeroMQ event port
+      - "5915:5915" # ZeroMQ heartbeat port
     extra_hosts:
       - "host.docker.internal:host-gateway"
     volumes:
         - ..:/opt/lofar/tango:rw
     environment:
       - TANGO_HOST=${TANGO_HOST}
+      - TANGO_ZMQ_EVENT_PORT=5815
+      - TANGO_ZMQ_HEARTBEAT_PORT=5915
     working_dir: /opt/lofar/tango
     entrypoint:
       - bin/start-ds.sh
diff --git a/docker-compose/device-apsct.yml b/docker-compose/device-apsct.yml
index 8addefff2bc1ead3510e835fad51187b40e4a996..024ca94227ef4149c4a42a5b83b08f61ea85e2c9 100644
--- a/docker-compose/device-apsct.yml
+++ b/docker-compose/device-apsct.yml
@@ -32,12 +32,16 @@ services:
       - control
     ports:
       - "5709:5709" # unique port for this DS
+      - "5809:5809" # ZeroMQ event port
+      - "5909:5909" # ZeroMQ heartbeat port
     extra_hosts:
       - "host.docker.internal:host-gateway"
     volumes:
         - ..:/opt/lofar/tango:rw
     environment:
       - TANGO_HOST=${TANGO_HOST}
+      - TANGO_ZMQ_EVENT_PORT=5809
+      - TANGO_ZMQ_HEARTBEAT_PORT=5909
     working_dir: /opt/lofar/tango
     entrypoint:
       - bin/start-ds.sh
diff --git a/docker-compose/device-apspu.yml b/docker-compose/device-apspu.yml
index 55a2d5a9a5d95a9c0e1617bb4732a1d96ab26a20..e70df9a1be75ea2c83c2d6049bedd0fd88d8dcab 100644
--- a/docker-compose/device-apspu.yml
+++ b/docker-compose/device-apspu.yml
@@ -32,12 +32,16 @@ services:
       - control
     ports:
       - "5710:5710" # unique port for this DS
+      - "5810:5810" # ZeroMQ event port
+      - "5910:5910" # ZeroMQ heartbeat port
     extra_hosts:
       - "host.docker.internal:host-gateway"
     volumes:
         - ..:/opt/lofar/tango:rw
     environment:
       - TANGO_HOST=${TANGO_HOST}
+      - TANGO_ZMQ_EVENT_PORT=5810
+      - TANGO_ZMQ_HEARTBEAT_PORT=5910
     working_dir: /opt/lofar/tango
     entrypoint:
       - bin/start-ds.sh
diff --git a/docker-compose/device-beamlet.yml b/docker-compose/device-beamlet.yml
index 4e80eba8f4033efe31749c51c95002204a0136f4..27dcc8020b333f687fdc389c71ccbe4276a80061 100644
--- a/docker-compose/device-beamlet.yml
+++ b/docker-compose/device-beamlet.yml
@@ -32,12 +32,16 @@ services:
       - control
     ports:
       - "5712:5712" # unique port for this DS
+      - "5812:5812" # ZeroMQ event port
+      - "5912:5912" # ZeroMQ heartbeat port
     extra_hosts:
       - "host.docker.internal:host-gateway"
     volumes:
         - ..:/opt/lofar/tango:rw
     environment:
       - TANGO_HOST=${TANGO_HOST}
+      - TANGO_ZMQ_EVENT_PORT=5812
+      - TANGO_ZMQ_HEARTBEAT_PORT=5912
     working_dir: /opt/lofar/tango
     entrypoint:
       - bin/start-ds.sh
diff --git a/docker-compose/device-boot.yml b/docker-compose/device-boot.yml
index 4d4108d9ffb189e05b8696039d68b2f1be20de2a..ae17797e75303adc66eaf83e0ae8f659b178980b 100644
--- a/docker-compose/device-boot.yml
+++ b/docker-compose/device-boot.yml
@@ -31,12 +31,16 @@ services:
       - control
     ports:
       - "5708:5708" # unique port for this DS
+      - "5808:5808" # ZeroMQ event port
+      - "5908:5908" # ZeroMQ heartbeat port
     extra_hosts:
       - "host.docker.internal:host-gateway"
     volumes:
       - ..:/opt/lofar/tango:rw
     environment:
       - TANGO_HOST=${TANGO_HOST}
+      - TANGO_ZMQ_EVENT_PORT=5808
+      - TANGO_ZMQ_HEARTBEAT_PORT=5908
     working_dir: /opt/lofar/tango
     entrypoint:
       - bin/start-ds.sh
diff --git a/docker-compose/device-bst.yml b/docker-compose/device-bst.yml
index 92522527c2071e9e94b9561ab010717c37c63c07..9655beb47a01f8a159206b8488f63cd4c59d6bed 100644
--- a/docker-compose/device-bst.yml
+++ b/docker-compose/device-bst.yml
@@ -35,12 +35,16 @@ services:
         - "5003:5003/udp" # port to receive SST UDP packets on
         - "5103:5103/tcp" # port to emit SST TCP packets on
         - "5717:5717" # unique port for this DS
+        - "5817:5817" # ZeroMQ event port
+        - "5917:5917" # ZeroMQ heartbeat port
     extra_hosts:
       - "host.docker.internal:host-gateway"
     volumes:
         - ..:/opt/lofar/tango:rw
     environment:
       - TANGO_HOST=${TANGO_HOST}
+      - TANGO_ZMQ_EVENT_PORT=5817
+      - TANGO_ZMQ_HEARTBEAT_PORT=5917
     working_dir: /opt/lofar/tango
     entrypoint:
       - bin/start-ds.sh
diff --git a/docker-compose/device-ccd.yml b/docker-compose/device-ccd.yml
index ffbfafcf31c9cfaea3ead633787b5bb0b9f69c47..7531012fd4983fadecbf51cdee70e6735135cbcc 100644
--- a/docker-compose/device-ccd.yml
+++ b/docker-compose/device-ccd.yml
@@ -32,12 +32,16 @@ services:
       - control
     ports:
       - "5721:5721" # unique port for this DS
+      - "5821:5821" # ZeroMQ event port
+      - "5921:5921" # ZeroMQ heartbeat port
     extra_hosts:
       - "host.docker.internal:host-gateway"
     volumes:
         - ..:/opt/lofar/tango:rw
     environment:
       - TANGO_HOST=${TANGO_HOST}
+      - TANGO_ZMQ_EVENT_PORT=5821
+      - TANGO_ZMQ_HEARTBEAT_PORT=5921
     working_dir: /opt/lofar/tango
     entrypoint:
       - bin/start-ds.sh
diff --git a/docker-compose/device-digitalbeam.yml b/docker-compose/device-digitalbeam.yml
index c5b45e9baaef63e15f44b4a539cf93a73244bde3..36801cd02e8fc97811910b0abb762315ca70b209 100644
--- a/docker-compose/device-digitalbeam.yml
+++ b/docker-compose/device-digitalbeam.yml
@@ -32,12 +32,16 @@ services:
       - control
     ports:
       - "5713:5713" # unique port for this DS
+      - "5813:5813" # ZeroMQ event port
+      - "5913:5913" # ZeroMQ heartbeat port
     extra_hosts:
       - "host.docker.internal:host-gateway"
     volumes:
         - ..:/opt/lofar/tango:rw
     environment:
       - TANGO_HOST=${TANGO_HOST}
+      - TANGO_ZMQ_EVENT_PORT=5813
+      - TANGO_ZMQ_HEARTBEAT_PORT=5913
     working_dir: /opt/lofar/tango
     entrypoint:
       - bin/start-ds.sh
diff --git a/docker-compose/device-docker.yml b/docker-compose/device-docker.yml
index db33c9aed034fa02fbafe2bc7ab4b66535fe0f33..c531ac63b1272a828cd619a43f3487d26a64e997 100644
--- a/docker-compose/device-docker.yml
+++ b/docker-compose/device-docker.yml
@@ -32,6 +32,8 @@ services:
       - control
     ports:
       - "5705:5705" # unique port for this DS
+      - "5805:5805" # ZeroMQ event port
+      - "5905:5905" # ZeroMQ heartbeat port
     extra_hosts:
       - "host.docker.internal:host-gateway"
     volumes:
@@ -40,6 +42,8 @@ services:
     user: 1000:${DOCKER_GID} # uid 1000 is the default "tango" user
     environment:
       - TANGO_HOST=${TANGO_HOST}
+      - TANGO_ZMQ_EVENT_PORT=5805
+      - TANGO_ZMQ_HEARTBEAT_PORT=5905
     working_dir: /opt/lofar/tango
     entrypoint:
       - bin/start-ds.sh
diff --git a/docker-compose/device-observation-control.yml b/docker-compose/device-observation-control.yml
index 7025b8b3ab38cbb1290971c1907729b8aa09ca0f..42b9e48a96e113eaaf1988512ea6727bf1ee4fb4 100644
--- a/docker-compose/device-observation-control.yml
+++ b/docker-compose/device-observation-control.yml
@@ -31,12 +31,16 @@ services:
       - control
     ports:
       - "5703:5703" # unique port for this DS
+      - "5803:5803" # ZeroMQ event port
+      - "5903:5903" # ZeroMQ heartbeat port
     extra_hosts:
       - "host.docker.internal:host-gateway"
     volumes:
         - ..:/opt/lofar/tango:rw
     environment:
       - TANGO_HOST=${TANGO_HOST}
+      - TANGO_ZMQ_EVENT_PORT=5803
+      - TANGO_ZMQ_HEARTBEAT_PORT=5903
     working_dir: /opt/lofar/tango
     entrypoint:
       - bin/start-ds.sh
diff --git a/docker-compose/device-observation.yml b/docker-compose/device-observation.yml
index 3379e41e1887d670b734a1f75f8b942ca51d17df..48bb753937d758cf0db40001a7eaf5d61ce542e1 100644
--- a/docker-compose/device-observation.yml
+++ b/docker-compose/device-observation.yml
@@ -30,12 +30,16 @@ services:
       - control
     ports:
       - "5718:5718" # unique port for this DS
+      - "5818:5818" # ZeroMQ event port
+      - "5918:5918" # ZeroMQ heartbeat port
     extra_hosts:
       - "host.docker.internal:host-gateway"
     volumes:
         - ..:/opt/lofar/tango:rw
     environment:
       - TANGO_HOST=${TANGO_HOST}
+      - TANGO_ZMQ_EVENT_PORT=5818
+      - TANGO_ZMQ_HEARTBEAT_PORT=5918
     working_dir: /opt/lofar/tango
     entrypoint:
       - bin/start-ds.sh
diff --git a/docker-compose/device-pcon.yml b/docker-compose/device-pcon.yml
index 17fad681d96fbe9cb1b84168144b3668ce4f96f7..cb6b2c3cdde164405d8dfb18015fd77cc9a5851b 100644
--- a/docker-compose/device-pcon.yml
+++ b/docker-compose/device-pcon.yml
@@ -27,12 +27,16 @@ services:
       - control
     ports:
       - "5720:5720" # unique port for this DS
+      - "5820:5820" # ZeroMQ event port
+      - "5920:5920" # ZeroMQ heartbeat port
     extra_hosts:
       - "host.docker.internal:host-gateway"
     volumes:
       - ..:/opt/lofar/tango:rw
     environment:
       - TANGO_HOST=${TANGO_HOST}
+      - TANGO_ZMQ_EVENT_PORT=5820
+      - TANGO_ZMQ_HEARTBEAT_PORT=5920
     working_dir: /opt/lofar/tango
     entrypoint:
       - bin/start-ds.sh
diff --git a/docker-compose/device-psoc.yml b/docker-compose/device-psoc.yml
index 6d6578e6aa6aa3b44b34f16d6cd1f3373f45217b..a32d2374b28ae5f7649cea742ab6c606ce06391f 100644
--- a/docker-compose/device-psoc.yml
+++ b/docker-compose/device-psoc.yml
@@ -27,12 +27,16 @@ services:
       - control
     ports:
       - "5719:5719" # unique port for this DS
+      - "5819:5819" # ZeroMQ event port
+      - "5919:5919" # ZeroMQ heartbeat port
     extra_hosts:
       - "host.docker.internal:host-gateway"
     volumes:
       - ..:/opt/lofar/tango:rw
     environment:
       - TANGO_HOST=${TANGO_HOST}
+      - TANGO_ZMQ_EVENT_PORT=5819
+      - TANGO_ZMQ_HEARTBEAT_PORT=5919
     working_dir: /opt/lofar/tango
     entrypoint:
       - bin/start-ds.sh
diff --git a/docker-compose/device-recv.yml b/docker-compose/device-recv.yml
index 3c79a0a149528557a0d3ca3aa087773538942207..134c2ccb41647fb12abd49bb1353df5797d6d35a 100644
--- a/docker-compose/device-recv.yml
+++ b/docker-compose/device-recv.yml
@@ -32,12 +32,16 @@ services:
       - control
     ports:
       - "5707:5707" # unique port for this DS
+      - "5807:5807" # ZeroMQ event port
+      - "5907:5907" # ZeroMQ heartbeat port
     extra_hosts:
       - "host.docker.internal:host-gateway"
     volumes:
         - ..:/opt/lofar/tango:rw
     environment:
       - TANGO_HOST=${TANGO_HOST}
+      - TANGO_ZMQ_EVENT_PORT=5807
+      - TANGO_ZMQ_HEARTBEAT_PORT=5907
     working_dir: /opt/lofar/tango
     entrypoint:
       - bin/start-ds.sh
diff --git a/docker-compose/device-sdp.yml b/docker-compose/device-sdp.yml
index 144630c883d741c166c6f1a1c48f9e8eda5ab096..61f8eb34102cc0645ce66921650a478fd2f72fcb 100644
--- a/docker-compose/device-sdp.yml
+++ b/docker-compose/device-sdp.yml
@@ -32,12 +32,16 @@ services:
       - control
     ports:
       - "5701:5701" # unique port for this DS
+      - "5801:5801" # ZeroMQ event port
+      - "5901:5901" # ZeroMQ heartbeat port
     extra_hosts:
       - "host.docker.internal:host-gateway"
     volumes:
         - ..:/opt/lofar/tango:rw
     environment:
       - TANGO_HOST=${TANGO_HOST}
+      - TANGO_ZMQ_EVENT_PORT=5801
+      - TANGO_ZMQ_HEARTBEAT_PORT=5901
     working_dir: /opt/lofar/tango
     entrypoint:
       - bin/start-ds.sh
diff --git a/docker-compose/device-sst.yml b/docker-compose/device-sst.yml
index e6b0edb75008791f365d4ec8281c35a314935ca3..5db68a00c1430d6e1cc0c04b17e3d9554ce0c20d 100644
--- a/docker-compose/device-sst.yml
+++ b/docker-compose/device-sst.yml
@@ -35,12 +35,16 @@ services:
         - "5001:5001/udp" # port to receive SST UDP packets on
         - "5101:5101/tcp" # port to emit SST TCP packets on
         - "5702:5702" # unique port for this DS
+        - "5802:5802" # ZeroMQ event port
+        - "5902:5902" # ZeroMQ heartbeat port
     extra_hosts:
       - "host.docker.internal:host-gateway"
     volumes:
         - ..:/opt/lofar/tango:rw
     environment:
       - TANGO_HOST=${TANGO_HOST}
+      - TANGO_ZMQ_EVENT_PORT=5802
+      - TANGO_ZMQ_HEARTBEAT_PORT=5902
     working_dir: /opt/lofar/tango
     entrypoint:
       - bin/start-ds.sh
diff --git a/docker-compose/device-temperature-manager.yml b/docker-compose/device-temperature-manager.yml
index d1b20359bf0f827b99450edd93cf4687ac263532..eb87e6e599557b52219bf4d4f99b3b829d97d0b1 100644
--- a/docker-compose/device-temperature-manager.yml
+++ b/docker-compose/device-temperature-manager.yml
@@ -27,12 +27,16 @@ services:
       - control
     ports:
       - "5716:5716" # unique port for this DS
+      - "5816:5816" # ZeroMQ event port
+      - "5916:5916" # ZeroMQ heartbeat port
     extra_hosts:
       - "host.docker.internal:host-gateway"
     volumes:
       - ..:/opt/lofar/tango:rw
     environment:
       - TANGO_HOST=${TANGO_HOST}
+      - TANGO_ZMQ_EVENT_PORT=5816
+      - TANGO_ZMQ_HEARTBEAT_PORT=5916
     working_dir: /opt/lofar/tango
     entrypoint:
       - bin/start-ds.sh
diff --git a/docker-compose/device-tilebeam.yml b/docker-compose/device-tilebeam.yml
index 7919beded3237fecc98cddc64b734747e3187304..c8665d568982663acb6859f23686ade25e3b33fc 100644
--- a/docker-compose/device-tilebeam.yml
+++ b/docker-compose/device-tilebeam.yml
@@ -27,6 +27,8 @@ services:
       - control
     ports:
       - "5711:5711" # unique port for this DS
+      - "5811:5811" # ZeroMQ event port
+      - "5911:5911" # ZeroMQ heartbeat port
     extra_hosts:
       - "host.docker.internal:host-gateway"
     volumes:
@@ -34,6 +36,8 @@ services:
       - iers-data:/opt/IERS
     environment:
       - TANGO_HOST=${TANGO_HOST}
+      - TANGO_ZMQ_EVENT_PORT=5811
+      - TANGO_ZMQ_HEARTBEAT_PORT=5911
     working_dir: /opt/lofar/tango
     entrypoint:
       - bin/start-ds.sh
diff --git a/docker-compose/device-unb2.yml b/docker-compose/device-unb2.yml
index 2c05d6e66b887b903d17278e3252cd8f9ea70493..cbb31b0ef2585812808b3f17d8b4270c25fa4947 100644
--- a/docker-compose/device-unb2.yml
+++ b/docker-compose/device-unb2.yml
@@ -32,12 +32,16 @@ services:
       - control
     ports:
       - "5704:5704" # unique port for this DS
+      - "5804:5804" # ZeroMQ event port
+      - "5904:5904" # ZeroMQ heartbeat port
     extra_hosts:
       - "host.docker.internal:host-gateway"
     volumes:
         - ..:/opt/lofar/tango:rw
     environment:
       - TANGO_HOST=${TANGO_HOST}
+      - TANGO_ZMQ_EVENT_PORT=5804
+      - TANGO_ZMQ_HEARTBEAT_PORT=5904
     working_dir: /opt/lofar/tango
     entrypoint:
       - bin/start-ds.sh
diff --git a/docker-compose/device-xst.yml b/docker-compose/device-xst.yml
index 6f49e17f6389ff510736543d7cb42aed4ea104b9..cdceac715982f7609764c6cb0092070111a6e3a0 100644
--- a/docker-compose/device-xst.yml
+++ b/docker-compose/device-xst.yml
@@ -35,12 +35,16 @@ services:
         - "5002:5002/udp" # port to receive XST UDP packets on
         - "5102:5102/tcp" # port to emit XST TCP packets on
         - "5706:5706" # unique port for this DS
+        - "5806:5806" # ZeroMQ event port
+        - "5906:5906" # ZeroMQ heartbeat port
     extra_hosts:
       - "host.docker.internal:host-gateway"
     volumes:
         - ..:/opt/lofar/tango:rw
     environment:
       - TANGO_HOST=${TANGO_HOST}
+      - TANGO_ZMQ_EVENT_PORT=5806
+      - TANGO_ZMQ_HEARTBEAT_PORT=5906
     working_dir: /opt/lofar/tango
     entrypoint:
       - bin/start-ds.sh
diff --git a/tangostationcontrol/tangostationcontrol/devices/README.md b/tangostationcontrol/tangostationcontrol/devices/README.md
index 4d5bc3a070be1340c26db626ef7dde9235df87c4..d7c5a64a95fa9f43c7a2524a71cf1379e6527341 100644
--- a/tangostationcontrol/tangostationcontrol/devices/README.md
+++ b/tangostationcontrol/tangostationcontrol/devices/README.md
@@ -9,8 +9,7 @@ If a new device is added, it will (likely) need to be referenced in several plac
 - Adjust `CDB/LOFAR_ConfigDb.json` to create the device in the Tango device database,
 - Adjust `docker-compose/jupyter/ipython-profiles/stationcontrol-jupyter/startup/01-devices.py` to make an alias for it available in Jupyter,
 - Adjust `tangostationcontrol/tangostationcontrol/devices/boot.py` to add the device to the station initialisation sequence,
-- Add to `docker-compose/` to create a YaML file to start the device in a docker container. NOTE: it needs a unique 57xx port assigned,
-                            current _unused_ port value: 5718
+- Add to `docker-compose/` to create a YaML file to start the device in a docker container. NOTE: it needs a unique 57xx port assigned (current _unused_ port value: 5722), a unique 58xx port for ZMQ events, and a unique 59xx port for ZMQ heartbeat
 - Adjust `tangostationcontrol/setup.cfg` to add an entry point for the device in the package installation,
 - Add to `tangostationcontrol/tangostationcontrol/integration_test/default/devices/` to add an integration test,
 - Adjust `sbin/run_integration_test.sh` to have the device started when running the integration tests,