diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 840e280bd9b215c4339441dc1ab799e04416f941..21bfbf3e1af8bcf7ca4f6878a86ac0e907211680 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -20,20 +20,7 @@ stages:
        - docker images
        - docker ps -a
   script: 
-       - echo "current branch is ${CI_COMMIT_BRANCH}"
-       - echo "current commit is ${CI_COMMIT_SHA:0:8}"
-       - echo "current tag is ${CI_COMMIT_TAG}"
-       - if [[ -z $IMAGE_NAME ]]; then echo "ERROR variable IMAGE_NAME is not defined "; exit 1; fi
-       - if [[ -z $IMAGE_TAG ]]; then echo "ERROR variable IMAGE_TAG is not defined "; exit 1; fi
-       - if [[ -z $CI_COMMIT_TAG ]]; then echo "ERROR variable CI_COMMIT_TAG is not defined "; exit 1; fi 
-       - echo "start IMAGE is ${IMAGE_NAME}:${IMAGE_TAG}"
-       - NEW_IMAGE_TAG=`echo ${CI_COMMIT_TAG} | sed -e 's@.*-\(v[0-9\.]*\)@\1@'`
-       - echo "new IMAGE TAG is ${NEW_IMAGE_TAG}"
-       - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN gitlab-registry.cern.ch
-       - docker tag ${IMAGE}:${IMAGE_TAG} ${IMAGE}:${NEW_IMAGE_TAG}
-       - docker tag ${IMAGE}:${IMAGE_TAG} ${IMAGE}:latest
-       - docker push ${IMAGE}:${NEW_IMAGE_TAG}
-       - docker push ${IMAGE}:latest
+    - ${CI_PROJECT_DIR}/ci_promote_image.sh
   only:
     variables:
       - $CI_COMMIT_TAG =~ /^.*-v[0-9].*$/
@@ -109,7 +96,7 @@ promote_patatrack:
     variables:
       - $CI_COMMIT_TAG =~ /^cms-patatrack-v.*$/
   before_script:
-    - export IMAGE_NAME=$CI_REGISTRY_IMAGE/cms/cms-patatrack-nvidia-bmk
+    - export IMAGE_NAMES=$CI_REGISTRY_IMAGE/cms/cms-patatrack-nvidia-bmk
     - export IMAGE_TAG:ci-qa-${CI_COMMIT_SHA:0:8}
 
 #####################################################
@@ -124,7 +111,6 @@ build_simpletrack:
   only:
     variables:
     - $CI_COMMIT_BRANCH =~ /^qa.*$/
-    #- $CI_COMMIT_TAG =~ /^simpletrack-v.*$/
     changes:
     - lhc/simpletrack/Dockerfile.*
     - lhc/simpletrack/lhc-simpletrack.*
@@ -137,5 +123,5 @@ promote_simpletrack:
     variables:
       - $CI_COMMIT_TAG =~ /^simpletrack-v.*$/
   before_script:
-    - export IMAGE_NAME=$CI_REGISTRY_IMAGE/simpletrack/intel
-    - export IMAGE_TAG:ci-qa-latest
+    - export IMAGE_NAMES="$CI_REGISTRY_IMAGE/simpletrack/intel|$CI_REGISTRY_IMAGE/simpletrack/nvidia|$CI_REGISTRY_IMAGE/simpletrack/pocl|$CI_REGISTRY_IMAGE/simpletrack/rocm"
+    - export IMAGE_TAG=ci-qa-latest
diff --git a/ci_promote_image.sh b/ci_promote_image.sh
new file mode 100755
index 0000000000000000000000000000000000000000..45c2dd86750eb0a6040fe42fa76d8cba5b11c224
--- /dev/null
+++ b/ci_promote_image.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+ echo "current CI_COMMIT_BRANCH is ${CI_COMMIT_BRANCH}"
+ echo "current CI_COMMIT_REF_NAME is $CI_COMMIT_REF_NAME"
+ echo "current CI_COMMIT_SHA is ${CI_COMMIT_SHA:0:8}"
+ echo "current CI_COMMIT_TAG is ${CI_COMMIT_TAG}"
+ if [[ -z $IMAGE_NAMES ]]; then echo "ERROR variable IMAGE_NAMES is not defined "; exit 1; fi
+ if [[ -z $IMAGE_TAG ]]; then echo "ERROR variable IMAGE_TAG is not defined "; exit 1; fi
+ if [[ -z $CI_COMMIT_TAG ]]; then echo "ERROR variable CI_COMMIT_TAG is not defined "; exit 1; fi 
+ NEW_IMAGE_TAG=`echo ${CI_COMMIT_TAG} | sed -e 's@.*-\(v[0-9\.]*\)@\1@'`
+ echo "new IMAGE TAG is ${NEW_IMAGE_TAG}"
+ docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN gitlab-registry.cern.ch
+ for IMAGE_NAME in `echo $IMAGE_NAMES | tr '|' '\n'`;
+ do
+    echo "IMAGE to tag is ${IMAGE_NAME}:${IMAGE_TAG}"
+    docker pull ${IMAGE_NAME}:${IMAGE_TAG}
+    docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${IMAGE_NAME}:${NEW_IMAGE_TAG}
+    docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${IMAGE_NAME}:latest
+    docker push ${IMAGE_NAME}:${NEW_IMAGE_TAG}
+    docker push ${IMAGE_NAME}:latest
+    docker rmi ${IMAGE_NAME}:${IMAGE_TAG} ${IMAGE_NAME}:${NEW_IMAGE_TAG} ${IMAGE_NAME}:latest
+done
\ No newline at end of file
diff --git a/lhc/simpletrack/.simpletrack-ci.yml b/lhc/simpletrack/.simpletrack-ci.yml
index 7acd6d3547430127b7cf8f21e56eb9710e1b8127..6582c03cf53f314c5840b8bc0321c8b0cbf8ead7 100644
--- a/lhc/simpletrack/.simpletrack-ci.yml
+++ b/lhc/simpletrack/.simpletrack-ci.yml
@@ -14,9 +14,16 @@ stages:
     entrypoint: [""]
   environment:
     name: build/$CI_COMMIT_REF_NAME
