diff --git a/modules/common/dap_chain_datum_tx.c b/modules/common/dap_chain_datum_tx.c
index 0bdb9260550bdd590f66badd8d3f5076660aa29e..2c8a7d8f450c1f5ce4e3f0f538fa1cae008a2212 100644
--- a/modules/common/dap_chain_datum_tx.c
+++ b/modules/common/dap_chain_datum_tx.c
@@ -227,7 +227,7 @@ int dap_chain_datum_tx_verify_sign(dap_chain_datum_tx_t *tx)
     while(tx_items_pos < tx_items_size) {
         uint8_t *item = tx->tx_items + tx_items_pos;
         size_t l_item_tx_size = dap_chain_datum_item_tx_get_size(item);
-        if(!l_item_tx_size)
+        if(!l_item_tx_size || l_item_tx_size > tx_items_size)
             return -3;
         if(dap_chain_datum_tx_item_get_type(item) == TX_ITEM_TYPE_SIG) {
             dap_chain_tx_sig_t *l_item_tx_sig = (dap_chain_tx_sig_t*) item;
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 089091aad853318aba2599f6a6f5777d10b9f4f1..2f54a6c98138bf589bd0dc8a0c8840c419867e0c 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -503,19 +503,21 @@ static int s_net_states_proc(dap_chain_net_t * l_net)
                 default:
                     log_it(L_INFO, "Node sync error %d",l_res);
                 }
-                l_res = dap_stream_ch_chain_pkt_write(dap_client_get_stream_ch(l_node_client->client, dap_stream_ch_chain_get_id()),
-                                                      DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_GLOBAL_DB_RVRS, l_net->pub.id, l_chain_id,
-                                                      l_net->pub.cell_id, &l_sync_gdb, sizeof(l_sync_gdb));
-                l_res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_SYNCED, timeout_ms);
-                switch (l_res) {
-                case -1:
-                    log_it(L_WARNING,"Timeout with link sync");
-                    break;
-                case 0:
-                    log_it(L_INFO, "Node sync completed");
-                    break;
-                default:
-                    log_it(L_INFO, "Node sync error %d",l_res);
+                if (!dap_client_get_stream_ch(l_node_client->client, dap_stream_ch_chain_get_id())) {
+                    l_res = dap_stream_ch_chain_pkt_write(dap_client_get_stream_ch(l_node_client->client, dap_stream_ch_chain_get_id()),
+                                                          DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_GLOBAL_DB_RVRS, l_net->pub.id, l_chain_id,
+                                                          l_net->pub.cell_id, &l_sync_gdb, sizeof(l_sync_gdb));
+                    l_res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_SYNCED, timeout_ms);
+                    switch (l_res) {
+                    case -1:
+                        log_it(L_WARNING,"Timeout with link sync");
+                        break;
+                    case 0:
+                        log_it(L_INFO, "Node sync completed");
+                        break;
+                    default:
+                        log_it(L_INFO, "Node sync error %d",l_res);
+                    }
                 }
                 l_tmp = dap_list_next(l_tmp);
             }
@@ -542,6 +544,7 @@ static int s_net_states_proc(dap_chain_net_t * l_net)
                     continue;
                 }
                 dap_chain_t * l_chain = NULL;
+                int l_res = 0;
                 DL_FOREACH (l_net->pub.chains, l_chain) {
                     l_node_client->state = NODE_CLIENT_STATE_CONNECTED;
                     dap_stream_ch_chain_sync_request_t l_request ;
@@ -551,37 +554,41 @@ static int s_net_states_proc(dap_chain_net_t * l_net)
                     // wait for finishing of request
                     int timeout_ms = 120000; // 2 min = 120 sec = 120 000 ms
                     // TODO add progress info to console
-                    int l_res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_SYNCED, timeout_ms);
-                    switch (l_res) {
-                    case -1:
-                        log_it(L_WARNING,"Timeout with sync of chain '%s' ", l_chain->name);
-                        break;
-                    case 0:
-                        l_need_flush = true;
-                        log_it(L_INFO, "Sync of chain '%s' completed ", l_chain->name);
-                        break;
-                    default:
-                        log_it(L_ERROR, "Sync of chain '%s' error %d", l_chain->name,l_res);
+                    if (dap_client_get_stream_ch(l_node_client->client, dap_stream_ch_chain_get_id())) {
+                        l_res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_SYNCED, timeout_ms);
+                        switch (l_res) {
+                        case -1:
+                            log_it(L_WARNING,"Timeout with sync of chain '%s' ", l_chain->name);
+                            break;
+                        case 0:
+                            l_need_flush = true;
+                            log_it(L_INFO, "Sync of chain '%s' completed ", l_chain->name);
+                            break;
+                        default:
+                            log_it(L_ERROR, "Sync of chain '%s' error %d", l_chain->name,l_res);
+                        }
                     }
-                    dap_stream_ch_chain_pkt_write(l_ch_chain, DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_CHAINS_RVRS, l_net->pub.id,
-                                                  l_chain->id, l_net->pub.cell_id, &l_request, sizeof(l_request));
-                    l_res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_SYNCED, timeout_ms);
-                    switch (l_res) {
-                    case -1:
-                        log_it(L_WARNING,"Timeout with reverse sync of chain '%s' ", l_chain->name);
-                        break;
-                    case 0:
-                        l_need_flush = true;
-                        log_it(L_INFO, "Reverse sync of chain '%s' completed ", l_chain->name);
-                        // set time of last sync
-                        {
-                            struct timespec l_to;
-                            clock_gettime(CLOCK_MONOTONIC, &l_to);
-                            l_pvt_net->last_sync = l_to.tv_sec;
+                    if (dap_client_get_stream_ch(l_node_client->client, dap_stream_ch_chain_get_id())) {
+                        dap_stream_ch_chain_pkt_write(l_ch_chain, DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_CHAINS_RVRS, l_net->pub.id,
+                                                      l_chain->id, l_net->pub.cell_id, &l_request, sizeof(l_request));
+                        l_res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_SYNCED, timeout_ms);
+                        switch (l_res) {
+                        case -1:
+                            log_it(L_WARNING,"Timeout with reverse sync of chain '%s' ", l_chain->name);
+                            break;
+                        case 0:
+                            l_need_flush = true;
+                            log_it(L_INFO, "Reverse sync of chain '%s' completed ", l_chain->name);
+                            // set time of last sync
+                            {
+                                struct timespec l_to;
+                                clock_gettime(CLOCK_MONOTONIC, &l_to);
+                                l_pvt_net->last_sync = l_to.tv_sec;
+                            }
+                            break;
+                        default:
+                            log_it(L_ERROR, "Reverse sync of chain '%s' error %d", l_chain->name,l_res);
                         }
-                        break;
-                    default:
-                        log_it(L_ERROR, "Reverse sync of chain '%s' error %d", l_chain->name,l_res);
                     }
                 }
                 l_tmp = dap_list_next(l_tmp);