diff --git a/res/res_pjsip_multihomed.c b/res/res_pjsip_multihomed.c
index f5deb77240c90412fdb2a5897178060dfa82a56e..5deeb92476802fa0b7eb3928c2628eb1c539ccec 100644
--- a/res/res_pjsip_multihomed.c
+++ b/res/res_pjsip_multihomed.c
@@ -109,8 +109,11 @@ static pj_status_t multihomed_on_tx_message(pjsip_tx_data *tdata)
 		return PJ_SUCCESS;
 	}
 
-	/* The port in the message should always be that of the original transport */
-	prm.ret_port = tdata->tp_info.transport->local_name.port;
+	/* For UDP we can have multiple transports so the port needs to be maintained */
+	if (tdata->tp_info.transport->key.type == PJSIP_TRANSPORT_UDP ||
+		tdata->tp_info.transport->key.type == PJSIP_TRANSPORT_UDP6) {
+		prm.ret_port = tdata->tp_info.transport->local_name.port;
+	}
 
 	/* If the IP source differs from the existing transport see if we need to update it */
 	if (pj_strcmp(&prm.ret_addr, &tdata->tp_info.transport->local_name.host)) {