diff --git a/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c b/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c
index 05cdd0fffb3113a0e13335f11c2210e7067f391e..7cf85568114fe718d06095663a0b4bb0d10eb085 100644
--- a/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c
+++ b/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c
@@ -57,27 +57,27 @@ int dap_chain_net_srv_stake_pos_delegate_init()
 {
     dap_chain_ledger_verificator_add(DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_POS_DELEGATE, s_verificator_stake_callback, s_verificator_stake_updater_callback);
     dap_cli_server_cmd_add("srv_stake", s_cli_srv_stake, "Delegated stake service commands",
-    "srv_stake order create -net <net_name> -addr_hldr <addr> -token <token_ticker> -coins <value> -cert <priv_cert_name> -fee_percent <value>\n"
-        "\tCreate a new order with specified amount of datoshi to delegate specified cert from the specified address.\n"
-        "\tThe fee with specified percent with this delagation will be returned to the fee address pointed by delegator\n"
-    "srv_stake order declare -net <net_name> -wallet <wallet_name> -token <token_ticker> -coins <value> -fee_percent <value>"
-        "\tCreate a new order with specified amount of datoshi and fee which holder is ready to stake.\n"
+    "\t\t=== Commands for work with orders ===\n"
+    "srv_stake order create -net <net_name> -value <value> -cert <priv_cert_name> \n"
+        "\tCreates a new order signed with a delegated key, which declares the commission for which \n"
+        "\tthe node agrees to conduct the transaction.\n"
     "srv_stake order remove -net <net_name> -order <order_hash> [-H {hex | base58(default)}]\n"
          "\tRemove order with specified hash\n"
-    "srv_stake order update -net <net_name> -order <order_hash> {-cert <priv_cert_name> | -wallet <wallet_name>} [-H {hex | base58(default)}] {[-addr_hldr <addr>] [-token <token_ticker>] [-coins <value>] [-fee_percent <value>] | [-token <token_ticker>] [-coins <value>] -fee_percent <value>]}\n"
+    "srv_stake order update -net <net_name> -order <order_hash> [-H {hex | base58(default)}] -cert <priv_cert_name>  -value <value>\n"
          "\tUpdate order with specified hash\n"
     "srv_stake order list -net <net_name>\n"
          "\tGet the stake orders list within specified net name\n"
+     "\t\t === Commands for work with stake delegate ===\n"
     "srv_stake delegate -order <order_hash> -net <net_name> -wallet <wallet_name> -fee_addr <addr>\n"
-         "\tDelegate tokens with specified order within specified net name. Specify fee address\n"
+         "\tDelegate tokens with specified order within specified net name. Specify fee address.\n"
     "srv_stake approve -net <net_name> -tx <transaction_hash> -cert <priv_cert_name>\n"
          "\tApprove stake transaction by root node certificate within specified net name.\n"
     "srv_stake transactions -net <net_name> [-addr <addr_from>]\n"
-         "\tShow the list of requested, active and canceled stake transactions (optional delegated from addr)\n"
+         "\tShow the list of requested, active and canceled stake transactions (optional delegated from addr).\n"
     "srv_stake invalidate -net <net_name> -tx <transaction_hash> -wallet <wallet_name>\n"
-         "\tInvalidate requested stake transaction by hash within net name and return stake to specified wallet\n"
+         "\tInvalidate requested stake transaction by hash within net name and return stake to specified wallet.\n"
     "srv_stake commit -net <net_name> [-block <block_hash> | [-tx <transaction_hash>]\n"
-         "\tSend a staker fee from the block or transaction to the holder\n"
+         "\tSend a staker fee from the block or transaction to the holder.\n"
     );
 
     s_srv_stake = DAP_NEW_Z(dap_chain_net_srv_stake_t);
@@ -562,25 +562,17 @@ static bool s_stake_tx_invalidate(dap_chain_net_srv_stake_item_t *a_stake, dap_c
     return true;
 }
 
-char *s_stake_order_create(dap_chain_net_srv_stake_item_t *a_item, dap_enc_key_t *l_key)
+char *s_stake_order_create(dap_chain_net_t *a_net, uint256_t *a_fee, dap_enc_key_t *a_key)
 {
     dap_chain_hash_fast_t l_tx_hash = {};
-    dap_srv_stake_order_ext_t l_ext = {};
-    l_ext.addr_hldr = a_item->addr_hldr;
     dap_chain_net_srv_order_direction_t l_dir = SERV_DIR_SELL;
-    if (memcmp(&a_item->signing_addr, &l_ext.signing_addr, sizeof(dap_chain_addr_t))) {
-        // Signing addr is not empty
-        l_dir = SERV_DIR_BUY;
-        l_ext.signing_addr = a_item->signing_addr;
-    }
-    l_ext.fee_value = a_item->fee_value;
-    uint32_t l_ext_size = sizeof(dap_srv_stake_order_ext_t);
-    dap_chain_node_addr_t *l_node_addr = dap_chain_net_get_cur_addr(a_item->net);
-    dap_chain_net_srv_price_unit_uid_t l_unit = { .uint32 =  SERV_UNIT_UNDEFINED};
+    const char *l_native_ticker = a_net->pub.native_ticker;
+    dap_chain_node_addr_t *l_node_addr = dap_chain_net_get_cur_addr(a_net);
+    dap_chain_net_srv_price_unit_uid_t l_unit = { .uint32 =  SERV_UNIT_PCS};
     dap_chain_net_srv_uid_t l_uid = { .uint64 = DAP_CHAIN_NET_SRV_STAKE_POS_DELEGATE_ID };
-    char *l_order_hash_str = dap_chain_net_srv_order_create(a_item->net, l_dir, l_uid, *l_node_addr,
-                                                            l_tx_hash, &a_item->value, l_unit, a_item->token, 0,
-                                                            (uint8_t *)&l_ext, l_ext_size, NULL, 0, l_key);
+    char *l_order_hash_str = dap_chain_net_srv_order_create(a_net, l_dir, l_uid, *l_node_addr,
+                                                            l_tx_hash, a_fee, l_unit, l_native_ticker, 0,
+                                                            NULL, 0, NULL, 0, a_key);
     return l_order_hash_str;
 }
 
@@ -767,8 +759,8 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, cha
     int l_arg_index = a_arg_index + 1;
     switch (l_cmd_num) {
         case CMD_CREATE: {
-            const char *l_net_str = NULL, *l_token_str = NULL, *l_coins_str = NULL;
-            const char *l_addr_hldr_str = NULL, *l_cert_str = NULL, *l_fee_str = NULL;
+            const char *l_net_str = NULL, *l_token_str = NULL, *l_value_str = NULL;
+            const char *l_cert_str = NULL, *l_fee_str = NULL;
             dap_chain_net_t *l_net = NULL;
             dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-net", &l_net_str);
             if (!l_net_str) {
@@ -780,156 +772,35 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, cha
                 dap_cli_server_cmd_set_reply_text(a_str_reply, "Network %s not found", l_net_str);
                 return -4;
             }
-            dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-token", &l_token_str);
-            if (!l_token_str) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Command 'order create' required parameter -token");
-                return -5;
-            }
-            if (!dap_chain_ledger_token_ticker_check(l_net->pub.ledger, l_token_str)) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Token ticker %s not found", l_token_str);
-                return -6;
-            }
-            dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-coins", &l_coins_str);
-            if (!l_coins_str) {
+            dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-value", &l_value_str);
+            if (!l_value_str) {
                 dap_cli_server_cmd_set_reply_text(a_str_reply, "Command 'order create' required parameter -coins");
-                return -7;
+                return -5;
             }
-            uint256_t l_value = dap_chain_balance_scan(l_coins_str);
+            uint256_t l_value = dap_chain_balance_scan(l_value_str);
             if (IS_ZERO_256(l_value)) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Format -coins <256 bit integer>");
-                return -8;
-            }
-            dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-addr_hldr", &l_addr_hldr_str);
-            if (!l_addr_hldr_str) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Command 'order create' required parameter -addr_hldr");
-                return -9;
-            }
-            dap_chain_addr_t *l_addr_hldr = dap_chain_addr_from_str(l_addr_hldr_str);
-            if (!l_addr_hldr) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Wrong address format");
-                return -10;
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "Format -value <256 bit integer>");
+                return -6;
             }
             dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-cert", &l_cert_str);
             if (!l_cert_str) {
                 dap_cli_server_cmd_set_reply_text(a_str_reply, "Command 'order create' required parameter -cert");
-                return -9;
+                return -7;
             }
             dap_cert_t *l_cert = dap_cert_find_by_name(l_cert_str);
             if (!l_cert) {
                 dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't load cert %s", l_cert_str);
-                return -10;
-            }
-            dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-fee_percent", &l_fee_str);
-            if (!l_fee_str) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Command 'order create' required parameter -fee_percent");
-                return -11;
-            }
-            uint256_t l_fee = dap_chain_coins_to_balance(l_fee_str);
-            if (IS_ZERO_256(l_fee)) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Format -fee_percent <long double>(%%)");
-                return -12;
+                return -8;
             }
