diff --git a/src/mod/endpoints/mod_skinny/mod_skinny.c b/src/mod/endpoints/mod_skinny/mod_skinny.c
index 13a94810f8..e329affb5c 100644
--- a/src/mod/endpoints/mod_skinny/mod_skinny.c
+++ b/src/mod/endpoints/mod_skinny/mod_skinny.c
@@ -757,10 +757,73 @@ switch_status_t channel_on_routing(switch_core_session_t *session)
 	return SWITCH_STATUS_SUCCESS;
 }
 
+struct channel_on_execute_helper {
+	private_t *tech_pvt;
+	listener_t *listener;
+	uint32_t line_instance;
+};
+
+int channel_on_execute_callback(void *pArg, int argc, char **argv, char **columnNames)
+{
+	struct channel_on_routing_helper *helper = pArg;
+	listener_t *listener = NULL;
+
+	char *device_name = argv[0];
+	uint32_t device_instance = atoi(argv[1]);
+	/* uint32_t position = atoi(argv[2]); */
+	uint32_t line_instance = atoi(argv[3]);
+	/* char *label = argv[4]; */
+	/* char *value = argv[5]; */
+	/* char *caller_name = argv[6]; */
+	/* uint32_t ring_on_idle = atoi(argv[7]); */
+	/* uint32_t ring_on_active = atoi(argv[8]); */
+	/* uint32_t busy_trigger = atoi(argv[9]); */
+	/* char *forward_all = argv[10]; */
+	/* char *forward_busy = argv[11]; */
+	/* char *forward_noanswer = argv[12]; */
+	/* uint32_t noanswer_duration = atoi(argv[13]); */
+	/* char *channel_uuid = argv[14]; */
+	/* uint32_t call_id = atoi(argv[15]); */
+	/* uint32_t call_state = atoi(argv[16]); */
+
+	skinny_profile_find_listener_by_device_name_and_instance(helper->tech_pvt->profile, device_name, device_instance, &listener);
+	if(listener) {
+		if(!strcmp(device_name, helper->listener->device_name) 
+				&& (device_instance == helper->listener->device_instance)
+				&& (line_instance == helper->line_instance)) {/* the calling line */
+			helper->tech_pvt->caller_profile->dialplan = switch_core_strdup(helper->tech_pvt->caller_profile->pool, listener->profile->dialplan);
+			helper->tech_pvt->caller_profile->context = switch_core_strdup(helper->tech_pvt->caller_profile->pool, listener->profile->context);
+
+			send_stop_tone(listener, line_instance, helper->tech_pvt->call_id);
+		} else {
+		}
+	}
+	return 0;
+}
+
 switch_status_t channel_on_execute(switch_core_session_t *session)
 {
 	switch_channel_t *channel = switch_core_session_get_channel(session);
 
+	if (switch_channel_direction(channel) == SWITCH_CALL_DIRECTION_INBOUND) {
+		private_t *tech_pvt = switch_core_session_get_private(session);
+		listener_t *listener = NULL;
+		struct channel_on_execute_helper helper = {0};
+
+		skinny_profile_find_listener_by_device_name_and_instance(tech_pvt->profile,
+				switch_channel_get_variable(channel, "skinny_device_name"),
+				atoi(switch_channel_get_variable(channel, "skinny_device_instance")), &listener);
+		if (listener) {
+			helper.tech_pvt = tech_pvt;
+			helper.listener = listener;
+			helper.line_instance = atoi(switch_channel_get_variable(channel, "skinny_line_instance"));
+			skinny_session_walk_lines(tech_pvt->profile, switch_core_session_get_uuid(session), channel_on_execute_callback, &helper);
+		} else {
+			switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "Could not find listener %s:%s for Channel %s\n",
+					switch_channel_get_variable(channel, "skinny_device_name"), switch_channel_get_variable(channel, "skinny_device_instance"),
+					switch_channel_get_name(channel));
+		}
+	}
 	switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s CHANNEL EXECUTE\n", switch_channel_get_name(channel));
 
 	return SWITCH_STATUS_SUCCESS;