diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index aeb55ae73e83cf70c385418425cb68d5dfdef7d5..ae9f30dedd4d329c4a3b4be245aa67b2bea6cdf3 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -117,28 +117,6 @@ docker_build_image_all:
     - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh recv-sim latest
     - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh sdptr-sim latest
     - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh unb2-sim latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-antennafield latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-apsct latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-apspu latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-boot latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-station-manager latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-beamlet latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-ccd latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-configuration latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-digitalbeam latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-docker latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-observation latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-observation-control latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-pcon latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-psoc latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-recv latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-sdp latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-temperature-manager latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-tilebeam latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-unb2 latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-bst latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-sst latest
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-xst latest
 
 # Build and push custom images on merge request if relevant files changed
 docker_build_image_lofar_device_base:
@@ -284,248 +262,6 @@ docker_build_image_unb2_sim:
   script:
     #    Do not remove 'bash' or statement will be ignored by primitive docker shell
     - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh unb2-sim $tag
-docker_build_image_device_apsct:
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-aspct.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-aspct $tag
-docker_build_image_device_ccd:
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-ccd.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-ccd $tag
-docker_build_image_device_configuration:
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-configuration.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-configuration $tag
-docker_build_image_device_apspu:
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-apspu.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-apspu $tag
-docker_build_image_device_psoc:
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-psoc.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-psoc $tag
-docker_build_image_device_pcon:
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-pcon.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-pcon $tag
-docker_build_image_device_tilebeam:
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-tilebeam.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-tilebeam $tag
-docker_build_image_device_beamlet:
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-beamlet.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-beamlet $tag
-docker_build_image_device_digitalbeam:
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-digitalbeam.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-digitalbeam $tag
-docker_build_image_device_station_manager :
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-station-manager.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-station-manager $tag
-docker_build_image_device_boot:
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-boot.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-boot $tag
-docker_build_image_device_docker:
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-docker.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-docker $tag
-docker_build_image_device_observation:
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-observation.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-observation $tag
-docker_build_image_device_observation_control:
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-observation-control.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-observation-control $tag
-docker_build_image_device_antennafield:
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-antennafield.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-antennafield $tag
-docker_build_image_device_recv:
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-recv.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-recv $tag
-docker_build_image_device_sdp:
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-sdp.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-sdp $tag
-docker_build_image_device_bst:
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-bst.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-bst $tag
-docker_build_image_device_sst:
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-sst.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-sst $tag
-docker_build_image_device_unb2:
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-unb2.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-unb2 $tag
-docker_build_image_device_xst:
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-xst.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-xst $tag
-docker_build_image_device_temperature_manager:
-  extends: .base_docker_images_except
-  only:
-    refs:
-      - merge_requests
-    changes:
-      - docker-compose/device-temperature-manager.yml
-      - docker-compose/lofar-device-base/*
-  script:
-    #    Do not remove 'bash' or statement will be ignored by primitive docker shell
-    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-temperature-manager $tag
 newline_at_eof:
   stage: linting
   before_script:
diff --git a/docker-compose/Makefile b/docker-compose/Makefile
index 37b2315b436d55c2ce10efe64198add8dcb0d9b2..34decf3d511dc1ee8d49c383d0821d6473499630 100644
--- a/docker-compose/Makefile
+++ b/docker-compose/Makefile
@@ -160,24 +160,30 @@ DOCKER_COMPOSE_ARGS := DISPLAY=$(DISPLAY) \
     TEST_MODULE=$(INTEGRATION_MODULE)
 
 
-.PHONY: up down minimal context run integration start stop restart build build-nocache status clean pull help await
+.PHONY: up base base-nocache down minimal context run integration start stop restart build build-nocache status clean pull help await
 .DEFAULT_GOAL := help
 
 pull: ## pull the images from the Docker hub
 	$(DOCKER_COMPOSE_ARGS) docker-compose $(COMPOSE_FILE_ARGS) pull
 
-build: context ## rebuild images
+base: context ## Build base lofar device image
+	$(DOCKER_COMPOSE_ARGS) docker-compose $(COMPOSE_FILE_ARGS) build --progress=plain lofar-device-base
+
+base-nocache: context ## Rebuild base lofar device image
+	$(DOCKER_COMPOSE_ARGS) docker-compose $(COMPOSE_FILE_ARGS) build --no-cache --progress=plain lofar-device-base
+
+build: base ## build images
 	# docker-compose does not support build dependencies, so manage those here
 	$(DOCKER_COMPOSE_ARGS) docker-compose $(COMPOSE_FILE_ARGS) build --parallel --progress=plain $(SERVICE)
 
-build-nocache: context ## rebuild images from scratch
+build-nocache: base-nocache ## rebuild images from scratch
 	# docker-compose does not support build dependencies, so manage those here
 	$(DOCKER_COMPOSE_ARGS) docker-compose $(COMPOSE_FILE_ARGS) build --no-cache --progress=plain $(SERVICE)
 
-up: minimal  ## start the base TANGO system and prepare requested services
+up: base minimal  ## start the base TANGO system and prepare requested services
 	$(DOCKER_COMPOSE_ARGS) docker-compose $(COMPOSE_FILE_ARGS) up --no-start --no-recreate $(SERVICE)
 
-run: minimal  ## run a service using arguments and delete it afterwards
+run: base minimal  ## run a service using arguments and delete it afterwards
 	$(DOCKER_COMPOSE_ARGS) docker-compose $(COMPOSE_FILE_ARGS) run -T --no-deps --rm $(SERVICE) $(SERVICE_ARGS)
 
 integration: minimal  ## run a service using arguments and delete it afterwards
diff --git a/docker-compose/device-antennafield.yml b/docker-compose/device-antennafield.yml
index f2ac0746cd91e62f7eb8bf40c1a36fb9870d213d..69ccb78c0f84b967ba0b0dc952e6d433621739fc 100644
--- a/docker-compose/device-antennafield.yml
+++ b/docker-compose/device-antennafield.yml
@@ -17,14 +17,7 @@ version: '2.1'
 
 services:
   device-antennafield:
-    image: device-antennafield
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-antennafield
     logging:
       driver: "json-file"
diff --git a/docker-compose/device-apsct.yml b/docker-compose/device-apsct.yml
index 086bdc7a6ca1deb2b2aa83ef6c8128cd79294446..63e31398f56bfe20b0b7dd119baf532b25d20945 100644
--- a/docker-compose/device-apsct.yml
+++ b/docker-compose/device-apsct.yml
@@ -16,14 +16,7 @@ version: '2.1'
 
 services:
   device-apsct:
-    image: device-apsct
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-apsct
     logging:
       driver: "json-file"
diff --git a/docker-compose/device-apspu.yml b/docker-compose/device-apspu.yml
index 423ffc21c6328acc754ed33be2b7713fcacc19f6..8c60bff6c7cd71ee40a944a3587e6924a4517f59 100644
--- a/docker-compose/device-apspu.yml
+++ b/docker-compose/device-apspu.yml
@@ -16,14 +16,7 @@ version: '2.1'
 
 services:
   device-apspu:
-    image: device-apspu
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-apspu
     logging:
       driver: "json-file"
diff --git a/docker-compose/device-beamlet.yml b/docker-compose/device-beamlet.yml
index 27ed5b1d520b21739afb66b82bcdfb6b6ff65059..befc38f36c36bbb3f3d36d0470563dbc678e911c 100644
--- a/docker-compose/device-beamlet.yml
+++ b/docker-compose/device-beamlet.yml
@@ -16,14 +16,7 @@ version: '2.1'
 
 services:
   device-beamlet:
-    image: device-beamlet
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-beamlet
     logging:
       driver: "json-file"
diff --git a/docker-compose/device-boot.yml b/docker-compose/device-boot.yml
index 7e398c489794afd9b33e290fa5f2d9c9f4654e2c..1d40d5550bbd6c6aa8b833aeaea48f0f36f75ac4 100644
--- a/docker-compose/device-boot.yml
+++ b/docker-compose/device-boot.yml
@@ -15,14 +15,7 @@ version: '2.1'
 
 services:
   device-boot:
-    image: device-boot
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-boot
     logging:
       driver: "json-file"
diff --git a/docker-compose/device-bst.yml b/docker-compose/device-bst.yml
index a33d7f037f08aa06616ba9c40d9a05a5d8772856..232221edd7a87be4b7a3f07ad97f13c91c0c4316 100644
--- a/docker-compose/device-bst.yml
+++ b/docker-compose/device-bst.yml
@@ -16,14 +16,7 @@ version: '2.1'
 
 services:
   device-bst:
-    image: device-bst
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-bst
     logging:
       driver: "json-file"
diff --git a/docker-compose/device-ccd.yml b/docker-compose/device-ccd.yml
index 165ab747e613dc8d71e9551428196fd066bf9c7f..fdc366f2a5c1d9f7da263a591ff865095e2a658a 100644
--- a/docker-compose/device-ccd.yml
+++ b/docker-compose/device-ccd.yml
@@ -16,14 +16,7 @@ version: '2.1'
 
 services:
   device-ccd:
-    image: device-ccd
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-ccd
     logging:
       driver: "json-file"
diff --git a/docker-compose/device-configuration.yml b/docker-compose/device-configuration.yml
index 5c59a5fa36667899d9eb7306ae51341daaa8fcb6..99ab2ee88ddfdb44ed1be23248fa16e386cd7da5 100644
--- a/docker-compose/device-configuration.yml
+++ b/docker-compose/device-configuration.yml
@@ -16,14 +16,7 @@ version: '2.1'
 
 services:
   device-configuration:
-    image: device-configuration
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-configuration
     logging:
       driver: "json-file"
diff --git a/docker-compose/device-digitalbeam.yml b/docker-compose/device-digitalbeam.yml
index 97b9c4e516eff5eb4b8a233f9110df1648cd4b4b..8b29a18a2b8bb702ab7475e669eb36f1ad7db029 100644
--- a/docker-compose/device-digitalbeam.yml
+++ b/docker-compose/device-digitalbeam.yml
@@ -16,14 +16,7 @@ version: '2.1'
 
 services:
   device-digitalbeam:
-    image: device-digitalbeam
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-digitalbeam
     logging:
       driver: "json-file"
diff --git a/docker-compose/device-docker.yml b/docker-compose/device-docker.yml
index 1721f2aa19818a0c9580eb4e0c2e7d6b67b91b83..402e884fabee5686f8193bb1277550ff2e80a29c 100644
--- a/docker-compose/device-docker.yml
+++ b/docker-compose/device-docker.yml
@@ -16,14 +16,7 @@ version: '2.1'
 
 services:
   device-docker:
-    image: device-docker
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-docker
     logging:
       driver: "json-file"
diff --git a/docker-compose/device-observation-control.yml b/docker-compose/device-observation-control.yml
index cce4c5e8159bedcd6fd90ce0948611c5edff9408..db9a080375c90e30e55d30920b8ca00bed8f366d 100644
--- a/docker-compose/device-observation-control.yml
+++ b/docker-compose/device-observation-control.yml
@@ -15,14 +15,7 @@ version: '2.1'
 
 services:
   device-observation-control:
-    image: device-observation-control
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-observation-control
     logging:
       driver: "json-file"
diff --git a/docker-compose/device-observation.yml b/docker-compose/device-observation.yml
index 3da843a48f5da6ded09b7aae35966bec3434ff2e..a41ed1d695e5564308665fb03332597f3818ea0c 100644
--- a/docker-compose/device-observation.yml
+++ b/docker-compose/device-observation.yml
@@ -14,14 +14,7 @@ version: '2.1'
 
 services:
   device-observation:
-    image: device-observation
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-observation
     logging:
       driver: "json-file"
diff --git a/docker-compose/device-pcon.yml b/docker-compose/device-pcon.yml
index cd5618827fa941d545d4546f6ed546a8c58a9d07..3a6fe8c9ecb45c34f61c0f45e1b7e9f30ea1cbd4 100644
--- a/docker-compose/device-pcon.yml
+++ b/docker-compose/device-pcon.yml
@@ -11,14 +11,7 @@ volumes:
 
 services:
   device-pcon:
-    image: device-pcon
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-pcon
     logging:
       driver: "json-file"
diff --git a/docker-compose/device-psoc.yml b/docker-compose/device-psoc.yml
index cf94502a1702c2d1ba2af519490a7ac8ea59efb5..c448fbfc214f227d12c41cd71e2768642097fa40 100644
--- a/docker-compose/device-psoc.yml
+++ b/docker-compose/device-psoc.yml
@@ -11,14 +11,7 @@ volumes:
 
 services:
   device-psoc:
-    image: device-psoc
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-psoc
     logging:
       driver: "json-file"
diff --git a/docker-compose/device-recv.yml b/docker-compose/device-recv.yml
index fa2a2a5d394dbc80aafb8673b8b66e6eda1f81cb..42615a3a3e34a35a395f99e32cf2d3703a03ad62 100644
--- a/docker-compose/device-recv.yml
+++ b/docker-compose/device-recv.yml
@@ -16,14 +16,7 @@ version: '2.1'
 
 services:
   device-recv:
-    image: device-recv
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-recv
     logging:
       driver: "json-file"
diff --git a/docker-compose/device-sdp.yml b/docker-compose/device-sdp.yml
index ca76946c28f48a5f9d63bee09ef337a65f266cd6..2c0b9f4cf3fd29b816078f0a232b4df69b2558c2 100644
--- a/docker-compose/device-sdp.yml
+++ b/docker-compose/device-sdp.yml
@@ -16,14 +16,7 @@ version: '2.1'
 
 services:
   device-sdp:
-    image: device-sdp
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-sdp
     logging:
       driver: "json-file"
diff --git a/docker-compose/device-sst.yml b/docker-compose/device-sst.yml
index bfb1659e2f75d463588db83a86fd8633f3b87710..454079e622b96a7c65a06c84cacd015a5294723e 100644
--- a/docker-compose/device-sst.yml
+++ b/docker-compose/device-sst.yml
@@ -16,14 +16,7 @@ version: '2.1'
 
 services:
   device-sst:
-    image: device-sst
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-sst
     logging:
       driver: "json-file"
diff --git a/docker-compose/device-station-manager.yml b/docker-compose/device-station-manager.yml
index d8b5757840c38f22aca488b93b93e478712f9c28..75ab2f7fa795a5c65d0675c02983a1735ccc075d 100644
--- a/docker-compose/device-station-manager.yml
+++ b/docker-compose/device-station-manager.yml
@@ -11,14 +11,7 @@ volumes:
 
 services:
   device-station-manager:
-    image: device-station-manager
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-station-manager
     logging:
       driver: "json-file"
diff --git a/docker-compose/device-temperature-manager.yml b/docker-compose/device-temperature-manager.yml
index 18202bb32d5b94404274ea1edfad6626670dce6d..922351828800c53132aac45d4b9d2bab0ae83f5e 100644
--- a/docker-compose/device-temperature-manager.yml
+++ b/docker-compose/device-temperature-manager.yml
@@ -11,14 +11,7 @@ volumes:
 
 services:
   device-temperature-manager:
-    image: device-temperature-manager
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}-tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-temperature-manager
     logging:
       driver: "json-file"
diff --git a/docker-compose/device-tilebeam.yml b/docker-compose/device-tilebeam.yml
index 4e034347a13093d437ae61a3ca4d96f96f0f5216..9b789b614bcde4e218fa688766f8a4f24fed4a76 100644
--- a/docker-compose/device-tilebeam.yml
+++ b/docker-compose/device-tilebeam.yml
@@ -11,14 +11,7 @@ volumes:
 
 services:
   device-tilebeam:
-    image: device-tilebeam
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}-tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-tilebeam
     logging:
       driver: "json-file"
diff --git a/docker-compose/device-unb2.yml b/docker-compose/device-unb2.yml
index 884b09293b15b607a97813fcf7e2686e3441ba04..ca2e22116293de0f1e955c98e738c8e1c093121a 100644
--- a/docker-compose/device-unb2.yml
+++ b/docker-compose/device-unb2.yml
@@ -16,14 +16,7 @@ version: '2.1'
 
 services:
   device-unb2:
-    image: device-unb2
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-unb2
     logging:
       driver: "json-file"
diff --git a/docker-compose/device-xst.yml b/docker-compose/device-xst.yml
index 985b195a39ec7967b7f31c576c5f3d0790f33207..32cf862ad0426707f749298810981a297a71e3df 100644
--- a/docker-compose/device-xst.yml
+++ b/docker-compose/device-xst.yml
@@ -16,14 +16,7 @@ version: '2.1'
 
 services:
   device-xst:
-    image: device-xst
-    # build explicitly, as docker-compose does not understand a local image
-    # being shared among services.
-    build:
-      context: .
-      dockerfile: lofar-device-base/Dockerfile
-      args:
-        SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
+    image: lofar-device-base
     container_name: device-xst
     logging:
       driver: "json-file"
diff --git a/sbin/run_integration_test.sh b/sbin/run_integration_test.sh
index 72a5120e6ca16ded45ef62ba368da4f98ad7444e..2a814ffaaeafaa7da9d39cf84c7f496e0a2f7ca0 100755
--- a/sbin/run_integration_test.sh
+++ b/sbin/run_integration_test.sh
@@ -63,8 +63,6 @@ fi
 
 cd "$LOFAR20_DIR/docker-compose" || exit 1
 
-
-
 # Start the database server first
 make build databaseds dsconfig
 make start databaseds dsconfig
@@ -84,7 +82,7 @@ SIMULATORS=(sdptr-sim recv-sim unb2-sim apsct-sim apspu-sim ccd-sim)
 # take really long to finish, especially grafana / jupyter / prometheus.
 # jupyter is physically large > 2.5gb and overlayfs is really slow.
 
-make build "${DEVICES[@]}" "${SIMULATORS[@]}"
+make build "${SIMULATORS[@]}"
 make build logstash integration-test http-json-schemas
 
 # Start and stop sequence
@@ -93,14 +91,6 @@ make stop "${DEVICES[@]}" "${SIMULATORS[@]}"
 make stop device-docker # this one does not test well in docker-in-docker
 make stop logstash
 
-# Run dummy integration test to install pytango in tox virtualenv without
-# the memory pressure of the ELK stack.
-# Alternatively this step can be avoided if we use:
-# `tox --sitepackages -e integration` for the integration docker container,
-# however, that does require creating a container specific integration job.
-# TODO(L2SS-992): Remove me and above documentation
-integration_test dummy
-
 make start logstash http-json-schemas
 
 # Update the dsconfig
diff --git a/sbin/tag_and_push_docker_image.sh b/sbin/tag_and_push_docker_image.sh
index 9812e3d3082b28dc5f15e3685d7b99784447a58d..4ae48590ba149268bc3670999bdbc1cd00ded147 100755
--- a/sbin/tag_and_push_docker_image.sh
+++ b/sbin/tag_and_push_docker_image.sh
@@ -70,20 +70,6 @@ LOCAL_IMAGES=(
   "recv-sim docker-compose_recv-sim y" "sdptr-sim docker-compose_sdptr-sim y"
   "unb2-sim docker-compose_unb2-sim y"
 
-  "device-antennafield device-antennafield y"
-  "device-apsct device-apsct y" "device-apspu device-apspu y"
-  "device-ccd device-ccd y"
-  "device-configuration device-configuration y"
-  "device-boot device-boot y" "device-docker device-docker y"
-  "device-station-manager device-station-manager y"
-  "device-observation device-observation y"
-  "device-observation-control device-observation-control y"
-  "device-recv device-recv y"
-  "device-temperature-manager device-temperature-manager y"
-  "device-sdp device-sdp y" "device-sst device-sst y"
-  "device-unb2 device-unb2 y" "device-xst device-xst y"
-  "device-bst device-bst y"
-
   "itango docker-compose_itango y"
 
   "grafana grafana n" "prometheus prometheus n"
diff --git a/tangostationcontrol/tangostationcontrol/integration_test/dummy/__init__.py b/tangostationcontrol/tangostationcontrol/integration_test/dummy/__init__.py
deleted file mode 100644
index 68ddd5cdc3efaa38e853aef337c08beb99c50c4c..0000000000000000000000000000000000000000
--- a/tangostationcontrol/tangostationcontrol/integration_test/dummy/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-# Copyright (C) 2022 ASTRON (Netherlands Institute for Radio Astronomy)
-# SPDX-License-Identifier: Apache-2.0
diff --git a/tangostationcontrol/tangostationcontrol/integration_test/dummy/test_dummy.py b/tangostationcontrol/tangostationcontrol/integration_test/dummy/test_dummy.py
deleted file mode 100644
index af30935e7edc4875d943c9dd9c831b9f01318dcc..0000000000000000000000000000000000000000
--- a/tangostationcontrol/tangostationcontrol/integration_test/dummy/test_dummy.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (C) 2022 ASTRON (Netherlands Institute for Radio Astronomy)
-# SPDX-License-Identifier: Apache-2.0
-
-from tangostationcontrol.integration_test import base
-
-
-class TestDummy(base.IntegrationTestCase):
-    def test_dummy(self):
-        self.assertTrue(True)