-            // Create the stake item
-            dap_chain_net_srv_stake_item_t *l_stake = DAP_NEW_Z(dap_chain_net_srv_stake_item_t);
-            l_stake->net = l_net;
-            dap_stpcpy(l_stake->token, l_token_str);
-            l_stake->value = l_value;
-            l_stake->addr_hldr = *l_addr_hldr;
-            dap_chain_addr_t *l_signing_addr = dap_cert_to_addr(l_cert, l_net->pub.id);
-            l_stake->signing_addr = *l_signing_addr;
-            DAP_DELETE(l_addr_hldr);
-            DAP_DELETE(l_signing_addr);
-            l_stake->fee_value = l_fee;
             // Create the order & put it in GDB
-            char *l_order_hash_str = s_stake_order_create(l_stake, l_cert->enc_key);
+            char *l_order_hash_str = s_stake_order_create(l_net, &l_value, l_cert->enc_key);
             if (l_order_hash_str) {
                 dap_cli_server_cmd_set_reply_text(a_str_reply, "Successfully created order %s", l_order_hash_str);
                 DAP_DELETE(l_order_hash_str);
-                DAP_DELETE(l_stake);
             } else {
                 dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't compose the order");
-                DAP_DELETE(l_stake);
-                return -15;
-            }
-        } break;
-        case CMD_DECLARE: {
-            const char *l_net_str = NULL, *l_token_str = NULL, *l_coins_str = NULL;
-            const char *l_wallet_str = NULL, *l_fee_str = NULL;
-            dap_chain_net_t *l_net = NULL;
-            dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-net", &l_net_str);
-            if (!l_net_str) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Command 'order declare' required parameter -net");
-                return -3;
-            }
-            l_net = dap_chain_net_by_name(l_net_str);
-            if (!l_net) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Network %s not found", l_net_str);
-                return -4;
-            }
-            dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-token", &l_token_str);
-            if (!l_token_str) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Command 'order declare' required parameter -token");
-                return -5;
-            }
-            if (!dap_chain_ledger_token_ticker_check(l_net->pub.ledger, l_token_str)) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Token ticker %s not found", l_token_str);
-                return -6;
-            }
-            dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-coins", &l_coins_str);
-            if (!l_coins_str) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Command 'order declare' required parameter -coins");
-                return -7;
-            }
-            uint256_t l_value = dap_chain_balance_scan(l_coins_str);
-            if (IS_ZERO_256(l_value)) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Format -coins <256 bit integer>");
-                return -8;
-            }
-            dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-wallet", &l_wallet_str);
-            if (!l_wallet_str) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Command 'order declare' required parameter -wallet");
                 return -9;
             }
