diff --git a/src/switch_core_session.c b/src/switch_core_session.c
index f32fe00f8f..1860b55065 100644
--- a/src/switch_core_session.c
+++ b/src/switch_core_session.c
@@ -740,6 +740,16 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_perform_receive_message(swit
 
 	switch_assert(session != NULL);
 
+	if (message->message_id == SWITCH_MESSAGE_INDICATE_SIGNAL_DATA) {
+		if (session->endpoint_interface->io_routines->receive_message) {
+			status = session->endpoint_interface->io_routines->receive_message(session, message);
+		}
+
+		switch_core_session_free_message(&message);
+		return status;
+	}
+
+
 	if ((status = switch_core_session_read_lock_hangup(session)) != SWITCH_STATUS_SUCCESS) {
 		return status;
 	}
diff --git a/src/switch_ivr.c b/src/switch_ivr.c
index 6cfdca4dad..e0f86a521b 100644
--- a/src/switch_ivr.c
+++ b/src/switch_ivr.c
@@ -811,6 +811,9 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_parse_all_signal_data(switch_core_ses
 	int i = 0;
 	switch_channel_t *channel = switch_core_session_get_channel(session);
 
+	if (!switch_core_session_in_thread(session)) {
+		return SWITCH_STATUS_FALSE;
+	}
 
 	if (switch_channel_test_flag(channel, CF_SIGNAL_DATA)) {
 		return SWITCH_STATUS_FALSE;