--- src/mod/endpoints/mod_sofia/sofia.orig	2009-12-09 10:32:45.000000000 +0100
+++ src/mod/endpoints/mod_sofia/sofia.c	2009-12-09 10:34:50.000000000 +0100
@@ -775,8 +775,45 @@
 void event_handler(switch_event_t *event)
 {
 	char *subclass, *sql;
+	char *class;
+	switch_event_t *pevent;
 
-	if ((subclass = switch_event_get_header(event, "orig-event-subclass")) && !strcasecmp(subclass, MY_EVENT_REGISTER)) {
+	/* Get Original Event Name */
+	class = switch_event_get_header(event, "orig-event-name");
+	if (!strcasecmp(class, "PRESENCE_IN")) {
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "\nGot Presence IN event via MultiCast\n");
+		if (switch_event_create(&pevent, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
+		        switch_event_add_header(pevent, SWITCH_STACK_BOTTOM, "proto", switch_event_get_header(event, "orig-proto"));
+                        switch_event_add_header(pevent, SWITCH_STACK_BOTTOM, "login", switch_event_get_header(event, "orig-login"));
+                        switch_event_add_header(pevent, SWITCH_STACK_BOTTOM, "from", "%s", switch_event_get_header(event, "orig-from"));
+                        switch_event_add_header(pevent, SWITCH_STACK_BOTTOM, "rpid", switch_event_get_header(event, "orig-rpid"));
+                        switch_event_add_header(pevent, SWITCH_STACK_BOTTOM, "status", switch_event_get_header(event, "orig-status"));
+                        switch_event_add_header(pevent, SWITCH_STACK_BOTTOM, "answer-state", switch_event_get_header(event, "orig-answer-state"));
+                        switch_event_add_header(pevent, SWITCH_STACK_BOTTOM, "alt_event_type", switch_event_get_header(event, "orig-alt_event_type"));
+                        switch_event_add_header(pevent, SWITCH_STACK_BOTTOM, "presence-call-direction", switch_event_get_header(event, "orig-presence-call-direction"));
+                        switch_event_add_header(pevent, SWITCH_STACK_BOTTOM, "channel-state", switch_event_get_header(event, "orig-channel-state"));
+                        switch_event_add_header(pevent, SWITCH_STACK_BOTTOM, "call-direction", switch_event_get_header(event, "orig-call-direction"));
+			/* we cannot use switch_event_fire, or otherwise we'll start an endless loop */
+			sofia_presence_event_handler(pevent);
+			return;
+		} else {		
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "\nCannot inject PRESENCE_IN event\n");
+			return;
+		}
+	} else if (!strcasecmp(class, "MESSAGE_WAITING")) {
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "\nGot MWI event via MultiCast\n");
+		if (switch_event_create(&pevent, SWITCH_EVENT_MESSAGE_WAITING) == SWITCH_STATUS_SUCCESS) {
+			switch_event_add_header(pevent, SWITCH_STACK_BOTTOM, "MWI-Messages-Waiting", switch_event_get_header(event, "orig-MWI-Messages-Waiting"));
+			switch_event_add_header(pevent, SWITCH_STACK_BOTTOM, "MWI-Message-Account", switch_event_get_header(event, "orig-MWI-Message-Account"));
+			switch_event_add_header(pevent, SWITCH_STACK_BOTTOM, "MWI-Voice-Message", switch_event_get_header(event, "orig-MWI-Voice-Message"));
+			/* we cannot use switch_event_fire, or otherwise we'll start an endless loop */
+			sofia_presence_mwi_event_handler(pevent);
+			return;
+		} else {
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "\nCannot inject MWI event\n");
+			return;
+		}
+	} else if ((subclass = switch_event_get_header(event, "orig-event-subclass")) && !strcasecmp(subclass, MY_EVENT_REGISTER)) {
 		char *from_user = switch_event_get_header(event, "orig-from-user");
 		char *from_host = switch_event_get_header(event, "orig-from-host");
 		char *to_host = switch_event_get_header(event, "orig-to-host");
