diff --git a/modules/chain/dap_chain.c b/modules/chain/dap_chain.c
index 87579e99628e42a39af6031136b753f07efd5cac..bd3f5ca812dd788183fe458920028d0b2f16c512 100644
--- a/modules/chain/dap_chain.c
+++ b/modules/chain/dap_chain.c
@@ -552,15 +552,15 @@ bool dap_chain_has_file_store(dap_chain_t * a_chain)
  */
 int dap_chain_save_all (dap_chain_t * l_chain)
 {
-    int ret = 0;
+    int l_ret = 0;
     pthread_rwlock_rdlock(&l_chain->cell_rwlock);
-    dap_chain_cell_t * l_item, *l_item_tmp = NULL;
+    dap_chain_cell_t *l_item = NULL, *l_item_tmp = NULL;
     HASH_ITER(hh,l_chain->cells,l_item,l_item_tmp){
         if(dap_chain_cell_file_update(l_item) <= 0)
-            ret++;
+            l_ret++;
     }
     pthread_rwlock_unlock(&l_chain->cell_rwlock);
-    return ret;
+    return l_ret;
 }
 
 /**
@@ -593,7 +593,7 @@ int dap_chain_load_all(dap_chain_t *a_chain)
         const char * l_filename = l_dir_entry->d_name;
         const char l_suffix[] = ".dchaincell";
         size_t l_suffix_len = strlen(l_suffix);
-        if (strncmp(l_filename + strlen(l_filename) - l_suffix_len, l_suffix, l_suffix_len) == 0 ) {
+        if (!strncmp(l_filename + strlen(l_filename) - l_suffix_len, l_suffix, l_suffix_len)) {
             l_ret += dap_chain_cell_load(a_chain, l_filename);
         }
     }
diff --git a/modules/chain/dap_chain_cell.c b/modules/chain/dap_chain_cell.c
index e771db6ae459dc081fd3a04b533c0fdb4bd4efe7..b9b2cb4b9495b3da66d5ab896da17d0d2cf0e04e 100644
--- a/modules/chain/dap_chain_cell.c
+++ b/modules/chain/dap_chain_cell.c
@@ -180,7 +180,7 @@ void dap_chain_cell_delete(dap_chain_cell_t *a_cell)
  */
 int dap_chain_cell_load(dap_chain_t * a_chain, const char * a_cell_file_path)
 {
-    int ret = 0;
+    int l_ret = 0;
     char l_file_path[MAX_PATH] = {'\0'};
     snprintf(l_file_path, MAX_PATH, "%s/%s", DAP_CHAIN_PVT(a_chain)->file_storage_dir, a_cell_file_path);
     FILE *l_cell_file = fopen(l_file_path, "rb");
@@ -205,18 +205,18 @@ int dap_chain_cell_load(dap_chain_t * a_chain, const char * a_cell_file_path)
         return -3;
     }
     unsigned long q = 0;
-    size_t l_read;
+    size_t l_read = 0;
     uint64_t l_el_size = 0;
     while ((l_read = fread(&l_el_size, 1, sizeof(l_el_size), l_cell_file)) && !feof(l_cell_file)) {
         if (l_read != sizeof(l_el_size) || l_el_size == 0) {
             log_it(L_ERROR, "Corrupted element size %zu, chain %s is damaged", l_el_size, l_file_path);
-            ret = -4;
+            l_ret = -4;
             break;
         }
         dap_chain_atom_ptr_t l_element = DAP_NEW_SIZE(dap_chain_atom_ptr_t, l_el_size);
         if (!l_element) {
             log_it(L_ERROR, "Memory allocation error in dap_chain_cell_load, errno=%d", errno);
-            ret = -5;
+            l_ret = -5;
             break;
         }
         l_read = fread((void *)l_element, 1, l_el_size, l_cell_file);
@@ -229,11 +229,11 @@ int dap_chain_cell_load(dap_chain_t * a_chain, const char * a_cell_file_path)
         } else {
             log_it(L_ERROR, "Read only %lu of %zu bytes, stop cell loading", l_read, l_el_size);
             DAP_DELETE(l_element);
-            ret = -6;
+            l_ret = -6;
             break;
         }
     }
-    if (ret < 0) {
+    if (l_ret < 0) {
         log_it(L_INFO, "Couldn't load all atoms, %lu only", q);
     } else {
         log_it(L_INFO, "Loaded all %lu atoms in cell %s", q, a_cell_file_path);
@@ -241,7 +241,7 @@ int dap_chain_cell_load(dap_chain_t * a_chain, const char * a_cell_file_path)
     if (q)
         dap_chain_cell_create_fill2(a_chain, a_cell_file_path);
     fclose(l_cell_file);
-    return ret;
+    return l_ret;
 
 }
 
diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c
index 93700d21d6695c7f2bc22cec6b2041fbeb92bde2..bfe13fd77c08c90c91cffd1b2d80f47f5c9e7523 100644
--- a/modules/chain/dap_chain_ledger.c
+++ b/modules/chain/dap_chain_ledger.c
@@ -1009,7 +1009,7 @@ void s_ledger_token_cache_update(dap_ledger_t *a_ledger, dap_chain_ledger_token_
     if (dap_global_db_set(l_gdb_group, l_token_item->ticker, l_cache, l_cache_size, false, NULL, NULL)) {
         char *l_supply = dap_chain_balance_print(l_token_item->current_supply);
         log_it(L_WARNING, "Ledger cache mismatch, can't add token [%s] with supply %s", l_token_item->ticker, l_supply);
-        DAP_FREE(l_supply);
+        DAP_DELETE(l_supply);
     }
     DAP_DELETE(l_gdb_group);
 }
diff --git a/modules/channel/chain-net/dap_stream_ch_chain_net.c b/modules/channel/chain-net/dap_stream_ch_chain_net.c
index da1d49c44ec4be0d65da832d52821cd1d2f4f178..56b46630f9f0b3e306bc36b31d71443471352bb7 100644
--- a/modules/channel/chain-net/dap_stream_ch_chain_net.c
+++ b/modules/channel/chain-net/dap_stream_ch_chain_net.c
@@ -134,7 +134,7 @@ uint8_t dap_stream_ch_chain_net_get_id()
 
 /**
  * @brief dap_stream_ch_chain_net_init
- * @return
+ * @return always 0
  */
 int dap_stream_ch_chain_net_init()
 {
diff --git a/modules/channel/chain-voting/dap_stream_ch_chain_voting.c b/modules/channel/chain-voting/dap_stream_ch_chain_voting.c
index a2b39e60f256b368a51e288693b72af953e88257..64cc05f10a90c326abdbe20d413d0e3ee170972d 100644
--- a/modules/channel/chain-voting/dap_stream_ch_chain_voting.c
+++ b/modules/channel/chain-voting/dap_stream_ch_chain_voting.c
@@ -126,7 +126,8 @@ void dap_stream_ch_chain_voting_message_write(dap_chain_net_t *a_net, dap_chain_
                                     DAP_DUP_SIZE(a_voting_pkt, l_voting_pkt_size));
 }
 
-void dap_stream_ch_chain_voting_deinit() {
+void dap_stream_ch_chain_voting_deinit()
+{
     struct voting_node_client_list *l_node_info_item, *l_node_info_tmp;
     HASH_ITER(hh, s_node_client_list, l_node_info_item, l_node_info_tmp) {
         // Clang bug at this, l_node_info_item should change at every loop cycle
@@ -136,7 +137,8 @@ void dap_stream_ch_chain_voting_deinit() {
     }
 }
 
-static void s_stream_ch_new(dap_stream_ch_t *a_ch, void *a_arg) {
+static void s_stream_ch_new(dap_stream_ch_t *a_ch, void *a_arg)
+{
     UNUSED(a_arg);
     a_ch->internal = DAP_NEW_Z(dap_stream_ch_chain_voting_t);
     dap_stream_ch_chain_voting_t *l_ch_chain_voting = DAP_STREAM_CH_CHAIN_VOTING(a_ch);
diff --git a/modules/common/dap_chain_common.c b/modules/common/dap_chain_common.c
index 20fa9b9fc3e3a41ccda24a238caae7d07d3fd1ff..1fcc821a407146149b4683b7dcff0f400c02bf4a 100644
--- a/modules/common/dap_chain_common.c
+++ b/modules/common/dap_chain_common.c
@@ -1133,50 +1133,50 @@ void    uint256_cvt_test (void)
     uint256.__lo.c = 1;
 
     cp = dap_chain_balance_print(uint256);
-    free(cp);
+    DAP_DELETE(cp);
 
     uint256 = uint256_zero;
     uint256.__lo.c = 1;
     cp = dap_chain_balance_to_coins(uint256);
     uint256 = dap_chain_coins_to_balance(cp);
-    free(cp);
+    DAP_DELETE(cp);
 
     uint256 = uint256_zero;
     uint256.__lo.c = 100000000;
     cp = dap_chain_balance_to_coins(uint256);
     uint256 = dap_chain_coins_to_balance(cp);
-    free(cp);
+    DAP_DELETE(cp);
 
 
 
 
     cp = dap_chain_balance_print333(uint256);
-    free(cp);
+    DAP_DELETE(cp);
 
 
 
     uint256.hi = dap_chain_uint128_from(-1);
     uint256.lo = dap_chain_uint128_from(-1);
     cp = dap_chain_balance_print333(uint256);
-    free(cp);
+    DAP_DELETE(cp);
 
     cp = dap_chain_balance_print(uint256);
-    free(cp);
+    DAP_DELETE(cp);
 
     cp = dap_cvt_uint256_to_str(uint256 );
     uint256 = dap_cvt_str_to_uint256(cp);
-    free(cp);
+    DAP_DELETE(cp);
 
     uint256.hi = dap_chain_uint128_from(-1);
     uint256.lo = dap_chain_uint128_from(-1);
     cp = dap_cvt_uint256_to_str(uint256 );
-    free(cp);
+    DAP_DELETE(cp);
 
     uint256.hi = dap_chain_uint128_from(123);
     uint256.lo = dap_chain_uint128_from(374607431768211455);
 
     cp = dap_chain_balance_to_coins256(uint256);
     uint256 = dap_chain_coins_to_balance(cp);
-    free(cp);
+    DAP_DELETE(cp);
 }
 #endif
diff --git a/modules/common/dap_chain_datum_token.c b/modules/common/dap_chain_datum_token.c
index 7dd41df3e236ba91cc11d69605d17d510c9cecf8..b1b68ee1eb51e031564863cba7107145a6eff5a5 100644
--- a/modules/common/dap_chain_datum_token.c
+++ b/modules/common/dap_chain_datum_token.c
@@ -336,7 +336,7 @@ dap_sign_t ** dap_chain_datum_token_signs_parse(dap_chain_datum_token_t * a_datu
         size_t l_sign_size = dap_sign_get_size(l_ret[i]);
         if (l_sign_size == 0 || l_sign_size > a_datum_token_size - l_offset) {
             *a_signs_total = 0;
-            DAP_FREE(l_ret);
+            DAP_DELETE(l_ret);
             return NULL;
         }
         (*a_signs_total)++;
diff --git a/modules/consensus/block-poa/dap_chain_cs_block_poa.c b/modules/consensus/block-poa/dap_chain_cs_block_poa.c
index 04f795aebd4b6bab6835b650bf7e033d986c5cd7..fe61bc15638d233c81b390f45755da9b561cc565 100644
--- a/modules/consensus/block-poa/dap_chain_cs_block_poa.c
+++ b/modules/consensus/block-poa/dap_chain_cs_block_poa.c
@@ -42,8 +42,7 @@
 #define LOG_TAG "dap_chain_cs_block_poa"
 
 
-typedef struct dap_chain_cs_dag_poa_pvt
-{
+typedef struct dap_chain_cs_dag_poa_pvt {
     dap_enc_key_t *sign_key;
     dap_cert_t ** auth_certs;
     char * auth_certs_prefix;
diff --git a/modules/consensus/block-poa/include/dap_chain_cs_block_poa.h b/modules/consensus/block-poa/include/dap_chain_cs_block_poa.h
index eb73809ff8b5bf0ca3b0e05e37847d614c74b348..3e6eff7f93b9a156c1908a3f3c853bf92182545e 100644
--- a/modules/consensus/block-poa/include/dap_chain_cs_block_poa.h
+++ b/modules/consensus/block-poa/include/dap_chain_cs_block_poa.h
@@ -24,8 +24,7 @@
 #pragma once
 #include "dap_chain_cs_blocks.h"
 
-typedef struct dap_chain_cs_block_poa
-{
+typedef struct dap_chain_cs_block_poa {
     dap_chain_t * chain;
     dap_chain_cs_blocks_t * blocks;
     void * _pvt;
diff --git a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
index 6ed2566fe569a1f40d80a6afeabb1ceea50c78ed..37e2dd5f93487305afef846343156596fcc3d5a6 100644
--- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
+++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
@@ -108,7 +108,7 @@ static dap_interval_timer_t s_poa_round_timer = NULL;
  * read parameters from config and register dag_poa commands to cellframe-node-cli
  * @return
  */
-int dap_chain_cs_dag_poa_init(void)
+int dap_chain_cs_dag_poa_init()
 {
     // Add consensus constructor
     dap_chain_cs_add ("dag_poa", s_callback_new );
diff --git a/modules/consensus/dag-poa/include/dap_chain_cs_dag_poa.h b/modules/consensus/dag-poa/include/dap_chain_cs_dag_poa.h
index 85ec14a53b4f2d90ea97ce97444a44c2d4f67d72..e6b234123dd07c5e93e8f95d07f9bbb1a7c65d0e 100644
--- a/modules/consensus/dag-poa/include/dap_chain_cs_dag_poa.h
+++ b/modules/consensus/dag-poa/include/dap_chain_cs_dag_poa.h
@@ -38,7 +38,7 @@ typedef struct dap_chain_cs_dag_poa
 #define DAP_CHAIN_CS_DAG_POA(a) ( (dap_chain_cs_dag_poa_t *) (a)->_inheritor)
 
 
-int dap_chain_cs_dag_poa_init(void);
+int dap_chain_cs_dag_poa_init();
 void dap_chain_cs_dag_poa_deinit(void);
 dap_list_t *dap_chain_cs_dag_poa_get_auth_certs(dap_chain_t *a_chain, size_t *a_auth_certs_count, uint16_t *a_count_verify);
 void dap_chain_cs_dag_poa_presign_callback_set(dap_chain_t *a_chain,
diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
index ea2f6fd86e7577a98d3a6166ce6fd1635d1d733c..afb55abff216c3c6f27c8412ba101f21d5edb5e9 100644
--- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c
+++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
@@ -143,8 +143,7 @@ DAP_STATIC_INLINE uint16_t s_get_round_skip_timeout(dap_chain_esbocs_session_t *
     return PVT(a_session->esbocs)->round_attempt_timeout * 6 * PVT(a_session->esbocs)->round_attempts_max;
 }
 
-int dap_chain_cs_esbocs_init()
-{
+int dap_chain_cs_esbocs_init() {
     dap_stream_ch_chain_voting_init();
     dap_chain_cs_add("esbocs", s_callback_new);
     dap_cli_server_cmd_add ("esbocs", s_cli_esbocs, "ESBOCS commands",
@@ -374,7 +373,7 @@ static int s_callback_created(dap_chain_t *a_chain, dap_config_t *a_chain_net_cf
     l_esbocs_pvt->fee_coll_set = dap_chain_coins_to_balance(dap_config_get_item_str_default(a_chain_net_cfg, "esbocs", "set_collect_fee", "10.0"));
 
     const char *l_sign_cert_str = NULL;
-    if ((l_sign_cert_str = dap_config_get_item_str(a_chain_net_cfg, "esbocs", "blocks-sign-cert")) != NULL) {
+    if( (l_sign_cert_str = dap_config_get_item_str(a_chain_net_cfg, "esbocs", "blocks-sign-cert")) ) {
         dap_cert_t *l_sign_cert = dap_cert_find_by_name(l_sign_cert_str);
         if (l_sign_cert == NULL) {
             log_it(L_ERROR, "Can't load sign certificate, name \"%s\" is wrong", l_sign_cert_str);
diff --git a/modules/mempool/dap_chain_mempool.c b/modules/mempool/dap_chain_mempool.c
index be5d6ae3db2d0a7c1d165c7a33d6120c57bfb3c2..6f3f4470999f7f13f21ae34756aacc6f60bca684 100644
--- a/modules/mempool/dap_chain_mempool.c
+++ b/modules/mempool/dap_chain_mempool.c
@@ -1108,7 +1108,7 @@ static void enc_http_reply_encode_new(struct dap_http_simple *a_http_simple, dap
     if(a_http_delegate->response) {
 
         if(a_http_simple->reply)
-            free(a_http_simple->reply);
+            DAP_DELETE(a_http_simple->reply);
 
         size_t l_reply_size_max = dap_enc_code_out_size(a_http_delegate->key,
                 a_http_delegate->response_size,
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 7635db083ab26ddfabfbea405b8e5f8aba5bc7d6..e64ece4e3fd3a972a82136fafb3cf897d9769cc3 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -338,21 +338,20 @@ int dap_chain_net_init()
     char * l_net_dir_str = dap_strdup_printf("%s/network", dap_config_path());
     DIR * l_net_dir = opendir( l_net_dir_str);
     if ( l_net_dir ){
-        struct dirent * l_dir_entry;
+        struct dirent * l_dir_entry = NULL;
         uint16_t l_acl_idx = 0;
-        while ( (l_dir_entry = readdir(l_net_dir) )!= NULL ){
+        while ( (l_dir_entry = readdir(l_net_dir) ) ){
             if (l_dir_entry->d_name[0]=='\0' || l_dir_entry->d_name[0]=='.')
                 continue;
             // don't search in directories
-            char * l_full_path = dap_strdup_printf("%s/%s", l_net_dir_str, l_dir_entry->d_name);
+            char l_full_path[MAX_PATH + 1] = {0};
+            dap_snprintf(l_full_path, sizeof(l_full_path), "%s/%s", l_net_dir_str, l_dir_entry->d_name);
             if(dap_dir_test(l_full_path)) {
-                DAP_DELETE(l_full_path);
                 continue;
             }
-            DAP_DELETE(l_full_path);
             // search only ".cfg" files
             if(strlen(l_dir_entry->d_name) > 4) { // It has non zero name excluding file extension
-                if(strncmp(l_dir_entry->d_name + strlen(l_dir_entry->d_name) - 4, ".cfg", 4) != 0) {
+                if( strncmp(l_dir_entry->d_name + strlen(l_dir_entry->d_name) - 4, ".cfg", 4) ) {
                     // its not .cfg file
                     continue;
                 }
@@ -1547,8 +1546,7 @@ void dap_chain_net_delete( dap_chain_net_t * a_net )
  * @brief
  * load network config settings
  */
-void dap_chain_net_load_all()
-{
+void dap_chain_net_load_all() {
     dap_chain_net_t **l_net_list = NULL;
     uint16_t l_net_count = 0;
     int32_t l_ret = 0;
@@ -1560,10 +1558,11 @@ void dap_chain_net_load_all()
     }
 
     for(uint16_t i = 0; i < l_net_count; i++){
-        if((l_ret = s_net_load(l_net_list[i])) != 0){
+        if((l_ret = s_net_load(l_net_list[i])) ){
             log_it(L_ERROR, "Loading chains of net %s finished with (%d) error code.", l_net_list[i]->pub.name, l_ret);
         }
     }
+    DAP_DELETE(l_net_list);
 }
 
 dap_string_t* dap_cli_list_net()
@@ -1709,7 +1708,8 @@ static bool s_chain_net_reload_ledger_cache_once(dap_chain_net_t *l_net)
  * @param a_type - dap_chain_type_t a_type [CHAIN_TYPE_TOKEN, CHAIN_TYPE_EMISSION, CHAIN_TYPE_TX]
  * @return uint16_t
  */
-static const char *s_chain_type_convert_to_string(dap_chain_type_t a_type) {
+static const char *s_chain_type_convert_to_string(dap_chain_type_t a_type)
+{
     switch (a_type) {
         case CHAIN_TYPE_TOKEN:
             return ("token");
@@ -2255,11 +2255,11 @@ void s_main_timer_callback(void *a_arg)
  */
 int s_net_init(const char * a_net_name, uint16_t a_acl_idx)
 {
-    dap_config_t *l_cfg=NULL;
+    dap_config_t *l_cfg = NULL;
     dap_string_t *l_cfg_path = dap_string_new("network/");
     dap_string_append(l_cfg_path,a_net_name);
 
-    if( ( l_cfg = dap_config_open ( l_cfg_path->str ) ) == NULL ) {
+    if( !(l_cfg = dap_config_open(l_cfg_path->str)) ) {
         log_it(L_ERROR,"Can't open default network config");
         dap_string_free(l_cfg_path,true);
         return -1;
@@ -2739,11 +2739,11 @@ int s_net_load(dap_chain_net_t *a_net)
 {
     dap_chain_net_t *l_net = a_net;
 
-    dap_config_t *l_cfg=NULL;
+    dap_config_t *l_cfg = NULL;
     dap_string_t *l_cfg_path = dap_string_new("network/");
     dap_string_append(l_cfg_path,a_net->pub.name);
 
-    if( ( l_cfg = dap_config_open ( l_cfg_path->str ) ) == NULL ) {
+    if( !( l_cfg = dap_config_open ( l_cfg_path->str ) ) ) {
         log_it(L_ERROR,"Can't open default network config");
         dap_string_free(l_cfg_path,true);
         return -1;
@@ -2766,9 +2766,9 @@ int s_net_load(dap_chain_net_t *a_net)
     while(l_chain){
         l_chain->ledger = l_net->pub.ledger;
         dap_chain_ledger_set_fee(l_net->pub.ledger, uint256_0, c_dap_chain_addr_blank);
-        if (dap_chain_load_all(l_chain) == 0)
+        if (!dap_chain_load_all(l_chain)) {
             log_it (L_NOTICE, "Loaded chain files");
-        else {
+        } else {
             dap_chain_save_all( l_chain );
             log_it (L_NOTICE, "Initialized chain files");
         }
@@ -2891,8 +2891,14 @@ void dap_chain_net_deinit()
 
 }
 
+/**
+ * @brief dap_chain_net_list
+ * @return NULL if error
+ */
 dap_chain_net_t **dap_chain_net_list(uint16_t *a_size)
 {
+    if (!a_size)
+        return NULL;
     pthread_rwlock_rdlock(&s_net_items_rwlock);
     *a_size = HASH_COUNT(s_net_items);
     if(*a_size){
@@ -2902,11 +2908,11 @@ dap_chain_net_t **dap_chain_net_list(uint16_t *a_size)
             pthread_rwlock_unlock(&s_net_items_rwlock);
             return NULL;
         }
-        dap_chain_net_item_t *l_current_item, *l_tmp;
+        dap_chain_net_item_t *l_current_item = NULL, *l_tmp = NULL;
         int i = 0;
         HASH_ITER(hh, s_net_items, l_current_item, l_tmp) {
             l_net_list[i++] = l_current_item->chain_net;
-            if(i > *a_size)
+            if(i >= *a_size)
                 break;
         }
         pthread_rwlock_unlock(&s_net_items_rwlock);
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index d80360984c70e3bd2b7ddfc73c3f6eeddbebef19..2efea8f10555d23f185df1d2410348449147ebb8 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -110,6 +110,7 @@
 
 #define LOG_TAG "chain_node_cli_cmd"
 
+static void s_dap_chain_net_purge(dap_chain_net_t * a_net);
 
 /**
  * @brief dap_chain_node_addr_t* dap_chain_node_addr_get_by_alias
@@ -722,6 +723,30 @@ static int node_info_dump_with_reply(dap_chain_net_t * a_net, dap_chain_node_add
     return l_ret;
 }
 
+/**
+ * @brief purge ledger, stake, decree, all chains and remove chain files
+ * @param a_net
+ */
+void s_dap_chain_net_purge(dap_chain_net_t * a_net)
+{
+    if (!a_net)
+        return;
+    dap_chain_t *l_chain = NULL;
+    dap_chain_ledger_purge(a_net->pub.ledger, false);
+    dap_chain_net_srv_stake_purge(a_net);
+    dap_chain_net_decree_purge(a_net);
+    DL_FOREACH(a_net->pub.chains, l_chain) {
+        if (l_chain->callback_purge)
+            l_chain->callback_purge(l_chain);
+        if (l_chain->callback_set_min_validators_count)
+            l_chain->callback_set_min_validators_count(l_chain, 0);
+        const char *l_chains_rm_path = dap_chain_get_path(l_chain);
+        dap_rm_rf(l_chains_rm_path);
+        dap_chain_ledger_set_fee(a_net->pub.ledger, uint256_0, c_dap_chain_addr_blank);
+        dap_chain_load_all(l_chain);
+    }
+}
+
 /**
  * @brief com_global_db
  * global_db command
@@ -5889,7 +5914,7 @@ int cmd_gdb_export(int a_argc, char **a_argv, char **a_str_reply)
             json_object_object_add(jobj, "timestamp", json_object_new_int64((int64_t)l_store_obj[i].timestamp));
             json_object_array_add(l_json_group, jobj);
 
-            DAP_FREE(l_value_enc_str);
+            DAP_DELETE(l_value_enc_str);
         }
         json_object_object_add(l_json_group_inner, "records", l_json_group);
         json_object_array_add(l_json, l_json_group_inner);
@@ -6105,20 +6130,7 @@ int cmd_remove(int a_argc, char **a_argv, char ** a_str_reply)
             uint16_t l_net_count;
             dap_chain_net_t **l_net_list = dap_chain_net_list(&l_net_count);
             for (uint16_t i = 0; i < l_net_count; i++) {
-                dap_chain_ledger_purge(l_net_list[i]->pub.ledger, false);
-                dap_chain_net_srv_stake_purge(l_net_list[i]);
-                dap_chain_net_decree_purge(l_net_list[i]);
-                dap_chain_t *l_chain = NULL;
-                DL_FOREACH(l_net_list[i]->pub.chains, l_chain) {
-                    if (l_chain->callback_purge)
-                        l_chain->callback_purge(l_chain);
-                    if (l_chain->callback_set_min_validators_count)
-                        l_chain->callback_set_min_validators_count(l_chain, 0);
-                    const char *l_chains_rm_path = dap_chain_get_path(l_chain);
-                    dap_rm_rf(l_chains_rm_path);
-                    dap_chain_ledger_set_fee(l_net_list[i]->pub.ledger, uint256_0, c_dap_chain_addr_blank);
-                    dap_chain_load_all(l_chain);
-                }
+                s_dap_chain_net_purge(l_net_list[i]);
             }
             if (!error)
                 successful |= REMOVED_CHAINS;
@@ -6130,20 +6142,7 @@ int cmd_remove(int a_argc, char **a_argv, char ** a_str_reply)
             } else {
                 error |= NET_NOT_VALID;
             }
-            dap_chain_t *l_chain = NULL;
-            dap_chain_ledger_purge(l_net->pub.ledger, false);
-            dap_chain_net_srv_stake_purge(l_net);
-            dap_chain_net_decree_purge(l_net);
-            DL_FOREACH(l_net->pub.chains, l_chain) {
-                if (l_chain->callback_purge)
-                    l_chain->callback_purge(l_chain);
-                if (l_chain->callback_set_min_validators_count)
-                    l_chain->callback_set_min_validators_count(l_chain, 0);
-                const char *l_chains_rm_path = dap_chain_get_path(l_chain);
-                dap_rm_rf(l_chains_rm_path);
-                dap_chain_ledger_set_fee(l_net->pub.ledger, uint256_0, c_dap_chain_addr_blank);
-                dap_chain_load_all(l_chain);
-            }
+            s_dap_chain_net_purge(l_net);
             if (!error)
                 successful |= REMOVED_CHAINS;
 
@@ -6415,14 +6414,14 @@ static char **s_parse_items(const char *a_str, char a_delimiter, int *a_count, c
 
     s = l_temp_str;
     if (l_count_temp == 0) {
-        DAP_FREE(l_temp_str);
+        DAP_DELETE(l_temp_str);
         return NULL;
     }
 
     char **lines = DAP_CALLOC(l_count_temp, sizeof (void *));
     if (!lines) {
         log_it(L_ERROR, "Memoru allocation error in s_parse_items");
-        DAP_FREE(l_temp_str);
+        DAP_DELETE(l_temp_str);
         return NULL;
     }
     for (int i = 0; i < l_count_temp; i++) {
@@ -6432,7 +6431,7 @@ static char **s_parse_items(const char *a_str, char a_delimiter, int *a_count, c
         s++;
     }
 
-    DAP_FREE(l_temp_str);
+    DAP_DELETE(l_temp_str);
     *a_count = l_count_temp;
     return lines;
 }
@@ -6471,9 +6470,9 @@ static int s_get_key_from_file(const char *a_file, const char *a_mime, const cha
 
         /* free l_items_mime */
         for (int i = 0; i < l_items_mime_count; i++) {
-            if (l_items_mime[i]) DAP_FREE(l_items_mime[i]);
+            if (l_items_mime[i]) DAP_DELETE(l_items_mime[i]);
         }
-        DAP_FREE(l_items_mime);
+        DAP_DELETE(l_items_mime);
         l_items_mime_count = 0;
     }
     if (l_flags_mime == 0) l_flags_mime = SIGNER_ALL_FLAGS;
@@ -6624,29 +6623,28 @@ static int s_sign_file(const char *a_filename, dap_sign_signer_file_t a_flags, c
 
     dap_cert_t *l_cert = dap_cert_find_by_name(a_cert_name);
     if (!l_cert) {
-        DAP_FREE(l_buffer);
+        DAP_DELETE(l_buffer);
         return 0;
     }
 
     if (!dap_hash_fast(l_buffer, l_file_content_size, a_hash)) {
-        DAP_FREE(l_buffer);
+        DAP_DELETE(l_buffer);
         return 0;
     }
 
     size_t l_full_size_for_sign;
     uint8_t *l_data = s_concat_hash_and_mimetypes(a_hash, l_std_list, &l_full_size_for_sign);
     if (!l_data) {
-        DAP_FREE(l_buffer);
+        DAP_DELETE(l_buffer);
         return 0;
     }
     *a_signed = dap_sign_create(l_cert->enc_key, l_data, l_full_size_for_sign, 0);
     if (*a_signed == NULL) {
-        DAP_FREE(l_buffer);
+        DAP_DELETE(l_buffer);
         return 0;
     }
 
-
-    DAP_FREE(l_buffer);
+    DAP_DELETE(l_buffer);
     return 1;
 }
 
@@ -6702,7 +6700,7 @@ static uint8_t *s_concat_hash_and_mimetypes (dap_chain_hash_fast_t *a_chain_hash
     memcpy(l_s, a_chain_hash->raw, sizeof(a_chain_hash->raw));
     l_s += sizeof (a_chain_hash->raw);
     memcpy(l_s, l_buf, l_len_meta_buf);
-    DAP_FREE(l_buf);
+    DAP_DELETE(l_buf);
 
     return l_fullbuf;
 }
diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c
index e2c9cf73700c544bbff0f203ab6c5a741677c009..53678642b9bfef8e269602d5656291104411ba5c 100644
--- a/modules/net/dap_chain_node_cli_cmd_tx.c
+++ b/modules/net/dap_chain_node_cli_cmd_tx.c
@@ -77,7 +77,7 @@ static void s_dap_chain_tx_hash_processed_ht_free(dap_chain_tx_hash_processed_ht
     dap_chain_tx_hash_processed_ht_t *l_tmp, *l_current_hash;
     HASH_ITER(hh, *l_hash_processed, l_current_hash, l_tmp) {
         HASH_DEL(*l_hash_processed, l_current_hash);
-        DAP_FREE(l_current_hash);
+        DAP_DELETE(l_current_hash);
     }
 }
 
diff --git a/modules/net/dap_chain_node_client.c b/modules/net/dap_chain_node_client.c
index 3b2a56925986f93f236bed3509048e5a87449394..c80bc435c37a8fd5c67fe07f00a0aec60cce6466 100644
--- a/modules/net/dap_chain_node_client.c
+++ b/modules/net/dap_chain_node_client.c
@@ -94,9 +94,9 @@ uint32_t s_timer_update_states = 600;
 
 /**
  * @brief dap_chain_node_client_init
- * @return
+ * @return always 0
  */
-int dap_chain_node_client_init(void)
+int dap_chain_node_client_init()
 {
     s_stream_ch_chain_debug_more = dap_config_get_item_bool_default(g_config, "stream_ch_chain", "debug_more", false);
     s_timer_update_states = dap_config_get_item_uint32_default(g_config, "node_client", "timer_update_states", s_timer_update_states);
diff --git a/modules/net/include/dap_chain_node_client.h b/modules/net/include/dap_chain_node_client.h
index ad428d19e236154abf6f9b0d9f5be74dde7827e8..08e298d3f5493cb630024282cac5cf71bc1b53ad 100644
--- a/modules/net/include/dap_chain_node_client.h
+++ b/modules/net/include/dap_chain_node_client.h
@@ -139,7 +139,7 @@ typedef struct dap_chain_node_client {
 
 #define DAP_CHAIN_NODE_CLIENT(a) (a ? (dap_chain_node_client_t *) (a)->_inheritor : NULL)
 
-int dap_chain_node_client_init(void);
+int dap_chain_node_client_init();
 
 void dap_chain_node_client_deinit(void);
 
diff --git a/modules/net/iputils/ping.c b/modules/net/iputils/ping.c
index e634a606e8bde2c67697719a6d1295cbc4960a1d..f56b7c0da1458b7b177b9109f7d615407f46634d 100644
--- a/modules/net/iputils/ping.c
+++ b/modules/net/iputils/ping.c
@@ -369,7 +369,7 @@ static int ping_main(ping_handle_t *a_ping_handle, int argc, char **argv)
 
                 a_ping_handle->ping_common.options |= F_STRICTSOURCE;
 
-                free(addr);
+                DAP_DELETE(addr);
             } else if(inet_pton(AF_INET, optarg, &a_ping_handle->source.sin_addr) > 0) {
                 a_ping_handle->ping_common.options |= F_STRICTSOURCE;
             } else {
diff --git a/modules/net/iputils/ping6_common.c b/modules/net/iputils/ping6_common.c
index 3bb143fadd3c39f6bc58b146e380892f50e365aa..bc9355a51c2cbbacba55c60e824ed2640ee5857f 100644
--- a/modules/net/iputils/ping6_common.c
+++ b/modules/net/iputils/ping6_common.c
@@ -375,7 +375,7 @@ static int niquery_option_subject_addr_handler(int index, const char *arg)
         if(!p)
             continue;
         memcpy(p, (uint8_t *) ai->ai_addr + offset, ni_subject_len);
-        free(ni_subject);
+        DAP_DELETE(ni_subject);
         ni_subject = p;
         break;
     }
@@ -483,23 +483,23 @@ static int niquery_option_subject_name_handler(int index, const char *name)
     if (fqdn < 0)
     buf[n] = 0;
 
-    free(ni_subject);
+    DAP_DELETE(ni_subject);
 
     ni_group = nigroup_buf;
     ni_subject = buf;
     ni_subject_len = n + (fqdn < 0);
     ni_group = nigroup_buf;
 
-    free(canonname);
-    free(idn);
+    DAP_DELETE(canonname);
+    DAP_DELETE(idn);
 
     return 0;
     oomexit:
     error(0, errno, "memory allocation failed");
     errexit:
-    free(buf);
-    free(canonname);
-    free(idn);
+    DAP_DELETE(buf);
+    DAP_DELETE(canonname);
+    DAP_DELETE(idn);
     exit(1);
 }
 #else
diff --git a/modules/net/iputils/tracepath.c b/modules/net/iputils/tracepath.c
index 2dce76420ca7396496ba18068819f85011b0a0a7..dd106d7d9fd9d7398524644ccc29ec274fae4895 100755
--- a/modules/net/iputils/tracepath.c
+++ b/modules/net/iputils/tracepath.c
@@ -748,8 +748,8 @@ int tracepath_util(const char *addr, int *hops, int *time_usec)
     };
     int ret = tracepath_main(argc, (char**) argv, &ctl);
     for(int i = 0; i < MAX_HOPS_DEFAULT; i++) {
-        free(ctl.his[i].host_namea);
-        free(ctl.his[i].host_nameb);
+        DAP_DELETE(ctl.his[i].host_namea);
+        DAP_DELETE(ctl.his[i].host_nameb);
     }
     if(ret >= 0)
             {
diff --git a/modules/net/iputils/traceroute/traceroute.c b/modules/net/iputils/traceroute/traceroute.c
index a0dbeb2e233478034ab0b0fb6caec1a7285f74ed..4917c4affa98b87d8b80878254a6a06452a7db41 100755
--- a/modules/net/iputils/traceroute/traceroute.c
+++ b/modules/net/iputils/traceroute/traceroute.c
@@ -302,10 +302,10 @@ static int init_ip_options(void) {
             return -1;
         }
 
-        free(gateways[i]);
+        DAP_DELETE(gateways[i]);
     }
 
-    free(gateways);
+    DAP_DELETE(gateways);
     gateways = NULL;
 
     if(af == AF_INET) {
@@ -1752,7 +1752,7 @@ int traceroute_util(const char *addr, int *hops, int *time_usec)
          one_probe->final, one_probe->recv_ttl, one_probe->recv_time - one_probe->send_time,
          one_probe->err_str);*/
     }
-    free(probes);
+    DAP_DELETE(probes);
 
     return (ret == 1) ? 0 : ret;
 }
diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c
index 5c4843ada1f5e2e450b29fc1875c9bec5eb6ce19..e315d9ae799318d6b5a27fe59dadedfe2dd94296 100644
--- a/modules/net/srv/dap_chain_net_srv.c
+++ b/modules/net/srv/dap_chain_net_srv.c
@@ -61,10 +61,6 @@
 
 #define LOG_TAG "chain_net_srv"
 
-static size_t m_uid_count;
-static dap_chain_net_srv_uid_t * m_uid;
-
-
 typedef struct service_list {
     dap_chain_net_srv_uid_t uid;
     dap_chain_net_srv_t * srv;
@@ -78,7 +74,7 @@ static service_list_t *s_srv_list = NULL;
 static pthread_mutex_t s_srv_list_mutex = PTHREAD_MUTEX_INITIALIZER;
 static int s_cli_net_srv(int argc, char **argv, char **a_str_reply);
 static void s_load(const char * a_path);
-static void s_load_all(void);
+static void s_load_all();
 
 static bool s_pay_verificator_callback(dap_ledger_t * a_ledger, dap_chain_tx_out_cond_t *a_cond,
                                        dap_chain_datum_tx_t *a_tx_in, bool a_owner);
@@ -94,8 +90,6 @@ int dap_chain_net_srv_init()
     dap_chain_ledger_verificator_add(DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY, s_pay_verificator_callback, NULL);
     dap_chain_ledger_verificator_add(DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE, s_fee_verificator_callback, NULL);
     dap_stream_ch_chain_net_srv_init();
-    m_uid = NULL;
-    m_uid_count = 0;
 
     dap_cli_server_cmd_add ("net_srv", s_cli_net_srv, "Network services managment",
         "net_srv -net <net_name> order find [-direction {sell | buy}] [-srv_uid <Service UID>] [-price_unit <price unit>]\n"
@@ -126,19 +120,19 @@ int dap_chain_net_srv_init()
 /**
  * @brief s_load_all
  */
-void s_load_all(void)
+void s_load_all()
 {
     char * l_net_dir_str = dap_strdup_printf("%s/service.d", dap_config_path());
     DIR * l_net_dir = opendir( l_net_dir_str);
-    if ( l_net_dir ){
-        struct dirent * l_dir_entry;
+    if ( l_net_dir ) {
+        struct dirent * l_dir_entry = NULL;
         while ( (l_dir_entry = readdir(l_net_dir) )!= NULL ){
             if (l_dir_entry->d_name[0]=='\0' || l_dir_entry->d_name[0]=='.')
                 continue;
             // don't search in directories
-            char * l_full_path = dap_strdup_printf("%s/%s", l_net_dir_str, l_dir_entry->d_name);
+            char l_full_path[MAX_PATH + 1] = {0};
+            dap_snprintf(l_full_path, sizeof(l_full_path), "%s/%s", l_net_dir_str, l_dir_entry->d_name);
             if(dap_dir_test(l_full_path)) {
-                DAP_DELETE(l_full_path);
                 continue;
             }
             // search only ".cfg" files
@@ -154,7 +148,6 @@ void s_load_all(void)
             if ( l_dot_pos )
                 *l_dot_pos = '\0';
             s_load(l_full_path );
-            DAP_DELETE(l_full_path);
         }
         closedir(l_net_dir);
     }
@@ -907,7 +900,7 @@ dap_chain_net_srv_t* dap_chain_net_srv_add(dap_chain_net_srv_uid_t a_uid,
     dap_chain_net_srv_uid_t l_uid = {.uint64 = a_uid.uint64 }; // Copy to let then compiler to pass args via registers not stack
     pthread_mutex_lock(&s_srv_list_mutex);
     HASH_FIND(hh, s_srv_list, &l_uid, sizeof(l_uid), l_sdata);
-    if(l_sdata == NULL) {
+    if(!l_sdata) {
         l_srv = DAP_NEW_Z(dap_chain_net_srv_t);
         if (!l_srv) {
             log_it(L_ERROR, "Memory allocation error in dap_chain_net_srv_add");
diff --git a/modules/net/srv/dap_chain_net_srv_geoip.c b/modules/net/srv/dap_chain_net_srv_geoip.c
index ad6fa6542588cd5c59a7e64fd0ba39c837535fdf..df7a745b8ce6c6d45e827fec76f74e3cd8f266db 100644
--- a/modules/net/srv/dap_chain_net_srv_geoip.c
+++ b/modules/net/srv/dap_chain_net_srv_geoip.c
@@ -201,7 +201,7 @@ geoip_info_t *chain_net_geoip_get_ip_info_by_local_db(const char *a_ip_str, cons
 	if (mmdb_get_value_str3(&result, "continent", "names", a_locale, l_ret->continent, sizeof(l_ret->continent))) {
 		if (mmdb_get_value_str3(&result, "continent", "names", LOCALE_DEFAULT, l_ret->continent, sizeof(l_ret->continent))) {
 			MMDB_close(&mmdb);
-			DAP_FREE(l_ret);
+			DAP_DELETE(l_ret);
 			return NULL;
 		}
 	}
@@ -209,21 +209,21 @@ geoip_info_t *chain_net_geoip_get_ip_info_by_local_db(const char *a_ip_str, cons
 	if (mmdb_get_value_str3(&result, "country", "names", a_locale, l_ret->country_name, sizeof(l_ret->country_name))) {
 		if (mmdb_get_value_str3(&result, "country", "names", LOCALE_DEFAULT, l_ret->country_name, sizeof(l_ret->country_name))) {
 			MMDB_close(&mmdb);
-			DAP_FREE(l_ret);
+			DAP_DELETE(l_ret);
 			return NULL;
 		}
 	}
 	// all the country names http://download.geonames.org/export/dump/countryInfo.txt
 	if (mmdb_get_value_str2(&result, "country", "iso_code", l_ret->country_code, sizeof(l_ret->country_code))) {
 		MMDB_close(&mmdb);
-		DAP_FREE(l_ret);
+		DAP_DELETE(l_ret);
 		return NULL;
 	}
 	// city
 	/*if (mmdb_get_value_str3(&result, "city", "names", a_locale, l_ret->city_name, sizeof(l_ret->city_name))) {
 		if (mmdb_get_value_str3(&result, "city", "names", LOCALE_DEFAULT, l_ret->city_name, sizeof(l_ret->city_name))) {
 			MMDB_close(&mmdb);
-			DAP_FREE(l_ret);
+			DAP_DELETE(l_ret);
 			return NULL;
 		}
 	}*/
@@ -231,19 +231,19 @@ geoip_info_t *chain_net_geoip_get_ip_info_by_local_db(const char *a_ip_str, cons
 	//location
 	if (mmdb_get_value_double2(&result, "location", "latitude", &l_ret->latitude)) {
 		MMDB_close(&mmdb);
-		DAP_FREE(l_ret);
+		DAP_DELETE(l_ret);
 		return NULL;
 	}
 	if (mmdb_get_value_double2(&result, "location", "longitude", &l_ret->longitude)) {
 		MMDB_close(&mmdb);
-		DAP_FREE(l_ret);
+		DAP_DELETE(l_ret);
 		return NULL;
 	}
 
 	// IP
 	/*if (mmdb_get_value_str2(&result, "traits", "ip_address", l_ret->ip_str, sizeof(l_ret->ip_str))) {
 		MMDB_close(&mmdb);
-		DAP_FREE(l_ret);
+		DAP_DELETE(l_ret);
 		return NULL;
 	}*/
 	int a = sizeof(l_ret->ip_str);
diff --git a/modules/net/srv/dap_chain_net_srv_order.c b/modules/net/srv/dap_chain_net_srv_order.c
index eacda3cf4f9bff2b54853fee217ff30c6bd3f312..2d7479b37a52b21cc68313cbfa31b3afde03cf79 100644
--- a/modules/net/srv/dap_chain_net_srv_order.c
+++ b/modules/net/srv/dap_chain_net_srv_order.c
@@ -109,9 +109,9 @@ static void s_srv_order_check_decree_sign_timer() {
  * @brief dap_chain_net_srv_order_init
  * @return
  */
-int dap_chain_net_srv_order_init(void)
+int dap_chain_net_srv_order_init()
 {
-    uint16_t l_net_count;
+    uint16_t l_net_count = 0;
     dap_chain_net_t **l_net_list = dap_chain_net_list(&l_net_count);
     for (uint16_t i = 0; i < l_net_count; i++) {
         dap_chain_net_add_gdb_notify_callback(l_net_list[i], s_srv_order_callback_notify, l_net_list[i]);
diff --git a/modules/net/srv/include/dap_chain_net_srv_order.h b/modules/net/srv/include/dap_chain_net_srv_order.h
index 8aaed003363eee4eb69d0f6dacf64c46f5cec51c..7924373573c17055ad0df8e5617afe4fbda20a75 100644
--- a/modules/net/srv/include/dap_chain_net_srv_order.h
+++ b/modules/net/srv/include/dap_chain_net_srv_order.h
@@ -71,7 +71,7 @@ typedef struct dap_chain_net_srv_order
 } DAP_ALIGN_PACKED dap_chain_net_srv_order_t;
 
 // Init/deinit should be call only if private
-int dap_chain_net_srv_order_init(void);
+int dap_chain_net_srv_order_init();
 void dap_chain_net_srv_order_deinit(void);
 
 size_t dap_chain_net_srv_order_get_size(dap_chain_net_srv_order_t *a_order);
diff --git a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c
index b09e976a838d742deafaf717216e63736a551fb1..4f1659cfe68c17be758ae9938ac00f680b3b4409 100644
--- a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c
+++ b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c
@@ -51,12 +51,14 @@ static void s_stake_updater_callback(dap_ledger_t *a_ledger, dap_chain_datum_tx_
 
 static void s_cache_data(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap_chain_addr_t *a_signing_addr);
 
+static void s_stake_clear();
+
+static void s_stake_net_clear(dap_chain_net_t *a_net);
+
 static dap_chain_net_srv_stake_t *s_srv_stake = NULL;
 
 /**
  * @brief dap_stream_ch_vpn_init Init actions for VPN stream channel
- * @param vpn_addr Zero if only client mode. Address if the node shares its local VPN
- * @param vpn_mask Zero if only client mode. Mask if the node shares its local VPN
  * @return 0 if everything is okay, lesser then zero if errors
  */
 int dap_chain_net_srv_stake_pos_delegate_init()
@@ -102,29 +104,49 @@ int dap_chain_net_srv_stake_pos_delegate_init()
     return 0;
 }
 
-void s_stake_ht_clear()
+/**
+ * @brief delete ht and hh concretic net from s_srv_stake 
+ */
+void s_stake_net_clear(dap_chain_net_t *a_net)
 {
-    dap_chain_net_srv_stake_item_t *l_stake, *l_tmp;
+    dap_chain_net_srv_stake_item_t *l_stake = NULL, *l_tmp = NULL;
     HASH_ITER(ht, s_srv_stake->tx_itemlist, l_stake, l_tmp) {
         // Clang bug at this, l_stake should change at every loop cycle
-        HASH_DELETE(ht, s_srv_stake->tx_itemlist, l_stake);
+        if (l_stake->net->pub.id.uint64 == a_net->pub.id.uint64)
+            HASH_DELETE(ht, s_srv_stake->tx_itemlist, l_stake);
     }
     HASH_ITER(hh, s_srv_stake->itemlist, l_stake, l_tmp) {
         // Clang bug at this, l_stake should change at every loop cycle
-        HASH_DEL(s_srv_stake->itemlist, l_stake);
-        DAP_DELETE(l_stake);
+        if (l_stake->net->pub.id.uint64 == a_net->pub.id.uint64) {
+            HASH_DEL(s_srv_stake->itemlist, l_stake);
+            DAP_DELETE(l_stake);
+        }
     }
-    dap_chain_net_srv_stake_cache_item_t *l_cache_item, *l_cache_tmp;
+    dap_chain_net_srv_stake_cache_item_t *l_cache_item = NULL, *l_cache_tmp = NULL;
     HASH_ITER(hh, s_srv_stake->cache, l_cache_item, l_cache_tmp) {
         // Clang bug at this, l_stake should change at every loop cycle
-        HASH_DEL(s_srv_stake->cache, l_cache_item);
-        DAP_DELETE(l_cache_item);
+        if (l_cache_item->signing_addr.net_id.uint64 == a_net->pub.id.uint64) {
+            HASH_DEL(s_srv_stake->cache, l_cache_item);
+            DAP_DELETE(l_cache_item);
+        }
+    }
+}
+
+/**
+ * @brief delete all nets ht and hh from s_srv_stake 
+ */
+void s_stake_clear()
+{
+    uint16_t l_net_count;
+    dap_chain_net_t **l_net_list = dap_chain_net_list(&l_net_count);
+    for (uint16_t i = 0; i < l_net_count; i++) {
+        s_stake_net_clear(l_net_list[i]);
     }
 }
 
 void dap_chain_net_srv_stake_pos_delegate_deinit()
 {
-    s_stake_ht_clear();
+    s_stake_clear();
     DAP_DEL_Z(s_srv_stake);
 }
 
@@ -363,8 +385,7 @@ void dap_chain_net_srv_stake_purge(dap_chain_net_t *a_net)
     char *l_gdb_group = dap_chain_ledger_get_gdb_group(l_ledger, DAP_CHAIN_NET_SRV_STAKE_POS_DELEGATE_GDB_GROUP);
     dap_global_db_del(l_gdb_group, NULL, NULL, NULL);
     DAP_DELETE(l_gdb_group);
-
-    s_stake_ht_clear();
+    s_stake_net_clear(a_net);
 }
 
 
@@ -1962,7 +1983,8 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, char **a_str_reply)
 }
 
 bool dap_chain_net_srv_stake_get_fee_validators(dap_chain_net_t *a_net,
-                                                uint256_t *a_max_fee, uint256_t *a_average_fee, uint256_t *a_min_fee) {
+                                                uint256_t *a_max_fee, uint256_t *a_average_fee, uint256_t *a_min_fee)
+{
     if (!a_net)
         return false;
     char * l_gdb_group_str = dap_chain_net_srv_order_get_gdb_group(a_net);
@@ -2050,7 +2072,8 @@ static void s_cache_data(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap
         log_it(L_WARNING, "Stake service cache mismatch");
 }
 
-bool dap_chain_net_srv_stake_check_pkey_hash(dap_hash_fast_t *a_pkey_hash) {
+bool dap_chain_net_srv_stake_check_pkey_hash(dap_hash_fast_t *a_pkey_hash)
+{
     dap_chain_net_srv_stake_item_t *l_stake, *l_tmp;
     HASH_ITER(hh, s_srv_stake->itemlist, l_stake, l_tmp) {
         if (dap_hash_fast_compare(&l_stake->signing_addr.data.hash_fast, a_pkey_hash))
diff --git a/modules/service/vpn/dap_chain_net_srv_vpn.c b/modules/service/vpn/dap_chain_net_srv_vpn.c
index a50285aa9e9c427dc4d660605d86ec01cb0e225c..452e3627b697e7142e73807adff0ea57493472c1 100644
--- a/modules/service/vpn/dap_chain_net_srv_vpn.c
+++ b/modules/service/vpn/dap_chain_net_srv_vpn.c
@@ -1350,7 +1350,7 @@ static void send_pong_pkt(dap_stream_ch_t* a_ch)
     dap_stream_ch_pkt_write_unsafe(a_ch, 'd', pkt_out,
             pkt_out->header.op_data.data_size + sizeof(pkt_out->header));
     dap_stream_ch_set_ready_to_write_unsafe(a_ch, true);
-    free(pkt_out);
+    DAP_DELETE(pkt_out);
 }
 
 /**
diff --git a/modules/service/vpn/dap_chain_net_vpn_client_tun.c b/modules/service/vpn/dap_chain_net_vpn_client_tun.c
index 6f77ec4eed63eb8a3b5e39f7db0505461520c873..8551e693254748b623426ab77a77bcc3b1f0b7c8 100644
--- a/modules/service/vpn/dap_chain_net_vpn_client_tun.c
+++ b/modules/service/vpn/dap_chain_net_vpn_client_tun.c
@@ -688,9 +688,9 @@ void ch_sf_tun_client_send(dap_chain_net_srv_ch_vpn_t * ch_sf, void * pkt_data,
         if (!pkt_out) {
             log_it(L_ERROR, "Memory allocation error in ch_sf_tun_client_send");
             if(in_daddr_str)
-                free(in_daddr_str);
+                DAP_DELETE(in_daddr_str);
             if(in_saddr_str)
-                free(in_saddr_str);
+                DAP_DELETE(in_saddr_str);
             return;
         }
         pkt_out->header.op_code = VPN_PACKET_OP_CODE_PROBLEM;
@@ -705,9 +705,9 @@ void ch_sf_tun_client_send(dap_chain_net_srv_ch_vpn_t * ch_sf, void * pkt_data,
     }
 
     if(in_daddr_str)
-        free(in_daddr_str);
+        DAP_DELETE(in_daddr_str);
     if(in_saddr_str)
-        free(in_saddr_str);
+        DAP_DELETE(in_saddr_str);
 }
 
 /**
diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c
index c7173809ebf11fb40fea3d62509f168b0492ed92..8549ec44176c8cfdec54baa7adcacf983cb02650 100644
--- a/modules/service/xchange/dap_chain_net_srv_xchange.c
+++ b/modules/service/xchange/dap_chain_net_srv_xchange.c
@@ -74,8 +74,6 @@ static bool s_debug_more = true;
 
 /**
  * @brief dap_stream_ch_vpn_init Init actions for VPN stream channel
- * @param vpn_addr Zero if only client mode. Address if the node shares its local VPN
- * @param vpn_mask Zero if only client mode. Mask if the node shares its local VPN
  * @return 0 if everything is okay, lesser then zero if errors
  */
 int dap_chain_net_srv_xchange_init()
@@ -127,10 +125,9 @@ int dap_chain_net_srv_xchange_init()
     l_srv_callbacks.receipt_next_success = s_callback_receipt_next_success;
     l_srv_callbacks.decree = s_callback_decree;
 
-
     dap_chain_net_srv_t* l_srv = dap_chain_net_srv_add(l_uid, "srv_xchange", &l_srv_callbacks);
     s_srv_xchange = DAP_NEW_Z(dap_chain_net_srv_xchange_t);
-    if (!s_srv_xchange) {
+    if (!s_srv_xchange || !l_srv) {
         log_it(L_ERROR, "Memory allocation error in dap_chain_net_srv_xchange_init");
         return -1;
     }
diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c
index 36a723f9e35034c6f741b7e2624591f95c417e80..34d5a7b2df6fb45b8ea97c7d88decb48b0fee163 100644
--- a/modules/type/blocks/dap_chain_cs_blocks.c
+++ b/modules/type/blocks/dap_chain_cs_blocks.c
@@ -189,7 +189,7 @@ int dap_chain_cs_blocks_init()
                 "\t\t Take the whole commission\n\n"
 
                                         );
-    if (dap_chain_block_cache_init() != 0){
+    if( dap_chain_block_cache_init() ) {
         log_it(L_WARNING, "Can't init blocks cache");
     }
     log_it(L_NOTICE,"Initialized blocks(m) chain type");
@@ -826,7 +826,7 @@ static dap_list_t * s_block_parse_str_list(const char * a_hash_str,size_t * a_ha
         if(dap_chain_hash_fast_from_hex_str(l_hashes_str, &l_hash_block)!=0) {
             log_it(L_WARNING,"Can't load hash %s",l_hashes_str);
             *a_hash_size = 0;
-             DAP_FREE(l_hashes_str_dup);
+            DAP_DELETE(l_hashes_str_dup);
             return NULL;
         }
         size_t l_block_size = 0;
@@ -835,7 +835,7 @@ static dap_list_t * s_block_parse_str_list(const char * a_hash_str,size_t * a_ha
         {
             log_it(L_WARNING,"There aren't any block by this hash");
             *a_hash_size = 0;
-             DAP_FREE(l_hashes_str_dup);
+            DAP_DELETE(l_hashes_str_dup);
             return NULL;
         }
         dap_chain_block_cache_t *l_block_cache = dap_chain_block_cs_cache_get_by_hash(l_blocks, &l_hash_block);
@@ -849,7 +849,7 @@ static dap_list_t * s_block_parse_str_list(const char * a_hash_str,size_t * a_ha
         l_hashes_str = strtok_r(NULL, ",", &l_hashes_tmp_ptrs);
         l_hashes_pos++;
     }
-    DAP_FREE(l_hashes_str_dup);
+    DAP_DELETE(l_hashes_str_dup);
     return l_block_list;
 }
 
@@ -877,13 +877,24 @@ static void s_callback_cs_blocks_purge(dap_chain_t *a_chain)
 {
     dap_chain_cs_blocks_t *l_blocks = DAP_CHAIN_CS_BLOCKS(a_chain);
     pthread_rwlock_wrlock(&PVT(l_blocks)->rwlock);
-    dap_chain_block_cache_t *l_block, *l_block_tmp;
+    dap_chain_block_cache_t *l_block = NULL, *l_block_tmp = NULL;
     HASH_ITER(hh, PVT(l_blocks)->blocks, l_block, l_block_tmp) {
         HASH_DEL(PVT(l_blocks)->blocks, l_block);
         DAP_DELETE(l_block->block);
         dap_chain_block_cache_delete(l_block);
     }
     pthread_rwlock_unlock(&PVT(l_blocks)->rwlock);
+    
+    dap_chain_block_datum_index_t *l_datum_index = NULL, *l_datum_index_tmp = NULL;
+    pthread_rwlock_wrlock(&PVT(l_blocks)->datums_rwlock);
+    HASH_ITER(hh, PVT(l_blocks)->datum_index, l_datum_index, l_datum_index_tmp) {
+        HASH_DEL(PVT(l_blocks)->datum_index, l_datum_index);
+        DAP_DELETE(l_datum_index);
+        l_datum_index = NULL;
+    }
+    pthread_rwlock_unlock(&PVT(l_blocks)->datums_rwlock);
+    PVT(l_blocks)->blocks_count = 0;
+
     dap_chain_block_chunks_delete(PVT(l_blocks)->chunks);
     PVT(l_blocks)->block_cache_last = NULL;
     PVT(l_blocks)->block_cache_first = NULL;
@@ -1595,7 +1606,8 @@ static size_t s_callback_add_datums(dap_chain_t *a_chain, dap_chain_datum_t **a_
  * @param a_chain Chain object
  * @return size_t
  */
-static size_t s_callback_count_atom(dap_chain_t *a_chain){
+static size_t s_callback_count_atom(dap_chain_t *a_chain)
+{
     dap_chain_cs_blocks_t *l_blocks = DAP_CHAIN_CS_BLOCKS(a_chain);
     dap_chain_cs_blocks_pvt_t *l_blocks_pvt = PVT(l_blocks);
     return l_blocks_pvt->blocks_count;
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index f113ca6fa37658a60fa9ce8103bfb915bf2bf374..a3654e09796ec9912738f904b5cb935adc953cb7 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -144,9 +144,9 @@ static bool s_debug_more = false;
 
 /**
  * @brief dap_chain_cs_dag_init
- * @return
+ * @return always 0
  */
-int dap_chain_cs_dag_init(void)
+int dap_chain_cs_dag_init()
 {
     srand((unsigned int) time(NULL));
     dap_chain_cs_type_add( "dag", dap_chain_cs_dag_new );
diff --git a/modules/type/dag/include/dap_chain_cs_dag.h b/modules/type/dag/include/dap_chain_cs_dag.h
index 84a7dd4ed54f424e3bf3dc649ee367978d9d4832..c0f894574d23710b7b49beaef47ff5891e80fb67 100644
--- a/modules/type/dag/include/dap_chain_cs_dag.h
+++ b/modules/type/dag/include/dap_chain_cs_dag.h
@@ -78,7 +78,7 @@ typedef struct dap_chain_cs_dag
 
 #define DAP_CHAIN_CS_DAG(a) ( (dap_chain_cs_dag_t *) (a)->_inheritor)
 
-int dap_chain_cs_dag_init(void);
+int dap_chain_cs_dag_init();
 void dap_chain_cs_dag_deinit(void);
 
 int dap_chain_cs_dag_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg);
diff --git a/modules/wallet/dap_chain_wallet.c b/modules/wallet/dap_chain_wallet.c
index e00ffd40e8ce14b1e080bffd709e5e171ea5025d..0fbe7ec969797b45878e08b7dd3901985b1a359b 100644
--- a/modules/wallet/dap_chain_wallet.c
+++ b/modules/wallet/dap_chain_wallet.c
@@ -292,22 +292,21 @@ dap_chain_wallet_n_pass_t   *l_prec;
 }
 
 /**
- * @brief dap_chain_wallet_init
- * @return
+ * @brief check wallet folders and try open wallets
+ * @return 0 if all ok
  */
-int dap_chain_wallet_init(void)
+int dap_chain_wallet_init()
 {
-char *c_wallets_path, l_fspec[MAX_PATH] = {0};
-DIR * l_dir;
-struct dirent * l_dir_entry;
-dap_chain_wallet_t *l_wallet;
-size_t l_len;
+    char *c_wallets_path = NULL, l_fspec[MAX_PATH] = {0};
+    DIR * l_dir = NULL;
+    struct dirent * l_dir_entry = NULL;
+    dap_chain_wallet_t *l_wallet = NULL;
+    size_t l_len = 0;
 
     if ( !(c_wallets_path = (char *) dap_chain_wallet_get_path(g_config)) ) /* No path to wallets - nothing to do */
-        return 0;
+        return -1;
 
-    if ( !(l_dir = opendir(c_wallets_path)) )                               /* Path is not exist ? Create the dir and exit */
-    {
+    if ( !(l_dir = opendir(c_wallets_path)) ) {                               /* Path is not exist ? Create the dir and exit */
 #ifdef _WIN32
         mkdir(c_wallets_path);
 #else
@@ -319,18 +318,15 @@ size_t l_len;
     /*
      * Load certificates from existing no-password-protected (!!!) wallets
      */
-    while( (l_dir_entry = readdir(l_dir)))
-    {
+    while( (l_dir_entry = readdir(l_dir))) {
 #ifndef DAP_OS_WINDOWS
         if ( l_dir_entry->d_type !=  DT_REG )                           /* Skip unrelated entries */
             continue;
 #endif
         l_len = strlen(l_dir_entry->d_name);                            /* Check for *.dwallet */
 
-        if ( (l_len > 8) && (strcmp(l_dir_entry->d_name + l_len - (sizeof(s_wallet_ext) - 1), s_wallet_ext) == 0) )
-        {
-            int ret = snprintf(l_fspec, sizeof(l_fspec) - 1, "%s/%s", c_wallets_path, l_dir_entry->d_name);
-            if (ret < 0)
+        if ( l_len > 8 && !strcmp(l_dir_entry->d_name + l_len - (sizeof(s_wallet_ext) - 1), s_wallet_ext) ) {
+            if (snprintf(l_fspec, sizeof(l_fspec) - 1, "%s/%s", c_wallets_path, l_dir_entry->d_name) < 0)
                 continue;
             if ( (l_wallet = dap_chain_wallet_open_file(l_fspec, NULL)) )
                 dap_chain_wallet_close(l_wallet);
@@ -358,7 +354,7 @@ static char s_wallets_path[MAX_PATH];
 
 const char* dap_chain_wallet_get_path(dap_config_t * a_config)
 {
-char *l_cp;
+    char *l_cp = NULL;
     if (!a_config)
         a_config = g_config;
     if ( s_wallets_path[0] )                                                /* Is the path to the wallet's store has been defined ? */
@@ -366,7 +362,7 @@ char *l_cp;
 
                                                                             /* Retrieve Wallet's store path from config */
     if ( !(l_cp = (char *) dap_config_get_item_str(a_config, "resources", "wallets_path")) )
-        return  log_it(L_WARNING, "No path to wallet's store has been defined"), s_wallets_path;
+        return  log_it(L_WARNING, "No path to wallet's store has been defined"), l_cp;
 
 
     return  strncpy(s_wallets_path, l_cp, sizeof(s_wallets_path) - 1 );     /* Make local copy , return it to caller */
diff --git a/modules/wallet/include/dap_chain_wallet.h b/modules/wallet/include/dap_chain_wallet.h
index 8c7448389afae88207910ec8b74e58c868ee9da0..ba0218db51e9dfe8ff6bfd8bcc0b72af9f168730 100644
--- a/modules/wallet/include/dap_chain_wallet.h
+++ b/modules/wallet/include/dap_chain_wallet.h
@@ -46,7 +46,7 @@ typedef struct dap_chain_wallet{
 } dap_chain_wallet_t;
 
 
-int dap_chain_wallet_init(void);
+int dap_chain_wallet_init();
 void dap_chain_wallet_deinit(void);
 
 const char* dap_chain_wallet_get_path(dap_config_t * a_config);