diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
index d61688c07f7f0a8dd63d69287245b002e20dc95a..e6ffa337db1a1c8ebf6d95994db112b731534937 100644
--- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c
+++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
@@ -549,13 +549,13 @@ static int s_callback_created(dap_chain_t *a_chain, dap_config_t *a_chain_net_cf
     size_t l_orders_count = 0;
     dap_global_db_obj_t * l_orders = dap_global_db_get_all_sync(l_gdb_group_str, &l_orders_count);
     DAP_DELETE(l_gdb_group_str);
-    dap_chain_net_srv_order_t *l_order_service = NULL;
+    const dap_chain_net_srv_order_t *l_order_service = NULL;
     for (size_t i = 0; i < l_orders_count; i++) {
-        if (l_orders[i].value_len < sizeof(dap_chain_net_srv_order_t)) {
-            log_it(L_ERROR, "Too small order %s with size %zu", l_orders[i].key, l_orders[i].value_len);
+        const dap_chain_net_srv_order_t *l_order = dap_chain_net_srv_order_check(l_orders[i].key, l_orders[i].value, l_orders[i].value_len);
+        if (!l_order) {
+            log_it(L_WARNING, "Unreadable order %s", l_orders[i].key);
             continue;
         }
-        dap_chain_net_srv_order_t *l_order = (dap_chain_net_srv_order_t *)l_orders[i].value;
         if (l_order->srv_uid.uint64 != DAP_CHAIN_NET_SRV_STAKE_POS_DELEGATE_ID)
             continue;
         dap_sign_t *l_order_sign = (dap_sign_t*)(l_order->ext_n_sign + l_order->ext_size);
diff --git a/modules/net/dap_chain_ledger.c b/modules/net/dap_chain_ledger.c
index 3b2ce8bc1086a03751a79dd8b32764601053ef35..f650084103e9e74b5d79a37a5328fc345d6ce2ed 100644
--- a/modules/net/dap_chain_ledger.c
+++ b/modules/net/dap_chain_ledger.c
@@ -3417,8 +3417,8 @@ const char *dap_ledger_get_description_by_ticker(dap_ledger_t *a_ledger, const c
  *
  * return transaction, or NULL if transaction not found in the cache
  */
-static dap_chain_datum_tx_t* s_find_datum_tx_by_hash(dap_ledger_t *a_ledger,
-        dap_chain_hash_fast_t *a_tx_hash, dap_ledger_tx_item_t **a_item_out, bool a_unspent_only)
+static dap_chain_datum_tx_t* s_find_datum_tx_by_hash(dap_ledger_t *a_ledger, const dap_chain_hash_fast_t *a_tx_hash,
+                                                     dap_ledger_tx_item_t **a_item_out, bool a_unspent_only)
 {
     if(!a_tx_hash)
         return NULL;
@@ -3447,12 +3447,12 @@ static dap_chain_datum_tx_t* s_find_datum_tx_by_hash(dap_ledger_t *a_ledger,
  * @return
  */
 
-dap_chain_datum_tx_t *dap_ledger_tx_find_by_hash(dap_ledger_t *a_ledger, dap_chain_hash_fast_t *a_tx_hash)
+dap_chain_datum_tx_t *dap_ledger_tx_find_by_hash(dap_ledger_t *a_ledger, const dap_chain_hash_fast_t *a_tx_hash)
 {
     return s_find_datum_tx_by_hash(a_ledger, a_tx_hash, NULL, false);
 }
 
-dap_chain_datum_tx_t *dap_ledger_tx_unspent_find_by_hash(dap_ledger_t *a_ledger, dap_chain_hash_fast_t *a_tx_hash)
+dap_chain_datum_tx_t *dap_ledger_tx_unspent_find_by_hash(dap_ledger_t *a_ledger, const dap_chain_hash_fast_t *a_tx_hash)
 {
     return s_find_datum_tx_by_hash(a_ledger, a_tx_hash, NULL, true);
 }
diff --git a/modules/net/include/dap_chain_ledger.h b/modules/net/include/dap_chain_ledger.h
index 4766bae94587acbf22012d81a82eb183e08b5121..e6d04d4ad2755d757b107ed9cd41489933ebba2a 100644
--- a/modules/net/include/dap_chain_ledger.h
+++ b/modules/net/include/dap_chain_ledger.h
@@ -365,8 +365,8 @@ uint256_t dap_ledger_calc_balance_full(dap_ledger_t *a_ledger, const dap_chain_a
  *
  * return transaction, or NULL if transaction not found in the cache
  */
-dap_chain_datum_tx_t* dap_ledger_tx_find_by_hash(dap_ledger_t *a_ledger, dap_chain_hash_fast_t *a_tx_hash);
-dap_chain_datum_tx_t* dap_ledger_tx_unspent_find_by_hash(dap_ledger_t *a_ledger, dap_chain_hash_fast_t *a_tx_hash);
+dap_chain_datum_tx_t *dap_ledger_tx_find_by_hash(dap_ledger_t *a_ledger, const dap_chain_hash_fast_t *a_tx_hash);
+dap_chain_datum_tx_t *dap_ledger_tx_unspent_find_by_hash(dap_ledger_t *a_ledger, const dap_chain_hash_fast_t *a_tx_hash);
 dap_hash_fast_t *dap_ledger_get_final_chain_tx_hash(dap_ledger_t *a_ledger, dap_chain_tx_item_type_t a_cond_type, dap_chain_hash_fast_t *a_tx_hash);
 dap_hash_fast_t *dap_ledger_get_first_chain_tx_hash(dap_ledger_t *a_ledger, dap_chain_datum_tx_t * a_tx, dap_chain_tx_out_cond_t *a_cond_out);
 
diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c
index 62941a875fc371ecaa9e6b151c5c1caaed234cef..b3b6fbe93bb14bf1bbf4e092a7cd5f7fe7b25172 100644
--- a/modules/net/srv/dap_chain_net_srv.c
+++ b/modules/net/srv/dap_chain_net_srv.c
@@ -206,13 +206,13 @@ static int s_cli_net_srv( int argc, char **argv, void **a_str_reply)
     int l_ret = dap_chain_node_cli_cmd_values_parse_net_chain( &arg_index, argc, argv, a_str_reply, NULL, &l_net,
                                                                CHAIN_TYPE_INVALID);
     if ( l_net ) {
-        //char * l_orders_group = dap_chain_net_srv_order_get_gdb_group( l_net );
-
         dap_string_t *l_string_ret = dap_string_new("");
+
         const char *l_order_str = NULL;
-        int l_order_arg_pos = dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "order", &l_order_str);
+        dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "order", &l_order_str);
+
         const char *l_get_limits_str = NULL;
-        int l_get_limits_arg_pos = dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "get_limits", &l_get_limits_str);
+        dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "get_limits", &l_get_limits_str);
 
         // Order direction
         const char *l_direction_str = NULL;
diff --git a/modules/net/srv/dap_chain_net_srv_order.c b/modules/net/srv/dap_chain_net_srv_order.c
index 5a41dfa02cad40a2465fac6ca2ef0cc47beb220a..6ffa4c02d40d633f82b6d98655631d0c4780bfe0 100644
--- a/modules/net/srv/dap_chain_net_srv_order.c
+++ b/modules/net/srv/dap_chain_net_srv_order.c
@@ -81,28 +81,30 @@ void dap_chain_net_srv_order_deinit()
 
 }
 
-size_t dap_chain_net_srv_order_get_size(dap_chain_net_srv_order_t *a_order)
+size_t dap_chain_net_srv_order_get_size(const dap_chain_net_srv_order_t *a_order)
 {
-    if (!a_order)
+    if (!a_order || a_order->version != 3)
         return 0;
-    size_t l_sign_size = 0;
-    if (a_order->version == 3) {
-        dap_sign_t *l_sign = (dap_sign_t *)(a_order->ext_n_sign + a_order->ext_size);
-        if (l_sign->header.type.type == SIG_TYPE_NULL)
-            l_sign_size = sizeof(dap_sign_type_t);
-        else
-            l_sign_size = dap_sign_get_size(l_sign);
-        return sizeof(dap_chain_net_srv_order_t) + a_order->ext_size + l_sign_size;
-    }
-    dap_chain_net_srv_order_old_t *l_order = (dap_chain_net_srv_order_old_t *)a_order;
-    if(l_order->version == 2) {
-        dap_sign_t *l_sign = (dap_sign_t *)&l_order->ext[l_order->ext_size];
-        if (l_sign->header.type.type == SIG_TYPE_NULL)
-            l_sign_size = sizeof(dap_sign_type_t);
-        else
-            l_sign_size = dap_sign_get_size(l_sign);
-    }
-    return sizeof(dap_chain_net_srv_order_old_t) + l_order->ext_size + l_sign_size;
+    dap_sign_t *l_sign = (dap_sign_t *)(a_order->ext_n_sign + a_order->ext_size);
+    size_t l_sign_size = l_sign->header.type.type == SIG_TYPE_NULL ? sizeof(dap_sign_type_t) : dap_sign_get_size(l_sign);
+    return sizeof(dap_chain_net_srv_order_t) + a_order->ext_size + l_sign_size;
+}
+
+const dap_chain_net_srv_order_t *dap_chain_net_srv_order_check(const char *a_order_hash_str, const byte_t *a_order, size_t a_order_size)
+{
+    const dap_chain_net_srv_order_t *l_order = (const dap_chain_net_srv_order_t *)a_order;
+    dap_return_val_if_fail(l_order && a_order_size >= sizeof(dap_chain_net_srv_order_t) + sizeof(dap_sign_t) &&
+                           l_order->version == 3 && l_order->direction <= SERV_DIR_SELL, NULL);
+    size_t l_order_size = dap_chain_net_srv_order_get_size(l_order);
+    if (l_order_size != a_order_size)
+        return NULL;
+    dap_hash_fast_t l_hash, l_hash_real;
+    dap_hash_fast(a_order, a_order_size, &l_hash_real);
+    if (dap_chain_hash_fast_from_str(a_order_hash_str, &l_hash))
+        return NULL;
+    if (memcmp(&l_hash, &l_hash_real, sizeof(dap_hash_fast_t)))
+        return NULL;
+    return l_order;
 }
 
 /**
@@ -146,7 +148,7 @@ bool dap_chain_net_srv_order_set_continent_region(dap_chain_net_srv_order_t **a_
  * @param a_continent_num [out]
  * @param a_region [out]
  */
-bool dap_chain_net_srv_order_get_continent_region(dap_chain_net_srv_order_t *a_order_static, uint8_t *a_continent_num, char **a_region)
+bool dap_chain_net_srv_order_get_continent_region(const dap_chain_net_srv_order_t *a_order_static, uint8_t *a_continent_num, char **a_region)
 {
     if(!a_order_static || !a_order_static->ext_size || a_order_static->ext_n_sign[0]!=0x52)
         return false;
@@ -363,50 +365,6 @@ char *dap_chain_net_srv_order_save(dap_chain_net_t *a_net, dap_chain_net_srv_ord
     return NULL;
 }
 
-dap_chain_net_srv_order_t *dap_chain_net_srv_order_read(byte_t *a_order, size_t a_order_size)
-{
-    if (NULL == a_order) {
-        log_it(L_ERROR, "Argumets are NULL for dap_chain_net_srv_order_read");
-        return NULL;
-    }
-    dap_chain_net_srv_order_t *l_order = (dap_chain_net_srv_order_t *)a_order;
-    size_t l_order_size = dap_chain_net_srv_order_get_size((dap_chain_net_srv_order_t *)a_order);
-    if (l_order->version > 3 || l_order->direction > SERV_DIR_SELL || l_order_size != a_order_size)
-        return NULL;
-    if (l_order->version == 3)
-        return DAP_DUP_SIZE(a_order, l_order_size);
-    dap_chain_net_srv_order_old_t *l_old = (dap_chain_net_srv_order_old_t *)a_order;
-    size_t l_ret_size = dap_chain_net_srv_order_get_size((dap_chain_net_srv_order_t *)l_old) +
-                            sizeof(dap_chain_net_srv_order_t) - sizeof(dap_chain_net_srv_order_old_t);
-    if (l_old->version == 1)
-        l_ret_size += sizeof(dap_sign_type_t);
-    dap_chain_net_srv_order_t *l_ret = DAP_NEW_Z_SIZE(dap_chain_net_srv_order_t, l_ret_size);
-    l_ret->version = 3;
-#if DAP_CHAIN_NET_SRV_UID_SIZE == 8
-    l_ret->srv_uid.uint64 = l_old->srv_uid.uint64;
-#else
-    l_ret->srv_uid.uint128 = dap_chain_uint128_from(l_old->srv_uid.uint64);
-#endif
-    l_ret->direction = l_old->direction;
-    l_ret->node_addr.uint64 = l_old->node_addr.uint64;
-    l_ret->tx_cond_hash = l_old->tx_cond_hash;
-    l_ret->price_unit.uint32 = l_old->price_unit.uint32;
-    l_ret->ts_created = l_old->ts_created;
-    l_ret->ts_expires = l_old->ts_expires;
-    l_ret->price = dap_chain_uint256_from(l_old->price);
-    strncpy(l_ret->price_ticker, l_old->price_ticker, DAP_CHAIN_TICKER_SIZE_MAX);
-    l_ret->ext_size = l_old->ext_size;
-    memcpy(l_ret->ext_n_sign, l_old->ext, l_old->ext_size);
-    dap_sign_t *l_sign = (dap_sign_t *)&l_old->ext[l_old->ext_size];
-    size_t l_sign_size = l_old->version == 1 ? 0 : dap_sign_get_size(l_sign);
-    if (l_sign_size)
-        memcpy(l_ret->ext_n_sign + l_ret->ext_size, l_sign, l_sign_size);
-    else
-        ((dap_sign_type_t *)(l_ret->ext_n_sign + l_ret->ext_size))->type = SIG_TYPE_NULL;
-    return l_ret;
-}
-
-
 /**
  * @brief dap_chain_net_srv_order_find_by_hash_str
  * @param a_net
@@ -415,7 +373,7 @@ dap_chain_net_srv_order_t *dap_chain_net_srv_order_read(byte_t *a_order, size_t
  */
 dap_chain_net_srv_order_t *dap_chain_net_srv_order_find_by_hash_str(dap_chain_net_t *a_net, const char *a_hash_str)
 {
-    dap_chain_net_srv_order_t *l_order = NULL;
+    const dap_chain_net_srv_order_t *l_order = NULL;
     for (int i = 0; a_net && a_hash_str && i < 2; i++) {
         char *l_gdb_group_str = i ? dap_chain_net_srv_order_get_gdb_group(a_net)
                                   : dap_chain_net_srv_order_get_common_group(a_net);
@@ -425,21 +383,13 @@ dap_chain_net_srv_order_t *dap_chain_net_srv_order_find_by_hash_str(dap_chain_ne
         if (!l_gdb_order)
             continue;
         // check order size
-        size_t l_expected_size = dap_chain_net_srv_order_get_size((dap_chain_net_srv_order_t *)l_gdb_order);
-        if (l_order_size != l_expected_size) {
-            log_it(L_ERROR, "Found wrong size order %zu, expected %zu", l_order_size, l_expected_size);
-            DAP_DELETE(l_gdb_order);
-            return NULL;
-        }
-        l_order = dap_chain_net_srv_order_read(l_gdb_order, l_order_size);
+        l_order = dap_chain_net_srv_order_check(a_hash_str, l_gdb_order, l_order_size);
         if (!l_order || (l_order->ts_expires &&  l_order->ts_expires < dap_time_now())){
-            DAP_DEL_Z(l_order);
             DAP_DELETE(l_gdb_order);
-            continue;
+            break;
         }
-        DAP_DELETE(l_gdb_order);
     }
-    return l_order;
+    return (dap_chain_net_srv_order_t *)l_order;
 }
 
 /**
@@ -454,15 +404,15 @@ dap_chain_net_srv_order_t *dap_chain_net_srv_order_find_by_hash_str(dap_chain_ne
  * @param a_output_orders_count
  * @return
  */
-int dap_chain_net_srv_order_find_all_by(dap_chain_net_t * a_net,const dap_chain_net_srv_order_direction_t a_direction,
+int dap_chain_net_srv_order_find_all_by(dap_chain_net_t *a_net, const dap_chain_net_srv_order_direction_t a_direction,
                                         const dap_chain_net_srv_uid_t a_srv_uid,
-                                        const dap_chain_net_srv_price_unit_uid_t a_price_unit,const char a_price_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
+                                        const dap_chain_net_srv_price_unit_uid_t a_price_unit, const char a_price_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
                                         const uint256_t a_price_min, const uint256_t a_price_max,
-                                        dap_list_t** a_output_orders, size_t * a_output_orders_count)
+                                        dap_list_t **a_output_orders, size_t *a_output_orders_count)
 {
     if (!a_net || !a_output_orders || !a_output_orders_count)
         return -1;
-    size_t l_orders_size = 0, l_output_orders_count = 0;
+    size_t l_output_orders_count = 0;
     *a_output_orders = NULL;
 
     dap_list_t* l_out_list = NULL;
@@ -472,65 +422,54 @@ int dap_chain_net_srv_order_find_all_by(dap_chain_net_t * a_net,const dap_chain_
                                   : dap_chain_net_srv_order_get_common_group(a_net);
         size_t l_orders_count = 0;
         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;
+        log_it(L_DEBUG, "Loaded %zu orders", l_orders_count);
+        const dap_chain_net_srv_order_t *l_order = NULL;
         for (size_t i = 0; i < l_orders_count; i++) {
-            l_order = dap_chain_net_srv_order_read(l_orders[i].value, l_orders[i].value_len);
+            l_order = dap_chain_net_srv_order_check(l_orders[i].key, l_orders[i].value, l_orders[i].value_len);
             if (!l_order) {
                 dap_global_db_del_sync(l_gdb_group_str, l_orders[i].key);
                 continue; // order is corrupted
             }
-            if (l_order->ts_expires && l_order->ts_expires < dap_time_now()){
-                DAP_DEL_Z(l_order);
+
+            if (l_order->ts_expires && l_order->ts_expires < dap_time_now())
                 continue;
-            }
 
-            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_sync(l_gdb_group_str, l_orders[i].key);
-                DAP_DEL_Z(l_order);
-                continue; // order is corrupted
-            }
             // Check direction
-            if (a_direction != SERV_DIR_UNDEFINED && l_order->direction != a_direction){
-                DAP_DEL_Z(l_order);
+            if (a_direction != SERV_DIR_UNDEFINED && l_order->direction != a_direction)
                 continue;
-            }
+
             // Check srv uid
-            if (a_srv_uid.uint64 && l_order->srv_uid.uint64 != a_srv_uid.uint64){
-                DAP_DEL_Z(l_order);
+            if (a_srv_uid.uint64 && l_order->srv_uid.uint64 != a_srv_uid.uint64)
                 continue;
-            }
+
             // check price unit
-            if (a_price_unit.uint32 && a_price_unit.uint32 != l_order->price_unit.uint32){
-                DAP_DEL_Z(l_order);
+            if (a_price_unit.uint32 && a_price_unit.uint32 != l_order->price_unit.uint32)
                 continue;
-            }
+
             // Check price minimum
-            if (!IS_ZERO_256(a_price_min) && compare256(l_order->price, a_price_min) == -1){
-                DAP_DEL_Z(l_order);
+            if (!IS_ZERO_256(a_price_min) && compare256(l_order->price, a_price_min) == -1)
                 continue;
-            }
+
             // Check price maximum
-            if (!IS_ZERO_256(a_price_max) && compare256(l_order->price, a_price_max) == 1){
-                DAP_DEL_Z(l_order);
+            if (!IS_ZERO_256(a_price_max) && compare256(l_order->price, a_price_max) == 1)
                 continue;
-            }
+
             // Check ticker
-            if (a_price_ticker && strcmp( l_order->price_ticker, a_price_ticker)){
-                DAP_DEL_Z(l_order);
+            if (a_price_ticker && strcmp( l_order->price_ticker, a_price_ticker))
                 continue;
-            }
+
             size_t l_order_mem_size = dap_chain_net_srv_order_get_size(l_order);
             dap_chain_net_srv_order_t *l_output_order = DAP_DUP_SIZE(l_order, l_order_mem_size);
-            DAP_DEL_Z(l_order);
+            if (!l_output_order) {
+                log_it(L_CRITICAL, "%s", g_error_memory_alloc);
+                dap_global_db_objs_delete(l_orders, l_orders_count);
+                return -1;
+            }
             l_out_list = dap_list_append(l_out_list, l_output_order);
             l_output_orders_count++;
         }
-        dap_global_db_objs_delete(l_orders, l_orders_count);
         DAP_DELETE(l_gdb_group_str);
+        dap_global_db_objs_delete(l_orders, l_orders_count);
     }
     *a_output_orders_count = l_output_orders_count;
     *a_output_orders = l_out_list;
@@ -563,7 +502,8 @@ int dap_chain_net_srv_order_delete_by_hash_str_sync(dap_chain_net_t *a_net, cons
  * @param a_orders
  * @param a_str_out
  */
-void dap_chain_net_srv_order_dump_to_string(dap_chain_net_srv_order_t *a_order,dap_string_t * a_str_out, const char *a_hash_out_type, const char *a_native_ticker)
+void dap_chain_net_srv_order_dump_to_string(const dap_chain_net_srv_order_t *a_order, dap_string_t *a_str_out,
+                                            const char *a_hash_out_type, const char *a_native_ticker)
 {
     if (a_order && a_str_out ){
         dap_chain_hash_fast_t l_hash;
diff --git a/modules/net/srv/include/dap_chain_net_srv.h b/modules/net/srv/include/dap_chain_net_srv.h
index b6510231d08b5354d215fb147358d994e9f11409..1aa967f4ebc51c74ad0e3dfa26028241aa1970d7 100755
--- a/modules/net/srv/include/dap_chain_net_srv.h
+++ b/modules/net/srv/include/dap_chain_net_srv.h
@@ -36,10 +36,10 @@ along with any CellFrame SDK based project.  If not, see <http://www.gnu.org/lic
 #define DAP_CHAIN_NET_SRV_GRACE_PERIOD_DEFAULT 60
 
 //Service direction
-enum dap_chain_net_srv_order_direction{
+enum dap_chain_net_srv_order_direction {
+    SERV_DIR_UNDEFINED = 0,
     SERV_DIR_BUY = 1,
-    SERV_DIR_SELL = 2,
-    SERV_DIR_UNDEFINED = 0
+    SERV_DIR_SELL = 2
 };
 typedef byte_t dap_chain_net_srv_order_direction_t;
 
diff --git a/modules/net/srv/include/dap_chain_net_srv_order.h b/modules/net/srv/include/dap_chain_net_srv_order.h
index 68c0194f11c1332cbd54d49418856f8147f02d72..ccdce7024a7f1b7b06e8ded12b64bd64dc158403 100644
--- a/modules/net/srv/include/dap_chain_net_srv_order.h
+++ b/modules/net/srv/include/dap_chain_net_srv_order.h
@@ -28,24 +28,6 @@ along with any CellFrame SDK based project.  If not, see <http://www.gnu.org/lic
 #include "dap_string.h"
 #include "dap_chain_common.h"
 #include "dap_chain_net_srv.h"
-typedef struct dap_chain_net_srv_order_old
-{
-    uint16_t version;
-    dap_chain_net_srv_uid_t srv_uid; // Service UID
-    byte_t padding; // some padding
-    dap_chain_net_srv_order_direction_t direction; // Order direction - SELL or PURCHASE
-    dap_chain_node_addr_t node_addr; // Node address that servs the order (if present)
-    dap_chain_hash_fast_t tx_cond_hash; // Hash index of conditioned transaction attached with order
-    dap_chain_net_srv_price_unit_uid_t price_unit; // Unit of service (seconds, megabytes, etc.) Only for SERV_CLASS_PERMANENT
-    dap_time_t ts_created;
-    dap_time_t ts_expires;
-    uint64_t price; //  service price in datoshi, for SERV_CLASS_ONCE ONCE for the whole service, for SERV_CLASS_PERMANENT  for one unit.
-    char price_ticker[DAP_CHAIN_TICKER_SIZE_MAX]; // Token ticker to pay for service
-    //uint8_t continent;
-    //char region[32];
-    uint32_t ext_size;
-    uint8_t ext[];
-} DAP_ALIGN_PACKED dap_chain_net_srv_order_old_t;
 
 typedef struct dap_chain_net_srv_order
 {
@@ -73,11 +55,11 @@ typedef struct dap_chain_net_srv_order
 int dap_chain_net_srv_order_init();
 void dap_chain_net_srv_order_deinit(void);
 
-size_t dap_chain_net_srv_order_get_size(dap_chain_net_srv_order_t *a_order);
-dap_chain_net_srv_order_t *dap_chain_net_srv_order_read(byte_t *a_order, size_t a_order_size);
+size_t dap_chain_net_srv_order_get_size(const dap_chain_net_srv_order_t *a_order);
+const dap_chain_net_srv_order_t *dap_chain_net_srv_order_check(const char *a_order_hash_str, const byte_t *a_order, size_t a_order_size);
 
 bool dap_chain_net_srv_order_set_continent_region(dap_chain_net_srv_order_t **a_order, uint8_t a_continent_num, const char *a_region);
-bool dap_chain_net_srv_order_get_continent_region(dap_chain_net_srv_order_t *a_order, uint8_t *a_continent_num, char **a_region);
+bool dap_chain_net_srv_order_get_continent_region(const dap_chain_net_srv_order_t *a_order, uint8_t *a_continent_num, char **a_region);
 
 const char* dap_chain_net_srv_order_get_country_code(dap_chain_net_srv_order_t *a_order);
 size_t dap_chain_net_srv_order_continents_count(void);
@@ -158,7 +140,7 @@ dap_chain_net_srv_order_t *dap_chain_net_srv_order_compose(
 
 char *dap_chain_net_srv_order_save(dap_chain_net_t *a_net, dap_chain_net_srv_order_t *a_order, bool a_common);
 
-void dap_chain_net_srv_order_dump_to_string(dap_chain_net_srv_order_t *a_order, dap_string_t *a_str_out,
+void dap_chain_net_srv_order_dump_to_string(const dap_chain_net_srv_order_t *a_order, dap_string_t *a_str_out,
                                             const char *a_hash_out_type, const char *a_native_ticker);
 
 void dap_chain_net_srv_order_add_notify_callback(dap_chain_net_t *a_net, dap_store_obj_callback_notify_t a_callback, void *a_cb_arg);
diff --git a/modules/service/datum/dap_chain_net_srv_datum.c b/modules/service/datum/dap_chain_net_srv_datum.c
index 75fcfa1e55ce9541fdb8beeafd3fddbdb8236bac..58ff27e104c48bd4d23c917f8d3edb0e1fe351ab 100644
--- a/modules/service/datum/dap_chain_net_srv_datum.c
+++ b/modules/service/datum/dap_chain_net_srv_datum.c
@@ -207,7 +207,7 @@ void s_order_notficator(dap_store_obj_t *a_obj, void *a_arg)
     const char * a_obj_key_str = a_obj->key ? a_obj->key : "unknow";
 
     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_obj->value, a_obj->value_len);    // Old format comliance
+    const dap_chain_net_srv_order_t *l_order = dap_chain_net_srv_order_check(a_obj->key, a_obj->value, a_obj->value_len);    // Old format comliance
     if (!l_order) {
         log_it(L_NOTICE, "Order %s is corrupted", a_obj_key_str);
         if (dap_global_db_driver_delete(a_obj, 1) != 0)
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 54171549171db906b4714732382f930e03a60918..05cf9f8cb3dbb24012bcb58e84cfe2dd175b4a70 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
@@ -1609,7 +1609,11 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, voi
             size_t l_orders_count = 0;
             dap_global_db_obj_t * l_orders = dap_global_db_get_all_sync(l_gdb_group_str, &l_orders_count);
             for (size_t i = 0; i < l_orders_count; i++) {
-                dap_chain_net_srv_order_t *l_order = (dap_chain_net_srv_order_t *)l_orders[i].value;
+                const dap_chain_net_srv_order_t *l_order = dap_chain_net_srv_order_check(l_orders[i].key, l_orders[i].value, l_orders[i].value_len);
+                if (!l_order) {
+                    log_it(L_WARNING, "Unreadable order %s", l_orders[i].key);
+                    continue;
+                }
                 if (l_order->srv_uid.uint64 != DAP_CHAIN_NET_SRV_STAKE_POS_DELEGATE_ID &&
                         l_order->srv_uid.uint64 != DAP_CHAIN_NET_SRV_STAKE_POS_DELEGATE_ORDERS)
                     continue;
@@ -2810,17 +2814,20 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, void **a_str_reply)
 bool dap_chain_net_srv_stake_get_fee_validators(dap_chain_net_t *a_net,
                                                 uint256_t *a_max_fee, uint256_t *a_average_fee, uint256_t *a_min_fee, uint256_t *a_median_fee)
 {
-    if (!a_net)
-        return false;
-    char * l_gdb_group_str = dap_chain_net_srv_order_get_gdb_group(a_net);
+    dap_return_val_if_fail(a_net, false);
+    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_get_all_sync(l_gdb_group_str, &l_orders_count);
-    DAP_DELETE( l_gdb_group_str);
+    dap_global_db_obj_t *l_orders = dap_global_db_get_all_sync(l_gdb_group_str, &l_orders_count);
+    DAP_DELETE(l_gdb_group_str);
     uint256_t l_min = uint256_0, l_max = uint256_0, l_average = uint256_0, l_median = uint256_0;
     uint64_t l_order_fee_count = 0;
     uint256_t l_all_fees[l_orders_count * sizeof(uint256_t)];
     for (size_t i = 0; i < l_orders_count; i++) {
-        dap_chain_net_srv_order_t *l_order = (dap_chain_net_srv_order_t *)l_orders[i].value;
+        const dap_chain_net_srv_order_t *l_order = dap_chain_net_srv_order_check(l_orders[i].key, l_orders[i].value, l_orders[i].value_len);
+        if (!l_order) {
+            log_it(L_WARNING, "Unreadable order %s", l_orders[i].key);
+            continue;
+        }
         if (l_order->srv_uid.uint64 != DAP_CHAIN_NET_SRV_STAKE_POS_DELEGATE_ID)
             continue;
         if (l_order_fee_count == 0) {
@@ -2843,15 +2850,16 @@ bool dap_chain_net_srv_stake_get_fee_validators(dap_chain_net_t *a_net,
             l_max = l_order->price;
         }
     }
+    dap_global_db_objs_delete(l_orders, l_orders_count);
     uint256_t t = uint256_0;
-    if (!IS_ZERO_256(l_average)) DIV_256(l_average, dap_chain_uint256_from(l_order_fee_count), &t);
+    if (!IS_ZERO_256(l_average))
+        DIV_256(l_average, dap_chain_uint256_from(l_order_fee_count), &t);
     l_average = t;
 
     if (l_order_fee_count) {
         l_median = l_all_fees[(size_t)(l_order_fee_count * 2 / 3)];
     }
 
-    dap_global_db_objs_delete(l_orders, l_orders_count);
     if (a_min_fee)
         *a_min_fee = l_min;
     if (a_average_fee)