diff --git a/src/com/mirantis/mk/Salt.groovy b/src/com/mirantis/mk/Salt.groovy
index af90a08..1a62bab 100644
--- a/src/com/mirantis/mk/Salt.groovy
+++ b/src/com/mirantis/mk/Salt.groovy
@@ -138,13 +138,10 @@
 
     def out = runSaltCommand(master, 'local', ['expression': target, 'type': 'compound'], 'state.sls', null, [run_states])
 
-    try {
-        checkResult(out, failOnError)
-    } finally {
-        if (output == true) {
-            printSaltStateResult(out)
-        }
+    if (output == true) {
+        printSaltStateResult(out)
     }
+    checkResult(out, failOnError)
     return out
 }
 
@@ -183,13 +180,10 @@
  */
 def enforceHighstate(master, target, output = false, failOnError = true) {
     def out = runSaltCommand(master, 'local', ['expression': target, 'type': 'compound'], 'state.highstate')
-    try {
-        checkResult(out, failOnError)
-    } finally {
-        if (output == true) {
-            printSaltStateResult(out)
-        }
+    if (output == true) {
+        printSaltStateResult(out)
     }
+    checkResult(out, failOnError)
     return out
 }
 
@@ -276,6 +270,12 @@
  */
 def checkResult(result, failOnError = true) {
     def common = new com.mirantis.mk.Common()
+    def askOnError = false
+    try {
+      askOnError = env.ASK_ON_ERROR
+    } catch (MissingPropertyException e) {
+      askOnError = false
+    }
     if(result != null){
         if(result['return']){
             for (int i=0;i<result['return'].size();i++) {
@@ -301,10 +301,16 @@
                         resource = node[resKey]
                         common.debugMsg("checkResult: checking resource: ${resource}")
                         if(resource instanceof String || !resource["result"] || (resource["result"] instanceof String && resource["result"] != "true")){
-                            if (failOnError) {
-                                throw new Exception("Salt state on node ${nodeKey} failed: ${resource}. State output: ${node}")
-                            } else {
-                                common.errorMsg("Salt state on node ${nodeKey} failed: ${resource}. State output: ${node}")
+                            if(askOnError){
+                                timeout(time:1, unit:'HOURS') {
+                                   input message: "False result found, do you want to continue?"
+                                }
+                            }else{
+                                if (failOnError) {
+                                    throw new Exception("Salt state on node ${nodeKey} failed: ${resource}. State output: ${node}")
+                                } else {
+                                    common.errorMsg("Salt state on node ${nodeKey} failed: ${resource}. State output: ${node}")
+                                }
                             }
                         }
                     }
