Index: pjproject/trunk/pjmedia/include/pjmedia/transport.h
===================================================================
--- pjproject/trunk/pjmedia/include/pjmedia/transport.h	(revision 2290)
+++ pjproject/trunk/pjmedia/include/pjmedia/transport.h	(revision 2291)
@@ -492,4 +492,10 @@
      */
     pjmedia_sock_info sock_info;
+
+    /**
+     * Remote address where RTP/RTCP originated from.
+     */
+    pj_sockaddr	    rem_rtp_name;
+    pj_sockaddr	    rem_rtcp_name;
 
     /**
Index: pjproject/trunk/pjmedia/src/pjmedia/transport_ice.c
===================================================================
--- pjproject/trunk/pjmedia/src/pjmedia/transport_ice.c	(revision 2290)
+++ pjproject/trunk/pjmedia/src/pjmedia/transport_ice.c	(revision 2291)
@@ -1425,4 +1425,8 @@
     }
 
+    /* Get remote address originating RTP & RTCP. */
+    info->rem_rtp_name  = tp_ice->rtp_src_addr;
+    info->rem_rtcp_name = tp_ice->rtcp_src_addr;
+
     return PJ_SUCCESS;
 }
@@ -1548,5 +1552,4 @@
 	 */
 	if (!tp_ice->use_ice &&
-	    (tp_ice->options & PJMEDIA_ICE_NO_SRC_ADDR_CHECKING) == 0 &&
 	    pj_sockaddr_cmp(&tp_ice->remote_rtp, src_addr) != 0 )
 	{
@@ -1562,5 +1565,7 @@
 	    tp_ice->rtp_src_cnt++;
 
-	    if (tp_ice->rtp_src_cnt >= PJMEDIA_RTP_NAT_PROBATION_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];
@@ -1606,18 +1611,20 @@
 	 */
 	if (!tp_ice->use_ice &&
-	    (tp_ice->options & PJMEDIA_ICE_NO_SRC_ADDR_CHECKING)==0 &&
 	    pj_sockaddr_cmp(&tp_ice->remote_rtcp, src_addr) != 0)
 	{
-	    char addr_text[80];
-
-	    pj_sockaddr_cp(&tp_ice->remote_rtcp, src_addr);
 	    pj_sockaddr_cp(&tp_ice->rtcp_src_addr, src_addr);
 
-	    pj_assert(tp_ice->addr_len == pj_sockaddr_get_len(src_addr));
-
-	    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)));
+	    if ((tp_ice->options & PJMEDIA_ICE_NO_SRC_ADDR_CHECKING)==0) {
+		char addr_text[80];
+
+		pj_sockaddr_cp(&tp_ice->remote_rtcp, src_addr);
+
+		pj_assert(tp_ice->addr_len == pj_sockaddr_get_len(src_addr));
+
+		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 2290)
+++ pjproject/trunk/pjmedia/src/pjmedia/transport_udp.c	(revision 2291)
@@ -606,4 +606,8 @@
     info->sock_info.rtcp_addr_name = udp->rtcp_addr_name;
 
+    /* Get remote address originating RTP & RTCP. */
+    info->rem_rtp_name  = udp->rtp_src_addr;
+    info->rem_rtcp_name = udp->rtcp_src_addr;
+
     return PJ_SUCCESS;
 }
Index: pjproject/trunk/pjsip/src/pjsua-lib/pjsua_call.c
===================================================================
--- pjproject/trunk/pjsip/src/pjsua-lib/pjsua_call.c	(revision 2290)
+++ pjproject/trunk/pjsip/src/pjsua-lib/pjsua_call.c	(revision 2291)
@@ -2019,5 +2019,5 @@
 static void dump_media_session(const char *indent, 
 			       char *buf, unsigned maxlen,
-			       pjmedia_session *session)
+			       pjsua_call *call)
 {
     unsigned i;
@@ -2025,5 +2025,10 @@
     int len;
     pjmedia_session_info info;
-
+    pjmedia_session *session = call->session;
+    pjmedia_transport_info tp_info;
+
+    pjmedia_transport_info_init(&tp_info);
+
+    pjmedia_transport_get_info(call->med_tp, &tp_info);
     pjmedia_session_get_info(session, &info);
 
@@ -2038,6 +2043,15 @@
 
 	pjmedia_session_get_stream_stat(session, i, &stat);
-	rem_addr = pj_sockaddr_print(&info.stream_info[i].rem_addr,
-				     rem_addr_buf, sizeof(rem_addr_buf), 3);
+	// rem_addr will contain actual address of RTP originator, instead of
+	// remote RTP address specified by stream which is fetched from the SDP.
+	// Please note that we are assuming only one stream per call.
+	//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, 
+					 sizeof(rem_addr_buf), 3);
+	} else {
+	    pj_ansi_snprintf(rem_addr_buf, sizeof(rem_addr_buf), "-");
+	}
 
 	if (info.stream_info[i].dir == PJMEDIA_DIR_ENCODING)
@@ -2628,6 +2642,6 @@
 /* Print call info */
 void print_call(const char *title,
-		       int call_id, 
-		       char *buf, pj_size_t size)
+	        int call_id, 
+	        char *buf, pj_size_t size)
 {
     int len;
@@ -2759,5 +2773,5 @@
     /* Dump session statistics */
     if (with_media && call->session)
-	dump_media_session(indent, p, end-p, call->session);
+	dump_media_session(indent, p, end-p, call);
 
     pjsip_dlg_dec_lock(dlg);
