diff --git a/modules/chain/dap_chain_cell.c b/modules/chain/dap_chain_cell.c
index 22b9da768090a6afea53981fa20fb1ecadaf2f26..5df2bb4331c452557430d6fa950bcb1300380387 100644
--- a/modules/chain/dap_chain_cell.c
+++ b/modules/chain/dap_chain_cell.c
@@ -233,18 +233,17 @@ int dap_chain_cell_load(dap_chain_t *a_chain, dap_chain_cell_t *a_cell)
             break;
         }
         l_read = fread((void *)l_element, 1, l_el_size, l_cell_file);
-        if (l_read == l_el_size) {
-            dap_chain_atom_verify_res_t l_res = a_chain->callback_atom_add(a_chain, l_element, l_el_size); // !!! blocking GDB call !!!
-            if (l_res == ATOM_PASS || l_res == ATOM_REJECT) {
-                DAP_DELETE(l_element);
-            }
-            ++q;
-        } else {
+        if (l_read != l_el_size) {
             log_it(L_ERROR, "Read only %lu of %zu bytes, stop cell loading", l_read, l_el_size);
             DAP_DELETE(l_element);
             l_ret = -6;
             break;
         }
+        dap_chain_atom_verify_res_t l_res = a_chain->callback_atom_add(a_chain, l_element, l_el_size); // !!! blocking GDB call !!!
+        if (l_res == ATOM_PASS || l_res == ATOM_REJECT) {
+            DAP_DELETE(l_element);
+        }
+        ++q;
     }
     if (l_ret < 0) {
         log_it(L_INFO, "Couldn't load all atoms, %lu only", q);
diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
index 507d328cfa1ae2f8c98e31f134fa4b85b4dbe03d..29e2abf30762dc2d425c9ba1117cc9fd63529c65 100644
--- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c
+++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
@@ -120,18 +120,6 @@ DAP_STATIC_INLINE char *s_get_penalty_group(dap_chain_net_id_t a_net_id)
     return dap_strdup_printf(DAP_CHAIN_ESBOCS_GDB_GROUPS_PREFIX".%s.penalty", l_net->pub.gdb_groups_prefix);
 }
 
