diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index a8058438a0b6fd59efa785ab4702bada12996a93..1a5c079807f466c3680bcfe6d34b537291e881d0 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -1269,7 +1269,7 @@ static int send_request(struct sip_pvt *p, struct sip_request *req, enum xmittyp
 static void copy_request(struct sip_request *dst, const struct sip_request *src);
 static void receive_message(struct sip_pvt *p, struct sip_request *req, struct ast_sockaddr *addr, const char *e);
 static void parse_moved_contact(struct sip_pvt *p, struct sip_request *req, char **name, char **number, int set_call_forward);
-static int sip_send_mwi_to_peer(struct sip_peer *peer, const struct ast_event *event, int cache_only);
+static int sip_send_mwi_to_peer(struct sip_peer *peer, int cache_only);
 
 /* Misc dialog routines */
 static int __sip_autodestruct(const void *data);
@@ -14325,7 +14325,7 @@ static void mwi_event_cb(const struct ast_event *event, void *userdata)
 	struct sip_peer *peer = userdata;
 
 	ao2_lock(peer);
-	sip_send_mwi_to_peer(peer, event, 0);
+	sip_send_mwi_to_peer(peer, 0);
 	ao2_unlock(peer);
 }
 
@@ -14685,7 +14685,7 @@ static enum check_auth_result register_verify(struct sip_pvt *p, struct ast_sock
 		sched_yield();
 	}
 	if (!res) {
-		sip_send_mwi_to_peer(peer, NULL, 0);
+		sip_send_mwi_to_peer(peer, 0);
 		ast_devstate_changed(AST_DEVICE_UNKNOWN, "SIP/%s", peer->name);
 	}
 	if (res < 0) {
@@ -24884,7 +24884,7 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req,
 			transmit_response(p, "200 OK", req);
 			if (p->relatedpeer) {	/* Send first notification */
 				ao2_lock(p->relatedpeer); /* was WRLOCK */
-				sip_send_mwi_to_peer(p->relatedpeer, NULL, 0);
+				sip_send_mwi_to_peer(p->relatedpeer, 0);
 				ao2_unlock(p->relatedpeer);
 			}
 		} else if (p->subscribed != CALL_COMPLETION) {
@@ -25597,7 +25597,7 @@ static int get_cached_mwi(struct sip_peer *peer, int *new, int *old)
 /*! \brief Send message waiting indication to alert peer that they've got voicemail
  *  \returns -1 on failure, 0 on success
  */
-static int sip_send_mwi_to_peer(struct sip_peer *peer, const struct ast_event *event, int cache_only)
+static int sip_send_mwi_to_peer(struct sip_peer *peer, int cache_only)
 {
 	/* Called with peerl lock, but releases it */
 	struct sip_pvt *p;
@@ -25612,11 +25612,9 @@ static int sip_send_mwi_to_peer(struct sip_peer *peer, const struct ast_event *e
 		return -1;
 	}
 
-	if (event) {
-		newmsgs = ast_event_get_ie_uint(event, AST_EVENT_IE_NEWMSGS);
-		oldmsgs = ast_event_get_ie_uint(event, AST_EVENT_IE_OLDMSGS);
-	} else if (!get_cached_mwi(peer, &newmsgs, &oldmsgs) && !cache_only) {
-		/* Fall back to manually checking the mailbox */
+	/* Attempt to use cached mwi to get message counts. */
+	if (!get_cached_mwi(peer, &newmsgs, &oldmsgs) && !cache_only) {
+		/* Fall back to manually checking the mailbox if not cache_only and get_cached_mwi failed */
 		struct ast_str *mailbox_str = ast_str_alloca(512);
 		peer_mailboxes_to_str(&mailbox_str, peer);
 		/* if there is no mailbox do nothing */
@@ -27132,7 +27130,8 @@ static void add_peer_mailboxes(struct sip_peer *peer, const char *value)
 	while ((mbox = context = strsep(&next, ","))) {
 		struct sip_mailbox *mailbox;
 		int duplicate = 0;
-
+		/* remove leading/trailing whitespace from mailbox string */
+		mbox = ast_strip(mbox);
 		strsep(&context, "@");
 
 		if (ast_strlen_zero(mbox)) {
@@ -27822,7 +27821,7 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str
 		/* Send MWI from the event cache only.  This is so we can send initial
 		 * MWI if app_voicemail got loaded before chan_sip.  If it is the other
 		 * way, then we will get events when app_voicemail gets loaded. */
-		sip_send_mwi_to_peer(peer, NULL, 1);
+		sip_send_mwi_to_peer(peer, 1);
 	}
 
 	peer->the_mark = 0;