-            dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, dap_chain_wallet_get_path(g_config));
-            if (!l_wallet) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Specified wallet not found");
-                return -18;
-            }
-            dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-fee_percent", &l_fee_str);
-            if (!l_fee_str) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Command 'order declare' required parameter -fee_percent");
-                return -11;
-            }
-            uint256_t l_fee = dap_chain_coins_to_balance(l_fee_str);
-            if (IS_ZERO_256(l_fee)) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Format -fee_percent <long double>(%%)");
-                return -12;
-            }
-            uint256_t l_balance = dap_chain_wallet_get_balance(l_wallet, l_net->pub.id, l_token_str);
-            if (compare256(l_balance, l_value) == -1) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Insufficient coins for token %s in wallet '%s'", l_token_str, l_wallet_str);
-                return -13;
-            }
-            // Create the stake item
-            dap_chain_net_srv_stake_item_t *l_stake = DAP_NEW_Z(dap_chain_net_srv_stake_item_t);
-            l_stake->net = l_net;
-            dap_stpcpy(l_stake->token, l_token_str);
-            l_stake->value = l_value;
-            dap_chain_addr_t *l_addr_hldr = dap_chain_wallet_get_addr(l_wallet, l_net->pub.id);
-            l_stake->addr_hldr = *l_addr_hldr;
-            DAP_DELETE(l_addr_hldr);
-            l_stake->fee_value = l_fee;
-            // Create the order & put it to GDB
-            char *l_order_hash_str = s_stake_order_create(l_stake, dap_chain_wallet_get_key(l_wallet, 0));
-            if (l_order_hash_str) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Successfully created order %s", l_order_hash_str);
-                DAP_DELETE(l_order_hash_str);
-                DAP_DELETE(l_stake);
-            } else {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't compose the order");
-                DAP_DELETE(l_stake);
-                return -15;
-            }
         } break;
         case CMD_REMOVE: {
             const char *l_net_str = NULL, *l_order_hash_str = NULL;
@@ -958,10 +829,25 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, cha
                 l_order_hash_base58_str = dap_strdup(l_order_hash_str);
             }
 
