diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c
index 4dc559894592499095395a00abec215e4734c9a6..11b2676516057ba45213e49ce0022d758417d88a 100644
--- a/modules/chain/dap_chain_ledger.c
+++ b/modules/chain/dap_chain_ledger.c
@@ -3032,7 +3032,7 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t
     // sum of values in 'out' items from the previous transactions
     dap_chain_ledger_tokenizer_t *l_values_from_prev_tx = NULL, *l_values_from_cur_tx = NULL,
                                  *l_value_cur = NULL, *l_tmp = NULL, *l_res = NULL;
-    char *l_token = NULL, *l_main_ticker = NULL;
+    const char *l_token = NULL, *l_main_ticker = NULL;
     dap_chain_ledger_token_item_t * l_token_item = NULL;
     dap_chain_hash_fast_t *l_emission_hash = NULL;
 
@@ -3328,6 +3328,8 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t
             l_tx_prev_out_cond = (dap_chain_tx_out_cond_t *)l_tx_prev_out;
             if (l_tx_prev_out_cond->header.subtype != DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE)
                 l_main_ticker = l_token;
+            else
+                l_main_ticker = l_ledger_pvt->net_native_ticker;
 
             bool l_owner = false;
             l_owner = dap_sign_match_pkey_signs(l_prev_sign,l_sign);
diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
index 2db53c41ef7ca4a99212f6f455d32dbe28ae1ea2..3f19d1919044d8ef002a0e16f3135b7aa0beb446 100644
--- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c
+++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
@@ -86,6 +86,7 @@ typedef struct dap_chain_esbocs_pvt {
     // Validators section
     bool poa_mode;
     uint16_t min_validators_count;
+    uint16_t start_validators_min;
     // Debug flag
     bool debug;
     // Round params
@@ -149,7 +150,8 @@ static int s_callback_new(dap_chain_t *a_chain, dap_config_t *a_chain_cfg)
     l_esbocs_pvt->round_attempt_timeout = dap_config_get_item_uint16_default(a_chain_cfg, "esbocs", "round_attempt_timeout", 10);
 
     int l_ret = 0;
-    l_esbocs_pvt->min_validators_count = dap_config_get_item_uint16(a_chain_cfg, "esbocs", "min_validators_count");
+    l_esbocs_pvt->start_validators_min = l_esbocs_pvt->min_validators_count =
+            dap_config_get_item_uint16(a_chain_cfg, "esbocs", "min_validators_count");
     if (!l_esbocs_pvt->min_validators_count) {
         l_ret = -1;
         goto lb_err;
@@ -185,13 +187,14 @@ static int s_callback_new(dap_chain_t *a_chain, dap_config_t *a_chain_cfg)
             goto lb_err;
         }
         log_it(L_MSG, "add validator addr:"NODE_ADDR_FP_STR"", NODE_ADDR_FP_ARGS_S(l_signer_node_addr));
-        if (l_esbocs_pvt->poa_mode) { // auth by certs in PoA mode
-            dap_chain_esbocs_validator_t *l_validator = DAP_NEW_Z(dap_chain_esbocs_validator_t);
-            l_validator->signing_addr = l_signing_addr;
-            l_validator->node_addr = l_signer_node_addr;
-            l_validator->weight = uint256_1;
-            l_esbocs_pvt->poa_validators = dap_list_append(l_esbocs_pvt->poa_validators, l_validator);
-        } else {
+
+        dap_chain_esbocs_validator_t *l_validator = DAP_NEW_Z(dap_chain_esbocs_validator_t);
+        l_validator->signing_addr = l_signing_addr;
+        l_validator->node_addr = l_signer_node_addr;
+        l_validator->weight = uint256_1;
+        l_esbocs_pvt->poa_validators = dap_list_append(l_esbocs_pvt->poa_validators, l_validator);
+
+        if (!l_esbocs_pvt->poa_mode) { // auth certs in PoA mode wiil be first PoS validators keys
             dap_hash_fast_t l_stake_tx_hash = {};
             dap_chain_net_t *l_net = dap_chain_net_by_id(a_chain->net_id);
             uint256_t l_weight = dap_chain_net_srv_stake_get_allowed_min_value();
@@ -345,7 +348,19 @@ static void s_callback_set_min_validators_count(dap_chain_t *a_chain, uint16_t a
     dap_chain_cs_blocks_t *l_blocks = DAP_CHAIN_CS_BLOCKS(a_chain);
     dap_chain_esbocs_t *l_esbocs = DAP_CHAIN_ESBOCS(l_blocks);
     dap_chain_esbocs_pvt_t *l_esbocs_pvt = PVT(l_esbocs);
-    l_esbocs_pvt->min_validators_count = a_new_value;
+    if (a_new_value)
+        l_esbocs_pvt->min_validators_count = a_new_value;
+    else {
+        dap_hash_fast_t l_stake_tx_hash = {};
+        dap_chain_net_t *l_net = dap_chain_net_by_id(a_chain->net_id);
+        uint256_t l_weight = dap_chain_net_srv_stake_get_allowed_min_value();
+        for (dap_list_t *it = l_esbocs_pvt->poa_validators; it; it = it->next) {
+            dap_chain_esbocs_validator_t *l_validator = it->data;
+            dap_chain_net_srv_stake_key_delegate(l_net, &l_validator->signing_addr, &l_stake_tx_hash,
+                                                 l_weight, &l_validator->node_addr);
+        }
+        l_esbocs_pvt->min_validators_count = l_esbocs_pvt->start_validators_min;
+    }
 }
 
 static dap_list_t *s_get_validators_list(dap_chain_esbocs_session_t *a_session, uint64_t a_skip_count)
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 6ecae51021edac29b2e63fb84cffd604c5ecd846..16cc8769ff14f475130d6a8b3b33a47bd758f94d 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -1571,11 +1571,14 @@ const char* dap_chain_net_get_type(dap_chain_t *l_chain)
 static void s_chain_net_ledger_cache_reload(dap_chain_net_t *l_net)
 {
     dap_chain_ledger_purge(l_net->pub.ledger, false);
-    dap_chain_net_srv_stake_cache_purge(l_net);
+    dap_chain_net_srv_stake_purge(l_net);
+    dap_chain_net_decree_purge(l_net);
     dap_chain_t *l_chain = NULL;
     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);
         dap_chain_ledger_set_fee(l_net->pub.ledger, uint256_0, c_dap_chain_addr_blank);
         dap_chain_load_all(l_chain);
     }
@@ -1607,7 +1610,7 @@ static bool s_chain_net_reload_ledger_cache_once(dap_chain_net_t *l_net)
         return false;
     }
     // create file, if it not presented. If file exists, ledger cache operation is stopped
-    char *l_cache_file = dap_strdup_printf( "%s/%s.cache", l_cache_dir, "e0fee993-54b7-4cbb-be94-f633cc17853f");
+    char *l_cache_file = dap_strdup_printf( "%s/%s.cache", l_cache_dir, "01df6e58-4eb7-43a3-8c6b-252bcc3d05d4");
     DAP_DELETE(l_cache_dir);
     if (dap_file_simple_test(l_cache_file)) {
         log_it(L_WARNING, "Cache file '%s' already exists", l_cache_file);
@@ -2568,13 +2571,13 @@ int s_net_load(dap_chain_net_t *a_net)
         }
         closedir(l_chains_dir);
 
-        dap_chain_net_srv_stake_load_cache(l_net);
         // reload ledger cache at once
         if (s_chain_net_reload_ledger_cache_once(l_net)) {
             log_it(L_WARNING,"Start one time ledger cache reloading");
             dap_chain_ledger_purge(l_net->pub.ledger, false);
-            dap_chain_net_srv_stake_cache_purge(l_net);
-        }
+            dap_chain_net_srv_stake_purge(l_net);
+        } else
+            dap_chain_net_srv_stake_load_cache(l_net);
 
         // sort list with chains names by priority
         l_prior_list = dap_list_sort(l_prior_list, callback_compare_prioritity_list);
