diff --git a/modules/net/dap_chain_ledger.c b/modules/net/dap_chain_ledger.c
index f20e687aafcc675b94b2f1408712c1c887d8649e..f7e876bdf7b4f97de9dda3c32032599cf8ed30c7 100644
--- a/modules/net/dap_chain_ledger.c
+++ b/modules/net/dap_chain_ledger.c
@@ -3163,11 +3163,11 @@ dap_hash_fast_t dap_ledger_get_final_chain_tx_hash(dap_ledger_t *a_ledger, dap_c
     int l_out_num = 0;
     dap_ledger_tx_item_t *l_item = NULL;
     while (( l_tx = dap_ledger_tx_find_datum_by_hash(a_ledger, &l_hash, &l_item, false) )) {
-        l_hash_tmp = l_item->cache_data.tx_hash_spent_fast[l_out_num];
-        if ( !dap_chain_datum_tx_out_cond_get(l_tx, a_cond_type, &l_out_num)
-            || dap_hash_fast_is_blank(&l_hash_tmp) )
+        if ( !dap_chain_datum_tx_out_cond_get(l_tx, a_cond_type, &l_out_num) 
+            || dap_hash_fast_is_blank(&l_item->cache_data.tx_hash_spent_fast[l_out_num]))
             break;
-        l_hash = l_hash_tmp;
+
+        l_hash = l_item->cache_data.tx_hash_spent_fast[l_out_num];
     }
     return l_hash;
 }
diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c
index 62a3284a951193e46d342c49ddd2815a4cbf1335..f1a5597ab9a9d392c8518252b26b472272f98a7b 100644
--- a/modules/service/xchange/dap_chain_net_srv_xchange.c
+++ b/modules/service/xchange/dap_chain_net_srv_xchange.c
@@ -104,7 +104,8 @@ static bool s_tag_check_xchange(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_
 
     if (have_xchange_in || have_xchange_out) {
         //xchange by xchange module
-        xchange_tx_type_t type = dap_chain_net_srv_xchange_tx_get_type(a_ledger, a_tx, NULL, NULL, NULL);
+        dap_chain_tx_out_cond_t *l_out_cond_item = NULL;
+        xchange_tx_type_t type = dap_chain_net_srv_xchange_tx_get_type(a_ledger, a_tx, &l_out_cond_item, NULL, NULL);
         switch(type)
         {
             case TX_TYPE_ORDER:
@@ -115,7 +116,13 @@ static bool s_tag_check_xchange(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_
 
             case TX_TYPE_EXCHANGE:
             { 
-                if(a_action) *a_action = DAP_CHAIN_TX_TAG_ACTION_USE;
+
+                if(a_action) {
+                    if(l_out_cond_item)
+                        *a_action = DAP_CHAIN_TX_TAG_ACTION_USE;
+                    else
+                        *a_action = DAP_CHAIN_TX_TAG_ACTION_CLOSE;
+                }
                 return true;
             }
 
@@ -1577,12 +1584,6 @@ static int s_cli_srv_xchange_order(int a_argc, char **a_argv, int a_arg_index, v
             };
 
             dap_chain_tx_out_cond_t *l_out_cond_last_tx = dap_chain_datum_tx_out_cond_get(l_last_tx, DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE , NULL);
-            if (!l_out_cond_last_tx || IS_ZERO_256(l_out_cond_last_tx->header.value)){
-                l_status_order  = "CLOSED";
-            } else {
-                l_status_order = "OPENED";
-            }
-
             dap_hash_fast_t l_tx_hash = {};
             dap_hash_fast(l_tx, dap_chain_datum_tx_get_size(l_tx), &l_tx_hash);
 
@@ -1696,18 +1697,10 @@ xchange_tx_type_t dap_chain_net_srv_xchange_tx_get_type (dap_ledger_t * a_ledger
                 dap_chain_tx_in_cond_t * l_in_cond_temp = (dap_chain_tx_in_cond_t *) l_tx_item_temp;
                 l_prev_tx_temp = dap_ledger_tx_find_by_hash(a_ledger, &l_in_cond_temp->header.tx_prev_hash);
         }
-
-        //have to find EXCHANGE tx_out_cond!
-        l_out_cond_item = NULL;
-        l_out_cond_item = dap_chain_datum_tx_out_cond_get(l_prev_tx_temp, DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE,
-                                                                               &l_cond_idx);
-        if (!l_out_cond_item) {
-            l_tx_type = TX_TYPE_UNDEFINED;
-        } else {
-            dap_chain_tx_sig_t *l_tx_prev_sig = (dap_chain_tx_sig_t *)dap_chain_datum_tx_item_get(l_prev_tx_temp, NULL, NULL, TX_ITEM_TYPE_SIG, NULL);
-            dap_sign_t *l_prev_sign = dap_chain_datum_tx_item_sign_get_sig((dap_chain_tx_sig_t *)l_tx_prev_sig);
-            dap_chain_tx_sig_t *l_tx_sig = (dap_chain_tx_sig_t *)dap_chain_datum_tx_item_get(a_tx, NULL, NULL, TX_ITEM_TYPE_SIG, NULL);
-            dap_sign_t *l_sign = dap_chain_datum_tx_item_sign_get_sig((dap_chain_tx_sig_t *)l_tx_sig);
+        dap_chain_tx_sig_t *l_tx_prev_sig = (dap_chain_tx_sig_t *)dap_chain_datum_tx_item_get(l_prev_tx_temp, NULL, NULL, TX_ITEM_TYPE_SIG, NULL);
+        dap_sign_t *l_prev_sign = dap_chain_datum_tx_item_sign_get_sig((dap_chain_tx_sig_t *)l_tx_prev_sig);
+        dap_chain_tx_sig_t *l_tx_sig = (dap_chain_tx_sig_t *)dap_chain_datum_tx_item_get(a_tx, NULL, NULL, TX_ITEM_TYPE_SIG, NULL);
+        dap_sign_t *l_sign = dap_chain_datum_tx_item_sign_get_sig((dap_chain_tx_sig_t *)l_tx_sig);
 
         bool l_owner = false;
         l_owner = dap_sign_compare_pkeys(l_prev_sign,l_sign);
@@ -1715,8 +1708,6 @@ xchange_tx_type_t dap_chain_net_srv_xchange_tx_get_type (dap_ledger_t * a_ledger
                 l_tx_type = TX_TYPE_INVALIDATE;
         else
                 l_tx_type = TX_TYPE_EXCHANGE;
-        }
-
     }
     if(a_out_cond_item)
         *a_out_cond_item = l_out_cond_item;