-            if (!l_net_str) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Command 'order remove' requires parameter -order");
-                return -13;
+            dap_chain_net_srv_order_t *l_order =  dap_chain_net_srv_order_find_by_hash_str(l_net, l_order_hash_str);
+            if (!l_order) {
+                if(!dap_strcmp(a_hash_out_type,"hex"))
+                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't find order %s\n", l_order_hash_hex_str);
+                else
+                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't find order %s\n", l_order_hash_base58_str);
+                return -5;
+            }
+
+            if (l_order->srv_uid.uint64 != DAP_CHAIN_NET_SRV_STAKE_POS_DELEGATE_ID) {
+                if(!dap_strcmp(a_hash_out_type,"hex"))
+                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Order %s is not a delegated stake order.\n",
+                                                      l_order_hash_hex_str);
+                else
+                    dap_cli_server_cmd_set_reply_text(a_str_reply,
+                                                      "Order %s is not a delegated stake order.\n", l_order_hash_base58_str);
+                return -6;
             }
+
             if (dap_chain_net_srv_order_delete_by_hash_str_sync(l_net, l_order_hash_hex_str)) {
                 if(!dap_strcmp(a_hash_out_type,"hex"))
                     dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't remove order %s\n", l_order_hash_hex_str);
@@ -972,9 +858,8 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, cha
             dap_cli_server_cmd_set_reply_text(a_str_reply, "Stake order successfully removed");
         } break;
         case CMD_UPDATE: {
-            const char *l_net_str = NULL, *l_token_str = NULL, *l_coins_str = NULL;
-            const char *l_addr_hldr_str = NULL, *l_cert_str = NULL, *l_fee_str = NULL;
-            const char *l_order_hash_str = NULL, *l_wallet_str = NULL;
+            const char *l_net_str = NULL, *l_value_str = NULL;
+            const char *l_cert_str = NULL, *l_order_hash_str = NULL;
             dap_chain_net_t *l_net = NULL;
             dap_enc_key_t *l_key = NULL;
             dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-net", &l_net_str);
@@ -989,7 +874,7 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, cha
             }
             if (!l_net_str) {
                 dap_cli_server_cmd_set_reply_text(a_str_reply, "Command 'order update' requires parameter -order");
-                return -13;
+                return -5;
             }
             dap_chain_net_srv_order_t *l_order =  dap_chain_net_srv_order_find_by_hash_str(l_net, l_order_hash_str);
 
