diff --git a/src/com/mirantis/mk/Openstack.groovy b/src/com/mirantis/mk/Openstack.groovy
index 91dfbfe..216a6f2 100644
--- a/src/com/mirantis/mk/Openstack.groovy
+++ b/src/com/mirantis/mk/Openstack.groovy
@@ -380,14 +380,27 @@
  * @param services  lists of type of services to be stopped
  * @return output of salt commands
  */
-def stopServices(env, probe, target, services=[]) {
+def stopServices(env, probe, target, services=[], confirm=false) {
     def salt = new com.mirantis.mk.Salt()
     for (s in services) {
         def outputServicesStr = salt.getReturnValues(salt.cmdRun(env, "${probe}*", "service --status-all | grep ${s} | awk \'{print \$4}\'"))
         def servicesList = outputServicesStr.tokenize("\n")
-        for (name in servicesList) {
-            if (!name.contains('Salt command')) {
-                salt.runSaltProcessStep(env, "${target}*", 'service.stop', ["${name}"])
+        if (confirm) {
+            try {
+                input message: "Click PROCEED to stop ${servicesList}. Otherwise click ABORT to skip stopping them."
+                for (name in servicesList) {
+                    if (!name.contains('Salt command')) {
+                        salt.runSaltProcessStep(env, "${target}*", 'service.stop', ["${name}"])
+                    }
+                }
+            } catch (Exception er) {
+                common.infoMsg("skipping stopping ${servicesList} services")
+            }
+        } else {
+            for (name in servicesList) {
+                if (!name.contains('Salt command')) {
+                    salt.runSaltProcessStep(env, "${target}*", 'service.stop', ["${name}"])
+                }
             }
         }
     }
