diff --git a/modules/channel/chain-net/dap_stream_ch_chain_net.c b/modules/channel/chain-net/dap_stream_ch_chain_net.c
index 7a30adef2bf9692375ea0e4f302f4e5b34bba9e8..2f0a0f63b66aa441daa04f133bc978623f6557ec 100644
--- a/modules/channel/chain-net/dap_stream_ch_chain_net.c
+++ b/modules/channel/chain-net/dap_stream_ch_chain_net.c
@@ -387,7 +387,11 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg)
                                                            l_price_unit,NULL,l_price_min,l_price_max,&l_orders,&l_orders_num);
                         flags = l_orders_num ? flags | F_ORDR : flags & ~F_ORDR;
                         bool auto_online = dap_config_get_item_bool_default( g_config, "general", "auto_online", false );
-                        bool auto_update = dap_config_get_item_bool_default( g_config, "general", "auto_update", false );
+                        bool auto_update = false;
+                        if(system("systemctl status cellframe-updater.service") == 0)
+                            auto_update = true;
+                        else
+                            auto_update = false;
                         flags = auto_online ? flags | A_ONLN : flags & ~A_ONLN;
                         flags = auto_update ? flags | A_UPDT : flags & ~A_UPDT;
                         send->header.flags = flags;
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 58edbb0a13c30a4b1c0820e51d15fa0bca76754a..82162dda646c8104782731e6c7a1d4fc410ca579 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -1197,6 +1197,7 @@ int com_node(int a_argc, char ** a_argv, char **a_str_reply)
     dap_chain_node_addr_t l_link = { 0 };
     dap_chain_node_info_t *l_node_info = NULL;
     size_t l_node_info_size = sizeof(l_node_info->hdr) + sizeof(l_link);
+
     if(cmd_num >= CMD_ADD && cmd_num <= CMD_LINK)
         l_node_info = DAP_NEW_Z_SIZE(dap_chain_node_info_t, l_node_info_size);
 
@@ -1223,7 +1224,7 @@ int com_node(int a_argc, char ** a_argv, char **a_str_reply)
     }
 
     switch (cmd_num)
-    {
+    {    
     case CMD_ADD:
         if(!arg_index || a_argc < 8) {
             dap_cli_server_cmd_set_reply_text(a_str_reply, "invalid parameters");
diff --git a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c
index a94095c752c6b754049709eda69ae95834e26b83..8c883b33a5cd230e8f5b329ce9c321c7f9f48412 100644
--- a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c
+++ b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c
@@ -1323,7 +1323,7 @@ static int callback_compare_tx_list(const void * a_datum1, const void * a_datum2
     return -1;
 }
 
-bool dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_fast_t *a_tx_hash, dap_stream_ch_chain_validator_test_t * out_data,
+int dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_fast_t *a_tx_hash, dap_stream_ch_chain_validator_test_t * out_data,
                                              int a_time_connect, int a_time_respone)
 {
     char *l_key = NULL;
@@ -1334,31 +1334,27 @@ bool dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_f
     dap_ledger_t *l_ledger = dap_chain_ledger_by_net_name(a_net->pub.name);
     dap_chain_datum_tx_t *l_tx = dap_chain_ledger_tx_find_by_hash(l_ledger, a_tx_hash);
     dap_chain_node_addr_t *l_signer_node_addr = NULL;
-    bool l_overall_correct = false;
+    int l_overall_correct = false;
 
     int l_prev_cond_idx = 0;
     dap_chain_tx_out_cond_t *l_tx_out_cond = dap_chain_datum_tx_out_cond_get(l_tx,
                                                   DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_POS_DELEGATE, &l_prev_cond_idx);
     if (!l_tx_out_cond) {
-        log_it(L_WARNING, "Requested conditional transaction has no requires conditional output");
-        return false;
+        return -4;
     }
     l_signer_node_addr = &l_tx_out_cond->subtype.srv_stake_pos_delegate.signer_node_addr;
 
     l_key = dap_chain_node_addr_to_hash_str(l_signer_node_addr);
     if(!l_key)
     {
-        log_it(L_WARNING, "can't calculate hash of addr");
-        return false;
+        return -5;
     }
-
     // read node
     l_remote_node_info = (dap_chain_node_info_t *) dap_global_db_get_sync(a_net->pub.gdb_nodes, l_key, &l_node_info_size, NULL, NULL);
 
     if(!l_remote_node_info) {
-        log_it(L_WARNING, "node not found in base");
         DAP_DELETE(l_key);
-        return false;
+        return -6;
     }
 
     size_t node_info_size_must_be = dap_chain_node_info_get_size(l_remote_node_info);
@@ -1366,24 +1362,22 @@ bool dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_f
         log_it(L_WARNING, "node has bad size in base=%zu (must be %zu)", l_node_info_size, node_info_size_must_be);
         DAP_DELETE(l_remote_node_info);
         DAP_DELETE(l_key);
-        return false;
+        return -7;
     }
     DAP_DELETE(l_key);
     // start connect
     l_node_client = dap_chain_node_client_connect_channels(a_net,l_remote_node_info,"N");
     if(!l_node_client) {
-        log_it(L_WARNING, "can't connect");
         DAP_DELETE(l_remote_node_info);
-        return false;
+        return -8;
     }
     // wait connected
     size_t rc = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_ESTABLISHED, a_time_connect);
     if (rc) {
-        log_it(L_WARNING, "No response from node");
         // clean client struct
         dap_chain_node_client_close_mt(l_node_client);
         DAP_DELETE(l_remote_node_info);
-        return false;
+        return -9;
     }
     log_it(L_NOTICE, "Stream connection established");
 
@@ -1396,10 +1390,9 @@ bool dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_f
                                             a_net->pub.id,
                                             l_test_data, sizeof(l_test_data));
     if (rc == 0) {
-        log_it(L_WARNING, "Can't send DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_NODE_VALIDATOR_READY_REQUEST packet");
         dap_chain_node_client_close_mt(l_node_client);
         DAP_DELETE(l_remote_node_info);
-        return false;
+        return -10;
     }
 
     rc = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_VALID_READY, a_time_respone);
