diff --git a/modules/channel/chain-net/dap_stream_ch_chain_net.c b/modules/channel/chain-net/dap_stream_ch_chain_net.c
index e760a2f5d6e54a231def678493c46c546890fb13..16bf96af49e79300b077077a29f0874185b37e14 100644
--- a/modules/channel/chain-net/dap_stream_ch_chain_net.c
+++ b/modules/channel/chain-net/dap_stream_ch_chain_net.c
@@ -190,7 +190,7 @@ void s_stream_ch_packet_in(dap_stream_ch_t *a_ch, void* a_arg)
                 dap_stream_ch_set_ready_to_write_unsafe(a_ch, true);
                 log_it(L_ERROR, "Invalid net id in packet");
             } else {
-                dap_chain_net_srv_order_t * l_orders = NULL;
+                dap_list_t * l_orders = NULL;
                 dap_enc_key_t * enc_key_pvt = NULL;
                 dap_chain_t *l_chain = NULL;
                 DL_FOREACH(l_net->pub.chains, l_chain)
@@ -236,20 +236,18 @@ void s_stream_ch_packet_in(dap_stream_ch_t *a_ch, void* a_arg)
                 //strncpy(send->header.data,(uint8_t*)l_ch_chain_net_pkt->data,10);
                 flags = (l_net->pub.mempool_autoproc) ? flags | A_PROC : flags & ~A_PROC;
 
-                dap_chain_net_srv_order_find_all_by(l_net,SERV_DIR_UNDEFINED,l_uid,
-                                                   l_price_unit,NULL,l_price_min,l_price_max,&l_orders,&l_orders_num);
-                size_t l_orders_size = 0;
-                for (size_t i = 0; i< l_orders_num; i++){
-                    dap_chain_net_srv_order_t *l_order =(dap_chain_net_srv_order_t *) (((byte_t*) l_orders) + l_orders_size);
-                    l_orders_size += dap_chain_net_srv_order_get_size(l_order);
-                    if(l_order->node_addr.uint64 == l_cur_node_addr.uint64)
-                    {
-                        flags = flags | F_ORDR;
-                        break;
+                if (dap_chain_net_srv_order_find_all_by(l_net,SERV_DIR_UNDEFINED,l_uid,
+                                                    l_price_unit,NULL,l_price_min,l_price_max,&l_orders,&l_orders_num)==0){
+                    for (dap_list_t *l_temp = l_orders;l_temp; l_temp = l_orders->next){
+                        dap_chain_net_srv_order_t *l_order =(dap_chain_net_srv_order_t *) l_temp->data;
+                        if(l_order->node_addr.uint64 == l_cur_node_addr.uint64)
+                        {
+                            flags = flags | F_ORDR;
+                            break;
+                        }
                     }
+                    dap_list_free_full(l_orders, NULL);
                 }
-                if (l_orders_num)
-                    DAP_DELETE(l_orders);
                 bool auto_online = dap_config_get_item_bool_default( g_config, "general", "auto_online", false );
                 bool auto_update = false;
                 if((system("systemctl status cellframe-updater.service") == 768) && (system("systemctl status cellframe-updater.timer") == 0))
diff --git a/modules/common/include/dap_chain_common.h b/modules/common/include/dap_chain_common.h
index 109d128d70d23b859dfcb12825727da124bc410c..6256c84afaa77c7389fb418f50ddc965df4ac65f 100644
--- a/modules/common/include/dap_chain_common.h
+++ b/modules/common/include/dap_chain_common.h
@@ -126,10 +126,7 @@ extern const dap_chain_addr_t c_dap_chain_addr_blank;
 
 enum dap_chain_srv_unit_enum {
     SERV_UNIT_UNDEFINED = 0 ,
-    SERV_UNIT_MB = 0x00000001, // megabytes
     SERV_UNIT_SEC = 0x00000002, // seconds
-    SERV_UNIT_DAY = 0x00000003,  // days
-    SERV_UNIT_KB = 0x00000010,  // kilobytes
     SERV_UNIT_B = 0x00000011,   // bytes
     SERV_UNIT_PCS = 0x00000022  // pieces
 };
@@ -138,13 +135,10 @@ typedef uint32_t dap_chain_srv_unit_enum_t;
 DAP_STATIC_INLINE const char *dap_chain_srv_unit_enum_to_str(dap_chain_srv_unit_enum_t a_unit_enum)
 {
     switch (a_unit_enum) {
-    case SERV_UNIT_UNDEFINED: return "SERV_UNIT_UNDEFINED";
-    case SERV_UNIT_MB: return "SERV_UNIT_MB";
-    case SERV_UNIT_SEC: return "SERV_UNIT_SEC";
-    case SERV_UNIT_DAY: return "SERV_UNIT_DAY";
-    case SERV_UNIT_KB: return "SERV_UNIT_KB";
-    case SERV_UNIT_B: return "SERV_UNIT_B";
-    case SERV_UNIT_PCS: return "SERV_UNIT_PCS";
+    case SERV_UNIT_UNDEFINED: return "UNDEFINED";
+    case SERV_UNIT_SEC: return "SEC";
+    case SERV_UNIT_B: return "B";
+    case SERV_UNIT_PCS: return "PCS";
     default: return "UNDEFINED";
     }
 }
@@ -152,14 +146,8 @@ DAP_STATIC_INLINE const char *dap_chain_srv_unit_enum_to_str(dap_chain_srv_unit_
 DAP_STATIC_INLINE dap_chain_srv_unit_enum_t dap_chain_srv_str_to_unit_enum(char* a_price_unit_str) {
     if (!a_price_unit_str)
         return SERV_UNIT_UNDEFINED;
-    if (!dap_strcmp(a_price_unit_str, "MB")){
-        return SERV_UNIT_MB;
-    } else if (!dap_strcmp(a_price_unit_str, "SEC")){
+    if (!dap_strcmp(a_price_unit_str, "SEC")){
         return SERV_UNIT_SEC;
-    } else if (!dap_strcmp(a_price_unit_str, "DAY")){
-        return SERV_UNIT_DAY;
-    } else if (!dap_strcmp(a_price_unit_str, "KB")){
-        return SERV_UNIT_KB;
     } else if (!dap_strcmp(a_price_unit_str, "B")){
         return SERV_UNIT_B;
     } else if (!dap_strcmp(a_price_unit_str, "PCS")){
diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c
index f357e5b9e5e7c51dbb0cb603a41a8dda8733e8e7..09299514ba4743837a1fd43626ccf81419f93337 100644
--- a/modules/net/srv/dap_chain_net_srv.c
+++ b/modules/net/srv/dap_chain_net_srv.c
@@ -434,36 +434,63 @@ static int s_cli_net_srv( int argc, char **argv, void **a_str_reply)
                 }
             } else {
 
-                dap_chain_net_srv_order_t * l_orders = NULL;
+                dap_list_t * l_orders;
                 size_t l_orders_num = 0;
-                dap_chain_net_srv_uid_t l_srv_uid={{0}};
-                uint256_t l_price_min = {};
-                uint256_t l_price_max = {};
-                dap_chain_net_srv_price_unit_uid_t l_price_unit={{0}};
-                dap_chain_net_srv_order_direction_t l_direction = SERV_DIR_UNDEFINED;
-
-                if( !dap_chain_net_srv_order_find_all_by( l_net,l_direction,l_srv_uid,l_price_unit, NULL, l_price_min, l_price_max,&l_orders,&l_orders_num) ){
-                    dap_string_append_printf(l_string_ret,"Found %zd orders:\n",l_orders_num);
-                    size_t l_orders_size = 0;
-                    for(size_t i = 0; i < l_orders_num; i++) {
-                        dap_chain_net_srv_order_t *l_order =(dap_chain_net_srv_order_t *) (((byte_t*) l_orders) + l_orders_size);
+                if( dap_chain_net_srv_order_find_all_by( l_net, l_direction,l_srv_uid,l_price_unit,l_price_token_str,l_price_min, l_price_max,&l_orders,&l_orders_num) == 0 ){
+                    dap_string_append_printf(l_string_ret, "Found %zu orders:\n", l_orders_num);
+                    for (dap_list_t *l_temp = l_orders;l_temp; l_temp = l_orders->next){
+                        dap_chain_net_srv_order_t *l_order =(dap_chain_net_srv_order_t *) l_temp->data;
                         dap_chain_net_srv_order_dump_to_string(l_order, l_string_ret, l_hash_out_type, l_net->pub.native_ticker);
-                        l_orders_size += dap_chain_net_srv_order_get_size(l_order);
-                        dap_string_append(l_string_ret, "\n");
+                        dap_string_append(l_string_ret,"\n");
                     }
                     l_ret = 0;
+                    dap_list_free_full(l_orders, NULL);
                 }else{
                     l_ret = -5 ;
                     dap_string_append(l_string_ret,"Can't get orders: some internal error or wrong params\n");
                 }
-                DAP_DELETE(l_orders);
-            }
-        } else if(!dap_strcmp( l_order_str, "delete" )) {
-            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) {
-                    if (!dap_chain_net_srv_order_delete_by_hash_str_sync(l_net, l_order_hash_hex_str)) {
+            } 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_dump_to_string(l_order,l_string_ret, l_hash_out_type, l_net->pub.native_ticker);
                         l_ret = 0;
+                    }else{
+                        l_ret = -7 ;
+                        if(!dap_strcmp(l_hash_out_type,"hex"))
+                            dap_string_append_printf(l_string_ret,"Can't find order with hash %s\n", l_order_hash_hex_str );
+                        else
+                            dap_string_append_printf(l_string_ret,"Can't find order with hash %s\n", l_order_hash_base58_str );
+                    }
+                } else {
+
+                    dap_list_t * l_orders = NULL;
+                    size_t l_orders_num = 0;
+                    dap_chain_net_srv_uid_t l_srv_uid={{0}};
+                    uint256_t l_price_min = {};
+                    uint256_t l_price_max = {};
+                    dap_chain_net_srv_price_unit_uid_t l_price_unit={{0}};
+                    dap_chain_net_srv_order_direction_t l_direction = SERV_DIR_UNDEFINED;
+
+                    if( !dap_chain_net_srv_order_find_all_by( l_net,l_direction,l_srv_uid,l_price_unit, NULL, l_price_min, l_price_max,&l_orders,&l_orders_num) ){
+                        dap_string_append_printf(l_string_ret,"Found %zd orders:\n",l_orders_num);
+                        for(dap_list_t *l_temp = l_orders;l_temp; l_temp = l_orders->next) {
+                            dap_chain_net_srv_order_t *l_order =(dap_chain_net_srv_order_t *) l_temp->data;
+                            dap_chain_net_srv_order_dump_to_string(l_order, l_string_ret, l_hash_out_type, l_net->pub.native_ticker);
+                            dap_string_append(l_string_ret, "\n");
+                        }
+                        l_ret = 0;
+                    }else{
+                        l_ret = -5 ;
+                        dap_string_append(l_string_ret,"Can't get orders: some internal error or wrong params\n");
+                    }
+                    dap_list_free_full(l_orders, NULL);
+                }
+            } 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);
                     } else {
                         l_ret = -9;
diff --git a/modules/net/srv/dap_chain_net_srv_order.c b/modules/net/srv/dap_chain_net_srv_order.c
index abe28cddc1fc415ab5e4226e4778faa543c1b19b..c90391e0823693b853788559dbf518ad02944878 100644
--- a/modules/net/srv/dap_chain_net_srv_order.c
+++ b/modules/net/srv/dap_chain_net_srv_order.c
@@ -449,13 +449,15 @@ int dap_chain_net_srv_order_find_all_by(dap_chain_net_t * a_net,const dap_chain_
                                         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 uint256_t a_price_min, const uint256_t a_price_max,
-                                        dap_chain_net_srv_order_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;
     *a_output_orders = NULL;
 
+    dap_list_t* l_out_list = NULL;
+
     for (int i = 0; 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);
@@ -464,7 +466,6 @@ int dap_chain_net_srv_order_find_all_by(dap_chain_net_t * a_net,const dap_chain_
         log_it( L_DEBUG, "Loaded %zu orders", l_orders_count);
         dap_chain_net_srv_order_t *l_order = NULL;
         for (size_t i = 0; i < l_orders_count; i++) {
-            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_sync(l_gdb_group_str, l_orders[i].key);
@@ -495,17 +496,14 @@ int dap_chain_net_srv_order_find_all_by(dap_chain_net_t * a_net,const dap_chain_
             // Check ticker
             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);
-            *a_output_orders = DAP_REALLOC(*a_output_orders, l_orders_size + l_order_mem_size);
-            memcpy((byte_t *)*a_output_orders + l_orders_size, l_order, l_order_mem_size);
-            DAP_DEL_Z(l_order);
-            l_orders_size += l_order_mem_size;
+            l_out_list = dap_list_append(l_out_list, l_order);
             l_output_orders_count++;
         }
         dap_global_db_objs_delete(l_orders, l_orders_count);
         DAP_DELETE(l_gdb_group_str);
     }
     *a_output_orders_count = l_output_orders_count;
+    *a_output_orders = l_out_list;
     return 0;
 }
 
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 8ebb4ed5d09f22a68d468d1645d844085c9f80a6..a0686c672921d80290fbc325c5ec30a868694a75 100644
--- a/modules/net/srv/include/dap_chain_net_srv_order.h
+++ b/modules/net/srv/include/dap_chain_net_srv_order.h
@@ -104,7 +104,7 @@ int dap_chain_net_srv_order_find_all_by(
     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_chain_net_srv_order_t** a_output_orders,
+    dap_list_t** a_output_orders,
     size_t* a_output_orders_count);
 
 int dap_chain_net_srv_order_delete_by_hash_str_sync( dap_chain_net_t * a_net,const char * a_hash_str );
diff --git a/modules/service/vpn/dap_chain_net_vpn_client.c b/modules/service/vpn/dap_chain_net_vpn_client.c
index 1ef5e9feddf6250a2c4a2e3b946ab569f1319ee6..75c951a9bbf46daabd3dd936eb894227d8aee5da 100644
--- a/modules/service/vpn/dap_chain_net_vpn_client.c
+++ b/modules/service/vpn/dap_chain_net_vpn_client.c
@@ -441,7 +441,8 @@ char *dap_chain_net_vpn_client_check_result(dap_chain_net_t *a_net, const char*
 {
 
 
-    dap_chain_net_srv_order_t * l_orders = NULL;
+    // dap_chain_net_srv_order_t 
+    dap_list_t* l_orders = NULL;
     size_t l_orders_num = 0;
     dap_chain_net_srv_uid_t l_srv_uid = { { 0 } };
     uint256_t l_price_min = {};
@@ -452,8 +453,8 @@ char *dap_chain_net_vpn_client_check_result(dap_chain_net_t *a_net, const char*
 
     if(dap_chain_net_srv_order_find_all_by(a_net, l_direction, l_srv_uid, l_price_unit, NULL, l_price_min, l_price_max, &l_orders, &l_orders_num) == 0){
         size_t l_orders_size = 0;
-        for(size_t i = 0; i < l_orders_num; i++) {
-            dap_chain_net_srv_order_t *l_order = (dap_chain_net_srv_order_t *) (((byte_t*) l_orders) + l_orders_size);
+        for(dap_list_t *l_temp = l_orders;l_temp; l_temp = l_orders->next) {
+            dap_chain_net_srv_order_t *l_order = (dap_chain_net_srv_order_t *) l_temp->data;
             //dap_chain_net_srv_order_dump_to_string(l_order, l_string_ret, l_hash_out_type);
             dap_chain_hash_fast_t l_hash={0};
             char *l_hash_str;
@@ -477,9 +478,9 @@ char *dap_chain_net_vpn_client_check_result(dap_chain_net_t *a_net, const char*
             }
             dap_string_append_printf(l_string_ret, "Order %s: State %s\n", l_hash_str, l_state_str);
             DAP_DELETE(l_hash_str);
-            l_orders_size += dap_chain_net_srv_order_get_size(l_order);
             //dap_string_append(l_string_ret, "\n");
         }
+        dap_list_free_full(l_orders, NULL);
     }
     // return str from dap_string_t
     return dap_string_free(l_string_ret, false);