diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index f76963b3974302045ecd0a687b2e68a67944f3fa..095b5a7632220a811d629d91890156a5acbb2db2 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -16753,14 +16753,18 @@ static void sip_peer_hold(struct sip_pvt *p, int hold)
 /*! \brief Receive MWI events that we have subscribed to */
 static void mwi_event_cb(void *userdata, struct stasis_subscription *sub, struct stasis_message *msg)
 {
-	struct sip_peer *peer = userdata;
+	char *peer_name = userdata;
+	struct sip_peer *peer = sip_find_peer(peer_name, NULL, TRUE, FINDALLDEVICES, FALSE, 0);
+
 	if (stasis_subscription_final_message(sub, msg)) {
-		ao2_cleanup(peer);
+		ast_assert(peer == NULL);
+		ast_free(peer_name);
 		return;
 	}
-	if (ast_mwi_state_type() == stasis_message_type(msg)) {
+	if (peer && ast_mwi_state_type() == stasis_message_type(msg)) {
 		sip_send_mwi_to_peer(peer, 0);
 	}
+	ao2_cleanup(peer);
 }
 
 static void network_change_stasis_subscribe(void)
@@ -27293,8 +27297,11 @@ static void add_peer_mwi_subs(struct sip_peer *peer)
 
 		mailbox_specific_topic = ast_mwi_topic(mailbox->id);
 		if (mailbox_specific_topic) {
-			ao2_ref(peer, +1);
-			mailbox->event_sub = stasis_subscribe(mailbox_specific_topic, mwi_event_cb, peer);
+			char *peer_name = ast_strdup(peer->name);
+			if (!peer_name) {
+				return;
+			}
+			mailbox->event_sub = stasis_subscribe(mailbox_specific_topic, mwi_event_cb, peer_name);
 		}
 	}
 }