diff --git a/build-mirror-image.groovy b/build-mirror-image.groovy
index d9169b4..822d398 100644
--- a/build-mirror-image.groovy
+++ b/build-mirror-image.groovy
@@ -4,6 +4,7 @@
  *
  * Expected parameters:
  * CLUSTER_MODEL - An URL to the Reclass model for the mirror VM.
+ * CLUSTER_MODEL_REF - Branch or tag to use for cluster model
  * CLUSTER_NAME - Cluster name used in the above model.
  * IMAGE_NAME - Name of the result image.
  * OS_CREDENTIALS_ID - ID of credentials for OpenStack API stored in Jenkins.
@@ -33,7 +34,7 @@
 def openstack = new com.mirantis.mk.Openstack()
 def date = new Date()
 def dateTime = date.format("ddMMyyyy-HHmmss")
-def venvPepper = "venvPepper"
+def venvPepper = ""
 def privateKey = ""
 def floatingIP = ""
 def openstackServer = ""
@@ -61,8 +62,9 @@
     node("python&&disk-xl") {
         try {
             def workspace = common.getWorkspace()
-            rcFile = openstack.createOpenstackEnv(OS_URL, OS_CREDENTIALS_ID, OS_PROJECT, "default", "", "default", "2", "")
             openstackEnv = String.format("%s/venv", workspace)
+            venvPepper = String.format("%s/venvPepper", workspace)
+            rcFile = openstack.createOpenstackEnv(openstackEnv, OS_URL, OS_CREDENTIALS_ID, OS_PROJECT, "default", "", "default", "2", "")
             def openstackVersion = OS_VERSION
 
             VM_IP_DELAY = VM_IP_DELAY as Integer
@@ -88,7 +90,7 @@
 
                 floatingIP = openstack.runOpenstackCommand("openstack ip floating create --format value -c floating_ip_address ${VM_FLOATING_IP_POOL}", rcFile, openstackEnv)
 
-                withEnv(["CLUSTER_NAME=${CLUSTER_NAME}", "CLUSTER_MODEL=${CLUSTER_MODEL}"]) {
+                withEnv(["CLUSTER_NAME=${CLUSTER_NAME}", "CLUSTER_MODEL=${CLUSTER_MODEL}", "CLUSTER_MODEL_REF=${CLUSTER_MODEL_REF}", "MCP_VERSION=${MCP_VERSION}"]) {
                     sh "envsubst < salt-bootstrap.sh > salt-bootstrap.sh.temp;mv salt-bootstrap.sh.temp salt-bootstrap.sh; cat salt-bootstrap.sh"
                 }
 
@@ -226,4 +228,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/ceph-remove-osd.groovy b/ceph-remove-osd.groovy
index 04a176b..71946b7 100644
--- a/ceph-remove-osd.groovy
+++ b/ceph-remove-osd.groovy
@@ -75,7 +75,11 @@
 
         // get list of osd disks of the host
         salt.runSaltProcessStep(pepperEnv, HOST, 'saltutil.sync_grains', [], null, true, 5)
-        def ceph_disks = salt.getGrain(pepperEnv, HOST, 'ceph')['return'][0].values()[0].values()[0]['ceph_disk']
+        def cephGrain = salt.getGrain(pepperEnv, HOST, 'ceph')['return']
+        if(cephGrain['return'].isEmpty()){
+            throw new Exception("Ceph salt grain cannot be found!")
+        }
+        def ceph_disks = cephGrain['return'][0].values()[0].values()[0]['ceph_disk']
         common.prettyPrint(ceph_disks)
 
         for (i in ceph_disks) {
@@ -89,7 +93,7 @@
         }
 
         // wait for healthy cluster
-        if (WAIT_FOR_HEALTHY.toBoolean() == true) {
+        if (WAIT_FOR_HEALTHY.toBoolean()) {
             waitForHealthy(pepperEnv)
         }
 
@@ -99,7 +103,7 @@
         }
 
         // wait for healthy cluster
-        if (WAIT_FOR_HEALTHY.toBoolean() == true) {
+        if (WAIT_FOR_HEALTHY.toBoolean()) {
             sleep(5)
             waitForHealthy(pepperEnv)
         }
diff --git a/cicd-lab-pipeline.groovy b/cicd-lab-pipeline.groovy
index d985b3f..6236f2a 100644
--- a/cicd-lab-pipeline.groovy
+++ b/cicd-lab-pipeline.groovy
@@ -80,7 +80,7 @@
             }
 
             stage('Connect to OpenStack cloud') {
-                openstackCloud = openstack.createOpenstackEnv(
+                openstackCloud = openstack.createOpenstackEnv(openstackEnv,
                     OPENSTACK_API_URL, OPENSTACK_API_CREDENTIALS,
                     OPENSTACK_API_PROJECT, OPENSTACK_API_PROJECT_DOMAIN,
                     OPENSTACK_API_PROJECT_ID, OPENSTACK_API_USER_DOMAIN,
diff --git a/cleanup-pipeline.groovy b/cleanup-pipeline.groovy
index ec3e19d..001e6c0 100644
--- a/cleanup-pipeline.groovy
+++ b/cleanup-pipeline.groovy
@@ -28,8 +28,8 @@
 salt = new com.mirantis.mk.Salt()
 timeout(time: 12, unit: 'HOURS') {
     node {
-
-        def venv_path = "${env.WORKSPACE}/venv"
+        def workspace = common.getWorkspace()
+        def venv_path = "${workspace}/venv"
         def env_vars
 
         // default STACK_TYPE is heat
@@ -56,7 +56,7 @@
 
         stage('Delete stack') {
             if (STACK_TYPE == 'heat') {
-                def openstackCloud = openstack.createOpenstackEnv(
+                def openstackCloud = openstack.createOpenstackEnv(venv_path,
                     OPENSTACK_API_URL, OPENSTACK_API_CREDENTIALS,
                     OPENSTACK_API_PROJECT,OPENSTACK_API_PROJECT_DOMAIN,
                     OPENSTACK_API_PROJECT_ID, OPENSTACK_API_USER_DOMAIN,
diff --git a/cloud-deploy-pipeline.groovy b/cloud-deploy-pipeline.groovy
index 947904a..fa30579 100644
--- a/cloud-deploy-pipeline.groovy
+++ b/cloud-deploy-pipeline.groovy
@@ -98,8 +98,9 @@
     node(slave_node) {
         try {
             // Set build-specific variables
-            venv = "${env.WORKSPACE}/venv"
-            venvPepper = "${env.WORKSPACE}/venvPepper"
+            def workspace = common.getWorkspace()
+            venv = "${workspace}/venv"
+            venvPepper = "${workspace}/venvPepper"
 
             //
             // Prepare machines
@@ -143,7 +144,7 @@
 
                     // create openstack env
                     openstack.setupOpenstackVirtualenv(venv, OPENSTACK_API_CLIENT)
-                    openstackCloud = openstack.createOpenstackEnv(
+                    openstackCloud = openstack.createOpenstackEnv(venv,
                         OPENSTACK_API_URL, OPENSTACK_API_CREDENTIALS,
                         OPENSTACK_API_PROJECT, OPENSTACK_API_PROJECT_DOMAIN,
                         OPENSTACK_API_PROJECT_ID, OPENSTACK_API_USER_DOMAIN,
diff --git a/cvp-sanity.groovy b/cvp-sanity.groovy
index ed87cd6..7adca5a 100644
--- a/cvp-sanity.groovy
+++ b/cvp-sanity.groovy
@@ -1,6 +1,6 @@
 /**
  *
- * Launch sanity validation of the cloud
+ * Launch sanity verification of the cloud
  *
  * Expected parameters:
  *   SALT_MASTER_URL             URL of Salt master
@@ -8,6 +8,7 @@
  *
  *   SANITY_TESTS_SET            Leave empty for full run or choose a file (test), e.g. test_mtu.py
  *   SANITY_TESTS_REPO           CVP-sanity-checks repo to clone
+ *   SANITY_TESTS_SETTINGS       Additional envrionment variables for cvp-sanity-checks
  *   PROXY                       Proxy to use for cloning repo or for pip
  *
  */
@@ -24,7 +25,7 @@
 
             stage('Run Infra tests') {
                 sh "mkdir -p ${artifacts_dir}"
-                validate.runSanityTests(SALT_MASTER_URL, SALT_MASTER_CREDENTIALS, SANITY_TESTS_SET, artifacts_dir)
+                validate.runSanityTests(SALT_MASTER_URL, SALT_MASTER_CREDENTIALS, SANITY_TESTS_SET, artifacts_dir, SANITY_TESTS_SETTINGS)
             }
             stage ('Publish results') {
                 archiveArtifacts artifacts: "${artifacts_dir}/*"
diff --git a/delete-broken-stacks-pipeline.groovy b/delete-broken-stacks-pipeline.groovy
index c68fe9e..df938ed 100644
--- a/delete-broken-stacks-pipeline.groovy
+++ b/delete-broken-stacks-pipeline.groovy
@@ -22,14 +22,15 @@
         def openstackCloud
         // value defaults
         def openstackVersion = OPENSTACK_API_CLIENT ? OPENSTACK_API_CLIENT : 'liberty'
-        def openstackEnv = "${env.WORKSPACE}/venv"
+        def workspace = common.getWorkspace()
+        def openstackEnv = "${workspace}/venv"
 
         stage('Install OpenStack env') {
             openstack.setupOpenstackVirtualenv(openstackEnv, openstackVersion)
         }
 
         stage('Connect to OpenStack cloud') {
-            openstackCloud = openstack.createOpenstackEnv(OPENSTACK_API_URL, OPENSTACK_API_CREDENTIALS, OPENSTACK_API_PROJECT)
+            openstackCloud = openstack.createOpenstackEnv(openstackEnv, OPENSTACK_API_URL, OPENSTACK_API_CREDENTIALS, OPENSTACK_API_PROJECT)
             openstack.getKeystoneToken(openstackCloud, openstackEnv)
         }
 
diff --git a/generate-cookiecutter-products.groovy b/generate-cookiecutter-products.groovy
index 1fa3c43..a4b646e 100644
--- a/generate-cookiecutter-products.groovy
+++ b/generate-cookiecutter-products.groovy
@@ -45,7 +45,7 @@
             print("Using context:\n" + COOKIECUTTER_TEMPLATE_CONTEXT)
 
             stage ('Download Cookiecutter template') {
-                if (COOKIECUTTER_TEMPLATE_BRANCH.startsWith('refs/changes/')) {
+                if (COOKIECUTTER_TEMPLATE_BRANCH.startsWith('refs/')) {
                     git.checkoutGitRepository(templateEnv, COOKIECUTTER_TEMPLATE_URL, 'master', COOKIECUTTER_TEMPLATE_CREDENTIALS)
 
                     dir(templateEnv) {
diff --git a/ironic-node-provision-pipeline.groovy b/ironic-node-provision-pipeline.groovy
index 1826100..3d2717b 100644
--- a/ironic-node-provision-pipeline.groovy
+++ b/ironic-node-provision-pipeline.groovy
@@ -40,7 +40,7 @@
 test = new com.mirantis.mk.Test()
 def python = new com.mirantis.mk.Python()
 
-def pepperEnv = "pepperEnv"
+def pepperEnv
 def venv
 def outputs = [:]
 
@@ -76,7 +76,9 @@
     node("python") {
         try {
             // Set build-specific variables
-            venv = "${env.WORKSPACE}/venv"
+            def workspace = common.getWorkspace()
+            venv = "${workspace}/venv"
+            venvPepper = "${workspace}/venvPepper"
 
             def required_params = ['IRONIC_AUTHORIZATION_PROFILE', 'IRONIC_DEPLOY_NODES']
             def missed_params = []
@@ -112,7 +114,7 @@
 
                         // create openstack env
                         openstack.setupOpenstackVirtualenv(venv, OPENSTACK_API_CLIENT)
-                        openstackCloud = openstack.createOpenstackEnv(
+                        openstackCloud = openstack.createOpenstackEnv(venv,
                             OPENSTACK_API_URL, OPENSTACK_API_CREDENTIALS,
                             OPENSTACK_API_PROJECT, OPENSTACK_API_PROJECT_DOMAIN,
                             OPENSTACK_API_PROJECT_ID, OPENSTACK_API_USER_DOMAIN,
diff --git a/mk-k8s-cleanup-pipeline.groovy b/mk-k8s-cleanup-pipeline.groovy
index db5aa8a..b907709 100644
--- a/mk-k8s-cleanup-pipeline.groovy
+++ b/mk-k8s-cleanup-pipeline.groovy
@@ -25,14 +25,15 @@
 
         // value defaults
         def openstackVersion = OPENSTACK_API_CLIENT ? OPENSTACK_API_CLIENT : 'liberty'
-        def openstackEnv = "${env.WORKSPACE}/venv"
+        def workspace = common.getWorkspace()
+        def openstackEnv = "${workspace}/venv"
 
         stage('Install OpenStack env') {
             openstack.setupOpenstackVirtualenv(openstackEnv, openstackVersion)
         }
 
         stage('Connect to OpenStack cloud') {
-            openstackCloud = openstack.createOpenstackEnv(OPENSTACK_API_URL, OPENSTACK_API_CREDENTIALS, OPENSTACK_API_PROJECT)
+            openstackCloud = openstack.createOpenstackEnv(openstackEnv, OPENSTACK_API_URL, OPENSTACK_API_CREDENTIALS, OPENSTACK_API_PROJECT)
             openstack.getKeystoneToken(openstackCloud, openstackEnv)
         }
 
diff --git a/mk-k8s-simple-deploy-pipeline.groovy b/mk-k8s-simple-deploy-pipeline.groovy
index 39ddc9c..2a3653c 100644
--- a/mk-k8s-simple-deploy-pipeline.groovy
+++ b/mk-k8s-simple-deploy-pipeline.groovy
@@ -31,7 +31,6 @@
 test = new com.mirantis.mk.Test()
 def python = new com.mirantis.mk.Python()
 
-def pepperEnv = "pepperEnv"
 artifacts_dir = "_artifacts"
 timeout(time: 12, unit: 'HOURS') {
     node {
@@ -41,8 +40,9 @@
 
         // value defaults
         def openstackVersion = OPENSTACK_API_CLIENT ? OPENSTACK_API_CLIENT : 'liberty'
-        def openstackEnv = "${env.WORKSPACE}/venv"
-
+        def workspace = common.getWorkspace()
+        def openstackEnv = "${workspace}/venv"
+        def pepperEnv = "${workspace}/pepperEnv"
         if (HEAT_STACK_NAME == "") {
             HEAT_STACK_NAME = BUILD_TAG
         }
@@ -56,7 +56,7 @@
         }
 
         stage('Connect to OpenStack cloud') {
-            openstackCloud = openstack.createOpenstackEnv(OPENSTACK_API_URL, OPENSTACK_API_CREDENTIALS, OPENSTACK_API_PROJECT,
+            openstackCloud = openstack.createOpenstackEnv(openstackEnv, OPENSTACK_API_URL, OPENSTACK_API_CREDENTIALS, OPENSTACK_API_PROJECT,
             "", OPENSTACK_API_PROJECT_DOMAIN_ID, OPENSTACK_API_USER_DOMAIN_ID, OPENSTACK_API_VERSION)
             openstack.getKeystoneToken(openstackCloud, openstackEnv)
         }
diff --git a/mk-maaas-deploy-pipeline.groovy b/mk-maaas-deploy-pipeline.groovy
index 924019e..9a2244e 100644
--- a/mk-maaas-deploy-pipeline.groovy
+++ b/mk-maaas-deploy-pipeline.groovy
@@ -32,8 +32,9 @@
         def saltMaster
 
         // value defaults
+        def workspace = common.getWorkspace()
         def openstackVersion = OPENSTACK_API_CLIENT ? OPENSTACK_API_CLIENT : "liberty"
-        def openstackEnv = "${env.WORKSPACE}/venv"
+        def openstackEnv = "${workspace}/venv"
 
         stage ('Download Heat templates') {
             git.checkoutGitRepository('template', HEAT_TEMPLATE_URL, HEAT_TEMPLATE_BRANCH, HEAT_TEMPLATE_CREDENTIALS)
@@ -44,7 +45,7 @@
         }
 
         stage('Connect to OpenStack cloud') {
-            openstackCloud = openstack.createOpenstackEnv(OPENSTACK_API_URL, OPENSTACK_API_CREDENTIALS, OPENSTACK_API_PROJECT)
+            openstackCloud = openstack.createOpenstackEnv(openstackEnv, OPENSTACK_API_URL, OPENSTACK_API_CREDENTIALS, OPENSTACK_API_PROJECT)
             openstack.getKeystoneToken(openstackCloud, openstackEnv)
         }
 
diff --git a/test-salt-models-pipeline.groovy b/test-salt-models-pipeline.groovy
index 3ac1275..fa784ea 100644
--- a/test-salt-models-pipeline.groovy
+++ b/test-salt-models-pipeline.groovy
@@ -158,12 +158,9 @@
       stage("test-nodes") {
         if(checkouted) {
           def modifiedClusters = null
-
-          if (gerritRef) {
-            checkChange = sh(script: "git diff-tree --no-commit-id --name-only -r HEAD | grep -v classes/cluster", returnStatus: true)
-            if (checkChange == 1) {
-              modifiedClusters = sh(script: "git diff-tree --no-commit-id --name-only -r HEAD | grep classes/cluster/ | awk -F/ '{print \$3}' | uniq", returnStdout: true).tokenize()
-            }
+          def checkChange = sh(script: "git diff-tree --no-commit-id --name-only -r HEAD | grep -v classes/cluster", returnStatus: true)
+          if (checkChange == 1) {
+            modifiedClusters = sh(script: "git diff-tree --no-commit-id --name-only -r HEAD | grep classes/cluster/ | awk -F/ '{print \$3}' | uniq", returnStdout: true).tokenize()
           }
 
           def infraYMLs = sh(script: "find ./classes/ -regex '.*cluster/[-_a-zA-Z0-9]*/[infra/]*init\\.yml' -exec grep -il 'cluster_name' {} \\;", returnStdout: true).tokenize()
