diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b7e24209df4473d06484036f4062d35fe3d0f347..50b114bf73364dc5136f07861d54e0a7e2109d01 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -40,32 +40,72 @@ verify:
   script:
     - mvn verify $MAVEN_CLI_OPTS
 
+.get-version:
+  before_script:
+    - export PROJECT_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout $MAVEN_CLI_OPTS)
+    - export PROJECT_ARTIFACTID=$(mvn help:evaluate -Dexpression=project.artifactId -q -DforceStdout $MAVEN_CLI_OPTS)
+    - export NEXUS_IMAGE_PREFIX="docker.ozg-sh.de/${PROJECT_ARTIFACTID}"
+
+# Merge request jobs
+push-merge-request-image-gitlab:
+  stage: publish
+  extends: .get-version
+  script:
+    - export IMAGE_TAGS="${CI_REGISTRY_IMAGE}:MR-${CI_MERGE_REQUEST_IID}-${PROJECT_VERSION}"
+    - mvn deploy -Pgitlab-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
+  rules:
+    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
+      # when: never  # Step disabled until gitlab container registry works
+
+push-merge-request-image-nexus:
+  stage: publish
+  extends: .get-version
+  script:
+    - export IMAGE_TAGS="${NEXUS_IMAGE_PREFIX}:MR-${CI_MERGE_REQUEST_IID}-${PROJECT_VERSION}"
+    - mvn deploy -Pnexus-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
+  rules:
+    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
+  # when: manual
+
+# Snapshot jobs
 push-snapshot-image-gitlab:
   stage: publish
+  extends: .get-version
   script:
+    - export IMAGE_TAGS="${CI_REGISTRY_IMAGE}:main-${PROJECT_VERSION},${CI_REGISTRY_IMAGE}:snapshot-latest"
     - mvn deploy -Pgitlab-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
   only:
     - main
+  # rules:
+  #  - when: never  # Step disabled until gitlab container registry works
 
 push-snapshot-image-nexus:
   stage: publish
+  extends: .get-version
   script:
+    - export IMAGE_TAGS="${NEXUS_IMAGE_PREFIX}:main-${PROJECT_VERSION},${NEXUS_IMAGE_PREFIX}:snapshot-latest"
     - mvn deploy -Pnexus-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
   only:
     - main
 
+# Release jobs
 push-release-image-gitlab:
   stage: publish
+  extends: .get-version
   script:
-    - mvn versions:set -DnewVersion=${CI_COMMIT_TAG}
+    - mvn versions:set -DnewVersion=${CI_COMMIT_TAG} $MAVEN_CLI_OPTS
+    - export IMAGE_TAGS="${CI_REGISTRY_IMAGE}:release-${CI_COMMIT_TAG},${CI_REGISTRY_IMAGE}:latest"
     - mvn deploy -Pgitlab-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
   rules:
     - if: $CI_COMMIT_TAG
+      # when: never  # Step disabled until gitlab container registry works
 
 push-release-image-nexus:
   stage: publish
+  extends: .get-version
   script:
-    - mvn versions:set -DnewVersion=${CI_COMMIT_TAG}
-    - mvn mvn deploy -Pnexus-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
+    - mvn versions:set -DnewVersion=${CI_COMMIT_TAG} $MAVEN_CLI_OPTS
+    - export IMAGE_TAGS="${NEXUS_IMAGE_PREFIX}:release-${CI_COMMIT_TAG},${NEXUS_IMAGE_PREFIX}:latest"
+    - mvn deploy -Pnexus-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
   rules:
     - if: $CI_COMMIT_TAG
diff --git a/pom.xml b/pom.xml
index 68d57529fff4af6fb9b009b539e9d914a55bb259..018a4c823e4c414c544ac61e5a1111b90d53aa08 100644
--- a/pom.xml
+++ b/pom.xml
@@ -210,7 +210,8 @@
 						<artifactId>spring-boot-maven-plugin</artifactId>
 						<configuration>
 							<image>
-								<name>${CI_REGISTRY_IMAGE}/${project.artifactId}:${project.version}</name>
+								<name>${CI_REGISTRY_IMAGE}/${project.artifactId}</name>
+								<tags>${IMAGE_TAGS}</tags>
 								<publish>true</publish>
 							</image>
 							<docker>
@@ -224,6 +225,7 @@
 					</plugin>
 				</plugins>
 			</build>
+
 		</profile>
 		<profile>
 			<id>nexus-deploy</id>