diff --git a/daemon/src/sip/sipvoiplink.cpp b/daemon/src/sip/sipvoiplink.cpp
index 6c329dde491f9cd7c67ae44bab1f75a7e041f33e..b5a7496bd740bf890692f56c56e93f3c9f88f120 100644
--- a/daemon/src/sip/sipvoiplink.cpp
+++ b/daemon/src/sip/sipvoiplink.cpp
@@ -1259,6 +1259,31 @@ bool SIPVoIPLink::SIPNewIpToIpCall(const std::string& id, const std::string& to)
 
 pj_bool_t stun_sock_on_status_cb(pj_stun_sock *stun_sock UNUSED, pj_stun_sock_op op UNUSED, pj_status_t status)
 {
+    switch(op) {
+    case PJ_STUN_SOCK_DNS_OP:
+        DEBUG("UserAgent: Stun operation dns resolution");
+        break;
+    case PJ_STUN_SOCK_BINDING_OP:
+        DEBUG("UserAgent: Stun operation binding");
+        break;
+    case PJ_STUN_SOCK_KEEP_ALIVE_OP:
+        DEBUG("UserAgent: Stun operation keep alive");
+        break;
+    case PJ_STUN_SOCK_MAPPED_ADDR_CHANGE:
+        DEBUG("UserAgent: Stun operation address mapping change");
+        break;
+    default:
+        DEBUG("UserAgent: Stun unknown operation");
+        break;
+    }
+
+    if(status == PJ_SUCCESS) {
+        DEBUG("UserAgent: Stun operation success");
+    }
+    else {
+        ERROR("UserAgent: Stun operation failure");
+    }
+
     return status == PJ_SUCCESS;
 }
 
@@ -1268,7 +1293,7 @@ pj_bool_t stun_sock_on_rx_data_cb(pj_stun_sock *stun_sock UNUSED, void *pkt UNUS
 }
 
 