@@ -1505,7 +1498,39 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, char **a_str_reply)
                 dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't get hash_fast from %s, check that the hash is correct", str_tx_hash);
                 return -3;
             }
-            dap_chain_net_srv_stake_check_validator(l_net, &l_tx, &l_out, 10000, 15000);
+            int res = dap_chain_net_srv_stake_check_validator(l_net, &l_tx, &l_out, 10000, 15000);
+            switch (res) {
+            case -4:
+                dap_cli_server_cmd_set_reply_text(a_str_reply,"Requested conditional transaction has no requires conditional output");
+                return -30;
+                break;
+            case -5:
+                dap_cli_server_cmd_set_reply_text(a_str_reply,"Can't calculate hash of addr");
+                return -31;
+                break;
+            case -6:
+                dap_cli_server_cmd_set_reply_text(a_str_reply,"Node not found in base");
+                return -32;
+                break;
+            case -7:
+                dap_cli_server_cmd_set_reply_text(a_str_reply,"Node has bad size in base, see log file");
+                return -33;
+                break;
+            case -8:
+                dap_cli_server_cmd_set_reply_text(a_str_reply,"Can't connect to remote node");
+                return -34;
+                break;
+            case -9:
+                dap_cli_server_cmd_set_reply_text(a_str_reply,"No response from node");
+                return -35;
+                break;
+            case -10:
+                dap_cli_server_cmd_set_reply_text(a_str_reply,"Can't send DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_NODE_VALIDATOR_READY_REQUEST packet");
+                return -36;
+                break;
+            default:
+                break;
+            }
             dap_cli_server_cmd_set_reply_text(a_str_reply,
                                               "-------------------------------------------------\n"
                                               "VERSION \t |  %s \n"
@@ -1517,15 +1542,15 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, char **a_str_reply)
                                               "FOUND CERT \t |  %s\n"
                                               "SIGN CORRECT \t |  %s\n"
                                               "SUMMARY \t |  %s\n",
-                    l_out.header.version,
+                     l_out.header.version,
                     (l_out.header.flags & A_PROC)?"true":"false",
                     (l_out.header.flags & F_ORDR)?"true":"false",
                     (l_out.header.flags & A_ONLN)?"true":"false",
                     (l_out.header.flags & A_UPDT)?"true":"false",
                     (l_out.header.flags & D_SIGN)?"true":"false",
                     (l_out.header.flags & F_CERT)?"true":"false",
-                    l_out.header.sign_correct ? "true":"false",
-                    l_out.header.overall_correct ? "Validator ready" : "There are unresolved issues");
+                     l_out.header.sign_correct ?  "true":"false",
+                     l_out.header.overall_correct ? "Validator ready" : "There are unresolved issues");
 
         }
         break;
diff --git a/modules/service/stake/include/dap_chain_net_srv_stake_pos_delegate.h b/modules/service/stake/include/dap_chain_net_srv_stake_pos_delegate.h
index a720bdf5848b7bd07890d1890bcaca96f216d522..ca59e92cd6aec3ffd631d86a4c39e13a06a28e71 100644
--- a/modules/service/stake/include/dap_chain_net_srv_stake_pos_delegate.h
+++ b/modules/service/stake/include/dap_chain_net_srv_stake_pos_delegate.h
@@ -83,7 +83,7 @@ void dap_chain_net_srv_stake_get_fee_validators_str(dap_chain_net_t *a_net, dap_
 int dap_chain_net_srv_stake_load_cache(dap_chain_net_t *a_net);
 void dap_chain_net_srv_stake_purge(dap_chain_net_t *a_net);
 
-bool dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_fast_t *a_tx_hash, dap_stream_ch_chain_validator_test_t * out_data,
+int dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_fast_t *a_tx_hash, dap_stream_ch_chain_validator_test_t * out_data,
                                              int a_time_connect, int a_time_respone);
 
 dap_chain_datum_decree_t *dap_chain_net_srv_stake_decree_approve(dap_chain_net_t *a_net,
diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c
index 91cf58856548a4eea47f44898a73db8e92e0d55f..e5227ffdbc8c80b71974660a03fdca5b5a8a09cd 100644
--- a/modules/type/blocks/dap_chain_cs_blocks.c
+++ b/modules/type/blocks/dap_chain_cs_blocks.c
@@ -963,12 +963,12 @@ static int s_add_atom_datums(dap_chain_cs_blocks_t *a_blocks, dap_chain_block_ca
 static int s_add_atom_to_blocks(dap_chain_cs_blocks_t *a_blocks, dap_chain_block_cache_t *a_block_cache )
 {
     int l_res = 0;
+    pthread_rwlock_wrlock( &PVT(a_blocks)->rwlock );
     l_res = s_add_atom_datums(a_blocks, a_block_cache);
     debug_if(s_debug_more, L_DEBUG, "Block %s checked, %s", a_block_cache->block_hash_str,
                                                             l_res == (int)a_block_cache->datum_count ?
                                                             "all correct" : "but ledger declined");
-    //All correct, no matter for result
-    pthread_rwlock_wrlock( &PVT(a_blocks)->rwlock );
+    //All correct, no matter for result    
     HASH_ADD(hh, PVT(a_blocks)->blocks,block_hash,sizeof (a_block_cache->block_hash), a_block_cache);
     PVT(a_blocks)->blocks_count++;
     if (! (PVT(a_blocks)->block_cache_first ) )