Index: pjproject/trunk/pjmedia/include/pjmedia/transport.h
===================================================================
--- pjproject/trunk/pjmedia/include/pjmedia/transport.h	(revision 2292)
+++ pjproject/trunk/pjmedia/include/pjmedia/transport.h	(revision 2293)
@@ -494,8 +494,9 @@
 
     /**
-     * Remote address where RTP/RTCP originated from.
-     */
-    pj_sockaddr	    rem_rtp_name;
-    pj_sockaddr	    rem_rtcp_name;
+     * Remote address where RTP/RTCP originated from. In case this transport
+     * hasn't ever received packet, the 
+     */
+    pj_sockaddr	    src_rtp_name;
+    pj_sockaddr	    src_rtcp_name;
 
     /**
Index: pjproject/trunk/pjmedia/src/pjmedia/transport_ice.c
===================================================================
--- pjproject/trunk/pjmedia/src/pjmedia/transport_ice.c	(revision 2292)
+++ pjproject/trunk/pjmedia/src/pjmedia/transport_ice.c	(revision 2293)
@@ -1425,7 +1425,11 @@
     }
 
-    /* Get remote address originating RTP & RTCP. */
-    info->rem_rtp_name  = tp_ice->rtp_src_addr;
-    info->rem_rtcp_name = tp_ice->rtcp_src_addr;
+    /* Set remote address originating RTP & RTCP if this transport has 
+     * received any packets.
+     */
+    if (tp_ice->rtp_src_cnt) {
+	info->src_rtp_name  = tp_ice->rtp_src_addr;
+	info->src_rtcp_name = tp_ice->rtcp_src_addr;
+    }
 
     return PJ_SUCCESS;
@@ -1455,4 +1459,9 @@
     tp_ice->addr_len = addr_len;
 
+    /* Init source RTP & RTCP addresses and counter */
+    tp_ice->rtp_src_addr = tp_ice->remote_rtp;
+    tp_ice->rtcp_src_addr = tp_ice->remote_rtcp;
+    tp_ice->rtp_src_cnt = 0;
+
     return PJ_SUCCESS;
 }
@@ -1551,53 +1560,56 @@
 	 * have been received.
 	 */
