diff --git a/src/switch_ivr_originate.c b/src/switch_ivr_originate.c
index c6ba313c84..a29b8fc54f 100644
--- a/src/switch_ivr_originate.c
+++ b/src/switch_ivr_originate.c
@@ -2462,9 +2462,16 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
 					
 					if (fail_on_single_reject_var) {
 						const char *cause_str = switch_channel_cause2str(reason);
+						int neg = *fail_on_single_reject_var == '!';
+						int pos = !!switch_stristr(cause_str, fail_on_single_reject_var);
+
+						if (neg) {
+							pos = !pos;
+						}
+
 						check_reject = 0;
 
-						if (fail_on_single_reject == 1 || switch_stristr(cause_str, fail_on_single_reject_var)) {
+						if (fail_on_single_reject == 1 || pos) {
 							force_reason = reason;
 							status = SWITCH_STATUS_FALSE;
 							goto outer_for;
@@ -2747,8 +2754,16 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
 								pchannel = switch_core_session_get_channel(originate_status[i].peer_session);
 
 								if (switch_channel_down(pchannel)) {
+									int neg, pos;
 									cause_str = switch_channel_cause2str(switch_channel_get_cause(pchannel));
-									if (switch_stristr(cause_str, fail_on_single_reject_var)) {
+									neg = *fail_on_single_reject_var == '!';
+									pos = !!switch_stristr(cause_str, fail_on_single_reject_var);
+
+									if (neg) {
+										pos = !pos;
+									}
+									
+									if (pos) {
 										ok = 0;
 										break;
 									}
@@ -3454,8 +3469,19 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
 							pchannel = switch_core_session_get_channel(originate_status[i].peer_session);
 							wait_for_cause(pchannel);
 							if (switch_channel_down(pchannel)) {
+								int neg, pos;
+								
 								cause_str = switch_channel_cause2str(switch_channel_get_cause(pchannel));
-								if (switch_stristr(cause_str, fail_on_single_reject_var)) {
+
+								neg = *fail_on_single_reject_var == '!';
+								pos = !!switch_stristr(cause_str, fail_on_single_reject_var);
+
+								if (neg) {
+									pos = !pos;
+								}
+								
+								
+								if (pos) {
 									ok = 0;
 									break;
 								}