diff --git a/modules/net/dap_chain_ledger.c b/modules/net/dap_chain_ledger.c
index 532d6323580e44407740f441eaa3e8911dfd7e39..3ef15287c15b374a79647749a60861676c39b5fe 100644
--- a/modules/net/dap_chain_ledger.c
+++ b/modules/net/dap_chain_ledger.c
@@ -5334,68 +5334,6 @@ uint256_t dap_ledger_tx_cache_get_out_cond_value(dap_ledger_t *a_ledger, dap_cha
     return l_ret_value;
 }
 
-dap_ledger_datum_iter_t *dap_ledger_datum_iter_create(dap_chain_net_t *a_net)
-{
-    dap_ledger_datum_iter_t *l_ret = DAP_NEW_Z(dap_ledger_datum_iter_t);
-    if(!l_ret){
-        log_it(L_CRITICAL, "Memory allocation error!");
-        return NULL;
-    }
-    l_ret->net = a_net;
-    return l_ret;
-}
-
-void dap_ledger_datum_iter_delete(dap_ledger_datum_iter_t *a_iter)
-{
-    DAP_DELETE(a_iter);
-}
-
-dap_chain_datum_tx_t *dap_ledger_datum_iter_get_first(dap_ledger_datum_iter_t *a_iter)
-{
-    dap_ledger_private_t *l_ledger_pvt = PVT(a_iter->net->pub.ledger);
-    pthread_rwlock_rdlock(&l_ledger_pvt->ledger_rwlock);
-    a_iter->cur_ledger_tx_item = l_ledger_pvt->ledger_items;
-    a_iter->cur = ((dap_ledger_tx_item_t *)(a_iter->cur_ledger_tx_item))->tx;
-    a_iter->cur_hash = ((dap_ledger_tx_item_t *)(a_iter->cur_ledger_tx_item))->tx_hash_fast;
-    a_iter->is_unspent = ((dap_ledger_tx_item_t *)(a_iter->cur_ledger_tx_item))->cache_data.ts_spent ? false : true;
-    a_iter->ret_code = 0;
-    pthread_rwlock_unlock(&l_ledger_pvt->ledger_rwlock);
-    return a_iter->cur;
-}
-
-dap_chain_datum_tx_t *dap_ledger_datum_iter_get_next(dap_ledger_datum_iter_t *a_iter)
-{
-    dap_ledger_private_t *l_ledger_pvt = PVT(a_iter->net->pub.ledger);
-    pthread_rwlock_rdlock(&l_ledger_pvt->ledger_rwlock);
-    a_iter->cur_ledger_tx_item = ((dap_ledger_tx_item_t *)(a_iter->cur_ledger_tx_item))->hh.next;
-    if (a_iter->cur_ledger_tx_item){
-        a_iter->cur = ((dap_ledger_tx_item_t *)(a_iter->cur_ledger_tx_item))->tx;
-        a_iter->cur_hash = ((dap_ledger_tx_item_t *)(a_iter->cur_ledger_tx_item))->tx_hash_fast;
-        a_iter->ret_code = 0;
-        a_iter->is_unspent = ((dap_ledger_tx_item_t *)(a_iter->cur_ledger_tx_item))->cache_data.ts_spent ? false : true;
-    } else {
-        a_iter->cur = NULL;
-        memset(&a_iter->cur_hash, 0, sizeof(dap_hash_fast_t));
-        a_iter->ret_code = 0;
-        a_iter->is_unspent = false;
-    }
-    pthread_rwlock_unlock(&l_ledger_pvt->ledger_rwlock);
-    return a_iter->cur;
-}
-
-dap_chain_datum_tx_t *dap_ledger_datum_iter_get_last(dap_ledger_datum_iter_t *a_iter)
-{
-    dap_ledger_private_t *l_ledger_pvt = PVT(a_iter->net->pub.ledger);
-    pthread_rwlock_rdlock(&l_ledger_pvt->ledger_rwlock);
-    a_iter->cur_ledger_tx_item = l_ledger_pvt->ledger_items->hh.prev;
-    a_iter->cur = ((dap_ledger_tx_item_t *)(a_iter->cur_ledger_tx_item))->tx;
-    a_iter->cur_hash = ((dap_ledger_tx_item_t *)(a_iter->cur_ledger_tx_item))->tx_hash_fast;
-    a_iter->is_unspent = ((dap_ledger_tx_item_t *)(a_iter->cur_ledger_tx_item))->cache_data.ts_spent ? false : true;
-    a_iter->ret_code = 0;
-    pthread_rwlock_unlock(&l_ledger_pvt->ledger_rwlock);
-    return a_iter->cur;
-}
-
 /**
  * @brief dap_ledger_get_list_tx_outs_with_val
  * @param a_ledger
@@ -5628,6 +5566,75 @@ dap_list_t *dap_ledger_get_txs(dap_ledger_t *a_ledger, size_t a_count, size_t a_
     return l_list;
 }
 
+dap_ledger_datum_iter_t *dap_ledger_datum_iter_create(dap_chain_net_t *a_net)
+{
+    dap_ledger_datum_iter_t *l_ret = DAP_NEW_Z(dap_ledger_datum_iter_t);
+    if(!l_ret){
+        log_it(L_CRITICAL, "Memory allocation error!");
+        return NULL;
+    }
+    l_ret->net = a_net;
+    return l_ret;
+}
+
+void dap_ledger_datum_iter_delete(dap_ledger_datum_iter_t *a_iter)
+{
+    DAP_DEL_Z(a_iter);
+}
+
+dap_chain_datum_tx_t *dap_ledger_datum_iter_get_first(dap_ledger_datum_iter_t *a_iter)
+{
+    if (!a_iter)
+        return NULL;
+    dap_ledger_private_t *l_ledger_pvt = PVT(a_iter->net->pub.ledger);
+    pthread_rwlock_rdlock(&l_ledger_pvt->ledger_rwlock);
+    if (!l_ledger_pvt->ledger_items) {
+        pthread_rwlock_unlock(&l_ledger_pvt->ledger_rwlock);
+        return NULL;
+    }
+    a_iter->cur_ledger_tx_item = l_ledger_pvt->ledger_items;
+    a_iter->cur = ((dap_ledger_tx_item_t *)(a_iter->cur_ledger_tx_item))->tx;
+    a_iter->cur_hash = ((dap_ledger_tx_item_t *)(a_iter->cur_ledger_tx_item))->tx_hash_fast;
+    a_iter->is_unspent = ((dap_ledger_tx_item_t *)(a_iter->cur_ledger_tx_item))->cache_data.ts_spent ? false : true;
+    a_iter->ret_code = 0;
+    pthread_rwlock_unlock(&l_ledger_pvt->ledger_rwlock);
+    return a_iter->cur;
+}
+
+dap_chain_datum_tx_t *dap_ledger_datum_iter_get_next(dap_ledger_datum_iter_t *a_iter)
+{
+    dap_ledger_private_t *l_ledger_pvt = PVT(a_iter->net->pub.ledger);
+    pthread_rwlock_rdlock(&l_ledger_pvt->ledger_rwlock);
+    a_iter->cur_ledger_tx_item = ((dap_ledger_tx_item_t *)(a_iter->cur_ledger_tx_item))->hh.next;
+    if (a_iter->cur_ledger_tx_item){
+        a_iter->cur = ((dap_ledger_tx_item_t *)(a_iter->cur_ledger_tx_item))->tx;
+        a_iter->cur_hash = ((dap_ledger_tx_item_t *)(a_iter->cur_ledger_tx_item))->tx_hash_fast;
+        a_iter->ret_code = 0;
+        a_iter->is_unspent = ((dap_ledger_tx_item_t *)(a_iter->cur_ledger_tx_item))->cache_data.ts_spent ? false : true;
+    } else {
+        a_iter->cur = NULL;
+        memset(&a_iter->cur_hash, 0, sizeof(dap_hash_fast_t));
+        a_iter->ret_code = 0;
+        a_iter->is_unspent = false;
+    }
+    pthread_rwlock_unlock(&l_ledger_pvt->ledger_rwlock);
+    return a_iter->cur;
+}
+
+dap_chain_datum_tx_t *dap_ledger_datum_iter_get_last(dap_ledger_datum_iter_t *a_iter)
+{
+    dap_ledger_private_t *l_ledger_pvt = PVT(a_iter->net->pub.ledger);
+    pthread_rwlock_rdlock(&l_ledger_pvt->ledger_rwlock);
+    a_iter->cur_ledger_tx_item = l_ledger_pvt->ledger_items->hh.prev;
+    a_iter->cur = ((dap_ledger_tx_item_t *)(a_iter->cur_ledger_tx_item))->tx;
+    a_iter->cur_hash = ((dap_ledger_tx_item_t *)(a_iter->cur_ledger_tx_item))->tx_hash_fast;
+    a_iter->is_unspent = ((dap_ledger_tx_item_t *)(a_iter->cur_ledger_tx_item))->cache_data.ts_spent ? false : true;
+    a_iter->ret_code = 0;
+    pthread_rwlock_unlock(&l_ledger_pvt->ledger_rwlock);
+    return a_iter->cur;
+}
+
+
 /**
  * @brief dap_ledger_get_list_tx_cond_outs_with_val
  * @param a_ledger
diff --git a/modules/net/dap_chain_net_tx.c b/modules/net/dap_chain_net_tx.c
index 561878d9bf5350ded688591f114eb19906dd77f4..a478200eb400c17f9d345617de31d662378ba905 100644
--- a/modules/net/dap_chain_net_tx.c
+++ b/modules/net/dap_chain_net_tx.c
@@ -192,11 +192,13 @@ void dap_chain_net_get_tx_all(dap_chain_net_t * a_net, dap_chain_net_tx_search_t
         case TX_SEARCH_TYPE_NET:
         case TX_SEARCH_TYPE_LOCAL:{
             dap_ledger_datum_iter_t *l_iter = dap_ledger_datum_iter_create(a_net);
-            dap_ledger_datum_iter_get_first(l_iter);
-            while(l_iter->cur){
-                if (a_search_type != TX_SEARCH_TYPE_NET_UNSPENT ||
-                    (a_search_type == TX_SEARCH_TYPE_NET_UNSPENT && l_iter->is_unspent)){
-                    a_tx_callback(a_net, l_iter->cur, &l_iter->cur_hash, a_arg);
+            if ( l_iter && dap_ledger_datum_iter_get_first(l_iter) ) {
+                while(l_iter->cur) {
+                    if (a_search_type != TX_SEARCH_TYPE_NET_UNSPENT ||
+                        (a_search_type == TX_SEARCH_TYPE_NET_UNSPENT && l_iter->is_unspent)){
+                        a_tx_callback(a_net, l_iter->cur, &l_iter->cur_hash, a_arg);
+                    }
+                    dap_ledger_datum_iter_get_next(l_iter);
                 }
                 dap_ledger_datum_iter_get_next(l_iter);
             }
@@ -289,7 +291,6 @@ static void s_get_tx_cond_chain_callback(dap_chain_net_t* a_net, dap_chain_datum
             }
             l_item_idx++;
         }
-        DAP_DELETE(l_tx_hash);
     }else if(a_tx){
         dap_hash_fast_t * l_tx_hash = a_tx_hash;
         if (!l_tx_hash) {
@@ -312,7 +313,6 @@ static void s_get_tx_cond_chain_callback(dap_chain_net_t* a_net, dap_chain_datum
                 }
             }
         }
-        DAP_DELETE(l_tx_hash);
     }
 }
 
diff --git a/modules/net/dap_chain_net_voting.c b/modules/net/dap_chain_net_voting.c
index 00d39e9717ad367b3c67c03a3e4f349a8644bb16..f867c93cac31f6c9308b1d93ecf0cb4711213662 100644
--- a/modules/net/dap_chain_net_voting.c
+++ b/modules/net/dap_chain_net_voting.c
@@ -95,10 +95,10 @@ int dap_chain_net_voting_init()
     pthread_rwlock_init(&s_votings_rwlock, NULL);
     dap_chain_ledger_voting_verificator_add(s_datum_tx_voting_verification_callback);
     dap_cli_server_cmd_add("voting", s_cli_voting, "Voting commands.", ""
-                                                                       "voting create -net <net_name> -question <\"Question_string\"> -options <\"Option1\", \"Option2\" ... \"OptionN\"> [-expire <voting_expire_time_in_RCF822>] [-max_votes_count <Votes_count>] [-delegated_key_required] [-vote_changing_allowed] -fee <value_datoshi> -w <fee_wallet_name>\n"
-                                                                       "voting vote -net <net_name> -hash <voting_hash> -option_idx <option_index> [-cert <delegate_cert_name>] -fee <value_datoshi> -w <fee_wallet_name>\n"
-                                                                       "voting list -net <net_name>\n"
-                                                                       "voting dump -net <net_name> -hash <voting_hash>\n");
+                            "voting create -net <net_name> -question <\"Question_string\"> -options <\"Option0\", \"Option1\" ... \"OptionN\"> [-expire <voting_expire_time_in_RCF822>] [-max_votes_count <Votes_count>] [-delegated_key_required] [-vote_changing_allowed] -fee <value_datoshi> -w <fee_wallet_name>\n"
+                            "voting vote -net <net_name> -hash <voting_hash> -option_idx <option_index> [-cert <delegate_cert_name>] -fee <value_datoshi> -w <fee_wallet_name>\n"
+                            "voting list -net <net_name>\n"
+                            "voting dump -net <net_name> -hash <voting_hash>\n");
     return 0;
 }
 
diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c
index 4e9f9a823b31acb79da4408e5380e2367f9a8da2..ad15a271c44629046dbeab7c30f23c73419852f9 100644
--- a/modules/service/xchange/dap_chain_net_srv_xchange.c
+++ b/modules/service/xchange/dap_chain_net_srv_xchange.c
@@ -98,7 +98,7 @@ int dap_chain_net_srv_xchange_init()
     "srv_xchange order create -net <net_name> -token_sell <token_ticker> -token_buy <token_ticker> -w <wallet_name>"
                                             " -value <value> -rate <value> -fee <value>\n"
         "\tCreate a new order and tx with specified amount of datoshi to exchange with specified rate (buy / sell)\n"
-    "srv_xchange order remove -net <net_name> -order <order_hash> -w <wallet_name>\n -fee <value_datoshi>"
+    "srv_xchange order remove -net <net_name> -order <order_hash> -w <wallet_name> -fee <value_datoshi>\n"
          "\tRemove order with specified order hash in specified net name\n"
     "srv_xchange order history -net <net_name> {-order <order_hash> | -addr <wallet_addr>}"
          "\tShows transaction history for the selected order\n"
@@ -1061,6 +1061,16 @@ static int s_cli_srv_xchange_order(int a_argc, char **a_argv, int a_arg_index, v
                 dap_cli_server_cmd_set_reply_text(a_str_reply, "Command 'order create' requires parameter -token_buy");
                 return -5;
             }
+            if (!dap_ledger_token_ticker_check(l_net->pub.ledger, l_token_buy_str)) {
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "Token ticker %s not found", l_token_buy_str);
+                return -6;
+            }
+
+            if (!strcmp(l_token_sell_str, l_token_buy_str)){
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "token_buy and token_sell must be different!");
+                return -7;
+            }
+
             const char *l_val_sell_str = NULL, *l_val_rate_str = NULL;
             dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-value", &l_val_sell_str);
             if (!l_val_sell_str) {
@@ -1257,23 +1267,29 @@ static int s_cli_srv_xchange_order(int a_argc, char **a_argv, int a_arg_index, v
                 dap_hash_fast_t l_order_tx_hash = {};
                 dap_chain_hash_fast_from_str(l_order_hash_str, &l_order_tx_hash);
                 dap_chain_datum_tx_t * l_tx = dap_chain_net_get_tx_by_hash(l_net, &l_order_tx_hash, TX_SEARCH_TYPE_NET);
+                
                 if( l_tx){
-                    int l_rc = s_tx_check_for_open_close(l_net,l_tx);
-                    if(l_rc == 0){
-                        dap_cli_server_cmd_set_reply_text(a_str_reply, "WRONG TX %s",
-                            dap_chain_hash_fast_to_str_static(&l_order_tx_hash));
-                    }else{
-                        dap_string_t * l_str_reply = dap_string_new("");
-                        dap_string_append_printf(l_str_reply, "Order %s hisrory:\n\n", l_order_hash_str);
-                        dap_list_t *l_tx_list = dap_chain_net_get_tx_cond_chain(l_net, &l_order_tx_hash, c_dap_chain_net_srv_xchange_uid );
-                        dap_list_t *l_tx_list_temp = l_tx_list;
-                        while(l_tx_list_temp ){
-                            dap_chain_datum_tx_t * l_tx_cur = (dap_chain_datum_tx_t*) l_tx_list_temp->data;
-                            s_string_append_tx_cond_info(l_str_reply, l_net, l_tx_cur, TX_STATUS_ALL, true, true, false);
-                            l_tx_list_temp = l_tx_list_temp->next;
+                    xchange_tx_type_t l_tx_type = s_xchange_tx_get_type(l_net, l_tx, NULL, NULL, NULL);
+                    char *l_tx_hash = dap_chain_hash_fast_to_str_new(&l_order_tx_hash);
+                    if(l_tx_type != TX_TYPE_ORDER){
+                        dap_cli_server_cmd_set_reply_text(a_str_reply, "Datum with hash %s is not order. Check hash.", l_tx_hash);
+                    } else {
+                        int l_rc = s_tx_check_for_open_close(l_net,l_tx);
+                        if(l_rc == 0){
+                            dap_cli_server_cmd_set_reply_text(a_str_reply, "WRONG TX %s", l_tx_hash);
+                        }else{
+                            dap_string_t * l_str_reply = dap_string_new("");
+                            dap_string_append_printf(l_str_reply, "Order %s hisrory:\n\n", l_order_hash_str);
+                            dap_list_t *l_tx_list = dap_chain_net_get_tx_cond_chain(l_net, &l_order_tx_hash, c_dap_chain_net_srv_xchange_uid );
+                            dap_list_t *l_tx_list_temp = l_tx_list;
+                            while(l_tx_list_temp ){
+                                dap_chain_datum_tx_t * l_tx_cur = (dap_chain_datum_tx_t*) l_tx_list_temp->data;
+                                s_string_append_tx_cond_info(l_str_reply, l_net, l_tx_cur, TX_STATUS_ALL, true, true, false);
+                                l_tx_list_temp = l_tx_list_temp->next;
+                            }
+                            dap_list_free(l_tx_list);
+                            *a_str_reply = dap_string_free(l_str_reply, false);
                         }
-                        dap_list_free(l_tx_list);
-                        *a_str_reply = dap_string_free(l_str_reply, false);
                     }
                 }else{
                     dap_cli_server_cmd_set_reply_text(a_str_reply, "No history");