diff --git a/dap-sdk b/dap-sdk
index 8ea87036ecc4a222c0879e6fd87aa7bb19606b0e..f5409cdd40208193ec7d0e577318bfeb30f994e5 160000
--- a/dap-sdk
+++ b/dap-sdk
@@ -1 +1 @@
-Subproject commit 8ea87036ecc4a222c0879e6fd87aa7bb19606b0e
+Subproject commit f5409cdd40208193ec7d0e577318bfeb30f994e5
diff --git a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
index 4bcb0990194bc4f0d3fbc246e17a4906aec722e6..ff58899f5bd79b9a33e03c6f4d39e9fecaaaba8b 100644
--- a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
+++ b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
@@ -330,6 +330,10 @@ static bool s_service_start(dap_stream_ch_t* a_ch , dap_stream_ch_chain_net_srv_
         return false;
     }
 
+    char l_order_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE] = {};
+    dap_chain_hash_fast_to_str(&a_request->hdr.order_hash, l_order_hash_str, DAP_CHAIN_HASH_FAST_STR_SIZE);
+    log_it(L_MSG, "Got order with hash %s.", l_order_hash_str);
+
     if ( ! l_net ) {
         // Network not found
         log_it( L_ERROR, "Can't find net with id 0x%016"DAP_UINT64_FORMAT_x"", a_request->hdr.srv_uid.uint64);
@@ -398,14 +402,14 @@ static bool s_service_start(dap_stream_ch_t* a_ch , dap_stream_ch_chain_net_srv_
     l_price = dap_chain_net_srv_get_price_from_order(l_srv, "srv_vpn", &a_request->hdr.order_hash);
     if (!l_price){
         log_it(L_ERROR, "Can't get price from order!");
-            l_err.code = DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_PRICE_NOT_FOUND;
-            if(a_ch)
-                dap_stream_ch_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR, &l_err, sizeof (l_err));
-            if (l_srv && l_srv->callbacks.response_error)
-                l_srv->callbacks.response_error(l_srv, 0, NULL, &l_err, sizeof(l_err));
-            DAP_DEL_Z(l_usage->client);
-            DAP_DEL_Z(l_usage);
-            return false;
+        l_err.code = DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_PRICE_NOT_FOUND;
+        if(a_ch)
+            dap_stream_ch_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR, &l_err, sizeof (l_err));
+        if (l_srv && l_srv->callbacks.response_error)
+            l_srv->callbacks.response_error(l_srv, 0, NULL, &l_err, sizeof(l_err));
+        // DAP_DEL_Z(l_usage->client);
+        // DAP_DEL_Z(l_usage);
+        return false;
     }
 
     if (IS_ZERO_256(l_price->value_datoshi)){
@@ -439,8 +443,8 @@ static bool s_service_start(dap_stream_ch_t* a_ch , dap_stream_ch_chain_net_srv_
                 dap_stream_ch_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR, &l_err, sizeof (l_err));
             if (l_srv && l_srv->callbacks.response_error)
                 l_srv->callbacks.response_error(l_srv, 0, NULL, &l_err, sizeof(l_err));
-            DAP_DEL_Z(l_usage->client);
-            DAP_DEL_Z(l_usage);
+            // DAP_DEL_Z(l_usage->client);
+            // DAP_DEL_Z(l_usage);
             return false;
         }
         l_grace->request = DAP_DUP_SIZE(a_request, a_request_size);
@@ -451,8 +455,8 @@ static bool s_service_start(dap_stream_ch_t* a_ch , dap_stream_ch_chain_net_srv_
                 dap_stream_ch_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR, &l_err, sizeof (l_err));
             if (l_srv && l_srv->callbacks.response_error)
                 l_srv->callbacks.response_error(l_srv, 0, NULL, &l_err, sizeof(l_err));
-            DAP_DEL_Z(l_usage->client);
-            DAP_DEL_Z(l_usage);
+            // DAP_DEL_Z(l_usage->client);
+            // DAP_DEL_Z(l_usage);
             DAP_DEL_Z(l_grace);
             return false;
         }
