diff --git a/dap-sdk/core/src/dap_strfuncs.c b/dap-sdk/core/src/dap_strfuncs.c
index a766b125633417400291f7f06c78a35b2ed9a02f..904fab7c41b83fcf77648d36cb56309edbe76572 100755
--- a/dap-sdk/core/src/dap_strfuncs.c
+++ b/dap-sdk/core/src/dap_strfuncs.c
@@ -238,13 +238,14 @@ int dap_strncmp(const char *a_str1, const char *a_str2, size_t a_n)
 char* dap_strdup(const char *a_str)
 {
     char *l_new_str;
-    size_t l_length;
 
-    if(a_str)
-    {
-        l_length = (size_t) (strlen(a_str) + 1);
-        l_new_str = DAP_NEW_SIZE(char, l_length);
-        memcpy(l_new_str, a_str, l_length);
+    if(a_str){
+        size_t l_length = (size_t) (strlen(a_str) + 1);
+        if(l_length){
+            l_new_str = DAP_NEW_SIZE(char, l_length);
+            memcpy(l_new_str, a_str, l_length);
+        }else
+            l_new_str = NULL;
     }
     else
         l_new_str = NULL;
diff --git a/dap-sdk/net/client/dap_client.c b/dap-sdk/net/client/dap_client.c
index 53a938ce7c74a321ad2d7cfdf1dfce4fdc1c0fac..0e3070346e2fa3fb9f061b1c6c17bf53e47e0e70 100644
--- a/dap-sdk/net/client/dap_client.c
+++ b/dap-sdk/net/client/dap_client.c
@@ -120,6 +120,7 @@ void dap_client_set_uplink_unsafe(dap_client_t * a_client,const char* a_addr, ui
         log_it(L_ERROR,"Client is NULL for dap_client_set_uplink");
         return;
     }
+    DAP_DEL_Z(DAP_CLIENT_PVT(a_client)->uplink_addr);
     DAP_CLIENT_PVT(a_client)->uplink_addr = strdup(a_addr);
     DAP_CLIENT_PVT(a_client)->uplink_port = a_port;
 }
diff --git a/dap-sdk/net/client/dap_client_pvt.c b/dap-sdk/net/client/dap_client_pvt.c
index 9fb9c3354e05dc382cf2f02d2c6030517e5c4a60..998681855ea756b9b93675243fc2bd8decab31a7 100644
--- a/dap-sdk/net/client/dap_client_pvt.c
+++ b/dap-sdk/net/client/dap_client_pvt.c
@@ -175,6 +175,9 @@ void dap_client_pvt_delete(dap_client_pvt_t * a_client_pvt)
     if(s_debug_more)
         log_it(L_INFO, "dap_client_pvt_delete 0x%x", a_client_pvt);
 
+    if(a_client_pvt->uplink_addr)
+        DAP_DELETE(a_client_pvt->uplink_addr);
+
     if(a_client_pvt->session_key_id)
         DAP_DELETE(a_client_pvt->session_key_id);
 
@@ -799,13 +802,17 @@ void dap_client_pvt_request_enc(dap_client_pvt_t * a_client_internal, const char
     }
 */
     int l_off;
-    char *l_path = DAP_NEW_S_SIZE(char, l_query_enc_size_max + l_sub_url_enc_size_max + 1);
+    size_t l_path_size= l_query_enc_size_max + l_sub_url_enc_size_max + 1;
+    char *l_path = DAP_NEW_S_SIZE(char, l_path_size);
+    l_path[0] = '\0';
     if(a_path) {
-        if(l_sub_url_size)
-        {
-            l_off = l_query_size
-                    ? dap_snprintf(l_path, l_query_enc_size_max + l_sub_url_enc_size_max + 1, "%s/%s?%s", a_path, l_sub_url_enc, l_query_enc)
-                    : dap_snprintf(l_path, l_sub_url_enc_size_max + 1, "%s/%s", a_path, l_sub_url_enc);
+        if(l_sub_url_size){
+            if(l_query_size){
+                dap_snprintf(l_path, l_path_size, "%s/%s?%s", a_path, l_sub_url_enc,
+                                   l_query_enc?l_query_enc:"");
+            }else{
+                dap_snprintf(l_path, l_path_size, "%s/%s", a_path, l_sub_url_enc);
+            }
         } else {
             dap_stpcpy(l_path, a_path);
         }
diff --git a/dap-sdk/net/core/dap_events_socket.c b/dap-sdk/net/core/dap_events_socket.c
index 526fcc13bcddd84efcd031d85da07e77a0b90076..15c010b78c89105ce02ec1c31199764441583228 100644
--- a/dap-sdk/net/core/dap_events_socket.c
+++ b/dap-sdk/net/core/dap_events_socket.c
@@ -1859,29 +1859,29 @@ size_t dap_events_socket_write_unsafe(dap_events_socket_t *sc, const void * data
 
 /**
  * @brief dap_events_socket_write_f Write formatted text to the client
- * @param sc Conn instance
- * @param format Format
+ * @param a_es Conn instance
+ * @param a_format Format
  * @return Number of bytes that were placed into the buffer
  */
-size_t dap_events_socket_write_f_unsafe(dap_events_socket_t *sc, const char * format,...)
+size_t dap_events_socket_write_f_unsafe(dap_events_socket_t *a_es, const char * a_format,...)
 {
     //log_it(L_DEBUG,"dap_events_socket_write_f %u sock", sc->socket );
 
-    size_t l_max_data_size = sc->buf_out_size_max - sc->buf_out_size;
+    size_t l_max_data_size = a_es->buf_out_size_max - a_es->buf_out_size;
     if (! l_max_data_size)
         return 0;
 
-    va_list ap;
-    va_start(ap, format);
-    int ret=dap_vsnprintf((char*)sc->buf_out + sc->buf_out_size, l_max_data_size, format, ap);
-    va_end(ap);
-    if(ret > 0) {
-        sc->buf_out_size += (unsigned int)ret;
+    va_list l_ap;
+    va_start(l_ap, a_format);
+    int l_ret=dap_vsnprintf( ((char*)a_es->buf_out) + a_es->buf_out_size, l_max_data_size, a_format, l_ap);
+    va_end(l_ap);
+    if(l_ret > 0) {
+        a_es->buf_out_size += (unsigned int)l_ret;
     } else {
-        log_it(L_ERROR,"Can't write out formatted data '%s'", format);
+        log_it(L_ERROR,"Can't write out formatted data '%s'", a_format);
     }
-    dap_events_socket_set_writable_unsafe(sc, true);
-    return (ret > 0) ? (unsigned int)ret : 0;
+    dap_events_socket_set_writable_unsafe(a_es, true);
+    return (l_ret > 0) ? (unsigned int)l_ret : 0;
 }
 
 /**
diff --git a/dap-sdk/net/core/dap_proc_queue.c b/dap-sdk/net/core/dap_proc_queue.c
index c15065b8f003f4951d4d29581a46b8ba5f9959ac..8172eb8d60b660e6eab79afc09a12cf3bd83fc0f 100644
--- a/dap-sdk/net/core/dap_proc_queue.c
+++ b/dap-sdk/net/core/dap_proc_queue.c
@@ -75,6 +75,7 @@ static void s_queue_esocket_callback( dap_events_socket_t * a_es, void * a_msg)
         dap_proc_queue_item_t * l_item = DAP_NEW_Z(dap_proc_queue_item_t);
         if (! l_item){
             log_it(L_CRITICAL,"Can't allocate memory for callback item, exiting");
+            DAP_DELETE(l_msg);
             return;
         }
         l_item->callback = l_msg->callback;
@@ -98,7 +99,7 @@ static void s_queue_esocket_callback( dap_events_socket_t * a_es, void * a_msg)
     if (l_msg->signal_kill){ // Say to kill this object and delete its inherior dap_proc_queue_t
         a_es->flags |= DAP_SOCK_SIGNAL_CLOSE;
     }
-    DAP_DEL_Z(l_msg)
+    DAP_DELETE(l_msg);
 }
 
 /**
diff --git a/modules/channel/chain/dap_stream_ch_chain.c b/modules/channel/chain/dap_stream_ch_chain.c
index c65f0eac501459dc77e6efa6b4890207962aa211..fac3c794a9d376afc6715976a2eb9f3b8bb2ae17 100644
--- a/modules/channel/chain/dap_stream_ch_chain.c
+++ b/modules/channel/chain/dap_stream_ch_chain.c
@@ -503,7 +503,6 @@ static bool s_sync_in_chains_callback(dap_proc_thread_t *a_thread, void *a_arg)
                             dap_chain_hash_fast_to_str(&l_atom_hash,l_atom_hash_str,sizeof (l_atom_hash_str)-1 );
                             log_it(L_WARNING,"Not accepted atom (code ATOM_PASS) with hash %s for %s:%s and moved into the treshold",  l_atom_hash_str, l_chain->net_name, l_chain->name);
                         }
-                        DAP_DELETE(l_atom_copy);
                     }else{
                         if (s_debug_more){
                             char l_atom_hash_str[72]={[0]='\0'};
@@ -511,7 +510,7 @@ static bool s_sync_in_chains_callback(dap_proc_thread_t *a_thread, void *a_arg)
                             log_it(L_WARNING,"Not accepted atom (code %d) with hash %s for %s:%s", l_atom_add_res, l_atom_hash_str, l_chain->net_name, l_chain->name);
                         }
                     }
-
+                    DAP_DEL_Z(l_atom_copy);
                 } else {
                     if (s_debug_more){
                         char l_atom_hash_str[72]={[0]='\0'};
diff --git a/modules/global-db/dap_chain_global_db_remote.c b/modules/global-db/dap_chain_global_db_remote.c
index ed60de95fa902ae404f9d8e227bd63c4fffcf817..06a3df71f813b3e8754cdb9bf8f239c0c2f7258e 100644
--- a/modules/global-db/dap_chain_global_db_remote.c
+++ b/modules/global-db/dap_chain_global_db_remote.c
@@ -136,10 +136,8 @@ uint64_t dap_db_get_last_id_remote(uint64_t a_node_addr)
 bool dap_db_set_last_hash_remote(uint64_t a_node_addr, dap_chain_t *a_chain, dap_chain_hash_fast_t *a_hash)
 {
     //log_it( L_DEBUG, "Node 0x%016X set last synced timestamp %llu", a_id);
-    dap_chain_hash_fast_t *l_hash = DAP_NEW(dap_chain_hash_fast_t);
-    memcpy(l_hash, a_hash, sizeof(*a_hash));
     return dap_chain_global_db_gr_set(dap_strdup_printf("%ju%s%s", a_node_addr, a_chain->net_name, a_chain->name),
-                                      l_hash, sizeof(*l_hash), GROUP_LOCAL_NODE_LAST_ID);
+                                      a_hash, sizeof(*a_hash), GROUP_LOCAL_NODE_LAST_ID);
 }
 
 /**
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 06ec78f689202b365b99a8c5f99455a4a8d03e6c..c7f56e6332f6b42f0b371239cd08b3f789b20ce6 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -647,7 +647,7 @@ static void s_net_state_link_prepare_success(dap_worker_t * a_worker,dap_chain_n
                             "address:\""NODE_ADDR_FP_STR"\""
                         "}\n", l_net->pub.id.uint64, a_node_info->hdr.cell_id.uint64,
                                 NODE_ADDR_FP_ARGS_S(a_node_info->hdr.address));
-
+    DAP_DELETE(l_dns_request);
 }
 
 /**
@@ -687,10 +687,12 @@ static void s_net_state_link_prepare_error(dap_worker_t * a_worker,dap_chain_nod
             pthread_rwlock_unlock(&l_net_pvt->rwlock);
             s_fill_links_from_root_aliases(l_net);
             dap_proc_queue_add_callback_inter( a_worker->proc_queue_input,s_net_states_proc,l_net );
+            DAP_DELETE(l_dns_request);
             return;
         }
     }
     pthread_rwlock_unlock(&l_net_pvt->rwlock);
+    DAP_DELETE(l_dns_request);
 }
 
 /**
diff --git a/modules/net/dap_chain_node_client.c b/modules/net/dap_chain_node_client.c
index d45bc720bd02b8bdaff9ca3e3c5dddcded60c8c9..0aef4479770b0ed353d7a0d09e5c71dde8c2d1bf 100644
--- a/modules/net/dap_chain_node_client.c
+++ b/modules/net/dap_chain_node_client.c
@@ -188,21 +188,25 @@ static bool s_timer_update_states_callback(void * a_arg )
     assert(l_es_handler);
     dap_events_socket_t * l_es = l_es_handler->esocket;
     uint128_t l_es_uuid = l_es_handler->uuid;
-    DAP_DEL_Z(l_es_handler);
     // check if esocket still in worker
     if(dap_events_socket_check_unsafe(l_worker,l_es)){
 
         // Check if its exactly ours!
         if (dap_uint128_check_equal(l_es->uuid,l_es_uuid)){
             dap_client_t * l_client = dap_client_from_esocket(l_es);
-            if(! l_client )
+            if(! l_client ){
+                DAP_DELETE(l_es_handler);
                 return false;
+            }
             dap_chain_node_client_t * l_node_client = (dap_chain_node_client_t*) l_client->_inheritor;
-            if(! l_node_client) // No active node client
+            if(! l_node_client){ // No active node client
+                DAP_DELETE(l_es_handler);
                 return false;
-
-            if(! l_node_client->ch_chain) // No active ch channel
+            }
+            if(! l_node_client->ch_chain){ // No active ch channel
+                DAP_DELETE(l_es_handler);
                 return false;
+            }
             dap_stream_ch_chain_t * l_ch_chain = (dap_stream_ch_chain_t*) l_node_client->ch_chain->internal;
             assert(l_ch_chain);
             dap_chain_net_t * l_net = l_node_client->net;
@@ -225,10 +229,14 @@ static bool s_timer_update_states_callback(void * a_arg )
 
             }
             return true;
-        }else
+        }else{
+            DAP_DELETE(l_es_handler);
             return false;
-    }else
+        }
+    }else{
+        DAP_DELETE(l_es_handler);
         return false;
+    }
 }
 
 /**
diff --git a/modules/net/dap_chain_node_dns_client.c b/modules/net/dap_chain_node_dns_client.c
index 2ed130ddc37e8712b96d3f3eface9f4dc32a6292..df023da94b325ea5b790d3f768a6fa50bfd0ef2b 100644
--- a/modules/net/dap_chain_node_dns_client.c
+++ b/modules/net/dap_chain_node_dns_client.c
@@ -127,7 +127,9 @@ static void s_dns_client_esocket_error_callback(dap_events_socket_t * a_esocket,
  */
 static bool s_dns_client_esocket_timeout_callback(void * a_arg)
 {
-    dap_events_socket_t * l_es = (dap_events_socket_t*) a_arg;
+    dap_events_socket_handler_t * l_es_handler = (dap_events_socket_handler_t *) a_arg;
+    assert(l_es_handler);
+    dap_events_socket_t * l_es = l_es_handler->esocket;
     assert(l_es);
     dap_events_t * l_events = dap_events_get_default();
     assert(l_events);
@@ -135,6 +137,18 @@ static bool s_dns_client_esocket_timeout_callback(void * a_arg)
     dap_worker_t * l_worker = dap_events_get_current_worker(l_events); // We're in own esocket context
     assert(l_worker);
 
+    if(dap_events_socket_check_unsafe(l_worker ,l_es)){
+        if(dap_uint128_check_equal(l_es->uuid, l_es_handler->uuid)){ // Pointer is present but alien
+            DAP_DELETE(l_es_handler);
+            return false;
+        }else
+            DAP_DELETE(l_es_handler);
+    }else{ // No such pointer
+        DAP_DELETE(l_es_handler);
+        return false;
+    }
+
+
     struct dns_client * l_dns_client = (struct dns_client*) l_es->_inheritor;
 
     if(dap_events_socket_check_unsafe(l_worker, l_es) ){ // If we've not closed this esocket
@@ -236,8 +250,12 @@ void dap_chain_node_info_dns_request(struct in_addr a_addr, uint16_t a_port, cha
     dap_worker_t * l_worker = dap_events_worker_get_auto();
     dap_events_socket_write_unsafe(l_esocket,l_dns_client->dns_request->data, l_dns_client->dns_request->size );
     dap_events_socket_assign_on_worker_mt(l_esocket,l_worker);
+
+    dap_events_socket_handler_t * l_es_handler = DAP_NEW_Z(dap_events_socket_handler_t);
+    l_es_handler->esocket = l_esocket;
+    l_es_handler->uuid = l_esocket->uuid;
     dap_timerfd_start_on_worker(l_worker, dap_config_get_item_uint64_default(g_config,"dns_client","request_timeout",10)*1000,
-                                 s_dns_client_esocket_timeout_callback,l_esocket);
+                                 s_dns_client_esocket_timeout_callback,l_es_handler);
 }