diff --git a/src/com/mirantis/mk/Openstack.groovy b/src/com/mirantis/mk/Openstack.groovy
index 284adec..c195c2e 100644
--- a/src/com/mirantis/mk/Openstack.groovy
+++ b/src/com/mirantis/mk/Openstack.groovy
@@ -162,15 +162,17 @@
 }
 
 /**
- * Create new OpenStack Heat stack
+ * Create new OpenStack Heat stack. Will wait for action to be complited in
+ * specified amount of time (by default 120min)
  *
  * @param env          Connection parameters for OpenStack API endpoint
  * @param template     HOT template for the new Heat stack
  * @param environment  Environmentale parameters of the new Heat stack
  * @param name         Name of the new Heat stack
  * @param path         Optional path to the custom virtualenv
+ * @param timeout      Optional number in minutes to wait for stack action is applied.
  */
-def createHeatStack(client, name, template, params = [], environment = null, path = null, action="create") {
+def createHeatStack(client, name, template, params = [], environment = null, path = null, action="create", timeout=120) {
     def python = new com.mirantis.mk.Python()
     def templateFile = "${env.WORKSPACE}/template/template/${template}.hot"
     def envFile
@@ -192,41 +194,17 @@
     }
 
     def cmd
-    def waitState
+    def cmd_args = "-t ${templateFile} -e ${envFile} --timeout ${timeout} --wait ${name}"
 
     if (action == "create") {
-        cmd = "heat stack-create -f ${templateFile} -e ${envFile} ${name}"
-        waitState = "CREATE_COMPLETE"
+        cmd = "openstack stack create ${cmd_args}"
     } else {
-        cmd = "heat stack-update -f ${templateFile} -e ${envFile} ${name}"
-        waitState = "UPDATE_COMPLETE"
+        cmd = "openstack stack update ${cmd_args}"
     }
 
     dir("${env.WORKSPACE}/template/template") {
-        outputTable = runOpenstackCommand(cmd, client, path)
+        def out = runOpenstackCommand(cmd, client, path)
     }
-
-    output = python.parseTextTable(outputTable, 'item', 'prettytable', path)
-
-    def heatStatusCheckerCount = 1
-    while (heatStatusCheckerCount <= 250) {
-        status = getHeatStackStatus(client, name, path)
-        echo("[Heat Stack] Status: ${status}, Check: ${heatStatusCheckerCount}")
-
-        if (status.contains('CREATE_FAILED')) {
-            info = getHeatStackInfo(client, name, path)
-            throw new Exception(info.stack_status_reason)
-
-        } else if (status.contains(waitState)) {
-            info = getHeatStackInfo(client, name, path)
-            echo(info.stack_status_reason)
-            break
-        }
-
-        sleep(30)
-        heatStatusCheckerCount++
-    }
-    echo("[Heat Stack] Status: ${status}")
 }
 
 /**
@@ -802,4 +780,4 @@
 
     salt.runSaltProcessStep(env, "I@galera:master and not ${lastNodeTarget}", 'service.start', ['mysql'])
     salt.runSaltProcessStep(env, "I@galera:slave and not ${lastNodeTarget}", 'service.start', ['mysql'])
-}
\ No newline at end of file
+}
diff --git a/src/com/mirantis/mk/Orchestrate.groovy b/src/com/mirantis/mk/Orchestrate.groovy
index 29a8626..5f2700a 100644
--- a/src/com/mirantis/mk/Orchestrate.groovy
+++ b/src/com/mirantis/mk/Orchestrate.groovy
@@ -560,9 +560,19 @@
     salt.enforceStateWithExclude([saltId: master, target: "I@opencontrail:collector ${extra_tgt}", state: "opencontrail", excludedStates: "opencontrail.client"])
 
     salt.enforceStateWithTest([saltId: master, target: "( I@opencontrail:control or I@opencontrail:collector ) ${extra_tgt}", state: 'docker.client', testTargetMatcher: "I@docker:client and I@opencontrail:control ${extra_tgt}"])
+}
 
-    // Waiting until Contrail API is started
-    salt.runSaltProcessStep(master, "I@opencontrail:database:id:1 ${extra_tgt}", 'contrail_health.get_api_status')
+
+def checkContrailApiReadiness(master, extra_tgt = '') {
+    def common = new com.mirantis.mk.Common()
+    def salt = new com.mirantis.mk.Salt()
+
+    def apiCheckResult = salt.getReturnValues(salt.runSaltProcessStep(master, "I@opencontrail:control:role:primary ${extra_tgt}", 'contrail_health.get_api_status', ['wait_for=900', 'tries=50']))
+    if (!apiCheckResult){
+        throw new Exception("Contrail is not working after deployment: contrail-api service is not in healthy state")
+    } else {
+        common.infoMsg('Contrail API is ready to service requests')
+    }
 }
 
 
diff --git a/src/com/mirantis/mk/Test.groovy b/src/com/mirantis/mk/Test.groovy
index 8c663e5..d9de536 100644
--- a/src/com/mirantis/mk/Test.groovy
+++ b/src/com/mirantis/mk/Test.groovy
@@ -411,7 +411,7 @@
     def salt = new com.mirantis.mk.Salt()
     def dockerPackagesPillar = salt.getPillar(master, target, 'docker:host:pkgs')
     def dockerPackages = salt.getReturnValues(dockerPackagesPillar) ?: ['docker.io']
-    salt.runSaltProcessStep(master, target, 'pkg.install', dockerPackages)
+    salt.runSaltProcessStep(master, target, 'pkg.install', [dockerPackages.join(',')])
 }
 
 