diff --git a/modules/net/dap_chain_net_decree.c b/modules/net/dap_chain_net_decree.c
index 3de84a47fb9a899edf809c26fd426a54883aa5e1..5d7402d711339ae71fdb3d28ab7b3464a2616394 100644
--- a/modules/net/dap_chain_net_decree.c
+++ b/modules/net/dap_chain_net_decree.c
@@ -106,10 +106,21 @@ int dap_chain_net_decree_deinit(dap_chain_net_t *a_net)
     dap_list_free_full(l_decree->pkeys, NULL);
     DAP_DELETE(l_decree->fee_addr);
     DAP_DELETE(l_decree);
-
+    struct decree_hh *l_decree_hh, *l_tmp;
+    HASH_ITER(hh, s_decree_hh, l_decree_hh, l_tmp) {
+        HASH_DEL(s_decree_hh, l_decree_hh);
+        DAP_DELETE(l_decree_hh->decree);
+        DAP_DELETE(l_decree_hh);
+    }
     return 0;
 }
 
+void dap_chain_net_decree_purge(dap_chain_net_t *a_net)
+{
+    dap_chain_net_decree_deinit(a_net);
+    dap_chain_net_decree_init(a_net);
+}
+
 int s_decree_verify_tsd(dap_chain_datum_decree_t * a_decree, dap_chain_net_t *a_net)
 {
     int ret_val = 0;
diff --git a/modules/net/include/dap_chain_net_decree.h b/modules/net/include/dap_chain_net_decree.h
index b4223a6181e33b9b1edbfa813c5b8f743e6e087f..18cbaf32dee98b403c83fb4e05b169435d299e6b 100644
--- a/modules/net/include/dap_chain_net_decree.h
+++ b/modules/net/include/dap_chain_net_decree.h
@@ -37,6 +37,8 @@ typedef struct decree_params {
 int dap_chain_net_decree_init(dap_chain_net_t *a_net);
 int dap_chain_net_decree_deinit(dap_chain_net_t *a_net);
 
+void dap_chain_net_decree_purge(dap_chain_net_t *a_net);
+
 int dap_chain_net_decree_apply(dap_hash_fast_t *a_decree_hash, dap_chain_datum_decree_t * a_decree, dap_chain_t *a_chain);
 int dap_chain_net_decree_verify(dap_chain_datum_decree_t *a_decree, dap_chain_net_t *a_net, size_t a_data_size, dap_hash_fast_t *a_decree_hash);
 int dap_chain_net_decree_load(dap_chain_datum_decree_t * a_decree, dap_chain_t *a_chain);
diff --git a/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c b/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c
index 157f380f02b398239b9ce96f23961fbde0159be5..dfca751164a7812f52650d338d20bbe018ee9b14 100644
--- a/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c
+++ b/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c
@@ -93,9 +93,13 @@ int dap_chain_net_srv_stake_pos_delegate_init()
     return 0;
 }
 
-void dap_chain_net_srv_stake_pos_delegate_deinit()
+void s_stake_ht_clear()
 {
     dap_chain_net_srv_stake_item_t *l_stake, *l_tmp;
+    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);
+    }
     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);
