diff --git a/src/com/mirantis/mk/SaltModelTesting.groovy b/src/com/mirantis/mk/SaltModelTesting.groovy
index 4f53de1..6aec0c3 100644
--- a/src/com/mirantis/mk/SaltModelTesting.groovy
+++ b/src/com/mirantis/mk/SaltModelTesting.groovy
@@ -7,6 +7,7 @@
  * @param clusterName         model cluster name
  * @param extraFormulas       extraFormulas to install
  * @param formulasSource      formulas source (git or pkg)
+ * @param reclassVersion      Version of used reclass (branch, tag, ...) (optional, default master)
  * @param testDir             directory of model
  * @param formulasSource      Salt formulas source type (optional, default pkg)
  * @param formulasRevision    APT revision for formulas (optional default stable)
@@ -17,21 +18,14 @@
  * @param aptRepoGPG          GPG key for apt repository with formulas
  */
 
-def setupAndTestNode(masterName, clusterName, extraFormulas, testDir, formulasSource = 'pkg', formulasRevision = 'stable', dockerMaxCpus = 0, ignoreClassNotfound = false, legacyTestingMode = false, aptRepoUrl='', aptRepoGPG='') {
+def setupAndTestNode(masterName, clusterName, extraFormulas, testDir, formulasSource = 'pkg', formulasRevision = 'stable', reclassVersion = "master", dockerMaxCpus = 0, ignoreClassNotfound = false, legacyTestingMode = false, aptRepoUrl='', aptRepoGPG='') {
   // timeout for test execution (40min)
   def testTimeout = 40 * 60
   def saltOpts = "--retcode-passthrough --force-color"
   def common = new com.mirantis.mk.Common()
   def workspace = common.getWorkspace()
-  def imageFound = true
-  def img
-  try {
-    img = docker.image("tcpcloud/salt-models-testing:${formulasRevision}")
-    img.pull()
-  } catch (Throwable e) {
-    img = docker.image("ubuntu:latest")
-    imageFound = false
-  }
+  def img = docker.image("tcpcloud/salt-models-testing:${formulasRevision}")
+  img.pull()
 
   if (!extraFormulas || extraFormulas == "") {
     extraFormulas = "linux"
@@ -43,41 +37,20 @@
   }
 
   img.inside("-u root:root --hostname=${masterName} --ulimit nofile=4096:8192 ${dockerMaxCpusOption}") {
-    if (!imageFound) {
-      sh("""apt-get update && apt-get install -y curl git python-pip sudo python-pip python-dev zlib1g-dev git
-            pip install git+https://github.com/salt-formulas/reclass.git --upgrade
-            mkdir -p /srv/salt/scripts/ || true
-            cp -r ${testDir} /srv/salt/reclass
-            git config --global user.email || git config --global user.email 'ci@ci.local'
-            git config --global user.name || git config --global user.name 'CI'
-            git clone https://github.com/salt-formulas/salt-formulas-scripts /srv/salt/scripts""")
-    }
-
     withEnv(["FORMULAS_SOURCE=${formulasSource}", "EXTRA_FORMULAS=${extraFormulas}", "DISTRIB_REVISION=${formulasRevision}",
             "DEBUG=1", "MASTER_HOSTNAME=${masterName}", "CLUSTER_NAME=${clusterName}", "MINION_ID=${masterName}",
-            "RECLASS_IGNORE_CLASS_NOTFOUND=${ignoreClassNotfound}", "APT_REPOSITORY=${aptRepoUrl}",
+            "RECLASS_VERSION=${reclassVersion}", "RECLASS_IGNORE_CLASS_NOTFOUND=${ignoreClassNotfound}", "APT_REPOSITORY=${aptRepoUrl}",
             "APT_REPOSITORY_GPG=${aptRepoGPG}"]){
 
-        if (!imageFound) {
-          sh("""cd /srv/salt && find . -type f \\( -name '*.yml' -or -name '*.sh' \\) -exec sed -i 's/apt-mk.mirantis.com/apt.mirantis.net:8085/g' {} \\;
-                cd /srv/salt && find . -type f \\( -name '*.yml' -or -name '*.sh' \\) -exec sed -i 's/apt.mirantis.com/apt.mirantis.net:8085/g' {} \\;
-                bash -c 'source /srv/salt/scripts/bootstrap.sh; cd /srv/salt/scripts && source_local_envs && system_config_master'
-                bash -c 'source /srv/salt/scripts/bootstrap.sh; cd /srv/salt/scripts && source_local_envs && saltmaster_bootstrap'""")
-          sh("""for s in \$(python -c \"import site; print(' '.join(site.getsitepackages()))\"); do
-                    sudo -H pip install --install-option=\"--prefix=\" --upgrade --force-reinstall -I \
-                      -t \"\$s\" git+https://github.com/salt-formulas/reclass.git;
-                  done""")
-        } else {
-          sh("""cp -r ${testDir}/* /srv/salt/reclass && echo '127.0.1.2  salt' >> /etc/hosts
-                cd /srv/salt && find . -type f \\( -name '*.yml' -or -name '*.sh' \\) -exec sed -i 's/apt-mk.mirantis.com/apt.mirantis.net:8085/g' {} \\;
-                cd /srv/salt && find . -type f \\( -name '*.yml' -or -name '*.sh' \\) -exec sed -i 's/apt.mirantis.com/apt.mirantis.net:8085/g' {} \\;""")
-          sh("""for s in \$(python -c \"import site; print(' '.join(site.getsitepackages()))\"); do
-                    sudo -H pip install --install-option=\"--prefix=\" --upgrade --force-reinstall -I \
-                      -t \"\$s\" git+https://github.com/salt-formulas/reclass.git;
-                  done""")
-          sh("""timeout ${testTimeout} bash -c 'source /srv/salt/scripts/bootstrap.sh; cd /srv/salt/scripts && source_local_envs && configure_salt_master && configure_salt_minion && install_salt_formula_pkg'
-                bash -c 'source /srv/salt/scripts/bootstrap.sh; cd /srv/salt/scripts && saltservice_restart'""")
-        }
+        sh("""cp -r ${testDir}/* /srv/salt/reclass && echo '127.0.1.2  salt' >> /etc/hosts
+              cd /srv/salt && find . -type f \\( -name '*.yml' -or -name '*.sh' \\) -exec sed -i 's/apt-mk.mirantis.com/apt.mirantis.net:8085/g' {} \\;
+              cd /srv/salt && find . -type f \\( -name '*.yml' -or -name '*.sh' \\) -exec sed -i 's/apt.mirantis.com/apt.mirantis.net:8085/g' {} \\;""")
+        sh("""for s in \$(python -c \"import site; print(' '.join(site.getsitepackages()))\"); do
+                  sudo -H pip install --install-option=\"--prefix=\" --upgrade --force-reinstall -I \
+                    -t \"\$s\" git+https://github.com/salt-formulas/reclass.git@${reclassVersion};
+                done""")
+        sh("""timeout ${testTimeout} bash -c 'source /srv/salt/scripts/bootstrap.sh; cd /srv/salt/scripts && source_local_envs && configure_salt_master && configure_salt_minion && install_salt_formula_pkg'
+              bash -c 'source /srv/salt/scripts/bootstrap.sh; cd /srv/salt/scripts && saltservice_restart'""")
 
         sh("timeout ${testTimeout} bash -c 'source /srv/salt/scripts/bootstrap.sh; cd /srv/salt/scripts && source_local_envs && saltmaster_init'")
 
