diff --git a/modules/chain/dap_chain.c b/modules/chain/dap_chain.c
index 326f4538c95d9a33a2678a6da741154dc165b66b..e6531e2230b5c7f72bc86dd7a67cc9dfcba98441 100644
--- a/modules/chain/dap_chain.c
+++ b/modules/chain/dap_chain.c
@@ -737,12 +737,7 @@ int dap_cert_chain_file_save(dap_chain_datum_t *datum, char *net_name)
     }
     const char *cert_name = cert->name;
     size_t cert_path_length = dap_strlen(net_name) + dap_strlen(cert_name) + 9 + dap_strlen(s_system_chain_ca_dir);
-    char *cert_path = DAP_NEW_STACK_SIZE(char, cert_path_length);
-    if ( !cert_path ) {
-        dap_cert_delete(cert);
-        log_it(L_ERROR, "Memory allocation error in dap_cert_chain_file_save, errno=%d", errno);
-        return -1;
-    }
+    char cert_path[cert_path_length];
     snprintf(cert_path, cert_path_length, "%s/%s/%s.dcert", s_system_chain_ca_dir, net_name, cert_name);
     // In cert_path resolve all `..` and `.`s
     char *cert_path_c = dap_canonicalize_filename(cert_path, NULL);
@@ -751,12 +746,10 @@ int dap_cert_chain_file_save(dap_chain_datum_t *datum, char *net_name)
         log_it(L_ERROR, "Cert path '%s' is not in ca dir: %s", cert_path_c, s_system_chain_ca_dir);
         dap_cert_delete(cert);
         DAP_DELETE(cert_path_c);
-        DAP_DELETE(cert_path);
         return -1;
     }
     int l_ret = dap_cert_file_save(cert, cert_path_c);
     dap_cert_delete(cert);
-    DAP_DELETE(cert_path);
     DAP_DELETE(cert_path_c);
 //  if ( access( l_cert_path, F_OK ) != -1 ) {
 //      log_it (L_ERROR, "File %s is already exists.", l_cert_path);
diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c
index 8078dc806de2f5bf79ca322f5c9270704df0c677..094f72f7a0f86095dbc296acf53c8a4cd48bcebd 100644
--- a/modules/chain/dap_chain_ledger.c
+++ b/modules/chain/dap_chain_ledger.c
@@ -4430,9 +4430,9 @@ static inline int s_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, d
     size_t l_cache_size = sizeof(dap_store_obj_t) * (l_outs_used + 1);
     dap_store_obj_t *l_cache_used_outs = DAP_NEW_Z_SIZE(dap_store_obj_t, l_cache_size);
     if ( !l_cache_used_outs ) {
-        if (l_item_tmp->tx)
-            DAP_DELETE(l_item_tmp->tx);
         if (l_item_tmp)
+            if (l_item_tmp->tx)
+                DAP_DELETE(l_item_tmp->tx);
             DAP_DELETE(l_item_tmp);
         log_it(L_ERROR, "Memory allocation error in s_tx_add");
         return -1;
diff --git a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
index 26b015536b47e46ac54332fb3040c822508d06d8..6ff08a3d9af94f9a5ba261c170fb7d7c409a6d92 100644
--- a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
+++ b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
@@ -494,17 +494,18 @@ static void s_grace_period_start(dap_chain_net_srv_grace_t *a_grace)
 static bool s_grace_period_finish(usages_in_grace_t *a_grace_item)
 {
     assert(a_grace_item);
-    dap_stream_ch_chain_net_srv_pkt_error_t l_err;
-    memset(&l_err, 0, sizeof(l_err));
+    dap_stream_ch_chain_net_srv_pkt_error_t l_err = { };
     dap_chain_net_srv_grace_t *l_grace = a_grace_item->grace;
 
     dap_stream_ch_t *l_ch = dap_stream_ch_find_by_uuid_unsafe(l_grace->stream_worker, l_grace->ch_uuid);
 
+#define RET_WITH_DEL_A_GRACE do \
+    { HASH_DEL(s_grace_table, a_grace_item); DAP_DELETE(a_grace_item); return false; } \
+    while(0);
+
     if (!l_ch){
         s_grace_error(l_grace, l_err);
-        HASH_DEL(s_grace_table, a_grace_item);
-        DAP_DEL_Z(a_grace_item);
-        return false;
+        RET_WITH_DEL_A_GRACE;
     }
 
     if (l_grace->usage->price && !l_grace->usage->receipt_next){ // if first grace delete price and set actual
@@ -515,9 +516,7 @@ static bool s_grace_period_finish(usages_in_grace_t *a_grace_item)
         log_it(L_INFO, "No new tx cond!");
         s_grace_error(l_grace, l_err);
         l_grace->usage->is_waiting_new_tx_cond = false;
-        HASH_DEL(s_grace_table, a_grace_item);
-        DAP_DEL_Z(a_grace_item);
-        return false;
+        RET_WITH_DEL_A_GRACE;
     }
 
     dap_chain_net_t * l_net = l_grace->usage->net;
@@ -533,9 +532,7 @@ static bool s_grace_period_finish(usages_in_grace_t *a_grace_item)
         log_it( L_WARNING, "No Ledger");
         l_err.code = DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_NETWORK_NO_LEDGER ;
         s_grace_error(l_grace, l_err);
-        HASH_DEL(s_grace_table, a_grace_item);
-        DAP_DEL_Z(a_grace_item);
-        return false;
+        RET_WITH_DEL_A_GRACE;
     }
     log_it(L_INFO, "Grace period is over! Check tx in ledger.");
     l_tx = dap_chain_ledger_tx_find_by_hash(l_ledger, &l_grace->usage->tx_cond_hash);
@@ -543,9 +540,7 @@ static bool s_grace_period_finish(usages_in_grace_t *a_grace_item)
         log_it( L_WARNING, "No tx cond transaction");
         l_err.code = DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_TX_COND_NOT_FOUND ;
         s_grace_error(l_grace, l_err);
-        HASH_DEL(s_grace_table, a_grace_item);
-        DAP_DEL_Z(a_grace_item);
-        return false;
+        RET_WITH_DEL_A_GRACE;
     } else { // Start srvice in normal pay mode
         log_it(L_INFO, "Tx is found in ledger.");
         l_grace->usage->tx_cond = l_tx;
@@ -556,9 +551,7 @@ static bool s_grace_period_finish(usages_in_grace_t *a_grace_item)
             log_it( L_WARNING, "No conditioned output");
             l_err.code = DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_TX_COND_NO_COND_OUT ;
             s_grace_error(l_grace, l_err);
-            HASH_DEL(s_grace_table, a_grace_item);
-            DAP_DEL_Z(a_grace_item);
-            return false;
+            RET_WITH_DEL_A_GRACE;
         }
 
         // Check cond output if it equesl or not to request
@@ -567,9 +560,7 @@ static bool s_grace_period_finish(usages_in_grace_t *a_grace_item)
                    l_tx_out_cond->header.srv_uid.uint64 );
             l_err.code = DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_TX_COND_WRONG_SRV_UID  ;
             s_grace_error(l_grace, l_err);
-            HASH_DEL(s_grace_table, a_grace_item);
-            DAP_DEL_Z(a_grace_item);
-            return false;
+            RET_WITH_DEL_A_GRACE;
         }
 
         dap_chain_net_srv_price_t * l_price = NULL;
@@ -602,9 +593,7 @@ static bool s_grace_period_finish(usages_in_grace_t *a_grace_item)
                    l_ticker, l_net->pub.name );
             l_err.code =DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_TX_COND_NOT_ACCEPT_TOKEN;
             s_grace_error(l_grace, l_err);
-            HASH_DEL(s_grace_table, a_grace_item);
-            DAP_DEL_Z(a_grace_item);
-            return false;
+            RET_WITH_DEL_A_GRACE;
         }
 
         l_grace->usage->price = l_price;
@@ -614,9 +603,7 @@ static bool s_grace_period_finish(usages_in_grace_t *a_grace_item)
             log_it( L_WARNING, "Request canceled by service callback, return code %d", ret);
             l_err.code = (uint32_t) ret ;
             s_grace_error(l_grace, l_err);
-            HASH_DEL(s_grace_table, a_grace_item);
-            DAP_DEL_Z(a_grace_item);
-            return false;
+            RET_WITH_DEL_A_GRACE;
         }
 
         // make receipt or tx