-  before_script:
+  script:
   - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
-  - export HEP_LATEST="latest"; export HEP_TAG=`echo ${CI_COMMIT_TAG} | sed -e 's@.*-\(v[0-9\.]*\)@\1@'`; if [ "$CI_COMMIT_REF_NAME" == "qa" ]; then export HEP_LATEST=`echo ci-${CI_COMMIT_REF_NAME}-latest` ; export HEP_TAG=`echo "ci"-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}`; fi
+  - export LATEST="latest"; 
+  - export IMAGE_TAG=`echo ${CI_COMMIT_TAG} | sed -e 's@.*-\(v[0-9\.]*\)@\1@'`; 
+  - if [ "$CI_COMMIT_REF_NAME" == "qa" ]; then export LATEST=`echo ci-${CI_COMMIT_REF_NAME}-latest` ; export IMAGE_TAG=`echo "ci"-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}`; fi
+  - if [[ -z $DOCKERFILE ]]; then echo "ERROR variable DOCKERFILE is not defined "; exit 1; fi 
+  - if [[ -z $CONTEXT ]]; then echo "ERROR variable CONTEXT is not defined "; exit 1; fi 
+  - if [[ -z $IMAGE_NAME ]]; then echo "ERROR variable IMAGE_NAME is not defined "; exit 1; fi 
+  - if [[ -z $IMAGE_TAG ]]; then echo "ERROR variable IMAGE_TAG is not defined "; exit 1; fi 
+  - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile ${DOCKERFILE} --destination ${IMAGE_NAME}:$IMAGE_TAG --destination ${IMAGE_NAME}:$LATEST
 
 .job_template: &job_test
   stage: test
@@ -48,23 +55,27 @@ stages:
 
 build:nvidia:
   <<: *job_build
-  script:
-  - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/lhc/simpletrack/Dockerfile.nvidia --destination ${CI_REGISTRY_IMAGE}/simpletrack/nvidia:$HEP_TAG --destination ${CI_REGISTRY_IMAGE}/simpletrack/nvidia:$HEP_LATEST
+  before_script:
+    - export DOCKERFILE=$CI_PROJECT_DIR/lhc/simpletrack/Dockerfile.nvidia
+    - export IMAGE_NAME=${CI_REGISTRY_IMAGE}/simpletrack/nvidia
 
 build:intel:
   <<: *job_build
-  script:
-  - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/lhc/simpletrack/Dockerfile.intel  --destination ${CI_REGISTRY_IMAGE}/simpletrack/intel:$HEP_TAG --destination ${CI_REGISTRY_IMAGE}/simpletrack/intel:$HEP_LATEST
+  before_script:
+    - export DOCKERFILE=$CI_PROJECT_DIR/lhc/simpletrack/Dockerfile.intel
+    - export IMAGE_NAME=${CI_REGISTRY_IMAGE}/simpletrack/intel
 
 build:rocm:
   <<: *job_build
-  script:
-  - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/lhc/simpletrack/Dockerfile.rocm --destination $CI_REGISTRY_IMAGE/simpletrack/rocm:$HEP_TAG --destination $CI_REGISTRY_IMAGE/simpletrack/rocm:$HEP_LATEST
+  before_script:
+    - export DOCKERFILE=$CI_PROJECT_DIR/lhc/simpletrack/Dockerfile.rocm
+    - export IMAGE_NAME=${CI_REGISTRY_IMAGE}/simpletrack/rocm
 
 build:pocl:
   <<: *job_build
-  script:
-  - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/lhc/simpletrack/Dockerfile.pocl  --destination ${CI_REGISTRY_IMAGE}/simpletrack/pocl:$HEP_TAG --destination ${CI_REGISTRY_IMAGE}/simpletrack/pocl:$HEP_LATEST
+  before_script:
+    - export DOCKERFILE=$CI_PROJECT_DIR/lhc/simpletrack/Dockerfile.pocl
+    - export IMAGE_NAME=${CI_REGISTRY_IMAGE}/simpletrack/pocl
 
 ##########################
 ### Test #################