diff --git a/src/com/mirantis/mk/Common.groovy b/src/com/mirantis/mk/Common.groovy
index 03e0c5e..4097b3c 100644
--- a/src/com/mirantis/mk/Common.groovy
+++ b/src/com/mirantis/mk/Common.groovy
@@ -493,7 +493,7 @@
  * Retry commands passed to body
  *
  * @param times Number of retries
- * @param delay Delay between retries
+ * @param delay Delay between retries (in seconds)
  * @param body Commands to be in retry block
  * @return calling commands in body
  * @example retry(3,5){ function body }
diff --git a/src/com/mirantis/mk/Orchestrate.groovy b/src/com/mirantis/mk/Orchestrate.groovy
index 5ec8a78..36447d2 100644
--- a/src/com/mirantis/mk/Orchestrate.groovy
+++ b/src/com/mirantis/mk/Orchestrate.groovy
@@ -72,6 +72,7 @@
 }
 
 def installInfra(master) {
+    def common = new com.mirantis.mk.Common()
     def salt = new com.mirantis.mk.Salt()
 
     // Install glusterfs
@@ -79,6 +80,7 @@
         salt.enforceState(master, 'I@glusterfs:server', 'glusterfs.server.service')
 
         salt.enforceState(master, 'I@glusterfs:server and *01*', 'glusterfs.server.setup', true, true, null, false, -1, 5)
+        sleep(10)
         salt.cmdRun(master, 'I@glusterfs:server', "gluster peer status; gluster volume status")
     }
 
@@ -119,7 +121,9 @@
         salt.enforceState(master, 'I@rabbitmq:server', 'rabbitmq', true, true, null, false, -1, 2)
 
         // Check the rabbitmq status
-        salt.cmdRun(master, 'I@rabbitmq:server', 'rabbitmqctl cluster_status')
+        common.retry(3,5){
+             salt.cmdRun(master, 'I@rabbitmq:server', 'rabbitmqctl cluster_status')
+        }
     }
 
     // Install haproxy
@@ -137,7 +141,9 @@
     // Install etcd
     if (salt.testTarget(master, 'I@etcd:server')) {
         salt.enforceState(master, 'I@etcd:server', 'etcd.server.service')
-        salt.cmdRun(master, 'I@etcd:server', '. /var/lib/etcd/configenv && etcdctl cluster-health')
+        common.retry(3,5){
+            salt.cmdRun(master, 'I@etcd:server', '. /var/lib/etcd/configenv && etcdctl cluster-health')
+        }
     }
 }
 
@@ -150,6 +156,7 @@
 
 def installOpenstackControl(master) {
     def salt = new com.mirantis.mk.Salt()
+    def common = new com.mirantis.mk.Common()
 
     // Install horizon dashboard
     if (salt.testTarget(master, 'I@horizon:server')) {
@@ -176,7 +183,9 @@
         salt.enforceState(master, 'I@keystone:client', 'keystone.client')
     }
     if (salt.testTarget(master, 'I@keystone:server')) {
-        salt.cmdRun(master, 'I@keystone:server', '. /root/keystonercv3; openstack service list')
+        common.retry(3,5){
+            salt.cmdRun(master, 'I@keystone:server', '. /root/keystonercv3; openstack service list')
+        }
     }
 
     // Install glance
@@ -188,7 +197,9 @@
 
     // Check glance service
     if (salt.testTarget(master, 'I@glance:server')){
-        salt.cmdRun(master, 'I@keystone:server','. /root/keystonerc; glance image-list')
+        common.retry(3,5){
+            salt.cmdRun(master, 'I@keystone:server','. /root/keystonerc; glance image-list')
+        }
     }
 
     // Create glance resources
@@ -202,7 +213,9 @@
         salt.enforceState(master, 'I@nova:controller and *01*', 'nova.controller')
         salt.enforceState(master, 'I@nova:controller', 'nova.controller')
         if (salt.testTarget(master, 'I@keystone:server')) {
-            salt.cmdRun(master, 'I@keystone:server', '. /root/keystonerc; nova service-list')
+           common.retry(3,5){
+               salt.cmdRun(master, 'I@keystone:server', '. /root/keystonerc; nova service-list')
+           }
         }
     }
 
@@ -217,7 +230,9 @@
         salt.enforceState(master, 'I@cinder:controller and *01*', 'cinder')
         salt.enforceState(master, 'I@cinder:controller', 'cinder')
         if (salt.testTarget(master, 'I@keystone:server')) {
-            salt.cmdRun(master, 'I@keystone:server', '. /root/keystonerc; cinder list')
+            common.retry(3,5){
+                salt.cmdRun(master, 'I@keystone:server', '. /root/keystonerc; cinder list')
+            }
         }
     }
 
@@ -227,7 +242,9 @@
         salt.enforceState(master, 'I@neutron:server and *01*', 'neutron.server')
         salt.enforceState(master, 'I@neutron:server', 'neutron.server')
         if (salt.testTarget(master, 'I@keystone:server')) {
-            salt.cmdRun(master, 'I@keystone:server','. /root/keystonerc; neutron agent-list')
+            common.retry(3,5){
+                salt.cmdRun(master, 'I@keystone:server','. /root/keystonerc; neutron agent-list')
+            }
         }
     }
 
@@ -242,7 +259,9 @@
         salt.enforceState(master, 'I@heat:server and *01*', 'heat')
         salt.enforceState(master, 'I@heat:server', 'heat')
         if (salt.testTarget(master, 'I@keystone:server')) {
-            salt.cmdRun(master, 'I@keystone:server', '. /root/keystonerc; heat resource-type-list', false)
+            common.retry(3,5){
+                salt.cmdRun(master, 'I@keystone:server', '. /root/keystonerc; heat resource-type-list')
+            }
         }
     }
 
@@ -391,8 +410,8 @@
         salt.cmdRun(master, 'I@nova:compute', 'exec 0>&-; exec 1>&-; exec 2>&-; nohup bash -c "ip link | grep vhost && echo no_reboot || sleep 5 && reboot & "', false)
     }
 
+    sleep(300)
     if (salt.testTarget(master, 'I@opencontrail:compute')) {
-        sleep(300)
         salt.enforceState(master, 'I@opencontrail:compute', 'opencontrail.client')
         salt.enforceState(master, 'I@opencontrail:compute', 'opencontrail')
     }
@@ -466,6 +485,7 @@
     sleep(5)
     salt.enforceState(master, 'I@docker:swarm:role:master', 'docker.swarm')
     salt.enforceState(master, 'I@docker:swarm:role:manager', 'docker.swarm')
+    sleep(10)
     salt.cmdRun(master, 'I@docker:swarm:role:master', 'docker node ls')
 }
 