@@ -629,6 +616,11 @@ static bool s_grace_period_finish(usages_in_grace_t *a_grace_item)
         } else {
             // Send error???
         }
+        if (!l_receipt) {
+            log_it(L_ERROR, "Receipt is not present, finish grace");
+            s_grace_error(l_grace, l_err);
+            RET_WITH_DEL_A_GRACE;
+        }
         size_t l_receipt_size = l_receipt->size;
 
         // get a second signature - from the client (first sign in server, second sign in client)
@@ -636,9 +628,7 @@ static bool s_grace_period_finish(usages_in_grace_t *a_grace_item)
         if ( ! l_receipt_sign ){
             log_it(L_WARNING, "Tx already in chain, but receipt is not signed by client. Finish grace and wait receipt sign responce.");
             s_grace_error(l_grace, l_err);
-            HASH_DEL(s_grace_table, a_grace_item);
-            DAP_DEL_Z(a_grace_item);
-            return false;
+            RET_WITH_DEL_A_GRACE;
         }
         dap_get_data_hash_str_static(l_receipt, l_receipt_size, l_receipt_hash_str);
         dap_global_db_set("local.receipts", l_receipt_hash_str, l_receipt, l_receipt_size, false, NULL, NULL);
@@ -667,9 +657,7 @@ static bool s_grace_period_finish(usages_in_grace_t *a_grace_item)
                     log_it(L_ERROR, "Memory allocation error in s_grace_period_finish");
                     DAP_DELETE(a_grace_item->grace->request);
                     DAP_DEL_Z(a_grace_item->grace);
-                    HASH_DEL(s_grace_table, a_grace_item);
-                    DAP_DEL_Z(a_grace_item);
-                    return false;
+                    RET_WITH_DEL_A_GRACE;
                 }
                 // Parse the request
                 l_grace_new->request = DAP_NEW_Z_SIZE(dap_stream_ch_chain_net_srv_pkt_request_t, sizeof(dap_stream_ch_chain_net_srv_pkt_request_t));
@@ -677,9 +665,7 @@ static bool s_grace_period_finish(usages_in_grace_t *a_grace_item)
                     log_it(L_ERROR, "Memory allocation error in s_grace_period_finish");
                     DAP_DELETE(a_grace_item->grace->request);
                     DAP_DEL_Z(a_grace_item->grace);
-                    HASH_DEL(s_grace_table, a_grace_item);
-                    DAP_DEL_Z(a_grace_item);
-                    return false;
+                    RET_WITH_DEL_A_GRACE;
                 }
                 l_grace_new->request->hdr.net_id = a_grace_item->grace->usage->net->pub.id;
                 memcpy(l_grace_new->request->hdr.token, a_grace_item->grace->usage->token_ticker, strlen(a_grace_item->grace->usage->token_ticker));
@@ -713,9 +699,8 @@ static bool s_grace_period_finish(usages_in_grace_t *a_grace_item)
     l_grace->usage->is_grace = false;
     DAP_DELETE(a_grace_item->grace->request);
     DAP_DEL_Z(a_grace_item->grace);
