diff --git a/dap-sdk/core/libdap.pri b/dap-sdk/core/libdap.pri
index b290a6c1ecd98561c966e9d9d83b1c8653565949..3556d8828e0c29a59f3fc03751f2140501bfd503 100755
--- a/dap-sdk/core/libdap.pri
+++ b/dap-sdk/core/libdap.pri
@@ -2,6 +2,7 @@ QMAKE_CFLAGS_DEBUG = -std=gnu11
 QMAKE_CFLAGS_RELEASE = -std=gnu11
 unix {
     include(src/unix/unix.pri)
+    LIBS += -lrt
 }
 darwin {
     include(src/darwin/darwin.pri)
diff --git a/dap-sdk/core/src/core.pri b/dap-sdk/core/src/core.pri
index 14172b607b0058e8c19c58dd47781a7ed443192c..81ce43173ef2d3b5b0e8aab7941b9283041f368e 100755
--- a/dap-sdk/core/src/core.pri
+++ b/dap-sdk/core/src/core.pri
@@ -1,5 +1,6 @@
 unix {
     include(unix/unix.pri)
+    LIBS += -lrt
 }
 darwin {
     include(darwin/darwin.pri)
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 82c303ddcda2ddc1187c66c57cf6bf3db5aea045..c84b3c4f9b5160bc85f238e5b2b036885a9c1239 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -189,7 +189,7 @@ void s_net_set_go_sync(dap_chain_net_t * a_net)
 {
     if(!a_net)
         return;
-    dap_chain_net_start(a_net);
+    dap_chain_net_state_go_to(a_net, NET_STATE_SYNC_REQUESTED);
 }
 
 /**
@@ -209,10 +209,16 @@ inline static const char * s_net_state_to_str(dap_chain_net_state_t l_state)
  */
 int dap_chain_net_state_go_to(dap_chain_net_t * a_net, dap_chain_net_state_t a_new_state)
 {
-    if (PVT(a_net)->state_target == a_new_state){
-        log_it(L_WARNING,"Already going to state %s",s_net_state_to_str(a_new_state));
+    if (a_new_state == NET_STATE_SYNC_REQUESTED) {
+        if (PVT(a_net)->state_target != NET_STATE_OFFLINE) {
+            PVT(a_net)->state_target = NET_STATE_ONLINE;
+        }
+    } else {
+        if (PVT(a_net)->state_target == a_new_state){
+            log_it(L_WARNING,"Already going to state %s",s_net_state_to_str(a_new_state));
+        }
+        PVT(a_net)->state_target = a_new_state;
     }
-    PVT(a_net)->state_target = a_new_state;
     pthread_mutex_lock( &PVT(a_net)->state_mutex_cond);
     // set flag for sync
     PVT(a_net)->flags |= F_DAP_CHAIN_NET_GO_SYNC;
diff --git a/modules/net/dap_chain_node_cli.c b/modules/net/dap_chain_node_cli.c
index a702cfa8d41015a2dc32a36454c9c9c0ee5fe303..d3ebd6e8bcc637608f580d97a5eba291102d6e42 100644
--- a/modules/net/dap_chain_node_cli.c
+++ b/modules/net/dap_chain_node_cli.c
@@ -1015,7 +1015,6 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
     // News
     //dap_chain_node_cli_cmd_item_create("news", com_news, NULL, "Add News for VPN clients. Language code is a text code like \"en\", \"ru\", \"fr\"",
     //        "news [-text <news text> | -file <filename with news>] -lang <language code> \n");
-
 #endif
     // create thread for waiting of clients
     pthread_t l_thread_id;
diff --git a/modules/net/include/dap_chain_net.h b/modules/net/include/dap_chain_net.h
index 174cfb338759548a74010e1f9f13fd8841777d29..b11b20a1503bbf9b54bb33aba8b997295786aafd 100644
--- a/modules/net/include/dap_chain_net.h
+++ b/modules/net/include/dap_chain_net.h
@@ -61,7 +61,8 @@ typedef  enum dap_chain_net_state{
     NET_STATE_ADDR_REQUEST, // Waiting for address assign
     NET_STATE_SYNC_GDB,
     NET_STATE_SYNC_CHAINS,
-    NET_STATE_ONLINE
+    NET_STATE_ONLINE,
+    NET_STATE_SYNC_REQUESTED
 } dap_chain_net_state_t;
 
 typedef struct dap_chain_net{
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index eb12e8dda3955cb23ca27f342088a9439df36799..1e6acf8751e67bf2731d745c008da99144a21fa4 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -338,7 +338,9 @@ static int s_chain_callback_atom_add(dap_chain_t * a_chain, dap_chain_atom_ptr_t
         l_tx_event->ts_added = l_event_item->ts_added;
         l_tx_event->event = l_event;
         memcpy(&l_tx_event->hash, &l_event_item->hash, sizeof (l_tx_event->hash) );
+        pthread_rwlock_wrlock(&PVT(l_dag)->events_rwlock);
         HASH_ADD(hh,PVT(l_dag)->tx_events,hash,sizeof (l_tx_event->hash),l_tx_event);
+        pthread_rwlock_unlock(&PVT(l_dag)->events_rwlock);
 
         //if ( !l_gdb_priv->is_load_mode ) // If its not load module but mempool proc
         //    l_tx->header.ts_created = time(NULL);
@@ -346,7 +348,6 @@ static int s_chain_callback_atom_add(dap_chain_t * a_chain, dap_chain_atom_ptr_t
 
         // don't save bad transactions to base
         if(dap_chain_ledger_tx_add(a_chain->ledger, l_tx) != 1) {
-            pthread_rwlock_unlock(l_events_rwlock);
             return -1;
         }
         //}else
@@ -354,11 +355,8 @@ static int s_chain_callback_atom_add(dap_chain_t * a_chain, dap_chain_atom_ptr_t
     }
         break;
     default:
-        pthread_rwlock_unlock(l_events_rwlock);
         return -1;
     }
-
-    pthread_rwlock_unlock( l_events_rwlock );
     // Now check the treshold if some events now are ready to move to the main table
     dap_chain_cs_dag_proc_treshold(l_dag);
     return 0;