-	if (!tp_ice->use_ice &&
-	    pj_sockaddr_cmp(&tp_ice->remote_rtp, src_addr) != 0 )
-	{
-	    /* Check if the source address is recognized. */
-	    if (pj_sockaddr_cmp(src_addr, &tp_ice->rtp_src_addr) != 0) {
-		/* Remember the new source address. */
-		pj_sockaddr_cp(&tp_ice->rtp_src_addr, src_addr);
-
-		/* Reset counter */
-		tp_ice->rtp_src_cnt = 0;
-	    }
-
-	    tp_ice->rtp_src_cnt++;
-
-	    if ((tp_ice->options & PJMEDIA_ICE_NO_SRC_ADDR_CHECKING) == 0 &&
-		tp_ice->rtp_src_cnt >= PJMEDIA_RTP_NAT_PROBATION_CNT) 
-	    {
-    	
-		char addr_text[80];
-
-		/* Set remote RTP address to source address */
-		pj_sockaddr_cp(&tp_ice->remote_rtp, &tp_ice->rtp_src_addr);
-		tp_ice->addr_len = pj_sockaddr_get_len(&tp_ice->remote_rtp);
-
-		/* Reset counter */
-		tp_ice->rtp_src_cnt = 0;
-
-		PJ_LOG(4,(tp_ice->base.name,
-			  "Remote RTP address switched to %s",
-			  pj_sockaddr_print(&tp_ice->remote_rtp, addr_text,
-					    sizeof(addr_text), 3)));
-
-		/* Also update remote RTCP address if actual RTCP source
-		 * address is not heard yet.
-		 */
-		if (!pj_sockaddr_has_addr(&tp_ice->rtcp_src_addr)) {
-		    pj_uint16_t port;
-
-		    pj_sockaddr_cp(&tp_ice->remote_rtcp, &tp_ice->remote_rtp);
-
-		    port = (pj_uint16_t)
-			   (pj_sockaddr_get_port(&tp_ice->remote_rtp)+1);
-		    pj_sockaddr_set_port(&tp_ice->remote_rtcp, port);
+	if (!tp_ice->use_ice) {
+
+	    /* Increment counter and avoid zero */
+	    if (++tp_ice->rtp_src_cnt == 0) 
+		tp_ice->rtp_src_cnt = 1;
+
+	    if (pj_sockaddr_cmp(&tp_ice->remote_rtp, src_addr) != 0) {
+
+		/* Check if the source address is recognized. */
+		if (pj_sockaddr_cmp(src_addr, &tp_ice->rtp_src_addr) != 0) {
+		    /* Remember the new source address. */
+		    pj_sockaddr_cp(&tp_ice->rtp_src_addr, src_addr);
+		    /* Reset counter */
+		    tp_ice->rtp_src_cnt = 0;
+		}
+
+		if ((tp_ice->options & PJMEDIA_ICE_NO_SRC_ADDR_CHECKING)==0 &&
+		    tp_ice->rtp_src_cnt >= PJMEDIA_RTP_NAT_PROBATION_CNT) 
+		{
+		    char addr_text[80];
+
+		    /* Set remote RTP address to source address */
+		    pj_sockaddr_cp(&tp_ice->remote_rtp, &tp_ice->rtp_src_addr);
+		    tp_ice->addr_len = pj_sockaddr_get_len(&tp_ice->remote_rtp);
+
+		    /* Reset counter */
+		    tp_ice->rtp_src_cnt = 0;
 
 		    PJ_LOG(4,(tp_ice->base.name,
-			      "Remote RTCP address switched to %s",
-			      pj_sockaddr_print(&tp_ice->remote_rtcp, addr_text,
+			      "Remote RTP address switched to %s",
+			      pj_sockaddr_print(&tp_ice->remote_rtp, addr_text,
 						sizeof(addr_text), 3)));
 
+		    /* Also update remote RTCP address if actual RTCP source
+		     * address is not heard yet.
+		     */
+		    if (!pj_sockaddr_has_addr(&tp_ice->rtcp_src_addr)) {
+			pj_uint16_t port;
+
+			pj_sockaddr_cp(&tp_ice->remote_rtcp, 
+				       &tp_ice->remote_rtp);
+
+			port = (pj_uint16_t)
+			       (pj_sockaddr_get_port(&tp_ice->remote_rtp)+1);
+			pj_sockaddr_set_port(&tp_ice->remote_rtcp, port);
+
+			PJ_LOG(4,(tp_ice->base.name,
+				  "Remote RTCP address switched to %s",
+				  pj_sockaddr_print(&tp_ice->remote_rtcp, 
+						    addr_text,
+						    sizeof(addr_text), 3)));
+		    }
 		}
 	    }
Index: pjproject/trunk/pjmedia/src/pjmedia/transport_udp.c
===================================================================
--- pjproject/trunk/pjmedia/src/pjmedia/transport_udp.c	(revision 2292)
+++ pjproject/trunk/pjmedia/src/pjmedia/transport_udp.c	(revision 2293)
@@ -607,6 +607,6 @@
 
     /* Get remote address originating RTP & RTCP. */
-    info->rem_rtp_name  = udp->rtp_src_addr;
-    info->rem_rtcp_name = udp->rtcp_src_addr;
+    info->src_rtp_name  = udp->rtp_src_addr;
+    info->src_rtcp_name = udp->rtcp_src_addr;
 
     return PJ_SUCCESS;
@@ -666,4 +666,9 @@
     udp->attached = PJ_TRUE;
 
+    /* Reset source RTP & RTCP addresses and counter */
+    pj_bzero(&udp->rtp_src_addr, sizeof(udp->rtp_src_addr));
+    pj_bzero(&udp->rtcp_src_addr, sizeof(udp->rtcp_src_addr));
+    udp->rtp_src_cnt = 0;
+
     return PJ_SUCCESS;
 }
Index: pjproject/trunk/pjsip/src/pjsua-lib/pjsua_call.c
===================================================================
--- pjproject/trunk/pjsip/src/pjsua-lib/pjsua_call.c	(revision 2292)
+++ pjproject/trunk/pjsip/src/pjsua-lib/pjsua_call.c	(revision 2293)
@@ -2048,9 +2048,10 @@
 	//rem_addr = pj_sockaddr_print(&info.stream_info[i].rem_addr,
 	//			     rem_addr_buf, sizeof(rem_addr_buf), 3);
-	if (pj_sockaddr_has_addr(&tp_info.rem_rtp_name)) {
-	    rem_addr = pj_sockaddr_print(&tp_info.rem_rtp_name, rem_addr_buf, 
+	if (pj_sockaddr_has_addr(&tp_info.src_rtp_name)) {
+	    rem_addr = pj_sockaddr_print(&tp_info.src_rtp_name, rem_addr_buf, 
 					 sizeof(rem_addr_buf), 3);
 	} else {
 	    pj_ansi_snprintf(rem_addr_buf, sizeof(rem_addr_buf), "-");
+	    rem_addr = rem_addr_buf;
 	}
 