@@ -476,8 +480,8 @@ static bool s_service_start(dap_stream_ch_t* a_ch , dap_stream_ch_chain_net_srv_
                 dap_stream_ch_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR, &l_err, sizeof (l_err));
             if (l_srv && l_srv->callbacks.response_error)
                 l_srv->callbacks.response_error(l_srv, 0, NULL, &l_err, sizeof(l_err));
-            DAP_DEL_Z(l_usage->client);
-            DAP_DEL_Z(l_usage);
+            // DAP_DEL_Z(l_usage->client);
+            // DAP_DEL_Z(l_usage);
             return false;
         }
         l_success->hdr.usage_id = l_usage->id;
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index ec9ea01373890fb85a9f715fc5a8a3218da418d0..1e668e7933db5c50f5d9ea57c75046885b2f206d 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -103,7 +103,6 @@
 #include "dap_json_rpc_errors.h"
 #include "dap_http_ban_list_client.h"
 #include "dap_chain_datum_tx_voting.h"
-#include "dap_enc_ks.h"
 
 
 #define LOG_TAG "chain_node_cli_cmd"
diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c
index 374696c0d3138e7e9c5fb0c950bf36b1ccbb0b3a..1b08433f5e70f07a7feb0a7edf6545b41de06a27 100644
--- a/modules/net/srv/dap_chain_net_srv.c
+++ b/modules/net/srv/dap_chain_net_srv.c
@@ -410,8 +410,7 @@ static int s_cli_net_srv( int argc, char **argv, void **a_str_reply)
             } else if(!dap_strcmp( l_order_str, "dump" )) {
                 // Select with specified service uid
                 if ( l_order_hash_str ){
-                    dap_chain_net_srv_order_t * l_order = dap_chain_net_srv_order_find_by_hash_str( l_net, l_order_hash_hex_str );
-                    if (l_order) {
+                    dap_chain_net_srv_order_t * l_order = dap_chain_net_srv_order_find_by_hash_str( l_net, l_order_hash_hex_str );                    if (l_order) {
                         dap_chain_net_srv_order_dump_to_string(l_order,l_string_ret, l_hash_out_type, l_net->pub.native_ticker);
                         l_ret = 0;
                     }else{
@@ -446,6 +445,7 @@ static int s_cli_net_srv( int argc, char **argv, void **a_str_reply)
                 }
             } else if (!dap_strcmp(l_order_str, "delete")) {
                 if (l_order_hash_str) {
+                    
                     l_ret = dap_chain_net_srv_order_delete_by_hash_str_sync(l_net, l_order_hash_hex_str);
                     if (!l_ret)
                         dap_string_append_printf(l_string_ret, "Deleted order %s\n", l_order_hash_str);
diff --git a/modules/net/srv/dap_chain_net_srv_order.c b/modules/net/srv/dap_chain_net_srv_order.c
index e81bda4bd2797581d256366b80df284d4adbac97..62557e76331009418730cc1e80f336a256663035 100644
--- a/modules/net/srv/dap_chain_net_srv_order.c
+++ b/modules/net/srv/dap_chain_net_srv_order.c
@@ -429,6 +429,11 @@ dap_chain_net_srv_order_t *dap_chain_net_srv_order_find_by_hash_str(dap_chain_ne
             return NULL;
         }
         l_order = dap_chain_net_srv_order_read(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;
+        }
         DAP_DELETE(l_gdb_order);
     }
     return l_order;
@@ -472,31 +477,49 @@ int dap_chain_net_srv_order_find_all_by(dap_chain_net_t * a_net,const dap_chain_
                 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);
+                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)
+            if (a_direction != SERV_DIR_UNDEFINED && l_order->direction != a_direction){
+                DAP_DEL_Z(l_order);
                 continue;
+            }
             // Check srv uid
-            if (a_srv_uid.uint64 && l_order->srv_uid.uint64 != a_srv_uid.uint64)
+            if (a_srv_uid.uint64 && l_order->srv_uid.uint64 != a_srv_uid.uint64){
+                DAP_DEL_Z(l_order);
                 continue;
+            }
             // check price unit
-            if (a_price_unit.uint32 && a_price_unit.uint32 != l_order->price_unit.uint32)
+            if (a_price_unit.uint32 && a_price_unit.uint32 != l_order->price_unit.uint32){
+                DAP_DEL_Z(l_order);
                 continue;
+            }
             // Check price minimum
-            if (!IS_ZERO_256(a_price_min) && compare256(l_order->price, a_price_min) == -1)
+            if (!IS_ZERO_256(a_price_min) && compare256(l_order->price, a_price_min) == -1){
+                DAP_DEL_Z(l_order);
                 continue;
+            }
             // Check price maximum
-            if (!IS_ZERO_256(a_price_max) && compare256(l_order->price, a_price_max) == 1)
+            if (!IS_ZERO_256(a_price_max) && compare256(l_order->price, a_price_max) == 1){
+                DAP_DEL_Z(l_order);
                 continue;
+            }
             // Check ticker
-            if (a_price_ticker && strcmp( l_order->price_ticker, a_price_ticker))
+            if (a_price_ticker && strcmp( l_order->price_ticker, a_price_ticker)){
+                DAP_DEL_Z(l_order);
                 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);
@@ -520,13 +543,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 l_ret = -2;
+
+    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);
-        l_ret = dap_global_db_del_sync(l_gdb_group_str, a_hash_str);
+
+        int l_ret = dap_global_db_del_sync(l_gdb_group_str, a_hash_str);
         DAP_DELETE(l_gdb_group_str);
-        if (!l_ret)
-            break;
     }
     return l_ret;
 }
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 fe1c8031d5193d47fac54fdb987c87466813debd..68c0194f11c1332cbd54d49418856f8147f02d72 100644
--- a/modules/net/srv/include/dap_chain_net_srv_order.h
+++ b/modules/net/srv/include/dap_chain_net_srv_order.h
@@ -114,7 +114,7 @@ int dap_chain_net_srv_order_delete_by_hash_str_sync(dap_chain_net_t *a_net, cons
  * @param a_hash
  * @return
  */
-DAP_STATIC_INLINE int dap_chain_net_srv_order_delete_by_hash(dap_chain_net_t * a_net, dap_chain_hash_fast_t * a_hash )
+DAP_STATIC_INLINE int dap_chain_net_srv_order_delete_by_hash(dap_chain_net_t * a_net, dap_chain_hash_fast_t * a_hash)
 {
     char l_hash_str[DAP_CHAIN_HASH_FAST_SIZE * 2 + 4];
     dap_chain_hash_fast_to_str(a_hash,l_hash_str,sizeof(l_hash_str)-1);
diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c
index 1dfb28254649743a6250343023d540446e168ade..4b6423062287fda667929c1351a82d331e246aa0 100644
--- a/modules/service/xchange/dap_chain_net_srv_xchange.c
+++ b/modules/service/xchange/dap_chain_net_srv_xchange.c
@@ -2769,11 +2769,8 @@ dap_chain_net_srv_xchange_purchase_error_t dap_chain_net_srv_xchange_purchase(da
         // Create conditional transaction
         char *l_ret = NULL;
         dap_chain_datum_tx_t *l_tx = s_xchange_tx_create_exchange(l_price, a_wallet, a_value, a_fee);
-        if (l_tx && (l_ret = s_xchange_tx_put(l_tx, a_net)) &&
-            dap_hash_fast_is_blank(&l_price->order_hash)) {
-            char *l_order_hash_str = dap_hash_fast_to_str_new(a_order_hash);
-            dap_chain_net_srv_order_delete_by_hash_str_sync(l_price->net, l_order_hash_str);
-            DAP_DELETE(l_order_hash_str);
+        if (l_tx && !dap_hash_fast_is_blank(&l_price->order_hash)) {
+            l_ret = s_xchange_tx_put(l_tx, a_net);
         }
         DAP_DELETE(l_price);
         if (l_tx && l_ret){