@@ -999,8 +884,7 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, cha
             if(!dap_strncmp(l_order_hash_str, "0x", 2) || !dap_strncmp(l_order_hash_str, "0X", 2)) {
                 l_order_hash_hex_str = dap_strdup(l_order_hash_str);
                 l_order_hash_base58_str = dap_enc_base58_from_hex_str_to_str(l_order_hash_str);
-            }
-            else {
+            } else {
                 l_order_hash_hex_str = dap_enc_base58_to_hex_str_from_str(l_order_hash_str);
                 l_order_hash_base58_str = dap_strdup(l_order_hash_str);
             }
@@ -1010,98 +894,41 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, cha
                     dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't find order %s\n", l_order_hash_hex_str);
                 else
                     dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't find order %s\n", l_order_hash_base58_str);
-                return -14;
+                return -6;
             }
-            dap_chain_net_srv_stake_item_t *l_stake = s_stake_item_from_order(l_net, l_order);
-            dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-token", &l_token_str);
-            if (l_token_str) {
-                if (!dap_chain_ledger_token_ticker_check(l_net->pub.ledger, l_token_str)) {
-                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Token ticker %s not found", l_token_str);
-                    DAP_DELETE(l_stake);
-                    return -6;
-                }
-                strcpy(l_stake->token, l_token_str);
+
+            if (l_order->srv_uid.uint64 != DAP_CHAIN_NET_SRV_STAKE_POS_DELEGATE_ID) {
+                if(!dap_strcmp(a_hash_out_type,"hex"))
+                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Order %s is not a delegated stake order.\n",
+                                                      l_order_hash_hex_str);
+                else
+                    dap_cli_server_cmd_set_reply_text(a_str_reply,
+                                                      "Order %s is not a delegated stake order.\n", l_order_hash_base58_str);
+                return -7;
             }
-            dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-coins", &l_coins_str);
-            if (l_coins_str) {
-                uint256_t l_value = dap_chain_balance_scan(l_coins_str);
+
+            dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-value", &l_value_str);
+            uint256_t l_value = {0};
+            if (l_value_str) {
+                l_value = dap_chain_balance_scan(l_value_str);
                 if (IS_ZERO_256(l_value)) {
-                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Format -coins <unsigned long long>");
-                    DAP_DELETE(l_stake);
+                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Format -value <uint256_t>");
                     return -8;
                 }
-                l_stake->value = l_value;
-            }
-            dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-fee_percent", &l_fee_str);
-            if (l_fee_str) {
-                long double l_fee = strtold(l_fee_str, NULL);
-                if (!l_fee) {
-                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Format -fee_percent <long double>(%%)");
-                    DAP_DELETE(l_stake);
-                    return -12;
-                }
             }
-            dap_chain_addr_t l_empty_addr = {};
-            if (memcmp(&l_stake->signing_addr, &l_empty_addr, sizeof(dap_chain_addr_t))) {
-                // It's a buying order
-                dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-cert", &l_cert_str);
-                if (!l_cert_str) {
-                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Command 'order update' requires parameter -cert for buying orders");
-                    DAP_DELETE(l_stake);
-                    return -9;
-                }
-                dap_cert_t *l_cert = dap_cert_find_by_name(l_cert_str);
-                if (!l_cert) {
-                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't load cert %s", l_cert_str);
-                    DAP_DELETE(l_stake);
-                    return -10;
-                }
-                l_key = l_cert->enc_key;
-                dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-addr_hldr", &l_addr_hldr_str);
-                if (l_addr_hldr_str) {
-                    dap_chain_addr_t *l_addr_hldr = dap_chain_addr_from_str(l_addr_hldr_str);
-                    if (!l_addr_hldr) {
-                        dap_cli_server_cmd_set_reply_text(a_str_reply, "Wrong address format");
-                        DAP_DELETE(l_stake);
-                        return -14;
-                    }
-                    l_stake->addr_hldr = *l_addr_hldr;
-                    DAP_DELETE(l_addr_hldr);
-                }
-            } else {    // It's a selling order
-                dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-wallet", &l_wallet_str);
-                if (!l_wallet_str) {
-                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Command 'order update' requires parameter -wallet for selling orders");
-                    DAP_DELETE(l_stake);
-                    return -7;
-                }
-                dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, dap_chain_wallet_get_path(g_config));
-                if (!l_wallet) {
-                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Specified wallet not found");
-                    DAP_DELETE(l_stake);
-                    return -18;
-                }
-                uint256_t l_balance = dap_chain_wallet_get_balance(l_wallet, l_net->pub.id, l_stake->token);
-                if (compare256(l_balance, l_stake->value) == -1) {
-                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Insufficient coins for token %s in wallet '%s'", l_token_str, l_wallet_str);
-                    DAP_DELETE(l_stake);
-                    return -11;
-                }
-                l_key = dap_chain_wallet_get_key(l_wallet, 0);
-            }
-            if (!l_token_str && !l_coins_str && !l_addr_hldr_str && !l_fee_str) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "At least one of updating parameters is mandatory");
-                DAP_DELETE(l_stake);
-                return -16;
+            dap_cert_t *l_cert = dap_cert_find_by_name(l_cert_str);
+            if (!l_cert) {
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't load cert %s", l_cert_str);
+                return -9;
             }
