diff --git a/src/include/switch_types.h b/src/include/switch_types.h
index 86f4c02c92..906c7caf59 100644
--- a/src/include/switch_types.h
+++ b/src/include/switch_types.h
@@ -559,6 +559,8 @@ typedef enum {
 	SWITCH_EVENT_DTMF				- DTMF was sent
 	SWITCH_EVENT_MESSAGE			- A Basic Message
 	SWITCH_EVENT_CODEC				- Codec Change
+	SWITCH_EVENT_PROGRESS			- Early Media
+	SWITCH_EVENT_OUTGOING			- Outgoing Channel
     SWITCH_EVENT_ALL				- All events at once
 </pre>
 
@@ -573,6 +575,8 @@ typedef enum {
 	SWITCH_EVENT_CHANNEL_EXECUTE,
 	SWITCH_EVENT_CHANNEL_BRIDGE,
 	SWITCH_EVENT_CHANNEL_UNBRIDGE,
+	SWITCH_EVENT_CHANNEL_PROGRESS,
+	SWITCH_EVENT_CHANNEL_OUTGOING,
 	SWITCH_EVENT_API,
 	SWITCH_EVENT_LOG,
 	SWITCH_EVENT_INBOUND_CHAN,
diff --git a/src/switch_channel.c b/src/switch_channel.c
index 374fff3f27..e10fd69192 100644
--- a/src/switch_channel.c
+++ b/src/switch_channel.c
@@ -877,7 +877,7 @@ SWITCH_DECLARE(switch_status_t) switch_channel_perform_pre_answer(switch_channel
 	switch_core_session_message_t msg;
 	char *uuid = switch_core_session_get_uuid(channel->session);
 	switch_status_t status;
-
+	
 	assert(channel != NULL);
 
 	if (channel->state >= CS_HANGUP) {
@@ -893,8 +893,14 @@ SWITCH_DECLARE(switch_status_t) switch_channel_perform_pre_answer(switch_channel
 	status = switch_core_session_message_send(uuid, &msg);
 
 	if (status == SWITCH_STATUS_SUCCESS) {
+		switch_event_t *event;
+
 		switch_log_printf(SWITCH_CHANNEL_ID_LOG, (char *) file, func, line, SWITCH_LOG_NOTICE, "Pre-Answer %s!\n", channel->name);
 		switch_channel_set_flag(channel, CF_EARLY_MEDIA);
+		if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_PROGRESS) == SWITCH_STATUS_SUCCESS) {
+			switch_channel_event_set_data(channel, event);
+			switch_event_fire(&event);
+		}
 	}
 
 	return status;
diff --git a/src/switch_core.c b/src/switch_core.c
index 9d87821545..ed7417a01f 100644
--- a/src/switch_core.c
+++ b/src/switch_core.c
@@ -1075,6 +1075,8 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_outgoing_channel(switch_core
 	if (*new_session) {
 		switch_caller_profile_t *profile = NULL, *peer_profile = NULL, *cloned_profile = NULL;
 		switch_channel_t *peer_channel = NULL;
+		switch_event_t *event;
+		switch_channel_t *new_channel = switch_core_session_get_channel(*new_session);
 
 		if (session && channel) {
 			profile = switch_channel_get_caller_profile(channel);
@@ -1095,6 +1097,11 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_outgoing_channel(switch_core
 				}
 			}
 		}
+
+		if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_OUTGOING) == SWITCH_STATUS_SUCCESS) {
+			switch_channel_event_set_data(new_channel, event);
+			switch_event_fire(&event);
+		}
 	}
 
 	return status;
diff --git a/src/switch_event.c b/src/switch_event.c
index 40e2b829b3..6cdfedf442 100644
--- a/src/switch_event.c
+++ b/src/switch_event.c
@@ -99,6 +99,8 @@ static char *EVENT_NAMES[] = {
 	"CHANNEL_EXECUTE",
 	"CHANNEL_BRIDGE",
 	"CHANNEL_UNBRIDGE",
+	"CHANNEL_PROGRESS",
+	"CHANNEL_OUTGOING",
 	"API",
 	"LOG",
 	"INBOUND_CHAN",