@@ -107,6 +111,11 @@ void dap_chain_net_srv_stake_pos_delegate_deinit()
         HASH_DEL(s_srv_stake->cache, l_cache_item);
         DAP_DELETE(l_cache_item);
     }
+}
+
+void dap_chain_net_srv_stake_pos_delegate_deinit()
+{
+    s_stake_ht_clear();
     DAP_DEL_Z(s_srv_stake);
 }
 
@@ -165,8 +174,8 @@ void dap_chain_net_srv_stake_key_delegate(dap_chain_net_t *a_net, dap_chain_addr
     l_stake->tx_hash = *a_stake_tx_hash;
     if (!l_found)
         HASH_ADD(hh, s_srv_stake->itemlist, signing_addr, sizeof(dap_chain_addr_t), l_stake);
-    HASH_ADD(ht, s_srv_stake->tx_itemlist, tx_hash, sizeof(dap_chain_hash_fast_t), l_stake);
-
+    if (!dap_hash_fast_is_blank(a_stake_tx_hash))
+        HASH_ADD(ht, s_srv_stake->tx_itemlist, tx_hash, sizeof(dap_chain_hash_fast_t), l_stake);
 }
 
 void dap_chain_net_srv_stake_key_invalidate(dap_chain_addr_t *a_signing_addr)
@@ -283,18 +292,16 @@ int dap_chain_net_srv_stake_load_cache(dap_chain_net_t *a_net)
     return 0;
 }
 
-void dap_chain_net_srv_stake_cache_purge(dap_chain_net_t *a_net)
+void dap_chain_net_srv_stake_purge(dap_chain_net_t *a_net)
 {
     dap_ledger_t *l_ledger = a_net->pub.ledger;
     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);
-    dap_chain_net_srv_stake_cache_item_t *l_cache_item, *l_cache_tmp;
-    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);
-    }
+
+    s_stake_ht_clear();
+
+    s_srv_stake->delegate_allowed_min = dap_chain_coins_to_balance("1.0");
 }
 
 
diff --git a/modules/service/stake_pos_delegate/include/dap_chain_net_srv_stake_pos_delegate.h b/modules/service/stake_pos_delegate/include/dap_chain_net_srv_stake_pos_delegate.h
index f7365f76b89358fa20e8fcede53bcc1189cb6b78..08bee56dbc3d942fa945013fcfce2cd831cc20d4 100644
--- a/modules/service/stake_pos_delegate/include/dap_chain_net_srv_stake_pos_delegate.h
+++ b/modules/service/stake_pos_delegate/include/dap_chain_net_srv_stake_pos_delegate.h
@@ -78,7 +78,7 @@ bool dap_chain_net_srv_stake_get_fee_validators(dap_chain_net_t *a_net,
 void dap_chain_net_srv_stake_get_fee_validators_str(dap_chain_net_t *a_net, dap_string_t *a_string);
 
 int dap_chain_net_srv_stake_load_cache(dap_chain_net_t *a_net);
-void dap_chain_net_srv_stake_cache_purge(dap_chain_net_t *a_net);
+void dap_chain_net_srv_stake_purge(dap_chain_net_t *a_net);
 
 dap_chain_datum_decree_t *dap_chain_net_srv_stake_decree_approve(dap_chain_net_t *a_net,
                                                                  dap_hash_fast_t *a_stake_tx_hash, dap_cert_t *a_cert);
diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c
index 5dc48804e1e1d86840c49c8b1b72d9c47a201f8f..f58fc8e7fcd2973a4cad48b92f43f1033ab9c130 100644
--- a/modules/type/blocks/dap_chain_cs_blocks.c
+++ b/modules/type/blocks/dap_chain_cs_blocks.c
@@ -36,6 +36,7 @@
 #include "dap_chain_node_cli.h"
 #include "dap_chain_node_cli_cmd.h"
 #include "dap_chain_mempool.h"
+
 #define LOG_TAG "dap_chain_cs_blocks"
 
 typedef struct dap_chain_tx_block_index