diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index cab634082f2da02013c20e7bc73db4f37994c453..de1d97e1f447307bbdf2c238dd2c42a4efb67670 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -2489,15 +2489,25 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_
     pj_str_t localAddress;
     pjsip_transport_type_e transportType;
     pjsip_tpselector *tp_sel;
+    pj_pool_t *tmp_pool;
+
+    _debug ("SIP: Find local address from URI");
+
+    // Create a temporary memory pool
+    tmp_pool = pj_pool_create (&_cp->factory, "tmpdtmf10", 1000, 1000, NULL);
+    if (tmp_pool == NULL) {
+    	_debug ("UserAgent: Could not initialize memory pool");
+    	return false;
+    }
 
     // Find the transport that must be used with the given uri
     pj_str_t tmp;
-    pj_strdup2_with_null (_pool, &tmp, uri.c_str());
+    pj_strdup2_with_null (tmp_pool, &tmp, uri.c_str());
     pjsip_uri * genericUri = NULL;
-    genericUri = pjsip_parse_uri (_pool, tmp.ptr, tmp.slen, 0);
+    genericUri = pjsip_parse_uri (tmp_pool, tmp.ptr, tmp.slen, 0);
 
     pj_str_t pjMachineName;
-    pj_strdup (_pool, &pjMachineName, pj_gethostname());
+    pj_strdup (tmp_pool, &pjMachineName, pj_gethostname());
     std::string machineName (pjMachineName.ptr, pjMachineName.slen);
 
     if (genericUri == NULL) {
@@ -2550,12 +2560,12 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_
         status = initTransportSelector (transport, &tp_sel);
 
         if (status == PJ_SUCCESS) {
-            status = pjsip_tpmgr_find_local_addr (tpmgr, _pool, transportType, tp_sel, &localAddress, &port);
+            status = pjsip_tpmgr_find_local_addr (tpmgr, tmp_pool, transportType, tp_sel, &localAddress, &port);
         } else {
-            status = pjsip_tpmgr_find_local_addr (tpmgr, _pool, transportType, NULL, &localAddress, &port);
+            status = pjsip_tpmgr_find_local_addr (tpmgr, tmp_pool, transportType, NULL, &localAddress, &port);
         }
     } else {
-        status = pjsip_tpmgr_find_local_addr (tpmgr, _pool, transportType, NULL, &localAddress, &port);
+        status = pjsip_tpmgr_find_local_addr (tpmgr, tmp_pool, transportType, NULL, &localAddress, &port);
     }
 
     if (status != PJ_SUCCESS) {
@@ -2570,7 +2580,7 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_
 
     _debug ("SIP: Local address discovered from attached transport: %s", localaddr.c_str());
 
-    // pj_pool_release(tmp_pool);
+    pj_pool_release(tmp_pool);
 
     return localaddr;
 }
@@ -2600,12 +2610,22 @@ int SIPVoIPLink::findLocalPortFromUri (const std::string& uri, pjsip_transport *
     pjsip_transport_type_e transportType;
     int port;
     pjsip_tpselector *tp_sel;
+    pj_pool_t *tmp_pool;
+
+    _debug ("SIP: Find local port from URI");
+
+    // Create a temporary memory pool
+    tmp_pool = pj_pool_create (&_cp->factory, "tmpdtmf10", 1000, 1000, NULL);
+    if (tmp_pool == NULL) {
+    	_debug ("UserAgent: Could not initialize memory pool");
+    	return false;
+    }
 
     // Find the transport that must be used with the given uri
     pj_str_t tmp;
-    pj_strdup2_with_null (_pool, &tmp, uri.c_str());
+    pj_strdup2_with_null (tmp_pool, &tmp, uri.c_str());
     pjsip_uri * genericUri = NULL;
-    genericUri = pjsip_parse_uri (_pool, tmp.ptr, tmp.slen, 0);
+    genericUri = pjsip_parse_uri (tmp_pool, tmp.ptr, tmp.slen, 0);
 
     if (genericUri == NULL) {
         _debug ("UserAgent: genericUri is NULL in findLocalPortFromUri");
@@ -2658,11 +2678,11 @@ int SIPVoIPLink::findLocalPortFromUri (const std::string& uri, pjsip_transport *
         status = initTransportSelector (transport, &tp_sel);
 
         if (status == PJ_SUCCESS)
-            status = pjsip_tpmgr_find_local_addr (tpmgr, _pool, transportType, tp_sel, &localAddress, &port);
+            status = pjsip_tpmgr_find_local_addr (tpmgr, tmp_pool, transportType, tp_sel, &localAddress, &port);
         else
-            status = pjsip_tpmgr_find_local_addr (tpmgr, _pool, transportType, NULL, &localAddress, &port);
+            status = pjsip_tpmgr_find_local_addr (tpmgr, tmp_pool, transportType, NULL, &localAddress, &port);
     } else
-        status = pjsip_tpmgr_find_local_addr (tpmgr, _pool, transportType, NULL, &localAddress, &port);
+        status = pjsip_tpmgr_find_local_addr (tpmgr, tmp_pool, transportType, NULL, &localAddress, &port);
 
 
     if (status != PJ_SUCCESS) {
@@ -2670,6 +2690,9 @@ int SIPVoIPLink::findLocalPortFromUri (const std::string& uri, pjsip_transport *
     }
 
     _debug ("UserAgent: local port discovered from attached transport: %i", port);
+
+    pj_pool_release(tmp_pool);
+
     return port;
 }
 
@@ -2917,6 +2940,8 @@ pjsip_route_hdr *SIPVoIPLink::createRouteSet(Account *account)
 	std::string port = "";
 	pjsip_route_hdr *route_set;
 
+	_debug ("SIP: Find local port from URI");
+
 	SIPAccount *sipaccount = dynamic_cast<SIPAccount *>(account);
     std::string route = sipaccount->getServiceRoute();
     _error ("UserAgent: Set Service-Route with %s", route.c_str());