diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c
index e5227ffdbc8c80b71974660a03fdca5b5a8a09cd..4963bc7d5bccc58d332417d71b72aa066dd9133a 100644
--- a/modules/type/blocks/dap_chain_cs_blocks.c
+++ b/modules/type/blocks/dap_chain_cs_blocks.c
@@ -962,9 +962,7 @@ 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);
+    int 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");
@@ -1064,15 +1062,21 @@ static dap_chain_atom_verify_res_t s_callback_atom_add(dap_chain_t * a_chain, da
     pthread_rwlock_wrlock(&PVT(l_blocks)->datums_lock);
     dap_chain_hash_fast_t l_block_hash;
     dap_hash_fast(l_block, l_block_size, &l_block_hash);
-    dap_chain_block_cache_t * l_block_cache = dap_chain_block_cs_cache_get_by_hash(l_blocks, &l_block_hash);
+
+    dap_chain_block_cache_t * l_block_cache = NULL;
+    pthread_rwlock_wrlock(& PVT(l_blocks)->rwlock);
+    HASH_FIND(hh, PVT(l_blocks)->blocks,&l_block_hash, sizeof (l_block_hash), l_block_cache );
+
     if (l_block_cache ){
         debug_if(s_debug_more, L_DEBUG, "... already present in blocks %s", l_block_cache->block_hash_str);
         pthread_rwlock_unlock(&PVT(l_blocks)->datums_lock);
+        pthread_rwlock_unlock(&PVT(l_blocks)->rwlock);
         return ATOM_PASS;
     } else {
         l_block_cache = dap_chain_block_cache_new(l_blocks, &l_block_hash, l_block, l_block_size);
         if (!l_block_cache) {
             log_it(L_DEBUG, "... corrupted block");
+            pthread_rwlock_unlock(&PVT(l_blocks)->rwlock);
             pthread_rwlock_unlock(&PVT(l_blocks)->datums_lock);
             return ATOM_REJECT;
         }
@@ -1093,9 +1097,7 @@ static dap_chain_atom_verify_res_t s_callback_atom_add(dap_chain_t * a_chain, da
         if(l_consensus_check == 1){
              debug_if(s_debug_more, L_DEBUG, "... added");
         }else if (l_consensus_check == DAP_CHAIN_CS_VERIFY_CODE_TX_NO_PREVIOUS){
-            pthread_rwlock_wrlock( &PVT(l_blocks)->rwlock );
             HASH_ADD(hh, PVT(l_blocks)->blocks_tx_treshold, block_hash, sizeof(l_block_cache->block_hash), l_block_cache);
-            pthread_rwlock_unlock( &PVT(l_blocks)->rwlock );
             debug_if(s_debug_more, L_DEBUG, "... tresholded for tx ledger");
         }else{
              debug_if(s_debug_more, L_WARNING, "... error adding (code %d)", l_consensus_check);
@@ -1103,9 +1105,12 @@ static dap_chain_atom_verify_res_t s_callback_atom_add(dap_chain_t * a_chain, da
         }
          // !TODO make chunks add to blocks
     }else if(ret == ATOM_MOVE_TO_THRESHOLD){
-        if (dap_chain_block_cs_cache_get_by_hash(l_blocks, &l_block_hash)) {
+        l_block_cache = NULL;
+        HASH_FIND(hh, PVT(l_blocks)->blocks,&l_block_hash, sizeof (l_block_hash), l_block_cache );
+        if (l_block_cache) {
             // if it was concurrent atom processed before
             dap_chain_block_cache_delete(l_block_cache);
+            pthread_rwlock_unlock(&PVT(l_blocks)->rwlock);
             return ATOM_PASS;
         }
         dap_chain_block_chunks_add( PVT(l_blocks)->chunks,l_block_cache);
@@ -1116,6 +1121,7 @@ static dap_chain_atom_verify_res_t s_callback_atom_add(dap_chain_t * a_chain, da
     debug_if(s_debug_more, L_DEBUG, "Verified atom %p: %s", a_atom, ret == ATOM_ACCEPT ? "accepted" :
                                                    (ret == ATOM_REJECT ? "rejected" : "thresholded"));
     //s_bft_consensus_setup(l_blocks);
+    pthread_rwlock_unlock(&PVT(l_blocks)->rwlock);
     return ret;
 }
 
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index 222e9295555555883b61e0ddf652506e331c0a05..1665ee8b713585c0e11f84127aa566398091cf01 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -524,7 +524,7 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha
     // check if we already have this event
     dap_chain_atom_verify_res_t ret = s_dap_chain_check_if_event_is_present(PVT(l_dag)->events, &l_event_item->hash) ||
             s_dap_chain_check_if_event_is_present(PVT(l_dag)->events_treshold, &l_event_item->hash) ? ATOM_PASS : ATOM_ACCEPT;
-    pthread_mutex_unlock(l_events_mutex);
+    //pthread_mutex_unlock(l_events_mutex);
 
     // verify hashes and consensus
     switch (ret) {
@@ -541,6 +541,7 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha
             log_it(L_DEBUG, "Atom already present");
         }
         DAP_DELETE(l_event_item);
+        pthread_mutex_unlock(l_events_mutex);
         return ret;
     default:
         break;
@@ -548,7 +549,8 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha
 
     switch (ret) {
     case ATOM_MOVE_TO_THRESHOLD:
-        pthread_mutex_lock(l_events_mutex);
+        //pthread_mutex_lock(l_events_mutex);
+        ;
         dap_chain_cs_dag_blocked_t *el = NULL;
         HASH_FIND(hh, PVT(l_dag)->removed_events_from_treshold, &l_event_item->hash, sizeof(dap_chain_hash_fast_t), el);
         if (!el) {
@@ -561,7 +563,7 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha
             if (s_debug_more)
                 log_it(L_DEBUG, "... rejected because the atom was removed from the threshold.");
         }
-        pthread_mutex_unlock(l_events_mutex);
+        //pthread_mutex_unlock(l_events_mutex);
         break;
     case ATOM_ACCEPT: {
         int l_consensus_check = s_dap_chain_add_atom_to_events_table(l_dag, l_event_item);
@@ -588,7 +590,7 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha
                 log_it(L_WARNING, "... added with ledger code %d", l_consensus_check);
             break;
         }
-        pthread_mutex_lock(l_events_mutex);
+        //pthread_mutex_lock(l_events_mutex);
         dap_chain_cs_dag_event_item_t *l_tail = PVT(l_dag)->events ? PVT(l_dag)->events->hh.tbl->tail->prev : NULL;
         if (!l_tail)
             l_tail = PVT(l_dag)->events;
@@ -601,12 +603,13 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha
         else
             HASH_ADD(hh, PVT(l_dag)->events, hash, sizeof(l_event_item->hash), l_event_item);
         s_dag_events_lasts_process_new_last_event(l_dag, l_event_item);
-        pthread_mutex_unlock(l_events_mutex);
+        //pthread_mutex_unlock(l_events_mutex);
     } break;
     default:
         DAP_DELETE(l_event_item); // Neither added, nor freed
         break;
     }
+    pthread_mutex_unlock(l_events_mutex);
     return ret;
 }