diff --git a/dap-sdk/io/dap_context.c b/dap-sdk/io/dap_context.c
index c6a405adf3182c68e7f91d16ae799acab726ce42..aecc07655d16a411ac1003faa5d062a57ddd1080 100644
--- a/dap-sdk/io/dap_context.c
+++ b/dap-sdk/io/dap_context.c
@@ -119,11 +119,12 @@ int dap_context_init()
  * @brief dap_context_new
  * @return
  */
-dap_context_t * dap_context_new()
+dap_context_t * dap_context_new(int a_type)
 {
    dap_context_t * l_context = DAP_NEW_Z(dap_context_t);
    static atomic_uint_fast64_t s_context_id_max = 0;
    l_context->id = s_context_id_max;
+   l_context->type = a_type;
    s_context_id_max++;
 
    l_context->event_exit = dap_context_create_event( NULL, s_event_exit_callback);
diff --git a/dap-sdk/io/dap_events.c b/dap-sdk/io/dap_events.c
index d1e5d6d18eadab265158eddcc9d15fb83886f26a..368f81dec3945f68f1e3e09c86e8bfe5e1560bc5 100644
--- a/dap-sdk/io/dap_events.c
+++ b/dap-sdk/io/dap_events.c
@@ -279,7 +279,7 @@ int dap_events_start()
         dap_worker_t * l_worker = DAP_NEW_Z(dap_worker_t);
 
         l_worker->id = i;
-        l_worker->context = dap_context_new();
+        l_worker->context = dap_context_new(DAP_CONTEXT_TYPE_WORKER);
         l_worker->context->worker = l_worker;
 
 
diff --git a/dap-sdk/io/dap_proc_thread.c b/dap-sdk/io/dap_proc_thread.c
index d8b9820ca467c8cf3ed6b07280ce605e11a23604..067aaba92490258421cb1032dfb54f012fb3ebf5 100644
--- a/dap-sdk/io/dap_proc_thread.c
+++ b/dap-sdk/io/dap_proc_thread.c
@@ -83,7 +83,7 @@ int l_ret = 0;
     for (uint32_t i = 0; i < s_threads_count; i++ )
     {
         dap_proc_thread_t * l_thread = s_threads + i;
-        l_thread->context = dap_context_new();
+        l_thread->context = dap_context_new(DAP_CONTEXT_TYPE_PROC_THREAD);
         l_thread->context->proc_thread = l_thread;
 
         if ( (l_ret = dap_context_run(l_thread->context,i,DAP_CONTEXT_POLICY_TIMESHARING,2,
diff --git a/dap-sdk/io/include/dap_context.h b/dap-sdk/io/include/dap_context.h
index 362080bc7c4b04a90ae1888a71ba999f9833a1a4..3e1cb988913115c1d2506df96dde439025128cad 100644
--- a/dap-sdk/io/include/dap_context.h
+++ b/dap-sdk/io/include/dap_context.h
@@ -56,6 +56,7 @@ typedef struct dap_context {
     // Compatibility fields, in future should be replaced with _inheritor
     dap_proc_thread_t * proc_thread; // If the context belongs to proc_thread
     dap_worker_t * worker; // If the context belongs to worker
+    int type; // Context type
 
     // pthread-related fields
     pthread_cond_t started_cond; // Fires when thread started and pre-loop callback executes
@@ -135,7 +136,7 @@ int dap_context_init(); // Init
 void dap_context_deinit(); // Deinit
 
 // New context create and run.
-dap_context_t * dap_context_new();
+dap_context_t * dap_context_new(int a_type);
 
 // Run new context in dedicated thread.
 // ATTENTION: after running the context nobody have to access it outside its own running thread
diff --git a/dap-sdk/io/include/dap_proc_thread.h b/dap-sdk/io/include/dap_proc_thread.h
index 372414395b6b14e18f48674afac4a51e9c4a98ea..ce37da6ada63265a434ca7e2c10d97842082bb11 100644
--- a/dap-sdk/io/include/dap_proc_thread.h
+++ b/dap-sdk/io/include/dap_proc_thread.h
@@ -45,6 +45,7 @@ typedef struct dap_proc_thread{
 
     void * _inheritor;
 } dap_proc_thread_t;
+#define DAP_CONTEXT_TYPE_PROC_THREAD 1
 
 int dap_proc_thread_init(uint32_t a_threads_count);
 void dap_proc_thread_deinit();
diff --git a/dap-sdk/io/include/dap_worker.h b/dap-sdk/io/include/dap_worker.h
index 672dfd4e52a21f616fb427378cd6ec85a9831c0c..03f9aef80a59b17bcd96328658cb6d67ba1d32de 100644
--- a/dap-sdk/io/include/dap_worker.h
+++ b/dap-sdk/io/include/dap_worker.h
@@ -61,6 +61,8 @@ typedef struct dap_worker
     void * _inheritor;
 } dap_worker_t;
 
+#define DAP_CONTEXT_TYPE_WORKER   10
+
 // Message for reassigment
 typedef struct dap_worker_msg_reassign{
     dap_events_socket_t * esocket;
diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c
index 085d33ddb6624b7aa49e9f5955eb2798a210c315..bc34daaae30397b78a843ee489214194bf374ae9 100644
--- a/modules/chain/dap_chain_ledger.c
+++ b/modules/chain/dap_chain_ledger.c
@@ -3214,7 +3214,7 @@ int dap_chain_ledger_tx_remove(dap_ledger_t *a_ledger, dap_chain_hash_fast_t *a_
         // Remove it from cache
         char *l_gdb_group = dap_chain_ledger_get_gdb_group(a_ledger, DAP_CHAIN_LEDGER_TXS_STR);
         char *l_tx_hash_str = dap_chain_hash_fast_to_str_new(a_tx_hash);
-        dap_chain_global_db_gr_del( l_tx_hash_str, l_gdb_group);
+        dap_global_db_del(l_gdb_group, l_tx_hash_str, NULL, NULL);
         DAP_DELETE(l_tx_hash_str);
         DAP_DELETE(l_gdb_group);
         l_ret = 1;
@@ -3271,7 +3271,7 @@ void dap_chain_ledger_purge(dap_ledger_t *a_ledger, bool a_preserve_db)
     }
     if (!a_preserve_db) {
         l_gdb_group = dap_chain_ledger_get_gdb_group(a_ledger, DAP_CHAIN_LEDGER_TXS_STR);
-        dap_chain_global_db_gr_del(NULL, l_gdb_group);
+        dap_global_db_del(l_gdb_group, NULL, NULL, NULL);
         DAP_DELETE(l_gdb_group);
     }
 
@@ -3284,7 +3284,7 @@ void dap_chain_ledger_purge(dap_ledger_t *a_ledger, bool a_preserve_db)
     }
     if (!a_preserve_db) {
         l_gdb_group = dap_chain_ledger_get_gdb_group(a_ledger, DAP_CHAIN_LEDGER_SPENT_TXS_STR);
-        dap_chain_global_db_gr_del(NULL, l_gdb_group);
+        dap_global_db_del(l_gdb_group, NULL, NULL, NULL);
         DAP_DELETE(l_gdb_group);
     }
 
@@ -3297,7 +3297,7 @@ void dap_chain_ledger_purge(dap_ledger_t *a_ledger, bool a_preserve_db)
     }
     if (!a_preserve_db) {
         l_gdb_group = dap_chain_ledger_get_gdb_group(a_ledger, DAP_CHAIN_LEDGER_BALANCES_STR);
-        dap_chain_global_db_gr_del(NULL, l_gdb_group);
+        dap_global_db_del(l_gdb_group, NULL, NULL, NULL);
         DAP_DELETE(l_gdb_group);
     }
 
@@ -3321,10 +3321,10 @@ void dap_chain_ledger_purge(dap_ledger_t *a_ledger, bool a_preserve_db)
     }
     if (!a_preserve_db) {
         l_gdb_group = dap_chain_ledger_get_gdb_group(a_ledger, DAP_CHAIN_LEDGER_TOKENS_STR);
-        dap_chain_global_db_gr_del(NULL, l_gdb_group);
+        dap_global_db_del(l_gdb_group, NULL, NULL, NULL);
         DAP_DELETE(l_gdb_group);
         l_gdb_group = dap_chain_ledger_get_gdb_group(a_ledger, DAP_CHAIN_LEDGER_EMISSIONS_STR);
-        dap_chain_global_db_gr_del(NULL, l_gdb_group);
+        dap_global_db_del(l_gdb_group, NULL, NULL, NULL);
         DAP_DELETE(l_gdb_group);
     }
 
diff --git a/modules/consensus/block-ton/dap_chain_cs_block_ton.c b/modules/consensus/block-ton/dap_chain_cs_block_ton.c
index b78a1a069da59749882f2be9cc6cfb6fc9114fc5..b49ac4abb0952e8c7acc926889f885fc40c5e2dc 100644
--- a/modules/consensus/block-ton/dap_chain_cs_block_ton.c
+++ b/modules/consensus/block-ton/dap_chain_cs_block_ton.c
@@ -1033,7 +1033,7 @@ static bool s_session_round_finish_callback_load_store(dap_global_db_context_t *
             if ( l_store->hdr.round_id.uint64 != l_session->cur_round.id.uint64
                     ||  (l_store->hdr.round_id.uint64 == l_session->cur_round.id.uint64
                             && !l_store->hdr.sign_collected) ) {
-                dap_chain_global_db_gr_del(dap_strdup(a_values[i].key), l_session->gdb_group_store);
+                dap_global_db_del_unsafe(a_global_db_context,l_session->gdb_group_store,a_values[i].key );
                 if ( l_store->hdr.sign_collected ) {
                     l_store_candidate_ready = l_store;
                 }
@@ -1758,12 +1758,15 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
 								(l_message->sign_n_message+l_message->hdr.sign_size);
 			dap_chain_hash_fast_t *l_candidate_hash = &l_reject->candidate_hash;
 
+            pthread_rwlock_rdlock(&l_session->rwlock);
+
 			if ( s_hash_is_null(l_candidate_hash) ) {
 				if (PVT(l_session->ton)->debug)
                     log_it(L_MSG, "TON: net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hu Receive REJECT: NULL",
 							l_session->chain->net_name, l_session->chain->name,
 								l_session->cur_round.id.uint64, l_session->attempt_current_number);
-				goto handler_finish_save;
+                pthread_rwlock_unlock(&l_session->rwlock);
+                goto handler_finish_save;
 			}
 			char *l_candidate_hash_str = dap_chain_hash_fast_to_str_new(l_candidate_hash);
 
@@ -1772,14 +1775,13 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
 						l_session->chain->net_name, l_session->chain->name, l_session->cur_round.id.uint64,
 							l_session->attempt_current_number, l_candidate_hash_str);
 
-			pthread_rwlock_rdlock(&l_session->rwlock);
 			
 			uint16_t l_reject_count = s_session_message_count(
 						l_session, DAP_TON$ROUND_CUR, DAP_STREAM_CH_CHAIN_MESSAGE_TYPE_REJECT,
 									l_candidate_hash, NULL);
 			l_reject_count++;
             if (l_reject_count * 3 >= l_session->cur_round.validators_count * 2) {
-				dap_chain_global_db_gr_del(dap_strdup(l_candidate_hash_str), l_session->gdb_group_store);
+                dap_global_db_del_sync(l_session->gdb_group_store, l_candidate_hash_str);
 				dap_chain_hash_fast_t l_my_candidate_hash;
 				dap_hash_fast(l_session->my_candidate, l_session->my_candidate_size, &l_my_candidate_hash);
 				if (memcmp(&l_my_candidate_hash, l_candidate_hash,
@@ -2221,7 +2223,7 @@ static void s_message_chain_add(dap_chain_cs_block_ton_session_t *a_session, dap
 									dap_chain_cs_block_ton_message_t *a_message,
 									size_t a_message_size, dap_chain_hash_fast_t *a_message_hash) {
 	
-	pthread_rwlock_rdlock(&a_session->rwlock);
+    pthread_rwlock_wrlock(&a_session->rwlock);
 	dap_chain_cs_block_ton_message_t *l_message = a_message;
 
 	dap_chain_cs_block_ton_message_getinfo_t *l_getinfo =
diff --git a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
index 79657b0b77f971e8771a307a03609965179958f6..3548207c302dd4939b1cc7256386a11f546b6e61 100644
--- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
+++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
@@ -472,13 +472,13 @@ static void s_round_event_clean_dup(dap_chain_cs_dag_t * a_dag, const char *a_ev
     }
 
     size_t l_events_round_size = 0;
-    dap_store_obj_t *l_events_round = dap_chain_global_db_driver_read(a_dag->gdb_group_events_round_new, NULL, &l_events_round_size);
+    dap_store_obj_t *l_events_round = dap_global_db_get_all_raw_sync( a_dag->gdb_group_events_round_new, 0, &l_events_round_size);
     uint16_t l_max_signs_count = 0;
     //char * l_max_signs_hash;
     for (size_t l_index = 0; l_index<l_events_round_size; l_index++) {
         dap_chain_cs_dag_event_round_item_t *l_event_round_item = (dap_chain_cs_dag_event_round_item_t *)l_events_round[l_index].value;
         if (!l_event_round_item || !l_events_round[l_index].value_len) {
-            dap_chain_global_db_gr_del(l_events_round[l_index].key, l_gdb_group_events);
+            dap_global_db_del_sync(l_gdb_group_events, l_events_round[l_index].key);
             continue;
         }
         size_t l_event_size = l_event_round_item->event_size;
@@ -491,7 +491,7 @@ static void s_round_event_clean_dup(dap_chain_cs_dag_t * a_dag, const char *a_ev
             if( l_offset_from_beginning >= l_event_size){
                 log_it(L_WARNING,"Incorrect size with event %p: caled size excl signs %zd is bigger or equal then event size %zd",
                        l_event, l_offset_from_beginning, l_event_size);
-                dap_chain_global_db_gr_del(l_events_round[l_index].key, l_gdb_group_events);
+                dap_global_db_del_sync(l_gdb_group_events, l_events_round[l_index].key);
                 continue; // Incorrest size
             }
             size_t l_signs_count = 0;
@@ -509,7 +509,7 @@ static void s_round_event_clean_dup(dap_chain_cs_dag_t * a_dag, const char *a_ev
             }
         }
         else {
-            dap_chain_global_db_gr_del(l_events_round[l_index].key, l_gdb_group_events);
+            dap_global_db_del_sync(l_gdb_group_events, l_events_round[l_index].key);
         }
     }
 
@@ -519,7 +519,7 @@ static void s_round_event_clean_dup(dap_chain_cs_dag_t * a_dag, const char *a_ev
     HASH_ITER(hh, s_event_clean_dup_items, l_clean_item, l_clean_tmp) {
         if ( l_clean_item->signs_count < l_max_signs_count ) {
             // delete dup by min signatures
-            dap_chain_global_db_gr_del( l_clean_item->hash_str, l_gdb_group_events);
+            dap_global_db_del_sync(l_gdb_group_events, l_clean_item->hash_str);
             HASH_DEL(s_event_clean_dup_items, l_clean_item);
             DAP_DELETE(l_clean_item);
         } else if ( l_clean_item->ts_update > l_max_ts_update ) {
@@ -530,7 +530,7 @@ static void s_round_event_clean_dup(dap_chain_cs_dag_t * a_dag, const char *a_ev
     HASH_ITER(hh, s_event_clean_dup_items, l_clean_item, l_clean_tmp) {
         if ( dap_strcmp(l_max_ts_update_hash, l_clean_item->hash_str) != 0 ) {
             // delete dup by older
-            dap_chain_global_db_gr_del(l_clean_item->hash_str, l_gdb_group_events);
+            dap_global_db_del_sync(l_gdb_group_events, l_clean_item->hash_str);
         }
         HASH_DEL(s_event_clean_dup_items, l_clean_item);
         DAP_DELETE(l_clean_item);
@@ -592,18 +592,37 @@ static void s_callback_get_round_info(dap_chain_cs_dag_t * a_dag, dap_chain_cs_d
     a_event_round_info->reject_count = 0;
 }
 
-static bool s_callback_round_event_to_chain(dap_chain_cs_dag_poa_callback_timer_arg_t * a_callback_arg) {
-    dap_chain_cs_dag_t * l_dag = a_callback_arg->dag;
-    char * l_gdb_group_events = l_dag->gdb_group_events_round_new;
-    dap_chain_cs_dag_event_round_item_t * l_round_item = NULL;
+/**
+ * @brief s_callback_round_event_to_chain_callback_get_round_item
+ * @param a_global_db_context
+ * @param a_rc
+ * @param a_group
+ * @param a_key
+ * @param a_value
+ * @param a_value_size
+ * @param a_value_ts
+ * @param a_is_pinned
+ * @param a_arg
+ */
+static void s_callback_round_event_to_chain_callback_get_round_item(dap_global_db_context_t * a_global_db_context,
+                                                                    int a_rc, const char * a_group,
+                                                                    const char * a_key,
+                                                                    const void * a_value,
+                                                                    const size_t a_value_size,
+                                                                    dap_nanotime_t a_value_ts,
+                                                                    bool a_is_pinned, void * a_arg)
+{
+    dap_chain_cs_dag_poa_callback_timer_arg_t * l_callback_arg = (dap_chain_cs_dag_poa_callback_timer_arg_t *) a_arg;
+    dap_chain_cs_dag_t * l_dag = l_callback_arg->dag;
+    dap_chain_cs_dag_event_round_item_t * l_round_item = (dap_chain_cs_dag_event_round_item_t *) a_value;
     dap_chain_cs_dag_event_t * l_event;
     size_t l_event_size = 0;
     size_t l_round_item_size = 0;
 
-    if ( (l_round_item = (dap_chain_cs_dag_event_round_item_t *)dap_chain_global_db_gr_get(
-                                    a_callback_arg->l_event_hash_hex_str, &l_round_item_size, l_gdb_group_events) ) == NULL ) {
+
+    if ( l_round_item == NULL ) {
         log_it(L_NOTICE,"Can't find event %s in round.new. The hash may have changed by reason the addition of a new signature.",
-                        a_callback_arg->l_event_hash_hex_str);
+                        l_callback_arg->l_event_hash_hex_str);
     } else {
         l_event = (dap_chain_cs_dag_event_t *)l_round_item->event_n_signs;
         l_event_size = l_round_item->event_size;
@@ -612,9 +631,9 @@ static bool s_callback_round_event_to_chain(dap_chain_cs_dag_poa_callback_timer_
         dap_chain_atom_verify_res_t l_res = l_dag->chain->callback_atom_add(l_dag->chain, l_new_atom, l_event_size);
         if (l_res == ATOM_PASS || l_res == ATOM_REJECT) { // Add new atom in chain
             DAP_DELETE(l_new_atom);
-            log_it(L_NOTICE, "Event %s not added in chain", a_callback_arg->l_event_hash_hex_str);
+            log_it(L_NOTICE, "Event %s not added in chain", l_callback_arg->l_event_hash_hex_str);
         } else {
-            log_it(L_NOTICE, "Event %s added in %s successfully", a_callback_arg->l_event_hash_hex_str,
+            log_it(L_NOTICE, "Event %s added in %s successfully", l_callback_arg->l_event_hash_hex_str,
                                                                   l_res == ATOM_ACCEPT ? "chain" : "threshold");
             if (dap_chain_atom_save(l_dag->chain, l_new_atom, l_event_size, l_dag->chain->cells->id) > 0) {
                 // dap_chain_cs_dag_event_broadcast(l_dag, DAP_DB$K_OPTYPE_DEL,
@@ -646,11 +665,26 @@ static bool s_callback_round_event_to_chain(dap_chain_cs_dag_poa_callback_timer_
         }
         DAP_DELETE(l_round_item);
         // delete events from db
-        dap_chain_global_db_gr_del(a_callback_arg->l_event_hash_hex_str, l_dag->gdb_group_events_round_new);
+        dap_global_db_del_unsafe(a_global_db_context, a_group, l_callback_arg->l_event_hash_hex_str);
     }
 
-    DAP_DELETE(a_callback_arg->l_event_hash_hex_str);
-    DAP_DELETE(a_callback_arg);
+    DAP_DELETE(l_callback_arg->l_event_hash_hex_str);
+    DAP_DELETE(l_callback_arg);
+
+}
+
+/**
+ * @brief s_callback_round_event_to_chain
+ * @param a_callback_arg
+ * @return
+ */
+static bool s_callback_round_event_to_chain(dap_chain_cs_dag_poa_callback_timer_arg_t * a_callback_arg)
+{
+    dap_chain_cs_dag_t * l_dag = a_callback_arg->dag;
+    char * l_gdb_group_events = l_dag->gdb_group_events_round_new;
+    dap_global_db_get(l_gdb_group_events, a_callback_arg->l_event_hash_hex_str,s_callback_round_event_to_chain_callback_get_round_item,
+                      a_callback_arg);
+
     return false;
 }
 
@@ -766,6 +800,9 @@ static dap_chain_cs_dag_event_t * s_callback_event_create(dap_chain_cs_dag_t * a
 static int s_callback_event_round_sync(dap_chain_cs_dag_t * a_dag, const char a_op_code, const char *a_group,
                                         const char *a_key, const void *a_value, const size_t a_value_size)
 {
+    dap_global_db_context_t * l_gdb_context = dap_global_db_context_current();
+    assert(l_gdb_context);
+
     if ( a_value == NULL || a_op_code != DAP_DB$K_OPTYPE_ADD || !a_value || !a_value_size) {
         return 0;
     }
@@ -777,6 +814,7 @@ static int s_callback_event_round_sync(dap_chain_cs_dag_t * a_dag, const char a_
         s_round_event_clean_dup(a_dag, a_key); // Delete dup for manual mode
         return 0;
     }
+
     dap_chain_cs_dag_event_round_item_t *l_round_item =
                         (dap_chain_cs_dag_event_round_item_t *)DAP_DUP_SIZE(a_value,a_value_size);
     size_t l_event_size = l_round_item->event_size;
@@ -822,7 +860,7 @@ static int s_callback_event_round_sync(dap_chain_cs_dag_t * a_dag, const char a_
             }
             else {
                 // delete from gdb if reject_count is max
-                dap_chain_global_db_gr_del(a_key, a_group);
+                dap_global_db_del_unsafe(l_gdb_context, a_group, a_key);
                 l_deleted = true;
             }
         }
diff --git a/modules/global-db/dap_chain_global_db_remote.c b/modules/global-db/dap_chain_global_db_remote.c
index e6f81e9f9e088f6f08c0e3ccbcb4dc4c887701f0..731de0fb7c6384e07fc17c6320e7f081849eafe7 100644
--- a/modules/global-db/dap_chain_global_db_remote.c
+++ b/modules/global-db/dap_chain_global_db_remote.c
@@ -42,7 +42,7 @@ static void *s_list_thread_proc(void *arg)
         dap_nanotime_t l_time_now = dap_nanotime_now();
         while (l_group_cur->count && l_dap_db_log_list->is_process) { // Number of records to be synchronized
             size_t l_item_count = min(64, l_group_cur->count);
-            dap_store_obj_t *l_objs = dap_global_db_store_objs_get_sync(l_group_cur->name, l_item_start, &l_item_count);
+            dap_store_obj_t *l_objs = dap_global_db_get_all_raw_sync(l_group_cur->name, l_item_start, &l_item_count);
             if (!l_dap_db_log_list->is_process)
                 return NULL;
             // go to next group
diff --git a/modules/global-db/dap_global_db.c b/modules/global-db/dap_global_db.c
index f125d08bc45e30911f87a51692b6054052e3d4ed..17d6d4b80ce99e2c584fd74fb66b86a12f300f13 100644
--- a/modules/global-db/dap_global_db.c
+++ b/modules/global-db/dap_global_db.c
@@ -211,7 +211,7 @@ int dap_global_db_init(const char * a_storage_path, const char * a_driver_name)
 
     // Create and run its own context
     if(s_context == NULL){
-        s_context = dap_context_new();
+        s_context = dap_context_new(DAP_CONTEXT_TYPE_GLOBAL_DB);
         s_context->_inheritor = s_context_global_db = DAP_NEW_Z(struct dap_global_db_context);
         s_context_global_db->context = s_context;
         if (dap_context_run(s_context, -1, DAP_CONTEXT_POLICY_DEFAULT, 0, DAP_CONTEXT_FLAG_WAIT_FOR_STARTED,
@@ -1023,7 +1023,7 @@ static bool s_objs_get_callback (dap_global_db_context_t * a_global_db_context,i
  * @param a_objs_count
  * @return Group's objects
  */
-dap_global_db_obj_t* dap_global_db_objs_get(const char *a_group, size_t *a_objs_count)
+dap_global_db_obj_t* dap_global_db_get_all_raw_sync(const char *a_group, size_t *a_objs_count)
 {
     struct objs_get * l_args = DAP_NEW_Z(struct objs_get);
     pthread_mutex_init(&l_args->mutex,NULL);
@@ -1224,7 +1224,7 @@ static bool s_store_objs_get_callback (dap_global_db_context_t * a_global_db_con
     return false;
 }
 
-dap_store_obj_t* dap_global_db_store_objs_get_sync(const char *a_group, uint64_t a_first_id, size_t *a_objs_count)
+dap_store_obj_t* dap_global_db_get_all_raw_sync(const char *a_group, uint64_t a_first_id, size_t *a_objs_count)
 {
     struct store_objs_get * l_args = DAP_NEW_Z(struct store_objs_get);
     pthread_mutex_init(&l_args->mutex,NULL);
@@ -1244,6 +1244,19 @@ dap_store_obj_t* dap_global_db_store_objs_get_sync(const char *a_group, uint64_t
 
 }
 
+/**
+ * @brief dap_global_db_context_current
+ * @return
+ */
+dap_global_db_context_t * dap_global_db_context_current()
+{
+    dap_context_t * l_context = dap_context_current();
+    if(l_context->type == DAP_CONTEXT_TYPE_GLOBAL_DB)
+        return (dap_global_db_context_t *) l_context->_inheritor;
+    else
+        return NULL;
+
+}
 /**
  * @brief dap_global_db_del_unsafe
  * @param a_group
diff --git a/modules/global-db/include/dap_chain_global_db.h b/modules/global-db/include/dap_chain_global_db.h
index 06d7da0c0c2298ebe0001e8b9e2dd147fb6b5bcb..d2cbf613df559e362e3a6eda2e5b2c7cdd1c5e4c 100644
--- a/modules/global-db/include/dap_chain_global_db.h
+++ b/modules/global-db/include/dap_chain_global_db.h
@@ -30,8 +30,4 @@ uint8_t * dap_chain_global_db_gr_get(const char *a_key, size_t *a_data_len_out,
  */
 bool dap_chain_global_db_gr_set(const char *a_key,  const void *a_value, size_t a_value_len, const char *a_group);
 
-/**
- * Delete entry from base
- */
-bool dap_chain_global_db_gr_del(const char *a_key, const char *a_group);
 
diff --git a/modules/global-db/include/dap_global_db.h b/modules/global-db/include/dap_global_db.h
index 9a188a98ab78063ad8ed172a0b1d9ef3555bba1e..ce4b42860fb1cc6d0ee527d2afb9a0f85aca9c2f 100644
--- a/modules/global-db/include/dap_global_db.h
+++ b/modules/global-db/include/dap_global_db.h
@@ -43,6 +43,8 @@ typedef struct dap_global_db_context
     dap_context_t * context; // parent pointer
 } dap_global_db_context_t;
 
+#define DAP_CONTEXT_TYPE_GLOBAL_DB   100
+
 typedef struct dap_store_obj {
     uint64_t id;
     dap_nanotime_t timestamp;
@@ -116,18 +118,20 @@ int dap_global_db_flush( dap_global_db_callback_result_t a_callback, void * a_ar
 
 int dap_global_db_context_exec (dap_global_db_callback_t a_callback, void * a_arg);
 
-// === Sync functions ===
 
-// --- dap_global_db_obj_t and dap_store_obj_t sync funcs ---
+// Clear global_db_obj array
 void dap_global_db_objs_delete(dap_global_db_obj_t *a_objs, size_t a_count);
-dap_global_db_obj_t* dap_global_db_objs_get(const char *a_group, size_t *a_objs_count);
-dap_store_obj_t* dap_global_db_store_objs_get_sync(const char *a_group, uint64_t a_first_id, size_t *a_objs_count);
-// --- common usage sync funcs
+
+// === Sync functions ===
+
+dap_global_db_obj_t* dap_global_db_get_all_sync(const char *a_group, size_t *a_objs_count);
+dap_store_obj_t* dap_global_db_get_all_raw_sync(const char *a_group, uint64_t a_first_id, size_t *a_objs_count);
 int dap_global_db_set_sync(const char * a_group, const char *a_key, const void * a_value, const size_t a_value_length, bool a_pin_value );
 byte_t* dap_global_db_get_sync(const char * a_group,const char *a_key, size_t *a_data_size, bool *a_is_pinned, dap_nanotime_t * a_ts);
 int dap_global_db_del_sync(const char * a_group, const char *a_key);
 int dap_global_db_flush_sync();
 
-// ==== Unsage functions (for own context call only) ===
+// ==== Unsafe functions (for own context call only) ===
+dap_global_db_context_t * dap_global_db_context_current();
 int dap_global_db_del_unsafe(dap_global_db_context_t * a_global_db_context, const char * a_group, const char *a_key);
 
diff --git a/modules/mempool/dap_chain_mempool.c b/modules/mempool/dap_chain_mempool.c
index 339e51ed36239ed367b87c6467b49ef8490b8117..b3c2fd9e2a23ef219d9b003b981c8b50bf69ca0f 100644
--- a/modules/mempool/dap_chain_mempool.c
+++ b/modules/mempool/dap_chain_mempool.c
@@ -871,27 +871,6 @@ static void enc_http_reply_encode_new(struct dap_http_simple *a_http_simple, dap
 
 }
 
-/**
- * @brief s_gdb_datum_pool_delete_callback
- * @param a_global_db_context
- * @param a_rc
- * @param a_group
- * @param a_key
- * @param a_value
- * @param a_value_size
- * @param a_value_ts
- * @param a_is_pinned
- * @param a_arg
- */
-static void s_gdb_datum_pool_delete_callback(dap_global_db_context_t * a_global_db_context,int a_rc, const char * a_group, const char * a_key, const void * a_value, const size_t a_value_size, dap_nanotime_t a_value_ts, bool a_is_pinned, void * a_arg)
-{
-    if( a_rc == DAP_GLOBAL_DB_RC_SUCCESS){
-        log_it(L_INFO, "Delete hash: key=%s result: Ok", a_key);
-    } else {
-        log_it(L_INFO, "Delete hash: key=%s result: False!", a_key);
-    }
-}
-
 /**
  * @brief
  * @param cl_st HTTP server instance
@@ -968,8 +947,13 @@ void chain_mempool_proc(struct dap_http_simple *cl_st, void * arg)
 
                 case DAP_DATUM_MEMPOOL_DEL: // delete datum in base
                     strcpy(cl_st->reply_mime, "text/text");
-                    dap_global_db_del( l_gdb_datum_pool, a_key, s_gdb_datum_pool_delete_callback, NULL );
-                    l_enc_delegate->response = dap_strdup("1");
+                    if (dap_global_db_del_sync(l_gdb_datum_pool, a_key) == 0){
+                        l_enc_delegate->response = dap_strdup("1");
+                        log_it(L_INFO, "Delete hash: key=%s result: Ok", a_key);
+                    } else {
+                        l_enc_delegate->response = dap_strdup("0");
+                        log_it(L_INFO, "Delete hash: key=%s result: False!", a_key);
+                    }
                     // TODO rework to async processing and return result of delete action
                     *return_code = Http_Status_OK;
                     enc_http_reply_encode_new(cl_st, l_enc_key, l_enc_delegate);
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 30f6d48486ea66e5d9e4191e98096a66b1d25268..53704c4fbe10a50c264e5e7efa3ea10c11421def 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -2214,7 +2214,7 @@ static int s_cli_net(int argc, char **argv, char **a_str_reply)
                     return -11;
                 }
                 size_t l_objs_count;
-                dap_global_db_obj_t *l_objs = dap_global_db_objs_get(l_gdb_group_str, &l_objs_count);
+                dap_global_db_obj_t *l_objs = dap_global_db_get_all_sync(l_gdb_group_str, &l_objs_count);
                 DAP_DELETE(l_gdb_group_str);
                 dap_string_t *l_reply = dap_string_new("");
                 for (size_t i = 0; i < l_objs_count; i++) {
@@ -3140,7 +3140,7 @@ dap_list_t* dap_chain_net_get_node_list(dap_chain_net_t * l_net)
     dap_global_db_obj_t *l_objs = NULL;
     size_t l_nodes_count = 0;
     // read all node
-    l_objs = dap_global_db_objs_get(l_net->pub.gdb_nodes, &l_nodes_count);
+    l_objs = dap_global_db_get_all_sync(l_net->pub.gdb_nodes, &l_nodes_count);
     if(!l_nodes_count || !l_objs)
         return l_node_list;
     for(size_t i = 0; i < l_nodes_count; i++) {
@@ -3196,7 +3196,7 @@ bool s_proc_mempool_callback_load(dap_global_db_context_t * a_global_db_context,
             if (l_verify_datum != 0){
                 log_it(L_WARNING, "Datum doesn't pass verifications (code %d), delete such datum from pool",
                                          l_verify_datum);
-                dap_chain_global_db_gr_del( a_values[i].key, a_group);
+                dap_global_db_del_unsafe( a_global_db_context, a_group, a_values[i].key);
                 l_datums[i] = NULL;
             }else{
                 l_datums[i] = l_datum;
@@ -3215,7 +3215,7 @@ bool s_proc_mempool_callback_load(dap_global_db_context_t * a_global_db_context,
         // Delete processed objects
         size_t l_objs_processed_tmp = (l_objs_processed > 15) ? min(l_objs_processed, 10) : l_objs_processed;
         for(size_t i = 0; i < l_objs_processed; i++) {
-            dap_chain_global_db_gr_del(a_values[i].key, a_group);
+            dap_global_db_del_unsafe(a_global_db_context, a_group, a_values[i].key );
             if(i < l_objs_processed_tmp) {
                 dap_string_append_printf(l_str_tmp, "New event created, removed datum 0x%s from mempool \n",
                         a_values[i].key);
@@ -3382,7 +3382,7 @@ static bool s_net_check_acl(dap_chain_net_t *a_net, dap_chain_hash_fast_t *a_pke
             const char *l_acl_gdb = dap_config_get_item_str(l_cfg, "auth", "acl_accept_ca_gdb");
             if (l_acl_gdb) {
                 size_t l_objs_count;
-                dap_global_db_obj_t *l_objs = dap_global_db_objs_get(l_acl_gdb, &l_objs_count);
+                dap_global_db_obj_t *l_objs = dap_global_db_get_all_sync(l_acl_gdb, &l_objs_count);
                 for (size_t i = 0; i < l_objs_count; i++) {
                     if (!strcmp(l_objs[i].key, l_auth_hash_str)) {
                         l_authorized = true;
diff --git a/modules/net/dap_chain_node.c b/modules/net/dap_chain_node.c
index cd13b78d95fefc83aacb42ce8d9b8499217f84d1..744c68add6824b510298943047d611312c2872fd 100644
--- a/modules/net/dap_chain_node.c
+++ b/modules/net/dap_chain_node.c
@@ -104,7 +104,7 @@ dap_chain_node_addr_t * dap_chain_node_alias_find(dap_chain_net_t * a_net,const
  */
 bool dap_chain_node_alias_delete(dap_chain_net_t * a_net,const char *a_alias)
 {
-    return  dap_chain_global_db_gr_del(a_alias, a_net->pub.gdb_nodes_aliases);
+    return  dap_global_db_del_sync(a_net->pub.gdb_nodes_aliases, a_alias) == 0;
 }
 
 /**
@@ -269,7 +269,9 @@ static void s_chain_node_mempool_autoproc_notify(void *a_arg, const char a_op_co
         return;
     dap_chain_datum_t *l_datum = (dap_chain_datum_t *)a_value;
     if (dap_chain_node_mempool_process(l_chain, l_datum) >= 0) {
-        dap_chain_global_db_gr_del(a_key, a_group);
+        dap_global_db_context_t * l_gdb_context = dap_global_db_context_current();
+        assert(l_gdb_context);
+        dap_global_db_del_unsafe(l_gdb_context,a_group, a_key);
     }
 }
 
@@ -306,7 +308,7 @@ bool dap_chain_node_mempool_autoproc_init()
             char *l_gdb_group_mempool = NULL;
             l_gdb_group_mempool = dap_chain_net_get_gdb_group_mempool_new(l_chain);
             size_t l_objs_size = 0;
-            dap_global_db_obj_t *l_objs = dap_global_db_objs_get(l_gdb_group_mempool, &l_objs_size);
+            dap_global_db_obj_t *l_objs = dap_global_db_get_all_sync(l_gdb_group_mempool, &l_objs_size);
             if (l_objs_size) {
                 for (size_t i = 0; i < l_objs_size; i++) {
                     if (!l_objs[i].value_len)
@@ -314,7 +316,7 @@ bool dap_chain_node_mempool_autoproc_init()
                     dap_chain_datum_t *l_datum = (dap_chain_datum_t *)l_objs[i].value;
                     if (dap_chain_node_mempool_process(l_chain, l_datum) >= 0) {
                         // Delete processed objects
-                        dap_chain_global_db_gr_del( l_objs[i].key, l_gdb_group_mempool);
+                        dap_global_db_del_sync(l_gdb_group_mempool, l_objs[i].key );
                     }
                 }
                 dap_global_db_objs_delete(l_objs, l_objs_size);
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 71613040da493f503490e41fbe16e9df3edb3c74..20c3a57a1ad53c0abeddb9a83a7715c87596976b 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -151,7 +151,7 @@ static dap_list_t* get_aliases_by_name(dap_chain_net_t * l_net, dap_chain_node_a
     dap_list_t *list_aliases = NULL;
     size_t data_size = 0;
     // read all aliases
-    dap_global_db_obj_t *objs = dap_global_db_objs_get(l_net->pub.gdb_nodes_aliases, &data_size);
+    dap_global_db_obj_t *objs = dap_global_db_get_all_sync(l_net->pub.gdb_nodes_aliases, &data_size);
     if(!objs || !data_size)
         return NULL;
     for(size_t i = 0; i < data_size; i++) {
@@ -617,7 +617,7 @@ static int node_info_dump_with_reply(dap_chain_net_t * a_net, dap_chain_node_add
         size_t l_nodes_count = 0;
         dap_string_append(l_string_reply, "\n");
         // read all node
-        l_objs = dap_global_db_objs_get(a_net->pub.gdb_nodes, &l_nodes_count);
+        l_objs = dap_global_db_get_all_sync(a_net->pub.gdb_nodes, &l_nodes_count);
 
         if(!l_nodes_count || !l_objs) {
             dap_string_append_printf(l_string_reply, "No records\n");
@@ -629,7 +629,7 @@ static int node_info_dump_with_reply(dap_chain_net_t * a_net, dap_chain_node_add
             dap_string_append_printf(l_string_reply, "Got %zu records:\n", l_nodes_count);
             size_t l_data_size = 0;
             // read all aliases
-            dap_global_db_obj_t *l_aliases_objs = dap_global_db_objs_get(a_net->pub.gdb_nodes_aliases, &l_data_size);
+            dap_global_db_obj_t *l_aliases_objs = dap_global_db_get_all_sync(a_net->pub.gdb_nodes_aliases, &l_data_size);
             for(size_t i = 0; i < l_nodes_count; i++) {
                 dap_chain_node_info_t *l_node_info = (dap_chain_node_info_t *)l_objs[i].value;
                 // read node
@@ -2278,7 +2278,7 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
         dap_string_append_printf(a_str_tmp, "%s.%s: chain not found\n", a_net->pub.name, a_chain->name);
     }else{
         size_t l_objs_size = 0;
-        dap_global_db_obj_t * l_objs = dap_global_db_objs_get(l_gdb_group_mempool, &l_objs_size);
+        dap_global_db_obj_t * l_objs = dap_global_db_get_all_sync(l_gdb_group_mempool, &l_objs_size);
         if(l_objs_size > 0)
             dap_string_append_printf(a_str_tmp, "%s.%s: Found %zu records :\n", a_net->pub.name, a_chain->name,
                     l_objs_size);
@@ -5007,7 +5007,7 @@ int cmd_gdb_export(int argc, char ** argv, char ** a_str_reply)
     for (dap_list_t *l_list = l_groups_list; l_list; l_list = dap_list_next(l_list)) {
         size_t l_store_obj_count = 0;
         char *l_group_name = (char *)l_list->data;
-        pdap_store_obj_t l_store_obj = dap_global_db_store_objs_get_sync(l_group_name,0, &l_store_obj_count);
+        pdap_store_obj_t l_store_obj = dap_global_db_get_all_raw_sync(l_group_name,0, &l_store_obj_count);
         log_it(L_INFO, "Exporting group %s, number of records: %zu", l_group_name, l_store_obj_count);
         if (!l_store_obj_count) {
             continue;
diff --git a/modules/net/dap_chain_node_dns_server.c b/modules/net/dap_chain_node_dns_server.c
index a8fe398963bedc69c2c5f82f2a18a8dbad698c61..f21c0cc9b41a7fb6ca07f3070b1827aefee4e894 100644
--- a/modules/net/dap_chain_node_dns_server.c
+++ b/modules/net/dap_chain_node_dns_server.c
@@ -307,7 +307,7 @@ dap_chain_node_info_t *dap_dns_resolve_hostname(char *str)
     dap_global_db_obj_t *l_objs = NULL;
     size_t l_nodes_count = 0;
     // read all node
-    l_objs = dap_global_db_objs_get(l_net->pub.gdb_nodes, &l_nodes_count);
+    l_objs = dap_global_db_get_all_raw_sync(l_net->pub.gdb_nodes, &l_nodes_count);
     if (!l_nodes_count || !l_objs)
         return NULL;
     dap_chain_node_info_t *l_node_candidate;
diff --git a/modules/net/srv/dap_chain_net_srv_order.c b/modules/net/srv/dap_chain_net_srv_order.c
index 5add9fba25eca4004f9aa99a623d58296a533421..5adc3515ac41225b5085bd6464e92291cf2f2e07 100644
--- a/modules/net/srv/dap_chain_net_srv_order.c
+++ b/modules/net/srv/dap_chain_net_srv_order.c
@@ -440,7 +440,7 @@ int dap_chain_net_srv_order_find_all_by(dap_chain_net_t * a_net,const dap_chain_
         return -1;
     char *l_gdb_group_str = dap_chain_net_srv_order_get_gdb_group(a_net);
     size_t l_orders_count = 0;
-    dap_global_db_obj_t *l_orders = dap_global_db_objs_get(l_gdb_group_str, &l_orders_count);
+    dap_global_db_obj_t *l_orders = dap_global_db_get_all_sync(l_gdb_group_str, &l_orders_count);
     log_it( L_DEBUG, "Loaded %zu orders", l_orders_count);
     dap_chain_net_srv_order_t *l_order = NULL;
     *a_output_orders = NULL;
@@ -450,14 +450,14 @@ int dap_chain_net_srv_order_find_all_by(dap_chain_net_t * a_net,const dap_chain_
         DAP_DEL_Z(l_order);
         l_order = dap_chain_net_srv_order_read(l_orders[i].value, l_orders[i].value_len);
         if (!l_order) {
-            dap_global_db_del(l_gdb_group_str, l_orders[i].key, NULL, NULL);
+            dap_global_db_del_sync(l_gdb_group_str, l_orders[i].key);
             continue; // order is corrupted
         }
         dap_chain_hash_fast_t l_hash, l_hash_gdb;
         dap_hash_fast(l_orders[i].value, l_orders[i].value_len, &l_hash);
         dap_chain_hash_fast_from_str(l_orders[i].key, &l_hash_gdb);
         if (memcmp(&l_hash, &l_hash_gdb, sizeof(dap_chain_hash_fast_t))) {
-            dap_global_db_del(l_gdb_group_str, l_orders[i].key, NULL, NULL);
+            dap_global_db_del_sync(l_gdb_group_str, l_orders[i].key);
             continue; // order is corrupted
         }
         // Check direction
@@ -499,14 +499,14 @@ int dap_chain_net_srv_order_find_all_by(dap_chain_net_t * a_net,const dap_chain_
  */
 int dap_chain_net_srv_order_delete_by_hash_str_sync(dap_chain_net_t * a_net, const char * a_hash_str )
 {
-    int ret = -2;
+    int l_ret = -2;
     if ( a_net && a_hash_str  ){
         char * l_gdb_group_str = dap_chain_net_srv_order_get_gdb_group( a_net);
 
-        ret = dap_global_db_del_sync( a_hash_str, l_gdb_group_str ) ? 0 : -1;
+        l_ret = dap_global_db_del_sync( l_gdb_group_str, a_hash_str) ;
         DAP_DELETE( l_gdb_group_str );
     }
-    return ret;
+    return l_ret;
 }
 
 /**
@@ -589,7 +589,12 @@ static void s_srv_order_callback_notify(void *a_arg, const char a_op_code, const
         return;
     }
     dap_chain_net_t *l_net = (dap_chain_net_t *)a_arg;
+    dap_global_db_context_t * l_gdb_context = dap_global_db_context_current();
+    assert(l_net);
+    assert(l_gdb_context);
+
     char *l_gdb_group_str = dap_chain_net_srv_order_get_gdb_group(l_net);
+
     if (!dap_strcmp(a_group, l_gdb_group_str)) {
         for (dap_list_t *it = s_order_notify_callbacks; it; it = it->next) {
             struct dap_order_notify *l_notifier = (struct dap_order_notify *)it->data;
@@ -603,13 +608,13 @@ static void s_srv_order_callback_notify(void *a_arg, const char a_op_code, const
                 dap_config_get_item_bool_default(g_config, "srv", "order_signed_only", true)) {
             dap_chain_net_srv_order_t *l_order = (dap_chain_net_srv_order_t *)a_value;
             if (l_order->version != 2) {
-                dap_global_db_del(a_group, a_key, NULL, NULL);
+                dap_global_db_del_unsafe(l_gdb_context, a_group, a_key);
             } else {
                 dap_sign_t *l_sign = (dap_sign_t *)&l_order->ext_n_sign[l_order->ext_size];
                 if (!dap_sign_verify_size(l_sign, a_value_len) ||
                         dap_sign_verify(l_sign, l_order,
                                         sizeof(dap_chain_net_srv_order_t) + l_order->ext_size) != 1) {
-                    dap_global_db_del( a_group, a_key, NULL, NULL);
+                    dap_global_db_del_unsafe(l_gdb_context, a_group, a_key);
                 }
                 /*dap_chain_hash_fast_t l_pkey_hash;
                 if (!dap_sign_get_pkey_hash(l_sign, &l_pkey_hash)) {
diff --git a/modules/service/datum/dap_chain_net_srv_datum.c b/modules/service/datum/dap_chain_net_srv_datum.c
index 4eda49dc885d668ba2a0e07c471deb951c841d83..89e7fe52880d1de93cce23218a0ff3878ab12279 100644
--- a/modules/service/datum/dap_chain_net_srv_datum.c
+++ b/modules/service/datum/dap_chain_net_srv_datum.c
@@ -182,24 +182,6 @@ static int s_srv_datum_cli(int argc, char ** argv, char **a_str_reply) {
     return -1;
 }
 
-/**
- * @brief s_order_notficator_callback_del
- * @param a_global_db_context
- * @param a_rc
- * @param a_group
- * @param a_key
- * @param a_value
- * @param a_value_size
- * @param a_value_ts
- * @param a_is_pinned
- * @param a_arg
- */
-static void s_order_notficator_callback_del (dap_global_db_context_t * a_global_db_context,int a_rc, const char * a_group, const char * a_key, const void * a_value, const size_t a_value_size, dap_nanotime_t a_value_ts, bool a_is_pinned, void * a_arg)
-{
-    if(a_rc != DAP_GLOBAL_DB_RC_SUCCESS){
-        log_it(L_ERROR,"Can't delete order %s", a_key);
-    }
-}
 
 /**
  * @brief s_order_notficator
@@ -216,9 +198,14 @@ void s_order_notficator(void *a_arg, const char a_op_code, const char *a_group,
         return;
     dap_chain_net_t *l_net = (dap_chain_net_t *)a_arg;
     dap_chain_net_srv_order_t *l_order = dap_chain_net_srv_order_read((byte_t *)a_value, a_value_len);    // Old format comliance
-    if (!l_order) {
+    dap_global_db_context_t * l_gdb_context = dap_global_db_context_current();
+    assert(l_gdb_context);
+    if (!l_order && a_key) {
         log_it(L_NOTICE, "Order %s is corrupted", a_key);
-        dap_global_db_del(a_group, a_key, s_order_notficator_callback_del, NULL);
+        if(dap_global_db_del_unsafe(l_gdb_context, a_group, a_key) != 0 ){
+            log_it(L_ERROR,"Can't delete order %s", a_key);
+        }
+
         return; // order is corrupted
     }
 
diff --git a/modules/service/stake/dap_chain_net_srv_stake.c b/modules/service/stake/dap_chain_net_srv_stake.c
index 780cfec0a4fd2214416921a838b1b060f570146f..c9f516b1f16c7a0f83f9ce3972fa152f91068383 100644
--- a/modules/service/stake/dap_chain_net_srv_stake.c
+++ b/modules/service/stake/dap_chain_net_srv_stake.c
@@ -1149,7 +1149,7 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, cha
             }
             char * l_gdb_group_str = dap_chain_net_srv_order_get_gdb_group(l_net);
             size_t l_orders_count = 0;
-            dap_global_db_obj_t * l_orders = dap_global_db_objs_get(l_gdb_group_str, &l_orders_count);
+            dap_global_db_obj_t * l_orders = dap_global_db_get_all_sync(l_gdb_group_str, &l_orders_count);
             dap_chain_net_srv_stake_item_t *l_stake;
             dap_string_t *l_reply_str = dap_string_new("");
             for (size_t i = 0; i < l_orders_count; i++) {
diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c
index 0501b47adcc87dd4b50eae037338e513128a309b..585eee6b0badc497ee769eec9726575cf5a82e9b 100644
--- a/modules/service/xchange/dap_chain_net_srv_xchange.c
+++ b/modules/service/xchange/dap_chain_net_srv_xchange.c
@@ -76,7 +76,7 @@ int dap_chain_net_srv_xchange_init()
     s_srv_xchange->parent = l_srv;
     s_srv_xchange->enabled = false;
     size_t l_prices_count = 0;
-    dap_global_db_obj_t *l_prices = dap_global_db_objs_get(GROUP_LOCAL_XCHANGE, &l_prices_count);
+    dap_global_db_obj_t *l_prices = dap_global_db_get_all_sync(GROUP_LOCAL_XCHANGE, &l_prices_count);
     for (size_t i = 0; i < l_prices_count; i++) {
         dap_chain_net_srv_xchange_price_t *l_price = s_xchange_db_load(l_prices[i].key, l_prices[i].value);
         HASH_ADD_KEYPTR(hh, s_srv_xchange->pricelist, l_price->key_ptr, strlen(l_price->key_ptr), l_price);
@@ -857,7 +857,7 @@ static int s_cli_srv_xchange(int a_argc, char **a_argv, char **a_str_reply)
             }
             char * l_gdb_group_str = dap_chain_net_srv_order_get_gdb_group(l_net);
             size_t l_orders_count = 0;
-            dap_global_db_obj_t * l_orders = dap_global_db_objs_get(l_gdb_group_str, &l_orders_count);
+            dap_global_db_obj_t * l_orders = dap_global_db_get_all_sync(l_gdb_group_str, &l_orders_count);
             dap_chain_net_srv_xchange_price_t *l_price;
             dap_string_t *l_reply_str = dap_string_new("");
             for (size_t i = 0; i < l_orders_count; i++) {
diff --git a/modules/type/blocks/dap_chain_block_chunk.c b/modules/type/blocks/dap_chain_block_chunk.c
index 5b83e405ac53ab88ce8d2f557dff966e61b7ef44..3dc049cdcd3f8ee26e267785d9e8c4b8db9f1b5d 100644
--- a/modules/type/blocks/dap_chain_block_chunk.c
+++ b/modules/type/blocks/dap_chain_block_chunk.c
@@ -42,7 +42,7 @@ dap_chain_block_chunks_t * dap_chain_block_chunks_create(dap_chain_cs_blocks_t *
     l_ret->gdb_group = dap_strdup_printf("local.%s.%s.block.chunks",a_blocks->chain->net_name, a_blocks->chain->name );
 
     size_t l_objs_count =0;
-    dap_global_db_obj_t * l_objs= dap_global_db_objs_get(l_ret->gdb_group, &l_objs_count);
+    dap_global_db_obj_t * l_objs= dap_global_db_get_all_raw_sync(l_ret->gdb_group, &l_objs_count);
     for(size_t n=0; n< l_objs_count; n++){
         dap_chain_block_cache_t *l_block_cache = dap_chain_block_cache_new(a_blocks, (dap_chain_block_t*)l_objs[n].value, l_objs[n].value_len);
         dap_chain_block_chunks_add(l_ret, l_block_cache );
diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c
index e7fda0c7cb6535d331ee3ad3c81d25bc185b78bc..32639e67324a18a3c16ec0921dc2d3a6a50413bd 100644
--- a/modules/type/blocks/dap_chain_cs_blocks.c
+++ b/modules/type/blocks/dap_chain_cs_blocks.c
@@ -1329,14 +1329,14 @@ static bool s_callback_new_block_add_datums (dap_global_db_context_t * a_global_
     if (a_values_count) {
         for (size_t i = 0; i < a_values_count; i++) {
             if (!a_values[i].value_len) {
-                dap_global_db_del_unsafe(a_global_db_context, a_values[i].key, a_group); // delete from datums queue
+                dap_global_db_del_unsafe(a_global_db_context, a_group, a_values[i].key); // delete from datums queue
                 continue;
             }
             dap_chain_datum_t *l_datum = (dap_chain_datum_t *)a_values[i].value;
             size_t l_datum_size = dap_chain_datum_size(l_datum);
             if(!l_datum_size || l_datum == NULL){ // Was wrong datum thats not passed checks
                 log_it(L_WARNING,"Datum in mempool processing comes NULL");
-                dap_global_db_del_unsafe(a_global_db_context, a_values[i].key, a_group); // delete from datums queue
+                dap_global_db_del_unsafe(a_global_db_context,a_group, a_values[i].key); // delete from datums queue
                 continue;
             }
             // Verify for correctness
@@ -1348,7 +1348,7 @@ static bool s_callback_new_block_add_datums (dap_global_db_context_t * a_global_
                     l_verify_datum != DAP_CHAIN_CS_VERIFY_CODE_TX_NO_TOKEN) {
                 log_it(L_WARNING, "Datum doesn't pass verifications (code %d)",
                                          l_verify_datum);
-                dap_global_db_del(a_values[i].key, a_group, NULL, NULL);
+                dap_global_db_del_unsafe(a_global_db_context, a_group, a_values[i].key);
                 continue;
             }
             if (l_blocks->block_new_size + l_datum_size > l_blocks_pvt->block_size_maximum)
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index 385262225589332562b49c256274822d6d3444d3..9a82e5ae5b178acd4d0b2a800df40f2724e42688 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -174,6 +174,9 @@ static void s_history_callback_round_notify(void *a_arg, const char a_op_code, c
                                         const char *a_key, const void *a_value, const size_t a_value_size)
 {
     dap_chain_cs_dag_t *l_dag = (dap_chain_cs_dag_t *)a_arg;
+    dap_global_db_context_t * l_gdb_context = dap_global_db_context_current();
+    assert(l_dag);
+    assert(l_gdb_context);
     if (a_arg && !l_dag->broadcast_disable){
         dap_chain_net_t *l_net = dap_chain_net_by_id(l_dag->chain->net_id);
         debug_if(s_debug_more, L_DEBUG, "%s.%s: op_code='%c' group=\"%s\" key=\"%s\" value_size=%zu",
@@ -184,7 +187,7 @@ static void s_history_callback_round_notify(void *a_arg, const char a_op_code, c
                                 (dap_chain_cs_dag_event_round_item_t *)a_value;
             if (l_event_round_item) {
                 char *l_datum_hash_str = dap_chain_hash_fast_to_str_new(&l_event_round_item->round_info.datum_hash);
-                dap_chain_global_db_gr_del(l_datum_hash_str, l_dag->gdb_group_events_round_new);
+                dap_global_db_del_unsafe(l_gdb_context, l_dag->gdb_group_events_round_new, l_datum_hash_str);
                 DAP_DELETE(l_datum_hash_str);
             }
             l_dag->callback_cs_event_round_sync(l_dag, a_op_code, a_group, a_key, a_value, a_value_size);
@@ -294,7 +297,7 @@ int dap_chain_cs_dag_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg)
         l_dag->gdb_group_events_round_new = dap_strdup_printf( "%s.%s", l_gdb_group, l_round_new_str);
         dap_chain_global_db_add_sync_extra_group(l_net->pub.name, l_gdb_group, s_history_callback_round_notify, l_dag);
     }
-    dap_chain_global_db_gr_del(NULL, l_dag->gdb_group_events_round_new);
+    dap_global_db_del_sync(l_dag->gdb_group_events_round_new, NULL);
     l_dag->gdb_group_datums_queue = dap_strdup_printf("local.datums-queue.chain-%s.%s",
                                                         l_net->pub.gdb_groups_prefix, a_chain->name);
     DAP_DELETE(l_round_new_str);
@@ -1512,7 +1515,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply)
             log_it(L_NOTICE,"Round complete command accepted, forming new events");
 
             size_t l_objs_size=0;
-            dap_global_db_obj_t * l_objs = dap_global_db_objs_get(l_dag->gdb_group_events_round_new,&l_objs_size);
+            dap_global_db_obj_t * l_objs = dap_global_db_get_all_sync(l_dag->gdb_group_events_round_new,&l_objs_size);
 
             dap_string_t *l_str_ret_tmp= l_objs_size>0 ? dap_string_new("Completing round:\n") : dap_string_new("Completing round: no data");
 
@@ -1560,7 +1563,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply)
                     // delete events from db
                     dap_list_t *l_list_tmp = l_list_to_del;
                     while(l_list_tmp) {
-                        dap_chain_global_db_gr_del((char*)l_list_tmp->data, l_dag->gdb_group_events_round_new);
+                        dap_global_db_del_sync(l_dag->gdb_group_events_round_new, (char*)l_list_tmp->data);
                         // dap_chain_cs_dag_event_broadcast(l_dag, DAP_DB$K_OPTYPE_DEL,
                         //             l_dag->gdb_group_events_round_new, (char*)l_list_tmp->data,
                         //                 NULL, 0);
@@ -1648,7 +1651,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply)
                        dap_chain_hash_fast_t l_datum_hash;
                        dap_hash_fast(l_datums[i],dap_chain_datum_size(l_datums[i]),&l_datum_hash);
                        char * l_datums_datum_hash_str = dap_chain_hash_fast_to_str_new(&l_datum_hash);
-                       if ( dap_chain_global_db_gr_del( dap_strdup(l_datums_datum_hash_str),l_gdb_group_mempool ) ){
+                       if ( dap_global_db_del_sync(l_gdb_group_mempool, l_datums_datum_hash_str ) ==0 ){
                            dap_chain_node_cli_set_reply_text(a_str_reply,
                                                              "Converted datum %s from mempool to event in the new forming round ",
                                                              l_datums_datum_hash_str);
@@ -1680,7 +1683,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply)
             }break;
             case SUBCMD_EVENT_CANCEL:{
                 char * l_gdb_group_events = DAP_CHAIN_CS_DAG(l_chain)->gdb_group_events_round_new;
-                if ( dap_chain_global_db_gr_del( dap_strdup(l_event_hash_hex_str) ,l_gdb_group_events ) ){
+                if ( dap_global_db_del_sync(l_gdb_group_events, l_event_hash_hex_str ) ==0){
                     // dap_chain_cs_dag_event_broadcast(l_dag, DAP_DB$K_OPTYPE_DEL,
                     //             l_gdb_group_events, l_event_hash_hex_str,
                     //                 NULL, 0);
@@ -1908,7 +1911,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply)
                     if ( l_gdb_group_events ){
                         dap_global_db_obj_t * l_objs;
                         size_t l_objs_count = 0;
-                        l_objs = dap_global_db_objs_get(l_gdb_group_events,&l_objs_count);
+                        l_objs = dap_global_db_get_all_sync(l_gdb_group_events,&l_objs_count);
                         dap_string_append_printf(l_str_tmp,"%s.%s: Found %zu records :\n",l_net->pub.name,l_chain->name,l_objs_count);
 
                         for (size_t i = 0; i< l_objs_count; i++){
diff --git a/modules/type/dag/dap_chain_cs_dag_event.c b/modules/type/dag/dap_chain_cs_dag_event.c
index 740587c01e1ae359bd6b262790416ed16a983a73..4146bfe8516e916fe74017227b62718d320cdc42 100644
--- a/modules/type/dag/dap_chain_cs_dag_event.c
+++ b/modules/type/dag/dap_chain_cs_dag_event.c
@@ -257,6 +257,16 @@ void dap_chain_cs_dag_event_broadcast(dap_chain_cs_dag_t *a_dag, const char a_op
     }
 }
 
+/**
+ * @brief dap_chain_cs_dag_event_gdb_set
+ * @param a_dag
+ * @param a_event_hash_str
+ * @param a_event
+ * @param a_event_size
+ * @param a_round_item
+ * @param a_group
+ * @return
+ */
 bool dap_chain_cs_dag_event_gdb_set(dap_chain_cs_dag_t *a_dag, char *a_event_hash_str, dap_chain_cs_dag_event_t *a_event,
                                     size_t a_event_size, dap_chain_cs_dag_event_round_item_t *a_round_item,
                                     const char *a_group)
@@ -281,9 +291,8 @@ bool dap_chain_cs_dag_event_gdb_set(dap_chain_cs_dag_t *a_dag, char *a_event_has
 
     l_round_item->round_info.ts_update = dap_time_now();
 
-    bool ret = dap_chain_global_db_gr_set(a_event_hash_str, l_round_item,
-            dap_chain_cs_dag_event_round_item_get_size(l_round_item),
-            a_group);
+    bool ret = dap_global_db_set(a_group, a_event_hash_str, l_round_item,
+            dap_chain_cs_dag_event_round_item_get_size(l_round_item),true, NULL, NULL) == 0;
 
     /*size_t l_round_item_size = dap_chain_cs_dag_event_round_item_get_size(a_round_item);
     dap_chain_cs_dag_event_broadcast(a_dag, DAP_DB$K_OPTYPE_ADD, a_dag->gdb_group_events_round_new,