diff --git a/dap_chain_net_srv.c b/dap_chain_net_srv.c
index 843b9090b31bfb3c3f689a8f98cf277c5ce4f166..4365d2f5c82961cfcc20928959a82c9f5867096f 100755
--- a/dap_chain_net_srv.c
+++ b/dap_chain_net_srv.c
@@ -91,8 +91,8 @@ int dap_chain_net_srv_init(void)
         "net_srv -net <chain net name> order dump -hash <Order hash>\n"
         "\tOrder dump info\n"
         "net_srv -net <chain net name> order create -direction <sell|buy> -srv_uid <Service UID> -srv_class <Service Class> -price <Price>\\\n"
-        "        -price_unit <Price Unit> -price_token <Token ticker> -node_addr <Node Address> -tx_cond <TX Cond Hash> \\\n"
-        "        [-expires <Unix time when expires>]\\\n"
+        "        -price_unit <Price Unit> -price_token <Token ticker> [-node_addr <Node Address>] [-tx_cond <TX Cond Hash>] \\\n"
+        "        [-expires <Unix time when expires>] [-ext <Extension with params>]\\\n"
         "\tOrder create\n" );
 
     return 0;
@@ -217,7 +217,7 @@ static int s_cli_net_srv( int argc, char **argv, char **a_str_reply)
                 }
             } else{
 
-                dap_chain_net_srv_order_t * l_orders;
+                dap_chain_net_srv_order_t * l_orders = NULL;
                 size_t l_orders_size =0;
                 dap_chain_net_srv_uid_t l_srv_uid={{0}};
                 dap_chain_net_srv_class_t l_srv_class= SERV_CLASS_UNDEFINED;
@@ -228,7 +228,7 @@ static int s_cli_net_srv( int argc, char **argv, char **a_str_reply)
                 if( dap_chain_net_srv_order_find_all_by( l_net,l_direction,l_srv_uid,l_srv_class,l_price_unit, NULL, l_price_min, l_price_max,&l_orders,&l_orders_size) == 0 ){
                     dap_string_append_printf(l_string_ret,"Found %zd orders:\n",l_orders_size);
                     for (size_t i = 0; i< l_orders_size; i++){
-                        dap_chain_net_srv_order_dump_to_string(l_orders+i,l_string_ret);
+                        dap_chain_net_srv_order_dump_to_string(&l_orders[i],l_string_ret);
                         dap_string_append(l_string_ret,"\n");
                     }
                     ret = 0;
@@ -282,8 +282,8 @@ static int s_cli_net_srv( int argc, char **argv, char **a_str_reply)
             const char*  l_price_token_str = NULL;
             dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-price_token", &l_price_token_str);
 
-            const char*  l_comments = NULL;
-            dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-comments", &l_comments);
+            const char*  l_ext = NULL;
+            dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-ext", &l_ext);
 
             if ( l_srv_uid_str && l_srv_class_str && l_price_str && l_price_token_str && l_price_unit_str) {
                 dap_chain_net_srv_uid_t l_srv_uid={{0}};
@@ -296,10 +296,14 @@ static int s_cli_net_srv( int argc, char **argv, char **a_str_reply)
                 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 ( l_direction_str ){
-                    if ( strcmp(l_direction_str, "sell")==0)
+                    if ( strcmp(l_direction_str, "sell") == 0 ){
                         l_direction = SERV_DIR_SELL;
-                    else if ( strcmp(l_direction_str, "buy")==0)
+                        log_it(L_DEBUG, "Created order to sell");
+                    }else if ( strcmp(l_direction_str, "buy")==0){
                         l_direction = SERV_DIR_BUY;
+                        log_it(L_DEBUG, "Created order to buy");
+                    }else
+                        log_it(L_WARNING, "Undefined order direction");
                 }
 
 
@@ -316,7 +320,7 @@ static int s_cli_net_srv( int argc, char **argv, char **a_str_reply)
 
                 char * l_order_new_hash_str = dap_chain_net_srv_order_create(
                             l_net,l_direction, l_srv_uid, l_srv_class, l_node_addr,l_tx_cond_hash, l_price, l_price_unit,
-                            l_price_token, l_expires,l_comments);
+                            l_price_token, l_expires,l_ext);
                 if (l_order_new_hash_str)
                     dap_string_append_printf( l_string_ret, "Created order %s\n", l_order_new_hash_str);
                 else{
diff --git a/dap_chain_net_srv_common.h b/dap_chain_net_srv_common.h
index 2d1382f8f70a4c107f9b8cb0299e824f40f35165..3a96638abbe75fa470285ef5b8c6e2b84a036108 100755
--- a/dap_chain_net_srv_common.h
+++ b/dap_chain_net_srv_common.h
@@ -44,10 +44,6 @@ typedef union {
 #endif
 } dap_chain_net_srv_uid_t;
 
-#define DAP_CHAIN_NET_SRV_PRICE_UNIT_UNDEFINED                        0x00000000
-#define DAP_CHAIN_NET_SRV_PRICE_UNIT_BYTE                             0x00000001
-#define DAP_CHAIN_NET_SRV_PRICE_UNIT_SECOND                           0x00000010
-#define DAP_CHAIN_NET_SRV_PRICE_UNIT_BYTE_PER_SECOND                  0x00000100
 
 typedef union {
     uint8_t raw[4];
@@ -64,19 +60,20 @@ typedef enum {
 
 //Service direction
 typedef enum dap_chain_net_srv_order_direction{
-    SERV_DIR_BUY = 0x01,
-    SERV_DIR_SELL = 0x02,
-    SERV_DIR_UNDEFINED = 0x00
+    SERV_DIR_BUY = 1,
+    SERV_DIR_SELL = 2,
+    SERV_DIR_UNDEFINED = 0
 } dap_chain_net_srv_order_direction_t;
 
 //Types of services
 enum {
-    SERV_ID_UNDEFINED = 0x00000000,
-    SERV_ID_VPN = 0x00000001,
+    SERV_ID_UNDEFINED = 0,
+    SERV_ID_VPN = 1,
 };
 
 //Units of service
 enum {
+    SERV_UNIT_UNDEFINED = 0 ,
     SERV_UNIT_MB = 1, // megabytes
     SERV_UNIT_SEC = 2, // seconds
     SERV_UNIT_DAY = 3 // days
@@ -120,9 +117,10 @@ typedef struct dap_chain_net_srv
 DAP_STATIC_INLINE const char * dap_chain_net_srv_price_unit_uid_to_str( dap_chain_net_srv_price_unit_uid_t a_uid )
 {
     switch ( a_uid.uint32 ) {
-        case DAP_CHAIN_NET_SRV_PRICE_UNIT_BYTE: return "BYTE";
-        case DAP_CHAIN_NET_SRV_PRICE_UNIT_SECOND: return "SECOND";
-        case DAP_CHAIN_NET_SRV_PRICE_UNIT_BYTE_PER_SECOND: return  "BYTE_PER_SECOND";
+        case SERV_UNIT_UNDEFINED: return "BYTE";
+        case SERV_UNIT_MB: return "MEGABYTE";
+        case SERV_UNIT_SEC: return "SECOND";
+        case SERV_UNIT_DAY: return  "DAY";
         default: return "UNKNOWN";
     }
 }
diff --git a/dap_chain_net_srv_order.c b/dap_chain_net_srv_order.c
index 3eabd47aa3dcf4795cd4f58c1a915349afa8bd4c..05a31818a92200a74ef438b7dc3b81bc10648143 100644
--- a/dap_chain_net_srv_order.c
+++ b/dap_chain_net_srv_order.c
@@ -67,13 +67,20 @@ char* dap_chain_net_srv_order_create(
         dap_chain_hash_fast_t* l_order_hash = DAP_NEW_Z(dap_chain_hash_fast_t);
         l_order->version = 1;
         l_order->srv_uid = a_srv_uid;
+        l_order->direction = a_direction;
         l_order->ts_created = (dap_chain_time_t) time(NULL);
         l_order->srv_class = a_srv_class;
-        l_order->node_addr.uint64 = a_node_addr.uint64;
+
+        if ( l_order->node_addr.uint64)
+            l_order->node_addr.uint64 = a_node_addr.uint64;
+
         memcpy(&l_order->tx_cond_hash, &a_tx_cond_hash, DAP_CHAIN_HASH_FAST_SIZE);
         l_order->price = a_price;
-        l_order->price_unit = a_price_unit;
-        strncpy(l_order->price_ticker, a_price_ticker,sizeof(l_order->price_ticker)-1);
+        l_order->price_unit.uint32 = a_price_unit.uint32;
+
+        if ( a_price_ticker)
+            strncpy(l_order->price_ticker, a_price_ticker,sizeof(l_order->price_ticker)-1);
+
         if ( a_ext)
             strncpy(l_order->ext, a_ext, sizeof ( l_order->ext)-1 );
 
@@ -177,10 +184,11 @@ lb_order_pass:
             if ( a_price_ticker )
                 if ( strcmp( l_order->price_ticker, a_price_ticker) != 0 )
                     continue;
-            if( !l_order_pass_first ){
-                memcpy(a_output_orders[l_order_passed_index], l_order, sizeof (dap_chain_net_srv_order_t));
-            }else
-                l_order_passed_index++;
+
+            if( !l_order_pass_first )
+                memcpy( *a_output_orders+l_order_passed_index, l_order, sizeof (dap_chain_net_srv_order_t));
+            l_order_passed_index++;
+
         }
         // Dirty goto usage ho ho ho
         if (l_order_pass_first) {
@@ -243,7 +251,7 @@ void dap_chain_net_srv_order_dump_to_string(dap_chain_net_srv_order_t *a_order,d
             //default: dap_string_append_printf(a_str_out, "  srv_class:        UNKNOWN\n" );
         }
         dap_string_append_printf(a_str_out, "  srv_uid:          0x%016llX\n", a_order->srv_uid.uint64 );
-        dap_string_append_printf(a_str_out, "  price:            \u00a0%.3Lf (%llu)\n", dap_chain_balance_to_coins(a_order->price) , a_order->price);
+        dap_string_append_printf(a_str_out, "  price:            \u00a0%.7Lf (%llu)\n", dap_chain_balance_to_coins(a_order->price) , a_order->price);
         if( a_order->price_unit.uint32 )
             dap_string_append_printf(a_str_out, "  price_unit:       0x%016llX\n", dap_chain_net_srv_price_unit_uid_to_str(a_order->price_unit) );
         if ( a_order->node_addr.uint64)