diff --git a/src/ice_transport.cpp b/src/ice_transport.cpp
index f768cd92252db320a2a3de70913b436b5efa24c3..ffcbdd581aa72d3fcc0c40766946a3cb76d856b5 100644
--- a/src/ice_transport.cpp
+++ b/src/ice_transport.cpp
@@ -504,18 +504,33 @@ IceTransport::_isFailed() const
 IpAddr
 IceTransport::getLocalAddress(unsigned comp_id) const
 {
+    // Return the local IP of negotiated connection pair
+    if (isRunning()) {
+        if (auto sess = pj_ice_strans_get_valid_pair(icest_.get(), comp_id+1)) {
+            return sess->lcand->addr;
+        }
+        RING_WARN("Non-negotiated transport: try to return default local IP");
+    }
+
+    // Return the default IP (could be not nominated and valid after negotiation)
     if (isInitialized())
         return cand_[comp_id].addr;
+
+    RING_ERR("bad call: non-initialized transport");
     return {};
 }
 
 IpAddr
 IceTransport::getRemoteAddress(unsigned comp_id) const
 {
-    if (isInitialized()) {
+    // Return the remote IP of negotiated connection pair
+    if (isRunning()) {
         if (auto sess = pj_ice_strans_get_valid_pair(icest_.get(), comp_id+1))
             return sess->rcand->addr;
+        RING_ERR("runtime error: negotiated transport without valid pair");
     }
+
+    RING_ERR("bad call: non-negotiated transport");
     return {};
 }