Hi all According to Benny, these are the procedures needed to uce ICE in a call: - Initially call pjmedia_ice_create() with the appropriate pj_ice_strans_cfg. The initialization will complete asynchronously and the ICE media transport callback will be called when initialization completes (STUN mapping is found, TURN allocation is done, etc.). - When creating an offer, call pjmedia_transport_media_create() with local SDP (and NULL as rem_sdp). The ICE media transport will add the relevant ICE attributes in the local SDP. Then give the local SDP to the invite session. - When creating an answer, also call pjmedia_transport_media_create(), but this time give both local and remote SDP to it. The ICE media transport will once again modify the local SDP and add ICE attributes to local SDP, if ICE attributes are indeed found in remote offer. If not, then it won't add ICE attributes, and ICE will not get activated. - When you have both local and remote SDP, and when media is okay to be created, call pjmedia_transport_media_start(), once again giving it both local and remote SDP. ICE negotiation will start now and ICE media transport callback will be called when ICE negotiation completes. So far, I've been able to perform the following actions: -When a call is to be started (in caller), I use *pjmedia_ice_create()* and *pjmedia_transport_media_create()*. [INVITE is sent to callee with caller's candidates] -When answering the call, in callee I also use *pjmedia_ice_create()* and *pjmedia_transport_media_create()* [INVITE 200 OK is is sent to caller with callee's candidates] -The callee then uses *pjmedia_transport_media_start()* [STUN connectivity checks start] I understand that now I must receive the 200 OK in the caller and also call *pjmedia_transport_media_start()*, in order for the ICE connectivy checks be made in both directions. However, how will the subsequent offer and answer be exchanged? I realize that I must do something, because at the moment, when the caller receives the INVITE 200 OK it sends an ACK, making the call to start with the default IP addresses/Ports (the ones in lines c= and m=). What do I have to do in order for the subsequent offer / answer be exchanged? Cheers Pedro Gon?alves