-pj_status_t SIPVoIPLink::stunServerResolve(SIPAccount *account)
+pj_status_t SIPVoIPLink::stunServerResolve(pj_str_t serverName, pj_uint16_t port)
 {
     pj_stun_config stunCfg;
     pj_stun_config_init(&stunCfg, &cp_->factory, 0, pjsip_endpt_get_ioqueue(endpt_), pjsip_endpt_get_timer_heap(endpt_));
@@ -1282,21 +1307,19 @@ pj_status_t SIPVoIPLink::stunServerResolve(SIPAccount *account)
     pj_stun_sock *stun_sock;
     pj_status_t status = pj_stun_sock_create(&stunCfg, "stunresolve", pj_AF_INET(), &stun_sock_cb, NULL, NULL, &stun_sock);
 
-    pj_str_t stunServer = account->getStunServerName();
-
     if (status != PJ_SUCCESS) {
         char errmsg[PJ_ERR_MSG_SIZE];
         pj_strerror(status, errmsg, sizeof(errmsg));
-        ERROR("Error creating STUN socket for %.*s: %s", (int) stunServer.slen, stunServer.ptr, errmsg);
+        ERROR("UserAgent: Error creating STUN socket for %.*s: %s", (int) serverName.slen, serverName.ptr, errmsg);
         return status;
     }
 
-    status = pj_stun_sock_start(stun_sock, &stunServer, account->getStunPort(), NULL);
+    status = pj_stun_sock_start(stun_sock, &serverName, port, NULL);
 
     if (status != PJ_SUCCESS) {
         char errmsg[PJ_ERR_MSG_SIZE];
         pj_strerror(status, errmsg, sizeof(errmsg));
-        DEBUG("Error starting STUN socket for %.*s: %s", (int) stunServer.slen, stunServer.ptr, errmsg);
+        DEBUG("UserAgent: Error starting STUN socket for %.*s: %s", (int) serverName.slen, serverName.ptr, errmsg);
         pj_stun_sock_destroy(stun_sock);
     }
 
@@ -1373,13 +1396,13 @@ void SIPVoIPLink::createTlsTransport(SIPAccount *account, std::string remoteAddr
 
 void SIPVoIPLink::createSipTransport(SIPAccount *account)
 {
-    shutdownSipTransport(account);
-
     if (account == NULL) {
-        ERROR("Account is NULL while creating sip transport");
+        ERROR("UserAgent: Account is NULL while creating sip transport");
         return;
     }
 
+    shutdownSipTransport(account);
+
     if (account->isTlsEnabled()) {
         std::string remoteSipUri(account->getServerUri());
         static const char SIPS_PREFIX[] = "<sips:";
@@ -1388,8 +1411,10 @@ void SIPVoIPLink::createSipTransport(SIPAccount *account)
         std::string remoteAddr(remoteSipUri.substr(sips, trns-sips));
 
         createTlsTransport(account, remoteAddr);
-    } else if (account->isStunEnabled())
-        createStunTransport(account);
+    } else if (account->isStunEnabled()) {
+        pjsip_transport *transport = createStunTransport(account->getStunServerName(), account->getStunPort());
+        account->transport_ = transport;
+    }
     else {
         pjsip_transport *transport = createUdpTransport(account->getLocalInterface(), account->getLocalPort());
         account->transport_ = transport;
@@ -1467,39 +1492,43 @@ pjsip_tpselector *SIPVoIPLink::initTransportSelector(pjsip_transport *transport,
     return tp;
 }
 
-void SIPVoIPLink::createStunTransport(SIPAccount *account)
+pjsip_transport *SIPVoIPLink::createStunTransport(pj_str_t serverName, pj_uint16_t port)
 {
-    pj_str_t stunServer = account->getStunServerName();
-    pj_uint16_t stunPort = PJ_STUN_PORT; // account->getStunPort();
-
-    DEBUG("UserAgent: Create stun transport  server name: %s, port: %d", account->getStunServerName(), stunPort);// account->getStunPort());
-
-    if (stunServerResolve(account) != PJ_SUCCESS) {
-        ERROR("Can't resolve STUN server");
-        return;
+    // pj_str_t stunServer = account->getStunServerName();
+    // pj_uint16_t stunPort = PJ_STUN_PORT; // account->getStunPort();
+    pjsip_transport *transport;
+
+    DEBUG("UserAgent: Create stun transport  server name: %s, port: %d", serverName, port);// account->getStunPort());
+    if (stunServerResolve(serverName, port) != PJ_SUCCESS) {
+        ERROR("UserAgent: Can't resolve STUN server");
+        // Signal client
+        return NULL;
     }
 
     pj_sock_t sock = PJ_INVALID_SOCKET;
 
     pj_sockaddr_in boundAddr;
 
-    if (pj_sockaddr_in_init(&boundAddr, &stunServer, 0) != PJ_SUCCESS) {
-        ERROR("Can't initialize IPv4 socket on %*s:%i", stunServer.slen, stunServer.ptr, stunPort);
-        return;
+    if (pj_sockaddr_in_init(&boundAddr, &serverName, 0) != PJ_SUCCESS) {
+        ERROR("UserAgent: Can't initialize IPv4 socket on %*s:%i", serverName.slen, serverName.ptr, port);
+        // Signal client
+        return NULL;
     }
 
     if (pj_sock_socket(pj_AF_INET(), pj_SOCK_DGRAM(), 0, &sock) != PJ_SUCCESS) {
-        ERROR("Can't create or bind socket");
-        return;
+        ERROR("UserAgent: Can't create or bind socket");
+        // Signal client
+        return NULL;
     }
 
     // Query the mapped IP address and port on the 'outside' of the NAT
     pj_sockaddr_in pub_addr;
 
-    if (pjstun_get_mapped_addr(&cp_->factory, 1, &sock, &stunServer, stunPort, &stunServer, stunPort, &pub_addr) != PJ_SUCCESS) {
-        ERROR("Can't contact STUN server");
+    if (pjstun_get_mapped_addr(&cp_->factory, 1, &sock, &serverName, port, &serverName, port, &pub_addr) != PJ_SUCCESS) {
+        ERROR("UserAgent: Can't contact STUN server");
         pj_sock_close(sock);
-        return;
+        // signal client
+        return NULL;
     }
 
     pjsip_host_port a_name = {
@@ -1507,15 +1536,17 @@ void SIPVoIPLink::createStunTransport(SIPAccount *account)
         pj_ntohs(pub_addr.sin_port)
     };
 
-    std::string listeningAddress = std::string(a_name.host.ptr, a_name.host.slen);
+    // std::string listeningAddress = std::string(a_name.host.ptr, a_name.host.slen);
 
-    account->setPublishedAddress(listeningAddress);
-    account->setPublishedPort(a_name.port);
+    // account->setPublishedAddress(listeningAddress);
+    // account->setPublishedPort(a_name.port);
 
     pjsip_udp_transport_attach2(endpt_, PJSIP_TRANSPORT_UDP, sock, &a_name, 1,
-                                &account->transport_);
+                                &transport);
 
     pjsip_tpmgr_dump_transports(pjsip_endpt_get_tpmgr(endpt_));
+
+    return transport;
 }
 
 void SIPVoIPLink::shutdownSipTransport(SIPAccount *account)
@@ -1563,7 +1594,6 @@ void SIPVoIPLink::findLocalAddressFromTransport(pjsip_transport *transport, pjsi
     int i_port = 0;
 
     // Find the local address and port for this transport
-    DEBUG("transportType: %d\n", transportType);
     if (pjsip_tpmgr_find_local_addr(tpmgr, pool_, transportType, tp_sel, &localAddress, &i_port) != PJ_SUCCESS) {
         WARN("SIPVoIPLink: Could not retreive local address and port from transport, using %s:%s", addr.c_str(), port.c_str());
         return;
diff --git a/daemon/src/sip/sipvoiplink.h b/daemon/src/sip/sipvoiplink.h
index e5869b674a28bbe62077481161e14e3ee2bd9ea1..aa7364888a486e729f718687242a96de2a78ff27 100644
--- a/daemon/src/sip/sipvoiplink.h
+++ b/daemon/src/sip/sipvoiplink.h
@@ -306,7 +306,7 @@ class SIPVoIPLink : public VoIPLink {
         /**
          * Resolve public address for this account
          */
-        pj_status_t stunServerResolve(SIPAccount *);
+        pj_status_t stunServerResolve(pj_str_t serverName, pj_uint16_t port);
 
         /**
          * Create the default TLS listener.
@@ -336,7 +336,7 @@ class SIPVoIPLink : public VoIPLink {
          * Create a UDP transport using stun server to resove public address
          * @param account The account for which a transport must be created.
          */
-        void createStunTransport(SIPAccount *account);
+        pjsip_transport *createStunTransport(pj_str_t serverName, pj_uint16_t port);
 
         /**
          * UDP Transports are stored in this map in order to retreive them in case