diff --git a/dap-sdk b/dap-sdk
index 507f09290863169f6b5815c312382daae167cab3..c70dccf58bf6f74ec1691af6c59272159fa1e721 160000
--- a/dap-sdk
+++ b/dap-sdk
@@ -1 +1 @@
-Subproject commit 507f09290863169f6b5815c312382daae167cab3
+Subproject commit c70dccf58bf6f74ec1691af6c59272159fa1e721
diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c
index 0700873c77619c4cde5d7992c0eea63983b77337..93700d21d6695c7f2bc22cec6b2041fbeb92bde2 100644
--- a/modules/chain/dap_chain_ledger.c
+++ b/modules/chain/dap_chain_ledger.c
@@ -2486,12 +2486,12 @@ dap_ledger_t *dap_chain_ledger_create(uint16_t a_flags, char *a_net_name, const
     pthread_cond_init(&l_ledger_pvt->load_cond, NULL);
     pthread_mutex_init(&l_ledger_pvt->load_mutex, NULL);
 
+#ifndef DAP_CHAIN_LEDGER_TEST
     char * l_chains_path = dap_strdup_printf("%s/network/%s", dap_config_path(), a_net_name);
     DIR * l_chains_dir = opendir(l_chains_path);
     DAP_DEL_Z(l_chains_path);
 
     struct dirent * l_dir_entry;
-    uint8_t i = 0;
     while ( (l_dir_entry = readdir(l_chains_dir) )!= NULL ){
         if (l_dir_entry->d_name[0] == '\0')
             continue;
@@ -2517,12 +2517,6 @@ dap_ledger_t *dap_chain_ledger_create(uint16_t a_flags, char *a_net_name, const
     }
     closedir(l_chains_dir);
 
-    log_it(L_DEBUG,"Created ledger \"%s\"",a_net_name);
-    l_ledger_pvt->load_mode = true;
-    l_ledger_pvt->tps_timer = NULL;
-    l_ledger_pvt->tps_count = 0;
-
-#ifndef DAP_CHAIN_LEDGER_TEST
     if ( l_ledger_pvt->cached )
         // load ledger cache from GDB
         dap_chain_ledger_load_cache(l_ledger);
diff --git a/modules/common/dap_chain_datum_token.c b/modules/common/dap_chain_datum_token.c
index b2504b308f5ca1cb4366866980f5e31278335f15..7dd41df3e236ba91cc11d69605d17d510c9cecf8 100644
--- a/modules/common/dap_chain_datum_token.c
+++ b/modules/common/dap_chain_datum_token.c
@@ -428,21 +428,15 @@ byte_t *dap_chain_emission_get_tsd(dap_chain_datum_token_emission_t *a_emission,
     if (!a_emission || a_emission->hdr.type != DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_AUTH ||
             a_emission->data.type_auth.tsd_total_size == 0)
         return NULL;
-    dap_tsd_t *l_tsd = (dap_tsd_t *)a_emission->tsd_n_signs;
-    do {
-        if (a_emission->data.type_auth.tsd_total_size < l_tsd->size) {
-            log_it(L_ERROR, "Corrupt data in emission: invalid TSD size %lu < %u",
-                   a_emission->data.type_auth.tsd_total_size, l_tsd->size);
-            return NULL;
-        }
-        if (l_tsd->type == a_type) {
-            if (a_size)
-                *a_size = l_tsd->size;
-            return l_tsd->data;
-        }
-        l_tsd = (dap_tsd_t *)((byte_t *)l_tsd + dap_tsd_size(l_tsd));
-    } while ((byte_t *)l_tsd < a_emission->tsd_n_signs + a_emission->data.type_auth.tsd_total_size);
-    return NULL;
+    dap_tsd_t *l_tsd = NULL;
+    if (!(l_tsd = dap_tsd_find(a_emission->tsd_n_signs, a_emission->data.type_auth.tsd_total_size, a_type))) {
+        log_it(L_ERROR, "TSD section of type %d not found", a_type);
+        return NULL;
+    } else {
+        if (a_size)
+            *a_size = l_tsd->size;
+    }
+    return l_tsd->data;
 }
 
 dap_chain_datum_token_emission_t *dap_chain_datum_emission_add_sign(dap_enc_key_t *a_sign_key, dap_chain_datum_token_emission_t *a_emission)
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 28876785406260cf4600542ae481ce8a54e05315..6ed2566fe569a1f40d80a6afeabb1ceea50c78ed 100644
--- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
+++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
@@ -684,8 +684,14 @@ static int s_callback_created(dap_chain_t * a_chain, dap_config_t *a_chain_net_c
     }
     dap_chain_net_t *l_cur_net = dap_chain_net_by_name(a_chain->net_name);
     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)
+    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;
+        if (l_dag->round_completed >= l_dag->round_current) {
+            l_dag->round_completed = l_dag->round_current;
+            if (l_dag->round_completed)
+                l_dag->round_completed--;
+        }
+    }
     return 0;
 }
 
diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
index 7633b717a47172897fd426747571bb78d7d12ec5..ea2f6fd86e7577a98d3a6166ce6fd1635d1d733c 100644
--- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c
+++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
@@ -2545,7 +2545,7 @@ static dap_chain_datum_decree_t *s_esbocs_decree_set_min_validators_count(dap_ch
     l_decree = DAP_NEW_Z_SIZE(dap_chain_datum_decree_t, sizeof(dap_chain_datum_decree_t) + l_total_tsd_size);
     if (!l_decree) {
         log_it(L_ERROR, "Memory allocation error in s_esbocs_decree_set_min_validators_count");
-        DAP_DEL_Z(l_tsd);
+        dap_list_free_full(l_tsd_list, NULL);
         return NULL;
     }
     l_decree->decree_version = DAP_CHAIN_DATUM_DECREE_VERSION;
@@ -2557,7 +2557,7 @@ static dap_chain_datum_decree_t *s_esbocs_decree_set_min_validators_count(dap_ch
         l_chain = dap_chain_net_get_default_chain_by_chain_type(a_net, CHAIN_TYPE_ANCHOR);
     if(!l_chain){
         log_it(L_ERROR, "Can't find chain with decree support.");
-        DAP_DEL_Z(l_tsd);
+        dap_list_free_full(l_tsd_list, NULL);
         DAP_DELETE(l_decree);
         return NULL;
     }
@@ -2593,12 +2593,10 @@ static dap_chain_datum_decree_t *s_esbocs_decree_set_min_validators_count(dap_ch
         log_it(L_DEBUG,"<-- Signed with '%s'", a_cert->name);
     }else{
         log_it(L_ERROR, "Decree signing failed");
-        DAP_DEL_Z(l_tsd);
         DAP_DELETE(l_decree);
         return NULL;
     }
-    
-    DAP_DEL_Z(l_tsd);
+
     return l_decree;
 }
 
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 658d4c4e20f2230d14f183e71fb64c60bec7a801..7635db083ab26ddfabfbea405b8e5f8aba5bc7d6 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -1233,8 +1233,10 @@ struct json_object *s_net_states_json_collect(dap_chain_net_t *a_net)
     json_object_object_add(l_json, "linksCount"       , json_object_new_int(HASH_COUNT(PVT(a_net)->net_links)));
     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'};
-    snprintf(l_node_addr_str, sizeof(l_node_addr_str), NODE_ADDR_FP_STR, NODE_ADDR_FP_ARGS(PVT(a_net)->node_addr));
-    json_object_object_add(l_json, "nodeAddress"     , json_object_new_string(l_node_addr_str));
+    int l_tmp = PVT(a_net)->node_addr
+            ? snprintf(l_node_addr_str, sizeof(l_node_addr_str), NODE_ADDR_FP_STR, NODE_ADDR_FP_ARGS(PVT(a_net)->node_addr))
+            : 0;
+    json_object_object_add(l_json, "nodeAddress"     , json_object_new_string(l_tmp ? l_node_addr_str : "0000::0000::0000::0000"));
     return l_json;
 }
 
@@ -2771,7 +2773,7 @@ int s_net_load(dap_chain_net_t *a_net)
             log_it (L_NOTICE, "Initialized chain files");
         }
 
-        if(l_chain->callback_created)
+        if (l_chain->callback_created)
             l_chain->callback_created(l_chain, l_cfg);
 
         l_chain = l_chain->next;