-            // Create the order & put it to GDB
+            l_key = l_cert->enc_key;
+            // Remove old order and create the order & put it to GDB
             dap_chain_net_srv_order_delete_by_hash_str_sync(l_net, l_order_hash_hex_str);
             DAP_DELETE(l_order_hash_hex_str);
             DAP_DELETE(l_order_hash_base58_str);
-            l_order_hash_hex_str = s_stake_order_create(l_stake, l_key);
-            DAP_DELETE(l_stake);
+            l_order_hash_hex_str = s_stake_order_create(l_net, &l_value, l_key);
             if(!l_order_hash_hex_str) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't compose the order");
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't create new order");
                 return -15;
             }
             if(!dap_strcmp(a_hash_out_type, "hex")) {
@@ -1128,22 +955,24 @@ 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_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++) {
                 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;
                 // TODO add filters to list (token, address, etc.)
-                l_stake = s_stake_item_from_order(l_net, l_order);
-                char *l_addr = dap_chain_addr_to_str(&l_stake->signing_addr);
-                char *l_balance = dap_chain_balance_print(l_stake->value);
-                char *l_fee = dap_chain_balance_to_coins(l_stake->fee_value);
-                dap_string_append_printf(l_reply_str, "%s %s %s %s %s\n", l_orders[i].key, l_balance, l_stake->token, l_addr, l_fee);
-                DAP_DELETE(l_balance);
-                DAP_DELETE(l_fee);
-                DAP_DELETE(l_addr);
-                DAP_DELETE(l_stake);
+                char *l_price = dap_chain_balance_print(l_order->price);
+                char *l_node_addr = dap_strdup_printf(NODE_ADDR_FP_STR, NODE_ADDR_FP_ARGS_S(l_order->node_addr));
+                char l_created[80] = {'\0'};
+                dap_time_t l_ts_created = l_order->ts_created;
+                dap_ctime_r(&l_ts_created, l_created);
+                dap_string_append_printf(l_reply_str, "Order: %s\n"
+                                                      "\tCreated: %s"
+                                                      "\tPrice: %s %s\n"
+                                                      "\tNode addr: %s\n",
+                                                      l_orders[i].key, l_created, l_price, l_order->price_ticker, l_node_addr);
+                DAP_DELETE(l_price);
+                DAP_DELETE(l_node_addr);
             }
             dap_global_db_objs_delete(l_orders, l_orders_count);
             DAP_DELETE( l_gdb_group_str);
@@ -1461,7 +1290,6 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, char **a_str_reply)
                 return -23;
             }
         }
-        break;
 
         default: {
             dap_cli_server_cmd_set_reply_text(a_str_reply, "Command %s not recognized", a_argv[l_arg_index]);