-    HASH_DEL(s_grace_table, a_grace_item);
-    DAP_DEL_Z(a_grace_item);
-    return false;
+    RET_WITH_DEL_A_GRACE;
+#undef RET_WITH_DEL_A_GRACE
 }
 
 /**
diff --git a/modules/common/dap_chain_datum_tx.c b/modules/common/dap_chain_datum_tx.c
index 9480c69043adc17d7ff3e81a872496fcbfb991d5..08a897c201ed9a2220fe5a77d492174ed023f663 100644
--- a/modules/common/dap_chain_datum_tx.c
+++ b/modules/common/dap_chain_datum_tx.c
@@ -76,10 +76,13 @@ size_t dap_chain_datum_tx_get_size(dap_chain_datum_tx_t *a_tx)
 int dap_chain_datum_tx_add_item(dap_chain_datum_tx_t **a_tx, const void *a_item)
 {
     size_t size = dap_chain_datum_item_tx_get_size(a_item);
-    if(!size)
+    if(!size || !a_tx || !*a_tx)
         return -1;
     dap_chain_datum_tx_t *tx_cur = *a_tx;
-    tx_cur = (dap_chain_datum_tx_t *)DAP_REALLOC(tx_cur, dap_chain_datum_tx_get_size(tx_cur) + size);
+    size_t l_new_size = dap_chain_datum_tx_get_size(tx_cur) + size;
+    tx_cur = (dap_chain_datum_tx_t*)DAP_REALLOC(tx_cur, l_new_size);
+    if (!tx_cur)
+        return -1;
     memcpy((uint8_t*) tx_cur->tx_items + tx_cur->header.tx_items_size, a_item, size);
     tx_cur->header.tx_items_size += size;
     *a_tx = tx_cur;
diff --git a/modules/common/dap_chain_datum_tx_receipt.c b/modules/common/dap_chain_datum_tx_receipt.c
index dd24b2f665f7238ee11b22f09387bb76b3868396..43e607dcec37cf65ca412dc32894f3b0214a074c 100644
--- a/modules/common/dap_chain_datum_tx_receipt.c
+++ b/modules/common/dap_chain_datum_tx_receipt.c
@@ -76,6 +76,11 @@ dap_chain_datum_tx_receipt_t *dap_chain_datum_tx_receipt_sign_add(dap_chain_datu
     }
     dap_chain_datum_tx_receipt_t *l_receipt = (dap_chain_datum_tx_receipt_t *)
                                                 DAP_REALLOC(a_receipt, a_receipt->size + l_sign_size);
+    if (!l_receipt)
+    {
+        DAP_DELETE(l_sign);
+        return NULL;
+    }
     memcpy((byte_t *)l_receipt + l_receipt->size, l_sign, l_sign_size);
     l_receipt->size += l_sign_size;
     DAP_DELETE(l_sign);
diff --git a/modules/consensus/block-pos/dap_chain_cs_block_pos.c b/modules/consensus/block-pos/dap_chain_cs_block_pos.c
index da4c1390e4043dea0642f080d3ce6ecd4253d525..8207767d47d23ecdf3d1e3d4755c8f6d33b63c24 100644
--- a/modules/consensus/block-pos/dap_chain_cs_block_pos.c
+++ b/modules/consensus/block-pos/dap_chain_cs_block_pos.c
@@ -139,14 +139,12 @@ lb_err:
         if (l_tokens_hold[i])
             DAP_DELETE(l_tokens_hold[i]);
     }
-    if (l_tokens_hold)
-        DAP_DELETE(l_tokens_hold);
-    if (l_pos_pvt->tokens_hold_value)
-        DAP_DELETE(l_pos_pvt->tokens_hold_value);
-    if (l_pos_pvt)
+    DAP_DEL_Z(l_tokens_hold);
+    if (l_pos_pvt) {
+        DAP_DEL_Z(l_pos_pvt->tokens_hold_value);
         DAP_DELETE(l_pos_pvt);
-    if (l_pos)
-        DAP_DELETE(l_pos);
+    }
+    DAP_DEL_Z(l_pos);
     l_blocks->_inheritor = NULL;
     l_blocks->callback_delete = NULL;
     l_blocks->callback_block_verify = NULL;
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 fc07881cdd7b3b05c836b5405fc795232edc8f80..5120db7e4e47d48c7788537573b45c14662fa11b 100644
--- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
+++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
@@ -603,7 +603,7 @@ static void s_callback_round_event_to_chain_callback_get_round_item(dap_global_d
         char *l_event_hash_hex_str;
         dap_get_data_hash_str_static(l_new_atom, l_event_size, l_event_hash_hex_str);
         dap_chain_datum_t *l_datum = dap_chain_cs_dag_event_get_datum(l_new_atom, l_event_size);
-        l_dag->round_completed = l_new_atom->header.round_id ? l_new_atom->header.round_id : l_dag->round_completed + 1;
+        l_dag->round_completed = MAX(l_new_atom->header.round_id, l_dag->round_current);
         int l_verify_datum = dap_chain_net_verify_datum_for_add(l_dag->chain, l_datum, &l_chosen_item->round_info.datum_hash);
         if (!l_verify_datum) {
             dap_chain_atom_verify_res_t l_res = l_dag->chain->callback_atom_add(l_dag->chain, l_new_atom, l_event_size);
@@ -622,7 +622,7 @@ static void s_callback_round_event_to_chain_callback_get_round_item(dap_global_d
                    l_event_hash_hex_str, l_round_id, l_datum_hash_str, dap_chain_net_verify_datum_err_code_to_str(l_datum, l_verify_datum));
         }
     } else { /* !l_chosen_item */