diff --git a/modules/net/dap_chain_net_decree.c b/modules/net/dap_chain_net_decree.c
index 5ffef5faec7836da640164d993588a70278f5808..0774f586dee7736110844fbbe1f2bd6e54e07474 100644
--- a/modules/net/dap_chain_net_decree.c
+++ b/modules/net/dap_chain_net_decree.c
@@ -194,20 +194,18 @@ int dap_chain_net_decree_verify(dap_chain_datum_decree_t *a_decree, dap_chain_ne
     l_decree->header.signs_size = 0;
     size_t l_verify_data_size = l_decree->header.data_size + sizeof(dap_chain_datum_decree_t);
 
-    for(size_t i = 0; i < l_num_of_unique_signs; i++)
-    {
+    for (size_t i = 0; i < l_num_of_unique_signs; i++) {
         size_t l_sign_max_size = dap_sign_get_size(l_unique_signs[i]);
-        if (s_verify_pkey(l_unique_signs[i], a_net))
-        {
+        if (s_verify_pkey(l_unique_signs[i], a_net)) {
             // 3. verify sign
             if(!dap_sign_verify_all(l_unique_signs[i], l_sign_max_size, l_decree, l_verify_data_size))
-            {
                 l_signs_verify_counter++;
-            }
         } else {
-            dap_hash_fast_t l_sign_hash = {0};
-            dap_hash_fast(l_unique_signs[i], l_sign_max_size, &l_sign_hash);
-            char *l_sign_hash_str = dap_hash_fast_to_str_new(&l_sign_hash);
+            dap_hash_fast_t l_sign_pkey_hash = {0};
+            size_t l_pkey_size = 0;
+            uint8_t *l_pkey = dap_sign_get_pkey(l_unique_signs[i], &l_pkey_size);
+            dap_hash_fast(l_pkey, l_pkey_size, &l_sign_pkey_hash);
+            char *l_sign_hash_str = dap_hash_fast_to_str_new(&l_sign_pkey_hash);
             log_it(L_WARNING, "Signature [%zu] %s failed public key verification.", i, l_sign_hash_str);
             DAP_DELETE(l_sign_hash_str);
         }
@@ -345,20 +343,10 @@ dap_chain_datum_decree_t *dap_chain_net_decree_get_by_hash(dap_hash_fast_t *a_ha
 // Private functions
 static bool s_verify_pkey (dap_sign_t *a_sign, dap_chain_net_t *a_net)
 {
-    bool ret_val = false;
-    dap_list_t *b_item = a_net->pub.decree->pkeys;
-    while (b_item && !ret_val)
-    {
-        dap_pkey_t *l_pkey = (dap_pkey_t*)(b_item->data);
-
-        if (!memcmp(a_sign->pkey_n_sign, l_pkey->pkey, a_sign->header.sign_pkey_size))
-        {
-            ret_val = true;
-        }
-
-        b_item = b_item->next;
-    }
-    return ret_val;
+    for (dap_list_t *it = a_net->pub.decree->pkeys; it; it = it->next)
+        if (dap_pkey_compare_with_sign(it->data, a_sign))
+            return true;
+    return false;
 }
 
 static int s_common_decree_handler(dap_chain_datum_decree_t * a_decree, dap_chain_net_t *a_net, dap_chain_t *a_chain, bool a_apply)
diff --git a/modules/service/stake/dap_chain_net_srv_stake_lock.c b/modules/service/stake/dap_chain_net_srv_stake_lock.c
index a31b7db25426ea1aefccd296785e1f9dc263bcba..825b38db34b569a3f00e3e0472c2d00ced363891 100644
--- a/modules/service/stake/dap_chain_net_srv_stake_lock.c
+++ b/modules/service/stake/dap_chain_net_srv_stake_lock.c
@@ -936,7 +936,7 @@ static bool s_stake_lock_callback_verificator(dap_ledger_t *a_ledger, dap_chain_
                 dap_hash_fast_to_str(&l_burning_tx_hash, l_burning_tx_hash_str, DAP_CHAIN_HASH_FAST_STR_SIZE);
                 char *l_take_tx_hash_str;
                 dap_get_data_hash_str_static(a_tx_in, dap_chain_datum_tx_get_size(a_tx_in), l_take_tx_hash_str);
-                log_it(L_ERROR, "[Legacy] Can't find burning tx with hash %s, obtained from the receipt of take tx %s",
+                debug_if(s_debug_more, L_ERROR, "[Legacy] Can't find burning tx with hash %s, obtained from the receipt of take tx %s",
                        l_burning_tx_hash_str, l_take_tx_hash_str);
                 return false;
             }