-DAP_STATIC_INLINE char *s_get_fee_group(dap_chain_net_id_t a_net_id)
-{
-    dap_chain_net_t *l_net = dap_chain_net_by_id(a_net_id);
-    return dap_strdup_printf("local." DAP_CHAIN_ESBOCS_GDB_GROUPS_PREFIX ".%s.penalty", l_net->pub.gdb_groups_prefix);
-}
-
-DAP_STATIC_INLINE char *s_get_reward_group(dap_chain_net_id_t a_net_id)
-{
-    dap_chain_net_t *l_net = dap_chain_net_by_id(a_net_id);
-    return dap_strdup_printf("local." DAP_CHAIN_ESBOCS_GDB_GROUPS_PREFIX ".%s.penalty", l_net->pub.gdb_groups_prefix);
-}
-
 DAP_STATIC_INLINE size_t s_get_esbocs_message_size(dap_chain_esbocs_message_t *a_message)
 {
     return sizeof(*a_message) + a_message->hdr.sign_size + a_message->hdr.message_size;
@@ -384,7 +372,7 @@ static void s_new_atom_notifier(void *a_arg, dap_chain_t *a_chain, dap_chain_cel
         dap_list_t *l_list_used_out = dap_chain_block_get_list_tx_cond_outs_with_val(
                                         l_net->pub.ledger, l_block_cache, &l_value_fee);
         if (!IS_ZERO_256(l_value_fee)) {
-            char *l_fee_group = s_get_fee_group(a_chain->net_id);
+            char *l_fee_group = dap_chain_cs_blocks_get_fee_group(a_chain->net_name);
             dap_global_db_set(l_fee_group, l_block_cache->block_hash_str, &l_value_fee, sizeof(l_value_fee),
                               false, s_check_db_collect_callback, l_session);
             DAP_DELETE(l_fee_group);
@@ -402,7 +390,7 @@ static void s_new_atom_notifier(void *a_arg, dap_chain_t *a_chain, dap_chain_cel
             uint256_t l_value_reward = a_chain->callback_calc_reward(a_chain, &l_block_cache->block_hash,
                                                                      PVT(l_session->esbocs)->block_sign_pkey);
             if (!IS_ZERO_256(l_value_reward)) {
-                char *l_reward_group = s_get_reward_group(a_chain->net_id);
+                char *l_reward_group = dap_chain_cs_blocks_get_reward_group(a_chain->net_name);
                 dap_global_db_set(l_reward_group, l_block_cache->block_hash_str, &l_value_reward, sizeof(l_value_reward),
                                   false, s_check_db_collect_callback, l_session);
                 DAP_DELETE(l_reward_group);
diff --git a/modules/net/dap_chain_ledger.c b/modules/net/dap_chain_ledger.c
index 81942bfe71ab54b9f9125b19757667ff4dbab8d7..6478ed5be02713f5e5fafe1dce829a2164bacbfc 100644
--- a/modules/net/dap_chain_ledger.c
+++ b/modules/net/dap_chain_ledger.c
@@ -319,7 +319,6 @@ typedef struct dap_ledger_private {
     dap_list_t *bridged_tx_notifiers;
     dap_list_t *tx_add_notifiers;
 
-    bool load_mode;
     dap_ledger_cache_tx_check_callback_t cache_tx_check_callback;
     // TPS section
     dap_timerfd_t *tps_timer;
@@ -436,11 +435,6 @@ void dap_ledger_handle_free(dap_ledger_t *a_ledger)
 
 }
 
-void dap_ledger_load_end(dap_ledger_t *a_ledger)
-{
-    PVT(a_ledger)->load_mode = false;
-}
-
 struct json_object *wallet_info_json_collect(dap_ledger_t *a_ledger, dap_ledger_wallet_balance_t *a_bal) {
     struct json_object *l_json = json_object_new_object();
     json_object_object_add(l_json, "class", json_object_new_string("Wallet"));
@@ -1812,7 +1806,7 @@ int dap_ledger_token_load(dap_ledger_t *a_ledger, byte_t *a_token, size_t a_toke
 {
     dap_chain_datum_token_t *l_token = dap_chain_datum_token_read(a_token, &a_token_size);
 
-    if (PVT(a_ledger)->load_mode) {
+    if (dap_chain_net_get_load_mode(a_ledger->net)) {
         dap_ledger_token_item_t *l_token_item = s_ledger_find_token(a_ledger, l_token->ticker);
         if (l_token_item
                 && l_token->type != DAP_CHAIN_DATUM_TOKEN_TYPE_UPDATE
@@ -2948,7 +2942,7 @@ dap_ledger_stake_lock_item_t *s_emissions_for_stake_lock_item_find(dap_ledger_t
 int dap_ledger_token_emission_load(dap_ledger_t *a_ledger, byte_t *a_token_emission,
                                          size_t a_token_emission_size, dap_hash_fast_t *a_token_emission_hash)
 {
-    if (PVT(a_ledger)->load_mode) {
+    if (dap_chain_net_get_load_mode(a_ledger->net)) {
         dap_ledger_token_emission_item_t *l_token_emission_item;
         dap_ledger_token_item_t *l_token_item, *l_item_tmp;
         pthread_rwlock_rdlock(&PVT(a_ledger)->tokens_rwlock);
@@ -3415,7 +3409,7 @@ int dap_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx
         log_it(L_DEBUG, "NULL transaction, check broken");
         return DAP_LEDGER_TX_CHECK_NULL_TX;
     }
-    if (!PVT(a_ledger)->load_mode && !a_from_threshold) {
+    if (!dap_chain_net_get_load_mode(a_ledger->net) && !a_from_threshold) {
         dap_ledger_tx_item_t *l_ledger_item;
         pthread_rwlock_rdlock(&PVT(a_ledger)->ledger_rwlock);
         HASH_FIND(hh, PVT(a_ledger)->ledger_items, a_tx_hash, sizeof(dap_chain_hash_fast_t), l_ledger_item);
@@ -3753,6 +3747,7 @@ int dap_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx
                 l_tx_prev_hash = &l_tx_in->header.tx_prev_hash;
                 if (dap_hash_fast_is_blank(l_tx_prev_hash)) {
                     DAP_DELETE(l_bound_item);
+                    l_list_bound_items = dap_list_remove_link(l_list_bound_items, dap_list_last(l_list_bound_items));
                     continue; // old base tx compliance
                 }
                 l_tx_prev_out_idx = l_tx_in->header.tx_out_prev_idx;
@@ -4681,7 +4676,7 @@ static bool s_ledger_tps_callback(void *a_arg)
 
 int dap_ledger_tx_load(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap_chain_hash_fast_t *a_tx_hash)
 {
-    if (PVT(a_ledger)->load_mode) {
+    if (dap_chain_net_get_load_mode(a_ledger->net)) {
         if (PVT(a_ledger)->cache_tx_check_callback)
             PVT(a_ledger)->cache_tx_check_callback(a_tx_hash);
         dap_ledger_tx_item_t *l_tx_item;
@@ -4694,10 +4689,9 @@ int dap_ledger_tx_load(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap_c
             return DAP_LEDGER_TX_ALREADY_CACHED;
         }
         HASH_FIND_BYHASHVALUE(hh, PVT(a_ledger)->threshold_txs, a_tx_hash, sizeof(dap_chain_hash_fast_t), l_hash_value, l_tx_item);
-        if (l_tx_item) {
-            pthread_rwlock_unlock(&PVT(a_ledger)->ledger_rwlock);
+        pthread_rwlock_unlock(&PVT(a_ledger)->ledger_rwlock);
+        if (l_tx_item)
             return DAP_CHAIN_CS_VERIFY_CODE_TX_NO_PREVIOUS;
-        }
     }
     return dap_ledger_tx_add(a_ledger, a_tx, a_tx_hash, false);
 }
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index ebeddd4c23de0f732de47dd8ae4ee5ae25c2c315..4574f24bb453d70352ed06d550db2394771f7c6a 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -2454,8 +2454,6 @@ int s_net_load(dap_chain_net_t *a_net)
     }
 
     l_net_pvt->load_mode = false;
-    if (l_net->pub.ledger)
-        dap_ledger_load_end(l_net->pub.ledger);
 
     l_net_pvt->balancer_http = !dap_config_get_item_bool_default(l_cfg, "general", "use_dns_links", false);
 
diff --git a/modules/net/include/dap_chain_ledger.h b/modules/net/include/dap_chain_ledger.h
index 2f1d084ca93978302bdd20984f96257043caf2f3..e3639fbc66b38715895835c94d85bc8c1f1629ae 100644
--- a/modules/net/include/dap_chain_ledger.h
+++ b/modules/net/include/dap_chain_ledger.h
@@ -269,11 +269,6 @@ int dap_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx
  */
 void dap_ledger_purge(dap_ledger_t *a_ledger, bool a_preserve_db);
 
-/**
- * End of load mode with no chackes for incoming datums
- */
-void dap_ledger_load_end(dap_ledger_t *a_ledger);
-
 /**
  * Return number transactions from the cache
  */
diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c
index c4a1e1696455fa394f7bdf2459d1b1422552f4a3..99a453e40597f4007d470b9481a9c3c5b0eabdf6 100644
--- a/modules/type/blocks/dap_chain_cs_blocks.c
+++ b/modules/type/blocks/dap_chain_cs_blocks.c
@@ -196,6 +196,9 @@ int dap_chain_cs_blocks_init()
             "block -net <net_name> -chain <chain_name> reward collect"
             " -cert <priv_cert_name> -addr <addr> -hashes <hashes_list> -fee <value>\n"
                 "\t\t Take reward\n\n"
+
+        "Rewards and comission autocollect status:\n"
+            "block -net <net_name> -chain <chain_name> autocollect status\n\n"
                                         );
     if( dap_chain_block_cache_init() ) {
         log_it(L_WARNING, "Can't init blocks cache");
@@ -440,6 +443,30 @@ static void s_cli_meta_hex_print(  dap_string_t * a_str_tmp, const char * a_meta
     DAP_DELETE(l_data_hex);
 }
 
+static void s_print_autocollect_table(dap_chain_net_t *a_net, dap_string_t *a_reply_str, const char *a_table_name)
+{
+    dap_string_append_printf(a_reply_str, "\n=== %s ===\n", a_table_name);
+    size_t l_objs_count = 0;
+    char *l_group = dap_strcmp(a_table_name, "Fees") ? dap_chain_cs_blocks_get_reward_group(a_net->pub.name)
+                                                     : dap_chain_cs_blocks_get_fee_group(a_net->pub.name);
+    dap_global_db_obj_t *l_objs = dap_global_db_get_all_sync(l_group, &l_objs_count);
+    DAP_DELETE(l_group);
+    uint256_t l_total_value = uint256_0;
+    for (size_t i = 0; i < l_objs_count; i++) {
+        dap_global_db_obj_t *l_obj_cur = l_objs + i;
+        char *l_value_str = dap_chain_balance_to_coins(*(uint256_t *)l_obj_cur->value);
+        dap_string_append_printf(a_reply_str, "%s\t%s\n", l_obj_cur->key, l_value_str);
+        DAP_DEL_Z(l_value_str);
+    }
+    if (l_objs_count) {
+        dap_global_db_objs_delete(l_objs, l_objs_count);
+        char *l_total_str = dap_chain_balance_to_coins(l_total_value);
+        dap_string_append_printf(a_reply_str, "Total prepared value: %s %s\n", l_total_str, a_net->pub.native_ticker);
+        DAP_DEL_Z(l_total_str);
+    } else
+        dap_string_append(a_reply_str, "Empty\n");
+}
+
 /**
  * @brief s_cli_blocks
  * @param argc
@@ -461,7 +488,8 @@ static int s_cli_blocks(int a_argc, char ** a_argv, char **a_str_reply)
         SUBCMD_LIST,
         SUBCMD_FEE,
         SUBCMD_DROP,
-        SUBCMD_REWARD
+        SUBCMD_REWARD,
+        SUBCMD_AUTOCOLLECT,
     } l_subcmd={0};
 
     const char* l_subcmd_strs[]={
@@ -475,6 +503,7 @@ static int s_cli_blocks(int a_argc, char ** a_argv, char **a_str_reply)
         [SUBCMD_FEE]="fee",
         [SUBCMD_DROP]="drop",
         [SUBCMD_REWARD] = "reward",
+        [SUBCMD_AUTOCOLLECT] = "autocollect",
         [SUBCMD_UNDEFINED]=NULL
     };
     const size_t l_subcmd_str_count=sizeof(l_subcmd_strs)/sizeof(*l_subcmd_strs);
@@ -978,8 +1007,20 @@ static int s_cli_blocks(int a_argc, char ** a_argv, char **a_str_reply)
             dap_list_free_full(l_block_list, NULL);
         }break;
 
-        default:
-        case SUBCMD_UNDEFINED: {
+        case SUBCMD_AUTOCOLLECT: {
+            if (dap_cli_server_cmd_check_option(a_argv, arg_index, a_argc, "status") >= 0) {
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "Command 'block autocollect' requires subcommand 'status'");
+                return -14;
+            }
+            dap_string_t *l_reply_str = dap_string_new("Autocollect tables content for:\n");
+            s_print_autocollect_table(l_net, l_reply_str, "Fees");
+            s_print_autocollect_table(l_net, l_reply_str, "Rewards");
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_reply_str->str);
+            dap_string_free(l_reply_str, true);
+        } break;
+
+        case SUBCMD_UNDEFINED:
+        default: {
             dap_cli_server_cmd_set_reply_text(a_str_reply,
                                               "Undefined block subcommand \"%s\" ",
                                               l_subcmd_str);
diff --git a/modules/type/blocks/include/dap_chain_cs_blocks.h b/modules/type/blocks/include/dap_chain_cs_blocks.h
index f771a659d55d6cf77c23280dff2b4970a4d42bea..9a26538756d4d259dabb9a3a2ef3f979e8730f0a 100644
--- a/modules/type/blocks/include/dap_chain_cs_blocks.h
+++ b/modules/type/blocks/include/dap_chain_cs_blocks.h
@@ -68,3 +68,13 @@ typedef int (*dap_chain_blocks_block_callback_ptr_t)(dap_chain_cs_blocks_t *, da
 int dap_chain_cs_blocks_init();
 void dap_chain_cs_blocks_deinit();
 dap_chain_block_cache_t *dap_chain_block_cache_get_by_hash(dap_chain_cs_blocks_t *a_blocks, dap_chain_hash_fast_t *a_block_hash);
+
+DAP_STATIC_INLINE char *dap_chain_cs_blocks_get_fee_group(const char *a_net_name)
+{
+    return dap_strdup_printf("local.%s.fees", a_net_name);
+}
+
+DAP_STATIC_INLINE char *dap_chain_cs_blocks_get_reward_group(const char *a_net_name)
+{
+    return dap_strdup_printf("local.%s.rewards", a_net_name);
+}