-        l_dag->round_completed++;
+        l_dag->round_completed = l_dag->round_current;
         log_it(L_WARNING, "No candidates for round id %"DAP_UINT64_FORMAT_U, l_round_id);
 
     }
@@ -696,11 +696,8 @@ static int s_callback_created(dap_chain_t * a_chain, dap_config_t *a_chain_net_c
     dap_chain_node_role_t l_role = dap_chain_net_get_role(l_cur_net);
     if (l_role.enums == NODE_ROLE_ROOT_MASTER || l_role.enums == NODE_ROLE_ROOT) {
         l_dag->callback_cs_event_round_sync = s_callback_event_round_sync;
+        l_dag->round_completed = l_dag->round_current++;
         log_it(L_MSG, "Round complete ID %"DAP_UINT64_FORMAT_U", current ID %"DAP_UINT64_FORMAT_U, l_dag->round_completed, l_dag->round_current);
-        if (l_dag->round_completed > l_dag->round_current) {
-            l_dag->round_completed = l_dag->round_current;
-            l_dag->round_current = l_dag->round_completed + 1;
-        }
     }
     return 0;
 }
@@ -794,6 +791,10 @@ static int s_callback_event_round_sync(dap_chain_cs_dag_t * a_dag, const char a_
     dap_chain_cs_dag_event_round_item_t *l_round_item = (dap_chain_cs_dag_event_round_item_t *)a_value;
     size_t l_event_size = l_round_item->event_size;
     dap_chain_cs_dag_event_t *l_event = (dap_chain_cs_dag_event_t*)DAP_DUP_SIZE(l_round_item->event_n_signs, l_event_size);
+    if (!l_event) {
+        log_it(L_CRITICAL, "Memory allocation failed");
+        return -1;
+    }
     if (l_event->header.round_id < a_dag->round_completed) {
         struct round_timer_arg *l_round_active;
         uint64_t l_round_id = l_event->header.round_id;
@@ -820,6 +821,10 @@ static int s_callback_event_round_sync(dap_chain_cs_dag_t * a_dag, const char a_
 
     size_t l_event_size_new = 0;
     int ret = 0;
+    if (l_event->header.round_id > a_dag->round_current) {
+        log_it(L_DEBUG, "Refresh current round ID [%lu -> %lu]", a_dag->round_current, l_event->header.round_id);
+        a_dag->round_current = l_event->header.round_id;
+    }
     if (!l_poa_pvt->callback_pre_sign || !l_poa_pvt->callback_pre_sign->callback ||
              !(ret = l_poa_pvt->callback_pre_sign->callback(a_dag->chain, l_event, l_event_size,
                                                       l_poa_pvt->callback_pre_sign->arg))) {
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 1cf47808c28ba78247a095e882208edc4938b819..043b3eb25e4d4e67c4e73f4b0ce5d7672ca7c276 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -766,7 +766,8 @@ static bool s_net_link_callback_connect_delayed(void *a_arg)
 {
     struct net_link *l_link = a_arg;
     dap_chain_node_client_t *l_client = l_link->link;
-    debug_if(s_debug_more, L_DEBUG, "Link "NODE_ADDR_FP_STR" started", NODE_ADDR_FP_ARGS_S(l_client->info->hdr.address));
+    log_it(L_MSG, "Connecting to link "NODE_ADDR_FP_STR" [%s]",
+           NODE_ADDR_FP_ARGS_S(l_client->info->hdr.address), inet_ntoa(l_client->info->hdr.ext_addr_v4));
     dap_chain_node_client_connect(l_client, "CN");
     l_link->delay_timer = NULL;
     return false;
@@ -786,7 +787,7 @@ static bool s_net_link_start(dap_chain_net_t *a_net, struct net_link *a_link, ui
         a_link->delay_timer = dap_timerfd_start(a_delay * 1000, s_net_link_callback_connect_delayed, a_link);
         return true;
     }
-    debug_if(s_debug_more, L_DEBUG, "Link "NODE_ADDR_FP_STR" started", NODE_ADDR_FP_ARGS_S(l_link_info->hdr.address));
+    log_it(L_MSG, "Connecting to link "NODE_ADDR_FP_STR" [%s]", NODE_ADDR_FP_ARGS_S(l_link_info->hdr.address), inet_ntoa(l_link_info->hdr.ext_addr_v4));
     return dap_chain_node_client_connect(l_client, "CN");
 }
 
@@ -1137,9 +1138,18 @@ static bool s_new_balancer_link_request(dap_chain_net_t *a_net, int a_link_repla
         dap_chain_node_info_t *l_link_full_node = dap_chain_net_balancer_get_node(a_net->pub.name);
         if(l_link_full_node)
         {
-            log_it(L_DEBUG, "Network LOCAL balancer issues ip %s",inet_ntoa(l_link_full_node->hdr.ext_addr_v4));
             pthread_rwlock_rdlock(&PVT(a_net)->states_lock);
-            s_net_link_add(a_net, l_link_full_node);
+            int l_net_link_add = s_net_link_add(a_net, l_link_full_node);
+            switch (l_net_link_add) {
+            case 0:
+                log_it(L_MSG, "Network LOCAL balancer issues link IP %s", inet_ntoa(l_link_full_node->hdr.ext_addr_v4));
+                break;
+            case -1:
+                log_it(L_MSG, "Network LOCAL balancer: IP %s is already among links", inet_ntoa(l_link_full_node->hdr.ext_addr_v4));
+                break;
+            default:
+                break;
+            }
             DAP_DELETE(l_link_full_node);
             struct net_link *l_free_link = s_get_free_link(a_net);
             if (l_free_link)
@@ -1157,6 +1167,7 @@ static bool s_new_balancer_link_request(dap_chain_net_t *a_net, int a_link_repla
     struct balancer_link_request *l_balancer_request = DAP_NEW_Z(struct balancer_link_request);
     if (!l_balancer_request) {
         log_it(L_ERROR, "Memory allocation error in s_new_balancer_link_request");
+        DAP_DELETE(l_link_node_info);
         return false;
     }
     l_balancer_request->net = a_net;
@@ -1232,7 +1243,7 @@ struct json_object *s_net_states_json_collect(dap_chain_net_t *a_net)
     json_object_object_add(l_json, "name"             , json_object_new_string((const char*)a_net->pub.name));
     json_object_object_add(l_json, "networkState"     , json_object_new_string(dap_chain_net_state_to_str(PVT(a_net)->state)));
     json_object_object_add(l_json, "targetState"      , json_object_new_string(dap_chain_net_state_to_str(PVT(a_net)->state_target)));
-    json_object_object_add(l_json, "linksCount"       , json_object_new_int(HASH_COUNT(PVT(a_net)->net_links)));
+    json_object_object_add(l_json, "linksCount"       , json_object_new_int(PVT(a_net)->net_links ? HASH_COUNT(PVT(a_net)->net_links) : 0));
     json_object_object_add(l_json, "activeLinksCount" , json_object_new_int(s_net_get_active_links_count(a_net)));
     char l_node_addr_str[24] = {'\0'};
     int l_tmp = PVT(a_net)->node_addr
@@ -2612,7 +2623,7 @@ int s_net_init(const char * a_net_name, uint16_t a_acl_idx)
                     l_net_pvt->node_info = DAP_NEW_Z(dap_chain_node_info_t);
                     if (!l_net_pvt->node_info) {
                         log_it(L_ERROR, "Memory allocation error in s_net_init");
-                        DAP_DEL_Z(l_net_pvt);
+                        DAP_DEL_Z(l_node_addr);
                         dap_config_close(l_cfg);
                         return -1;
                     }
@@ -2657,7 +2668,6 @@ int s_net_init(const char * a_net_name, uint16_t a_acl_idx)
     if (!l_chains_dir) {
         log_it(L_ERROR, "Can't find any chains for network %s", l_net->pub.name);
         l_net_pvt->load_mode = false;
-        closedir(l_chains_dir);
         dap_config_close(l_cfg);
         return -2;
     }
diff --git a/modules/net/dap_chain_net_balancer.c b/modules/net/dap_chain_net_balancer.c
index 50aefc9b428a99a76569ef8f66299112c3a3d381..8f7ba35113c317f703509b74e09a86b086cad7c2 100644
--- a/modules/net/dap_chain_net_balancer.c
+++ b/modules/net/dap_chain_net_balancer.c
@@ -42,7 +42,7 @@ dap_chain_node_info_t *dap_chain_net_balancer_get_node(const char *a_net_name)
     }
     // get nodes list from global_db
     dap_global_db_obj_t *l_objs = NULL;
-    size_t l_nodes_count = 0;
+    size_t l_nodes_count = 0, l_nodes_selected_count = 0;
     size_t l_node_num = 0;
     // read all node
     l_objs = dap_global_db_get_all_sync(l_net->pub.gdb_nodes, &l_nodes_count);
@@ -52,7 +52,7 @@ dap_chain_node_info_t *dap_chain_net_balancer_get_node(const char *a_net_name)
     for(size_t i=0;i<l_nodes_count;i++)
     {
         bool l_check = true;
-        for(dap_list_t *node_i = l_node_addr_list;node_i;node_i = node_i->next)
+        for(dap_list_t *node_i = l_node_addr_list; node_i; node_i = node_i->next)
         {
             struct in_addr *l_node_addr_cfg = (struct in_addr*)node_i->data;
             dap_chain_node_info_t *l_node_cand = (dap_chain_node_info_t *)l_objs[i].value;
@@ -72,14 +72,13 @@ dap_chain_node_info_t *dap_chain_net_balancer_get_node(const char *a_net_name)
             l_node_num++;
         }
     }
-    dap_global_db_objs_delete(l_objs, l_nodes_count);
     dap_list_free(l_node_addr_list);
-    l_nodes_count = l_node_num;
+    l_nodes_selected_count = l_node_num;
     dap_chain_node_info_t *l_node_candidate;
-    if(l_nodes_count)
+    if(l_nodes_selected_count)
     {
-        l_node_num = rand() % l_nodes_count;
-        l_node_candidate = (dap_chain_node_info_t *)dap_list_nth_data(l_objs_list,l_node_num);
+        l_node_num = rand() % l_nodes_selected_count;
+        l_node_candidate = (dap_chain_node_info_t*)dap_list_nth_data(l_objs_list, l_node_num);
         dap_chain_node_info_t *l_node_info = DAP_NEW_Z(dap_chain_node_info_t);
         if (!l_node_info) {
             log_it(L_ERROR, "Memory allocation error in dap_chain_net_balancer_get_node");
@@ -88,12 +87,14 @@ dap_chain_node_info_t *dap_chain_net_balancer_get_node(const char *a_net_name)
         }
         memcpy(l_node_info, l_node_candidate, sizeof(dap_chain_node_info_t));
         dap_list_free(l_objs_list);
+        dap_global_db_objs_delete(l_objs, l_nodes_count);
         return l_node_info;
     }
     else
     {
         dap_list_free(l_objs_list);
-        log_it(L_DEBUG, "Node list is empty");
+        dap_global_db_objs_delete(l_objs, l_nodes_count);
+        log_it(L_ERROR, "Node list is empty");
         return NULL;
     }
 }
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 68f97ee6c25e5058559b8880f5634865fabb1287..9c980ef5a0206b882af0974303dd10f8d9ed4785 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -6746,6 +6746,7 @@ static uint8_t *s_concat_hash_and_mimetypes (dap_chain_hash_fast_t *a_chain_hash
     uint8_t *l_fullbuf = DAP_CALLOC(*a_fullsize, 1);
     if (!l_fullbuf) {
         log_it(L_ERROR, "Memory allocation error in s_concat_hash_and_mimetypes");
+        DAP_DELETE(l_buf);
         return NULL;
     }
     uint8_t *l_s = l_fullbuf;
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index bcdef7ed0673d4fdcbd0292675125cc817f52735..1b52fa685516e86c1210144a5ebb4c9fe2afcac2 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -193,6 +193,8 @@ static void s_history_callback_round_notify(dap_global_db_context_t *a_context,
             dap_chain_cs_dag_event_broadcast(l_dag, a_obj, a_context);
         if (dap_strcmp(a_obj->key, DAG_ROUND_CURRENT_KEY)) {  // check key for round increment, if no than process event
             l_dag->callback_cs_event_round_sync(l_dag, a_obj->type, a_obj->group, a_obj->key, a_obj->value, a_obj->value_len);
+        } else {
+            log_it(L_INFO, "Global round ID: %lu", *(uint64_t*)a_obj->value);
         }
     }
 }
@@ -700,10 +702,11 @@ static bool s_chain_callback_datums_pool_proc(dap_chain_t *a_chain, dap_chain_da
      * or we have successfully chosen the hash(es) to link with.
      * No additional conditions required.
     */
-    byte_t *l_current_round = dap_global_db_get_sync(DAG_ROUND_CURRENT_KEY, l_dag->gdb_group_events_round_new, NULL, NULL, NULL);
-    uint64_t l_round_current = MAX(l_current_round ? *(uint64_t*)l_current_round : 0, l_dag->round_completed) + 1;
-    DAP_DELETE(l_current_round);
-    l_dag->round_current = l_round_current; /* it's an atomic_store */
+    byte_t *l_current_round_bytes = dap_global_db_get_sync(l_dag->gdb_group_events_round_new, DAG_ROUND_CURRENT_KEY, NULL, NULL, NULL);
+    uint64_t l_current_round = l_current_round_bytes ? *(uint64_t*)l_current_round_bytes : 0;
+    DAP_DEL_Z(l_current_round_bytes);
+    l_dag->round_completed = l_current_round++;
+    l_dag->round_current = l_current_round;
     uint64_t l_event_size = 0;
     dap_chain_cs_dag_event_t * l_event = l_dag->callback_cs_event_create
             ? l_dag->callback_cs_event_create(l_dag, a_datum, l_hashes, l_hashes_linked, &l_event_size)
@@ -724,8 +727,8 @@ static bool s_chain_callback_datums_pool_proc(dap_chain_t *a_chain, dap_chain_da
         }
     }
 
-    dap_global_db_set(l_dag->gdb_group_events_round_new, DAG_ROUND_CURRENT_KEY,
-                      &l_round_current, sizeof(uint64_t), false, NULL, NULL);
+    dap_global_db_set_sync(l_dag->gdb_group_events_round_new, DAG_ROUND_CURRENT_KEY,
+                      &l_current_round, sizeof(uint64_t), false);
     dap_chain_cs_dag_event_round_item_t l_round_item = { .round_info.datum_hash = l_datum_hash };
     char *l_event_hash_str;
     dap_get_data_hash_str_static(l_event, l_event_size, l_event_hash_str);
@@ -733,7 +736,7 @@ static bool s_chain_callback_datums_pool_proc(dap_chain_t *a_chain, dap_chain_da
     log_it(l_res ? L_INFO : L_ERROR,
            l_res ? "Event %s placed in the new forming round [id %"DAP_UINT64_FORMAT_U"]"
                  : "Can't add new event [%s] to the new events round [id %"DAP_UINT64_FORMAT_U"]",
-           l_event_hash_str, l_round_current);
+           l_event_hash_str, l_current_round);
     return l_res;
 }
 
diff --git a/modules/type/dag/include/dap_chain_cs_dag.h b/modules/type/dag/include/dap_chain_cs_dag.h
index c0f894574d23710b7b49beaef47ff5891e80fb67..34f407772ddfb2500e5585e438ddd71997d7086b 100644
--- a/modules/type/dag/include/dap_chain_cs_dag.h
+++ b/modules/type/dag/include/dap_chain_cs_dag.h
@@ -60,8 +60,7 @@ typedef struct dap_chain_cs_dag
     dap_chain_hash_fast_t static_genesis_event_hash;
     dap_chain_cs_dag_hal_item_t *hal;
 
-    atomic_uint_fast64_t round_current;
-    uint64_t round_completed;
+    atomic_uint_fast64_t round_current, round_completed;
     bool broadcast_disable;
 
     uint16_t datum_add_hashes_count;