diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4e38e66a45398a91bdf6d0ec75aa33ce4d1e6182..ca23373f6331acc7ee13fbb14991f8134fa2a4cd 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -98,6 +98,7 @@ docker_build_image_all:
     - 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-boot 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-pdu latest
     - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-recv latest
@@ -320,6 +321,17 @@ docker_build_image_device_docker:
   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:
diff --git a/CDB/test_environment_ConfigDb.json b/CDB/test_environment_ConfigDb.json
new file mode 100644
index 0000000000000000000000000000000000000000..eaa786547743f368a4a1b8333d89d127f4b3b829
--- /dev/null
+++ b/CDB/test_environment_ConfigDb.json
@@ -0,0 +1,11 @@
+{
+    "servers": {
+        "Observation": {
+            "STAT": {
+                "Observation": {
+                    "STAT/Observation/1": {}
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/docker-compose/device-observation.yml b/docker-compose/device-observation.yml
new file mode 100644
index 0000000000000000000000000000000000000000..28beae49945ced6526648893b81eb57783aeb2f8
--- /dev/null
+++ b/docker-compose/device-observation.yml
@@ -0,0 +1,45 @@
+#
+# Docker compose file that launches a LOFAR2.0 station's
+# Observation device.
+#
+# Defines:
+#   - device-observation: LOFAR2.0 station Observation
+#
+# Requires:
+#   - lofar-device-base.yml
+#
+version: '2'
+
+services:
+  device-observation:
+    image: device-observation
+    # build explicitly, as docker-compose does not understand a local image
+    # being shared among services.
+    build:
+        context: ..
+        dockerfile: docker-compose/lofar-device-base/Dockerfile
+        args:
+            SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
+    container_name: ${CONTAINER_NAME_PREFIX}device-observation
+    logging:
+      driver: "json-file"
+      options:
+        max-size: "100m"
+        max-file: "10"
+    networks:
+      - control
+    ports:
+      - "5718:5718" # unique port for this DS
+    extra_hosts:
+      - "host.docker.internal:host-gateway"
+    volumes:
+        - ..:/opt/lofar/tango:rw
+    environment:
+      - TANGO_HOST=${TANGO_HOST}
+    working_dir: /opt/lofar/tango
+    entrypoint:
+      - bin/start-ds.sh
+      # configure CORBA to _listen_ on 0:port, but tell others we're _reachable_ through ${HOSTNAME}:port, since CORBA
+      # can't know about our Docker port forwarding
+      - l2ss-observation Observation STAT -v -ORBendPoint giop:tcp:0:5718 -ORBendPointPublish giop:tcp:${HOSTNAME}:5718
+    restart: unless-stopped
diff --git a/sbin/run_integration_test.sh b/sbin/run_integration_test.sh
index 7e0cf3b27ba111077c5739ce5fd832b4b6ea6e05..c276433a4705518708166fc78dbc4c34a0e51e5b 100755
--- a/sbin/run_integration_test.sh
+++ b/sbin/run_integration_test.sh
@@ -41,6 +41,7 @@ make start elk
 # Update the dsconfig
 # Do not remove `bash`, otherwise statement ignored by gitlab ci shell!
 bash "${LOFAR20_DIR}"/sbin/update_ConfigDb.sh "${LOFAR20_DIR}"/CDB/LOFAR_ConfigDb.json
+bash "${LOFAR20_DIR}"/sbin/update_ConfigDb.sh "${LOFAR20_DIR}"/CDB/test_environment_ConfigDb.json
 bash "${LOFAR20_DIR}"/sbin/update_ConfigDb.sh "${LOFAR20_DIR}"/CDB/tango-archiver-data/archiver-devices.json
 bash "${LOFAR20_DIR}"/sbin/update_ConfigDb.sh "${LOFAR20_DIR}"/CDB/stations/simulators_ConfigDb.json
 bash "${LOFAR20_DIR}"/sbin/update_ConfigDb.sh "${LOFAR20_DIR}"/CDB/stations/dummy_positions_ConfigDb.json
diff --git a/sbin/tag_and_push_docker_image.sh b/sbin/tag_and_push_docker_image.sh
index 3689a26b4f988a463e6022472abc7db73d491f51..d0ac898cf9afb488b043c399d7dcd59d28f0107e 100755
--- a/sbin/tag_and_push_docker_image.sh
+++ b/sbin/tag_and_push_docker_image.sh
@@ -85,6 +85,7 @@ LOCAL_IMAGES=(
 
   "device-apsct device-apsct y" "device-apspu device-apspu y"
   "device-boot device-boot y" "device-docker device-docker y"
+  "device-observation device-observation y"
   "device-observation_control device-observation_control y"
   "device-recv device-recv y" "device-temperature-manager y"
   "device-sdp device-sdp y" "device-sst device-sst y"
diff --git a/tangostationcontrol/tangostationcontrol/devices/README.md b/tangostationcontrol/tangostationcontrol/devices/README.md
index 566fb78e57ce093aefade15fc21e8d64c94d47ed..65135e52d14e4872074014378b8604c195d200b4 100644
--- a/tangostationcontrol/tangostationcontrol/devices/README.md
+++ b/tangostationcontrol/tangostationcontrol/devices/README.md
@@ -15,7 +15,7 @@ If a new device is added, it will (likely) need to be referenced in several plac
 - 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,
 - Adjust `.gitlab-ci.yml` to add the device to the `docker_build_image_all` step and to create a `docker_build_image_device_XXX` step,
-- Add to `sbin/tag_and_push_docker_image.sh` the LOCAL_IMAGES devicename and build for integration boolean pair, 
+- Add to `sbin/tag_and_push_docker_image.sh` the LOCAL_IMAGES device name, imagine name and build for integration boolean triple,
 - Add to `tangostationcontrol/docs/source/devices/` to mention the device in the end-user documentation.
 - Adjust `tangostationcontrol/docs/source/index.rst` to include the newly created file in `docs/source/devices/`.