diff --git a/modules/chain/dap_chain_ch.c b/modules/chain/dap_chain_ch.c
index 1132bc29786ded0108cced88df6833ae431f8f05..e58ecee55b9b161f94e686f0ee47221b9e831ef3 100644
--- a/modules/chain/dap_chain_ch.c
+++ b/modules/chain/dap_chain_ch.c
@@ -1438,11 +1438,11 @@ static bool s_sync_timer_callback(void *a_arg)
                             " chain 0x%016" DAP_UINT64_FORMAT_x " cell 0x%016" DAP_UINT64_FORMAT_x,
                                         NODE_ADDR_FP_ARGS_S(l_context->addr), l_context->net_id.uint64,
                                         l_context->chain_id.uint64, l_context->cell_id.uint64);
+        l_ch_chain->sync_timer = NULL;      // Preserve timer removing from s_ch_chain_go_idle()
         dap_stream_ch_write_error_unsafe(DAP_STREAM_CH(l_ch_chain), l_context->net_id.uint64,
                                          l_context->chain_id.uint64, l_context->cell_id.uint64,
                                          DAP_CHAIN_CH_ERROR_SYNC_TIMEOUT);
-        l_ch_chain->sync_timer = NULL;
-        s_ch_chain_go_idle(l_ch_chain);
+
         return false;
     }
     return true;
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 5d256ba44edf9caebfaa6f39c7d8f349bcf9b3b9..31eb79bfd85731ff82dacd00fd026df044a0d6cd 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -3054,9 +3054,9 @@ int dap_chain_net_verify_datum_for_add(dap_chain_t *a_chain, dap_chain_datum_t *
     case DAP_CHAIN_DATUM_TOKEN_EMISSION:
         return dap_ledger_token_emission_add_check(l_net->pub.ledger, a_datum->data, a_datum->header.data_size, a_datum_hash);
     case DAP_CHAIN_DATUM_DECREE:
-        return dap_chain_net_decree_verify((dap_chain_datum_decree_t *)a_datum->data, l_net, a_datum->header.data_size, a_datum_hash);
+        return dap_chain_net_decree_verify(l_net, (dap_chain_datum_decree_t *)a_datum->data, a_datum->header.data_size, a_datum_hash);
     case DAP_CHAIN_DATUM_ANCHOR: {
-        int l_result = dap_chain_net_anchor_verify((dap_chain_datum_anchor_t *)a_datum->data, a_datum->header.data_size);
+        int l_result = dap_chain_net_anchor_verify(l_net, (dap_chain_datum_anchor_t *)a_datum->data, a_datum->header.data_size);
         if (l_result)
             return l_result;
     }
diff --git a/modules/net/dap_chain_net_anchor.c b/modules/net/dap_chain_net_anchor.c
index 581836b24baa05aff34f609cdef0c5ad9d11ee6e..65673541cd3701db3f50855d13e7df862fad0cd7 100644
--- a/modules/net/dap_chain_net_anchor.c
+++ b/modules/net/dap_chain_net_anchor.c
@@ -38,8 +38,7 @@
 static bool s_verify_pubkeys(dap_sign_t *a_sign, dap_sign_t **a_decree_signs, size_t a_num_of_decree_sign);
 static inline dap_sign_t *s_concate_all_signs_in_array(dap_sign_t *a_in_signs, size_t a_signs_size, size_t *a_sings_count, size_t *a_signs_arr_size);
 
-// Public functions
-int dap_chain_net_anchor_verify(dap_chain_datum_anchor_t *a_anchor, size_t a_data_size)
+static int s_anchor_verify(dap_chain_net_t *a_net, dap_chain_datum_anchor_t *a_anchor, size_t a_data_size, bool a_load_mode)
 {
     if (a_data_size < sizeof(dap_chain_datum_anchor_t)) {
         log_it(L_WARNING, "Anchor size is too small");
@@ -55,121 +54,87 @@ int dap_chain_net_anchor_verify(dap_chain_datum_anchor_t *a_anchor, size_t a_dat
     //multiple signs reading from datum
     dap_sign_t *l_signs_block = (dap_sign_t *)((byte_t*)l_anchor->data_n_sign + l_anchor->header.data_size);
 
-    if (!l_signs_size || !l_signs_block)
-    {
-        log_it(L_WARNING,"Anchor data sign not found");
+    if (!l_signs_size || !l_signs_block) {
+        log_it(L_WARNING, "Anchor data sign not found");
         return -100;
     }
-    dap_sign_t *l_signs_arr = NULL;
+
     size_t l_signs_count = 0;
     size_t l_signs_arr_size = 0;
-    l_signs_arr = s_concate_all_signs_in_array(l_signs_block, l_signs_size, &l_signs_count, &l_signs_arr_size);
+    dap_sign_t *l_signs_arr = s_concate_all_signs_in_array(l_signs_block, l_signs_size, &l_signs_count, &l_signs_arr_size);
 
     // Find unique pkeys in pkeys set from previous step and check that number of signs > min
     size_t l_num_of_unique_signs = 0;
     dap_sign_t **l_unique_signs = dap_sign_get_unique_signs(l_signs_arr, l_signs_arr_size, &l_num_of_unique_signs);
 
-    if (l_num_of_unique_signs != l_signs_count)
-    {
-        log_it(L_WARNING,"Signatures contain duplicate signs.");
-        return -105;
+    if (!l_num_of_unique_signs) {
+        log_it(L_WARNING, "Not enough unique signatures");
+        return -106;
+    }
+    bool l_sign_authorized = false;
+    size_t l_signs_size_original = l_anchor->header.signs_size;
+    l_anchor->header.signs_size = 0;
+    for (size_t i = 0; i < l_num_of_unique_signs; i++) {
+        for (dap_list_t *it = a_net->pub.decree->pkeys; it; it = it->next) {
+            if (dap_pkey_compare_with_sign(it->data, l_unique_signs[i])) {
+                // TODO make signs verification in s_concate_all_signs_in_array to correctly header.signs_size calculation
+                size_t l_verify_data_size = l_anchor->header.data_size + sizeof(dap_chain_datum_anchor_t);
+                if (dap_sign_verify_all(l_unique_signs[i], l_signs_size_original, l_anchor, l_verify_data_size))
+                    continue;
+                l_sign_authorized = true;
+                break;
+            }
+        }
+        l_anchor->header.signs_size += dap_sign_get_size(l_unique_signs[i]);
+        if (l_sign_authorized)
+            break;
     }
+    DAP_DELETE(l_signs_arr);
+    DAP_DELETE(l_unique_signs);
+    l_anchor->header.signs_size = l_signs_size_original;
 
-    uint256_t l_num_of_valid_signs256 = GET_256_FROM_64((uint64_t)l_num_of_unique_signs);
-    if (compare256(l_num_of_valid_signs256, GET_256_FROM_64((uint64_t)0)) == 0)
-    {
-        log_it(L_WARNING,"Not enough unique signatures");
-        return -106;
+    if (!l_sign_authorized) {
+        log_it(L_WARNING, "Anchor signs verify failed");
+        return -108;
     }
 
     dap_hash_fast_t l_decree_hash = {};
     dap_chain_datum_decree_t *l_decree = NULL;
-    if ((ret_val = dap_chain_datum_anchor_get_hash_from_data(l_anchor, &l_decree_hash)) != 0)
-    {
-        DAP_DELETE(l_signs_arr);
-        DAP_DELETE(l_unique_signs);
-        log_it(L_WARNING,"Can't get hash from anchor data");
+    if ((ret_val = dap_chain_datum_anchor_get_hash_from_data(l_anchor, &l_decree_hash)) != 0) {
+        log_it(L_WARNING, "Can't get hash from anchor data");
         return -106;
     }
 
+    if (a_load_mode)
+        return 0;
+
     bool l_is_applied = false;
     l_decree = dap_chain_net_decree_get_by_hash(&l_decree_hash, &l_is_applied);
-    if (!l_decree)
-    {
-        DAP_DELETE(l_signs_arr);
-        DAP_DELETE(l_unique_signs);
-        char *l_decree_hash_str = dap_hash_fast_to_str_new(&l_decree_hash);
-        log_it(L_WARNING,"Can't get decree by hash %s", l_decree_hash_str);
-        DAP_DELETE(l_decree_hash_str);
+    if (!l_decree) {
+        log_it(L_WARNING, "Can't get decree by hash %s", dap_hash_fast_to_str_static(&l_decree_hash));
         return DAP_CHAIN_CS_VERIFY_CODE_NO_DECREE;
     }
-
-    if (l_is_applied)
-    {
-        DAP_DELETE(l_signs_arr);
-        DAP_DELETE(l_unique_signs);
-        log_it(L_WARNING,"The decree referred to by the anchor has already been applied");
+    if (l_is_applied) {
+        log_it(L_WARNING, "The decree referred to by the anchor has already been applied");
         return -109;
     }
 
-    size_t l_decree_signs_size = l_decree->header.signs_size;
-    //multiple signs reading from datum
-    dap_sign_t *l_decree_signs_block = (dap_sign_t *)((byte_t*)l_decree->data_n_signs + l_decree->header.data_size);
-
-    if (!l_decree_signs_size || !l_decree_signs_block)
-    {
-        log_it(L_WARNING,"Anchor data sign not found");
-        return -100;
-    }
-    dap_sign_t *l_decree_signs_arr = NULL;
-    size_t l_decree_signs_count = 0;
-    size_t l_decree_signs_arr_size = 0;
-    l_decree_signs_arr = s_concate_all_signs_in_array(l_decree_signs_block, l_decree_signs_size, &l_decree_signs_count, &l_decree_signs_arr_size);
-
-    // Find unique pkeys in pkeys set from previous step and check that number of signs > min
-    size_t l_num_of_unique_decree_signs = 0;
-    dap_sign_t **l_unique_decree_signs = dap_sign_get_unique_signs(l_decree_signs_arr, l_decree_signs_arr_size, &l_num_of_unique_decree_signs);
-
-    // Verify all keys and its signatures
-    uint16_t l_signs_size_for_current_sign = 0, l_signs_verify_counter = 0;
-    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_pubkeys(l_unique_signs[i], l_unique_decree_signs, l_num_of_unique_decree_signs))
-        {
-            // 3. verify sign
-            size_t l_verify_data_size = l_anchor->header.data_size + sizeof(dap_chain_datum_anchor_t);
-            l_anchor->header.signs_size = l_signs_size_for_current_sign;
-            if(!dap_sign_verify_all(l_unique_signs[i], l_sign_max_size, l_anchor, l_verify_data_size))
-            {
-                l_signs_verify_counter++;
-            }
-        }
-            // Each sign change the sign_size field by adding its size after signing. So we need to change this field in header for each sign.
-            l_signs_size_for_current_sign += l_sign_max_size;
-    }
-    DAP_DELETE(l_unique_decree_signs);
-    DAP_DELETE(l_decree_signs_arr);
-    l_anchor->header.signs_size = l_signs_size_for_current_sign;
-
-    if(!l_signs_verify_counter)
-    {
-        log_it(L_WARNING,"Anchor signs verify failed");
-        return -108;
-    }
-    DAP_DELETE(l_signs_arr);
-    DAP_DELETE(l_unique_signs);
-
     return 0;
 }
 
+// Public functions
+int dap_chain_net_anchor_verify(dap_chain_net_t *a_net, dap_chain_datum_anchor_t *a_anchor, size_t a_data_size)
+{
+   return s_anchor_verify(a_net, a_anchor, a_data_size, false);
+}
+
 int dap_chain_net_anchor_load(dap_chain_datum_anchor_t * a_anchor, dap_chain_t *a_chain)
 {
     int ret_val = 0;
 
     if (!a_anchor || !a_chain)
     {
-        log_it(L_WARNING,"Invalid arguments. a_decree and a_chain must be not NULL");
+        log_it(L_WARNING, "Invalid arguments. a_decree and a_chain must be not NULL");
         return -107;
     }
 
@@ -177,27 +142,25 @@ int dap_chain_net_anchor_load(dap_chain_datum_anchor_t * a_anchor, dap_chain_t *
 
     if (!l_net->pub.decree)
     {
-        log_it(L_WARNING,"Decree is not inited!");
+        log_it(L_WARNING, "Decree is not inited!");
         return -108;
     }
 
-    if ((ret_val = dap_chain_net_anchor_verify(a_anchor, dap_chain_datum_anchor_get_size(a_anchor))) != 0)
+    if ((ret_val = s_anchor_verify(l_net, a_anchor, dap_chain_datum_anchor_get_size(a_anchor), true)) != 0)
     {
-        log_it(L_WARNING,"Decree is not pass verification!");
+        log_it(L_WARNING, "Anchor is not pass verification!");
         return ret_val;
     }
 
     dap_chain_hash_fast_t l_hash = {0};
     if ((ret_val = dap_chain_datum_anchor_get_hash_from_data(a_anchor, &l_hash)) != 0)
     {
-        log_it(L_WARNING,"Can not find datum hash in anchor data");
+        log_it(L_WARNING, "Can not find datum hash in anchor data");
         return -109;
     }
 
-    if((ret_val = dap_chain_net_decree_apply(&l_hash, NULL, a_chain))!=0)
-    {
-        log_it(L_WARNING,"Decree applying failed");
-    }
+    if ((ret_val = dap_chain_net_decree_apply(&l_hash, NULL, a_chain)) != 0)
+        log_it(L_WARNING, "Decree applying failed");
 
     return ret_val;
 }
diff --git a/modules/net/dap_chain_net_decree.c b/modules/net/dap_chain_net_decree.c
index f0019c1b7f4db2402dde52dc4d3a868ef4d57295..973aab6f5477206fb85b11b3d079edaa3b139ef3 100644
--- a/modules/net/dap_chain_net_decree.c
+++ b/modules/net/dap_chain_net_decree.c
@@ -43,6 +43,7 @@
 static struct decree_hh {
     dap_hash_fast_t key;
     bool is_applied;
+    bool wait_for_apply;
     dap_chain_datum_decree_t *decree;
     UT_hash_handle hh;
 } *s_decree_hh = NULL;
@@ -52,7 +53,7 @@ static struct decree_hh {
 
 // Private fuctions prototype
 static bool s_verify_pkey (dap_sign_t *a_sign, dap_chain_net_t *a_net);
-static int s_common_decree_handler(dap_chain_datum_decree_t *a_decree, dap_chain_net_t *a_net, bool a_apply);
+static int s_common_decree_handler(dap_chain_datum_decree_t *a_decree, dap_chain_net_t *a_net, bool a_apply, bool a_load_mode);
 static int s_service_decree_handler(dap_chain_datum_decree_t *a_decree, dap_chain_net_t *a_net, bool a_apply);
 
 
@@ -117,29 +118,7 @@ void dap_chain_net_decree_purge(dap_chain_net_t *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;
-
-    dap_return_val_if_fail(a_decree && a_net, -107);
-
-    // Process decree
-    switch(a_decree->header.type){
-        case DAP_CHAIN_DATUM_DECREE_TYPE_COMMON:{
-            ret_val = s_common_decree_handler(a_decree, a_net, false);
-            break;
-        }
-        case DAP_CHAIN_DATUM_DECREE_TYPE_SERVICE:{
-            ret_val = s_service_decree_handler(a_decree, a_net, false);
-        }
-        default:
-        log_it(L_WARNING,"Decree type is undefined!");
-        ret_val = -100;
-    }
-    return ret_val;
-}
-
-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_chain_hash_fast_t *a_decree_hash)
+static int s_decree_verify(dap_chain_net_t *a_net, dap_chain_datum_decree_t *a_decree, size_t a_data_size, dap_chain_hash_fast_t *a_decree_hash, bool a_load_mode)
 {
     if (a_data_size < sizeof(dap_chain_datum_decree_t)) {
         log_it(L_WARNING, "Decree size is too small");
@@ -156,8 +135,10 @@ int dap_chain_net_decree_verify(dap_chain_datum_decree_t *a_decree, dap_chain_ne
 
     struct decree_hh *l_decree_hh = NULL;
     HASH_FIND(hh, s_decree_hh, a_decree_hash, sizeof(dap_hash_fast_t), l_decree_hh);
-    if (l_decree_hh)
+    if (l_decree_hh && l_decree_hh->decree) {
+        log_it(L_WARNING, "Decree with hash %s is already present", dap_hash_fast_to_str_static(a_decree_hash));
         return -123;
+    }
 
     dap_chain_datum_decree_t *l_decree = a_decree;
     // Get pkeys sign from decree datum
@@ -167,7 +148,7 @@ int dap_chain_net_decree_verify(dap_chain_datum_decree_t *a_decree, dap_chain_ne
     dap_sign_t *l_signs_block = dap_chain_datum_decree_get_signs(l_decree, &l_signs_size);
     if (!l_signs_size || !l_signs_block)
     {
-        log_it(L_WARNING,"Decree data sign not found");
+        log_it(L_WARNING, "Decree data sign not found");
         return -100;
     }
 
@@ -222,15 +203,31 @@ int dap_chain_net_decree_verify(dap_chain_datum_decree_t *a_decree, dap_chain_ne
     }
 
     // check tsd-section
-    int l_ret = s_decree_verify_tsd(a_decree, a_net);
+    int l_ret = 0;
+    switch(a_decree->header.type) {
+    case DAP_CHAIN_DATUM_DECREE_TYPE_COMMON:
+        l_ret = s_common_decree_handler(a_decree, a_net, false, a_load_mode);
+        break;
+    case DAP_CHAIN_DATUM_DECREE_TYPE_SERVICE:
+        l_ret = s_service_decree_handler(a_decree, a_net, false);
+    break;
+    default:
+        log_it(L_WARNING, "Decree type is undefined!");
+        l_ret = -100;
+    }
     if (l_ret) {
-        log_it(L_WARNING,"TSD checking error. Decree verification failed");
+        log_it(L_WARNING, "TSD checking error. Decree verification failed");
         return l_ret;
     }
 
     return 0;
 }
 
+int dap_chain_net_decree_verify(dap_chain_net_t *a_net, dap_chain_datum_decree_t *a_decree, size_t a_data_size, dap_chain_hash_fast_t *a_decree_hash)
+{
+    return s_decree_verify(a_net, a_decree, a_data_size, a_decree_hash, false);
+}
+
 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 ret_val = 0;
@@ -251,28 +248,36 @@ int dap_chain_net_decree_apply(dap_hash_fast_t *a_decree_hash, dap_chain_datum_d
     }
 
     struct decree_hh *l_decree_hh = NULL;
-    if (!a_decree) {
-        HASH_FIND(hh, s_decree_hh, a_decree_hash, sizeof(dap_hash_fast_t), l_decree_hh);
+    HASH_FIND(hh, s_decree_hh, a_decree_hash, sizeof(dap_hash_fast_t), l_decree_hh);
+
+    if (!l_decree_hh) {
+        l_decree_hh = DAP_NEW_Z(struct decree_hh);
         if (!l_decree_hh) {
-            char *l_decree_hash_str = dap_hash_fast_to_str_new(a_decree_hash);
-            log_it(L_WARNING, "Decree with hash %s is not found", l_decree_hash_str);
-            DAP_DELETE(l_decree_hash_str);
+            log_it(L_CRITICAL, "Memory allocation error");
+            return -1;
+        }
+        l_decree_hh->key = *a_decree_hash;
+        HASH_ADD(hh, s_decree_hh, key, sizeof(dap_hash_fast_t), l_decree_hh);
+    }
+
+    if (!a_decree) {    // Processing anchor for decree
+        if (!l_decree_hh->decree) {
+            log_it(L_WARNING, "Decree with hash %s is not found", dap_hash_fast_to_str_static(a_decree_hash));
+            l_decree_hh->wait_for_apply = true;
             return -110;
         }
         if (l_decree_hh->is_applied) {
-            log_it(L_WARNING,"Decree already applied");
+            log_it(L_WARNING, "Decree already applied");
             return -111;
         }
-    } else {
-        l_decree_hh = DAP_NEW_Z(struct decree_hh);
-        if (!l_decree_hh) {
-            log_it(L_CRITICAL, "Memory allocation error");
-            return -1;
+    } else {            // Process decree itself
+        if (l_decree_hh->decree) {
+            log_it(L_WARNING, "Decree with hash %s is already present", dap_hash_fast_to_str_static(a_decree_hash));
+            return -123;
         }
         l_decree_hh->decree = DAP_DUP_SIZE(a_decree, dap_chain_datum_decree_get_size(a_decree));
-        l_decree_hh->key = *a_decree_hash;
-        HASH_ADD(hh, s_decree_hh, key, sizeof(dap_hash_fast_t), l_decree_hh);
-        if (a_decree->header.common_decree_params.chain_id.uint64 != a_chain->id.uint64)
+        if (a_decree->header.common_decree_params.chain_id.uint64 != a_chain->id.uint64 &&
+                !l_decree_hh->wait_for_apply)
             // Apply it with corresponding anchor
             return ret_val;
     }
@@ -280,18 +285,20 @@ int dap_chain_net_decree_apply(dap_hash_fast_t *a_decree_hash, dap_chain_datum_d
     // Process decree
     switch(l_decree_hh->decree->header.type) {
     case DAP_CHAIN_DATUM_DECREE_TYPE_COMMON:
-        ret_val = s_common_decree_handler(l_decree_hh->decree, l_net, true);
+        ret_val = s_common_decree_handler(l_decree_hh->decree, l_net, true, false);
         break;
     case DAP_CHAIN_DATUM_DECREE_TYPE_SERVICE:
         ret_val = s_service_decree_handler(l_decree_hh->decree, l_net, true);
+        break;
     default:
         log_it(L_WARNING,"Decree type is undefined!");
         ret_val = -100;
     }
 
-    if (!ret_val)
+    if (!ret_val) {
         l_decree_hh->is_applied = true;
-    else
+        l_decree_hh->wait_for_apply = false;
+    } else
         log_it(L_ERROR,"Decree applying failed!");
 
     return ret_val;
@@ -300,23 +307,21 @@ int dap_chain_net_decree_apply(dap_hash_fast_t *a_decree_hash, dap_chain_datum_d
 int dap_chain_net_decree_load(dap_chain_datum_decree_t * a_decree, dap_chain_t *a_chain, dap_chain_hash_fast_t *a_decree_hash)
 {
     int ret_val = 0;
-    if (!a_chain || !a_decree)
-    {
+    if (!a_chain || !a_decree) {
         log_it(L_ERROR, "Bad arguments");
         return -100;
     }
 
     dap_chain_net_t *l_net = dap_chain_net_by_id(a_chain->net_id);
 
-    if (!l_net->pub.decree)
-    {
+    if (!l_net->pub.decree) {
         log_it(L_WARNING, "Decree is not inited!");
         return -108;
     }
 
     size_t l_data_size = dap_chain_datum_decree_get_size(a_decree);
 
-    if ((ret_val = dap_chain_net_decree_verify(a_decree, l_net, l_data_size, a_decree_hash)) != 0) {
+    if ((ret_val = s_decree_verify(l_net, a_decree, l_data_size, a_decree_hash, true)) != 0) {
         log_it(L_ERROR, "Decree verification failed!");
         return ret_val;
     }
@@ -328,7 +333,7 @@ dap_chain_datum_decree_t *dap_chain_net_decree_get_by_hash(dap_hash_fast_t *a_ha
 {
     struct decree_hh* l_decree_hh = NULL;
     HASH_FIND(hh, s_decree_hh, a_hash, sizeof(dap_hash_fast_t), l_decree_hh);
-    if (!l_decree_hh)
+    if (!l_decree_hh || !l_decree_hh->decree)
         return NULL;
 
     if (is_applied)
@@ -346,7 +351,7 @@ static bool s_verify_pkey (dap_sign_t *a_sign, dap_chain_net_t *a_net)
     return false;
 }
 
-static int s_common_decree_handler(dap_chain_datum_decree_t *a_decree, dap_chain_net_t *a_net, bool a_apply)
+static int s_common_decree_handler(dap_chain_datum_decree_t *a_decree, dap_chain_net_t *a_net, bool a_apply, bool a_load_mode)
 {
     uint256_t l_uint256_buffer;
     uint16_t l_uint16_buffer;
@@ -407,22 +412,26 @@ static int s_common_decree_handler(dap_chain_datum_decree_t *a_decree, dap_chain
             }
             if (dap_chain_datum_decree_get_stake_value(a_decree, &l_uint256_buffer)){
                 log_it(L_WARNING,"Can't get stake value from decree.");
-                return -105;
+                return -106;
             }
             if (dap_chain_datum_decree_get_stake_signing_addr(a_decree, &l_addr)){
                 log_it(L_WARNING,"Can't get signing address from decree.");
-                return -105;
+                return -107;
             }
             if (dap_chain_datum_decree_get_stake_signer_node_addr(a_decree, &l_node_addr)){
                 log_it(L_WARNING,"Can't get signer node address from decree.");
-                return -105;
+                return -108;
             }
-            if (!a_apply)
+            if (a_load_mode) {
+                assert(!a_apply);
                 break;
+            }
             if (dap_chain_net_srv_stake_verify_key_and_node(&l_addr, &l_node_addr)) {
                 log_it(L_WARNING, "Key and node verification error");
-                return -105;
+                return -109;
             }
+            if (!a_apply)
+                break;
             dap_chain_net_srv_stake_key_delegate(a_net, &l_addr, &l_hash, l_uint256_buffer, &l_node_addr);
             break;
         case DAP_CHAIN_DATUM_DECREE_COMMON_SUBTYPE_STAKE_INVALIDATE:
diff --git a/modules/net/include/dap_chain_net_anchor.h b/modules/net/include/dap_chain_net_anchor.h
index a9405409f192c3dafce1baa6123988ff2b9b93c1..34f8f084a86b86d66a48d5371cad83d5c52cac0f 100644
--- a/modules/net/include/dap_chain_net_anchor.h
+++ b/modules/net/include/dap_chain_net_anchor.h
@@ -24,5 +24,5 @@
 #include "dap_chain_datum_anchor.h"
 #include "dap_chain_net.h"
 
-int dap_chain_net_anchor_verify(dap_chain_datum_anchor_t * a_anchor, size_t a_data_size);
+int dap_chain_net_anchor_verify(dap_chain_net_t *a_net, dap_chain_datum_anchor_t * a_anchor, size_t a_data_size);
 int dap_chain_net_anchor_load(dap_chain_datum_anchor_t * a_anchor, dap_chain_t *a_chain);
diff --git a/modules/net/include/dap_chain_net_decree.h b/modules/net/include/dap_chain_net_decree.h
index 4a1720c7df69af85c3cfa084c16156f72cd2d8bd..3d25ffba6208520de5128eb523dd665b0461a6d5 100644
--- a/modules/net/include/dap_chain_net_decree.h
+++ b/modules/net/include/dap_chain_net_decree.h
@@ -37,7 +37,7 @@ 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_chain_hash_fast_t *a_decree_hash);
+int dap_chain_net_decree_verify(dap_chain_net_t *a_net, dap_chain_datum_decree_t *a_decree, size_t a_data_size, dap_chain_hash_fast_t *a_decree_hash);
 int dap_chain_net_decree_load(dap_chain_datum_decree_t * a_decree, dap_chain_t *a_chain, dap_chain_hash_fast_t *a_decree_hash);
 
 dap_chain_datum_decree_t *dap_chain_net_decree_get_by_hash(dap_hash_fast_t *a_hash, bool *is_applied);