diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 348f88cae4e22d702828c9d6de9f34a61442b5fe..16560e5eaed01a0772345edcfeb40fc130b60d9d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -12,10 +12,10 @@ workflow:
       when: never
     - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
       variables:
-        DOCKER_IMAGE_TAG: ":latest"
+        DOCKER_IMAGE_TAG: "latest"
     - if: $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH
       variables:
-        DOCKER_IMAGE_TAG: ":$CI_COMMIT_REF_SLUG"
+        DOCKER_IMAGE_TAG: "$CI_COMMIT_REF_SLUG"
 
 test-code:
   image: python:3.10
@@ -32,34 +32,7 @@ test-code:
     - python manage.py migrate --settings ldvspec.settings.ci
     - python manage.py test --settings ldvspec.settings.ci
 
-docker-test-build:
-  variables:
-    if: main
-  # Official docker image.
-  image: docker:20-cli
-  before_script:
-    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
-  stage: build
-  services:
-    - docker:dind
-  script:
-    - HASH=$(sha256sum ldvspec/Dockerfile.base | awk '{ print $1 }')
-    - >
-      if docker manifest inspect $CI_REGISTRY_IMAGE/base:$HASH > /dev/null; then
-        echo "Base image exists"
-      else
-        docker build -t "$CI_REGISTRY_IMAGE/base:$HASH" -f ldvspec/Dockerfile.base ldvspec
-        docker push "$CI_REGISTRY_IMAGE/base:$HASH"
-      fi
-    - echo "Build using $CI_REGISTRY_IMAGE/base:$HASH"
-    # Try pulling the existing image
-    - docker pull $CI_REGISTRY_IMAGE$DOCKER_IMAGE_TAG || true
-    - docker build --build-arg BASE_IMAGE="$CI_REGISTRY_IMAGE/base:$HASH" --cache-from $CI_REGISTRY_IMAGE$DOCKER_IMAGE_TAG -t "$CI_REGISTRY_IMAGE$DOCKER_IMAGE_TAG" ldvspec
-    - docker push $CI_REGISTRY_IMAGE$DOCKER_IMAGE_TAG
-
-
-docker-build-master:
-  # Official docker image.
+docker-build:
   image: docker:20-cli
   stage: build
   services:
@@ -76,11 +49,10 @@ docker-build-master:
         docker push "$CI_REGISTRY_IMAGE/base:$HASH"
       fi
     - echo "Build using $CI_REGISTRY_IMAGE/base:$HASH"
-    - docker build --cache-from $CI_REGISTRY_IMAGE --build-arg BASE_IMAGE="$CI_REGISTRY_IMAGE/base:$HASH" --pull -t "$CI_REGISTRY_IMAGE" ldvspec
-    - docker push "$CI_REGISTRY_IMAGE"
-  only:
-    - main
-
+    # Try pulling the existing image for layer reuse; || true to ignore if it does not exist
+    - docker pull $CI_REGISTRY_IMAGE:$DOCKER_IMAGE_TAG || true
+    - docker build --cache-from $CI_REGISTRY_IMAGE:$DOCKER_IMAGE_TAG --build-arg BASE_IMAGE="$CI_REGISTRY_IMAGE/base:$HASH" --pull -t "$CI_REGISTRY_IMAGE:$DOCKER_IMAGE_TAG" ldvspec
+    - docker push "$CI_REGISTRY_IMAGE:$DOCKER_IMAGE_TAG"
 
 integration-test:
   image: docker:20-cli
@@ -99,9 +71,6 @@ integration-test:
   rules:
     - when: never
 
-
-
-
 # deploy test/dev version on 'sdc-dev.astron.nl'
 docker-deploy-main-test:
   stage: deploy_to_test
@@ -139,8 +108,8 @@ docker-deploy-main-test:
     ## deploy the docker-compose file and use it to spin up the containers
     - scp -O -o StrictHostKeyChecking=no ldvspec/docker/docker-compose-dev-cd.yml sdc@dop814.astron.nl:/docker_compose/ldvspec/docker-compose-dev-cd.yml
     - ssh -o StrictHostKeyChecking=no sdc@dop814.astron.nl "echo $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY"
-    - ssh -o StrictHostKeyChecking=no sdc@dop814.astron.nl "docker pull "$CI_REGISTRY_IMAGE""
-    - ssh -o StrictHostKeyChecking=no sdc@dop814.astron.nl "docker-compose -p ldvspec -f /docker_compose/ldvspec/docker-compose-dev-cd.yml up -d"
+    - ssh -o StrictHostKeyChecking=no sdc@dop814.astron.nl "docker pull "$CI_REGISTRY_IMAGE:$DOCKER_IMAGE_TAG""
+    - ssh -o StrictHostKeyChecking=no sdc@dop814.astron.nl "docker-compose -p ldvspec -f /docker_compose/ldvspec/docker-compose-dev-cd.yml up -d --force-recreate"
     - echo "Application deployed"
   when: manual
   only:
@@ -183,8 +152,8 @@ docker-deploy-main-production:
     ## deploy the docker-compose file and use it to spin up the containers
     - scp -O -o StrictHostKeyChecking=no ldvspec/docker/docker-compose-production-cd.yml sdco@dop821.astron.nl:/opt/dockercompose/ldvspec/docker-compose-production-cd.yml
     - ssh -o StrictHostKeyChecking=no sdco@dop821.astron.nl "echo $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY"
-    - ssh -o StrictHostKeyChecking=no sdco@dop821.astron.nl "docker pull "$CI_REGISTRY_IMAGE""
-    - ssh -o StrictHostKeyChecking=no sdco@dop821.astron.nl "docker-compose -p ldvspec -f /opt/dockercompose/ldvspec/docker-compose-production-cd.yml up -d"
+    - ssh -o StrictHostKeyChecking=no sdco@dop821.astron.nl "docker pull "$CI_REGISTRY_IMAGE:$DOCKER_IMAGE_TAG""
+    - ssh -o StrictHostKeyChecking=no sdco@dop821.astron.nl "docker-compose -p ldvspec -f /opt/dockercompose/ldvspec/docker-compose-production-cd.yml up -d --force-recreate"
     - echo "Application deployed"
   when: manual
   only: