diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 144577ef12932712d17c8346f9523c94b6c7460d..ebdb7df6c7067668e1875b14328ebf0f51025e8b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -47,6 +47,13 @@ stages:
 # only supposed to run on merge requests with file changes. However,
 # two pipelines will spawn instead of one of which one tagged with 'detached`.
 .base_docker_images_except:
+  extends: .base_docker_images
+  except:
+    refs:
+      - tags
+      - master
+      - merge_requests
+.base_docker_images_except_merge:
   extends: .base_docker_images
   except:
     refs:
@@ -106,6 +113,17 @@ docker_build_image_all:
     - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-xst latest
 docker_build_image_elk:
   extends: .base_docker_images_except
+  only:
+    changes:
+      - docker-compose/elk.yml
+      - docker-compose/elk/*
+      - docker-compose/elk-configure-host/*
+  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 elk $tag
+    - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh elk-configure-host $tag
+docker_build_image_elk_merge:
+  extends: .base_docker_images_except_merge
   only:
     refs:
       - merge_requests
@@ -119,6 +137,15 @@ docker_build_image_elk:
     - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh elk-configure-host $tag
 docker_build_image_lofar_device_base:
   extends: .base_docker_images_except
+  only:
+    changes:
+      - docker-compose/lofar-device-base.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 lofar-device-base $tag
+docker_build_image_lofar_device_base_merge:
+  extends: .base_docker_images_except_merge
   only:
     refs:
       - merge_requests
@@ -130,6 +157,15 @@ docker_build_image_lofar_device_base:
     - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh lofar-device-base $tag
 docker_build_image_prometheus:
   extends: .base_docker_images_except
+  only:
+    changes:
+      - docker-compose/prometheus.yml
+      - docker-compose/prometheus/*
+  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 prometheus $tag
+docker_build_image_prometheus_merge:
+  extends: .base_docker_images_except_merge
   only:
     refs:
       - merge_requests
@@ -141,6 +177,14 @@ docker_build_image_prometheus:
     - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh prometheus $tag
 docker_build_image_itango:
   extends: .base_docker_images_except
+  only:
+    changes:
+      - docker-compose/itango.yml
+  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 itango $tag
+docker_build_image_itango_merge:
+  extends: .base_docker_images_except_merge
   only:
     refs:
       - merge_requests
@@ -151,6 +195,15 @@ docker_build_image_itango:
     - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh itango $tag
 docker_build_image_grafana:
   extends: .base_docker_images_except
+  only:
+    changes:
+      - docker-compose/grafana.yml
+      - docker-compose/grafana/*
+  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 grafana $tag
+docker_build_image_grafana_merge:
+  extends: .base_docker_images_except_merge
   only:
     refs:
       - merge_requests
@@ -162,6 +215,15 @@ docker_build_image_grafana:
     - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh grafana $tag
 docker_build_image_jupyter:
   extends: .base_docker_images_except
+  only:
+    changes:
+      - docker-compose/jupyter.yml
+      - docker-compose/jupyter/*
+  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 jupyter $tag
+docker_build_image_jupyter_merge:
+  extends: .base_docker_images_except_merge
   only:
     refs:
       - merge_requests
@@ -173,6 +235,15 @@ docker_build_image_jupyter:
     - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh jupyter $tag
 docker_build_image_apsct_sim:
   extends: .base_docker_images_except
+  only:
+    changes:
+      - docker-compose/aspct-sim.yml
+      - docker-compose/pypcc-sim-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 apsct-sim $tag
+docker_build_image_apsct_sim_merge:
+  extends: .base_docker_images_except_merge
   only:
     refs:
       - merge_requests
@@ -184,6 +255,15 @@ docker_build_image_apsct_sim:
     - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh apsct-sim $tag
 docker_build_image_apspu_sim:
   extends: .base_docker_images_except
+  only:
+    changes:
+      - docker-compose/apspu-sim.yml
+      - docker-compose/pypcc-sim-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 apspu-sim $tag
+docker_build_image_apspu_sim_merge:
+  extends: .base_docker_images_except_merge
   only:
     refs:
       - merge_requests
@@ -195,6 +275,15 @@ docker_build_image_apspu_sim:
     - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh apspu-sim $tag
 docker_build_image_recv_sim:
   extends: .base_docker_images_except
+  only:
+    changes:
+      - docker-compose/recv-sim.yml
+      - docker-compose/pypcc-sim-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 recv-sim $tag
+docker_build_image_recv_sim_merge:
+  extends: .base_docker_images_except_merge
   only:
     refs:
       - merge_requests
@@ -206,6 +295,15 @@ docker_build_image_recv_sim:
     - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh recv-sim $tag
 docker_build_image_sdptr_sim:
   extends: .base_docker_images_except
+  only:
+    changes:
+      - docker-compose/sdptr-sim.yml
+      - docker-compose/sdptr-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 sdptr-sim $tag
+docker_build_image_sdptr_sim_merge:
+  extends: .base_docker_images_except_merge
   only:
     refs:
       - merge_requests
@@ -217,6 +315,15 @@ docker_build_image_sdptr_sim:
     - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh sdptr-sim $tag
 docker_build_image_unb2_sim:
   extends: .base_docker_images_except
+  only:
+    changes:
+      - docker-compose/unb2-sim.yml
+      - docker-compose/pypcc-sim-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 unb2-sim $tag
+docker_build_image_unb2_sim_merge:
+  extends: .base_docker_images_except_merge
   only:
     refs:
       - merge_requests
@@ -226,6 +333,15 @@ 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_merge:
+  extends: .base_docker_images_except_merge
+  only:
+    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_apsct:
   extends: .base_docker_images_except
   only:
@@ -239,6 +355,15 @@ docker_build_image_device_apsct:
     - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-aspct $tag
 docker_build_image_device_apspu:
   extends: .base_docker_images_except
+  only:
+    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_apspu_merge:
+  extends: .base_docker_images_except_merge
   only:
     refs:
       - merge_requests
@@ -250,6 +375,15 @@ docker_build_image_device_apspu:
     - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-apspu $tag
 docker_build_image_device_boot:
   extends: .base_docker_images_except
+  only:
+    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_boot_merge:
+  extends: .base_docker_images_except_merge
   only:
     refs:
       - merge_requests
@@ -261,6 +395,15 @@ docker_build_image_device_boot:
     - 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:
+    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_docker_merge:
+  extends: .base_docker_images_except_merge
   only:
     refs:
       - merge_requests
@@ -272,6 +415,15 @@ docker_build_image_device_docker:
     - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-docker $tag
 docker_build_image_device_ovservation_control:
   extends: .base_docker_images_except
+  only:
+    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_ovservation_control_merge:
+  extends: .base_docker_images_except_merge
   only:
     refs:
       - merge_requests
@@ -283,6 +435,15 @@ docker_build_image_device_ovservation_control:
     - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-observation_control $tag
 docker_build_image_device_recv:
   extends: .base_docker_images_except
+  only:
+    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_recv_merge:
+  extends: .base_docker_images_except_merge
   only:
     refs:
       - merge_requests
@@ -294,6 +455,15 @@ docker_build_image_device_recv:
     - 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:
+    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_sdp_merge:
+  extends: .base_docker_images_except_merge
   only:
     refs:
       - merge_requests
@@ -305,6 +475,15 @@ docker_build_image_device_sdp:
     - bash $CI_PROJECT_DIR/sbin/tag_and_push_docker_image.sh device-sdp $tag
 docker_build_image_device_sst:
   extends: .base_docker_images_except
+  only:
+    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_sst_merge:
+  extends: .base_docker_images_except_merge
   only:
     refs:
       - merge_requests
@@ -316,6 +495,15 @@ docker_build_image_device_sst:
     - 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:
+    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_unb2_merge:
+  extends: .base_docker_images_except_merge
   only:
     refs:
       - merge_requests
@@ -327,6 +515,15 @@ docker_build_image_device_unb2:
     - 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:
+    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_xst_merge:
+  extends: .base_docker_images_except_merge
   only:
     refs:
       - merge_requests