diff --git a/apps/app_stasis.c b/apps/app_stasis.c
index aa77a0d3c38070cf5a83a02d002aed058fda1e39..ffe4727794a74d4e5a97a3f382b8ed2e37ffc486 100644
--- a/apps/app_stasis.c
+++ b/apps/app_stasis.c
@@ -110,10 +110,16 @@ static int app_exec(struct ast_channel *chan, const char *data)
 		                      args.app_argv);
 	}
 
-	if (ret == -1) {
-	    pbx_builtin_setvar_helper(chan, "STASISSTATUS", "FAILED");
+	if (ret) {
+		/* set ret to 0 so pbx_core doesnt hangup the channel */
+		if (!ast_check_hangup(chan)) {
+			ret = 0;
+		} else {
+			ret = -1;
+		}
+		pbx_builtin_setvar_helper(chan, "STASISSTATUS", "FAILED");
 	} else {
-	    pbx_builtin_setvar_helper(chan, "STASISSTATUS", "SUCCESS");
+		pbx_builtin_setvar_helper(chan, "STASISSTATUS", "SUCCESS");
 	}
 
 	return ret;