diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index bba34fb4e346a09543de3a0097058855a8fcf254..350dc53069eb720b552c31df4883406a8abbc550 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -12655,7 +12655,6 @@ static int expire_register(const void *data)
 
 	peer->expire = -1;
 	peer->portinuri = 0;
-	memset(&peer->addr, 0, sizeof(peer->addr));
 
 	destroy_association(peer);	/* remove registration data from storage */
 	set_socket_transport(&peer->socket, peer->default_outbound_transport);
@@ -12684,6 +12683,10 @@ static int expire_register(const void *data)
 		}
 	}
 
+	/* Only clear the addr after we check for destruction.  The addr must remain
+	 * in order to unlink from the peers_by_ip container correctly */
+	memset(&peer->addr, 0, sizeof(peer->addr));
+
 	unref_peer(peer, "removing peer ref for expire_register");
 
 	return 0;