diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 43861b7d3ce544aef753b37503625b128bfda9aa..f1f356565eea65ec7d79d2c9a56f3c4e0a51b76c 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -2319,6 +2319,27 @@ int com_token_decl_sign(int a_argc, char **a_argv, char ** a_str_reply)
     return 0;
 }
 
+/**
+ * @breif s_ticker_list_get_main_ticker
+ *
+ * @param a_tickers
+ * @param a_native_ticker
+ * @return const char*
+ */
+const char *s_ticker_list_get_main_ticker(dap_list_t *a_tickers, const char *a_native_ticker) {
+    if (!a_tickers)
+        return NULL;
+    const char *mt = (char*)a_tickers->data;
+    for (dap_list_t *i = a_tickers; i != NULL; i = i->next) {
+        char *tmp = (char*)i->data;
+        if (dap_strcmp(mt, tmp) != 0) {
+            if (dap_strcmp(tmp, a_native_ticker) != 0)
+                return tmp;
+        }
+    }
+    return mt;
+}
+
 /**
  * @brief s_com_mempool_list_print_for_chain
  *
@@ -2355,16 +2376,17 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
                 uint32_t l_tx_items_size = l_tx->header.tx_items_size;
                 bool l_f_found = false;
 
+                dap_chain_addr_t *l_addr = dap_chain_addr_from_str(a_add);
                 switch (l_datum->header.type_id) {
                 case DAP_CHAIN_DATUM_TX:
                     while (l_tx_items_count < l_tx_items_size)
                     {
                         uint8_t *item = l_tx->tx_items + l_tx_items_count;
                         size_t l_item_tx_size = dap_chain_datum_item_tx_get_size(item);
-                        if(dap_strcmp(a_add,dap_chain_addr_to_str(&((dap_chain_tx_out_old_t*)item)->addr))&&
-                           dap_strcmp(a_add,dap_chain_addr_to_str(&((dap_chain_tx_out_t*)item)->addr))&&
-                           dap_strcmp(a_add,dap_chain_addr_to_str(&((dap_chain_tx_out_cond_t*)item)->subtype.srv_stake.fee_addr))&&
-                           dap_strcmp(a_add,dap_chain_addr_to_str(&((dap_chain_tx_out_ext_t*)item)->addr)))
+                        if(!memcmp(l_addr, &((dap_chain_tx_out_old_t*)item)->addr, sizeof(dap_chain_addr_t))&&
+                            !memcmp(l_addr, &((dap_chain_tx_out_t*)item)->addr, sizeof(dap_chain_addr_t))&&
+                            !memcmp(l_addr, &((dap_chain_tx_out_cond_t*)item)->subtype.srv_stake.fee_addr, sizeof(dap_chain_addr_t))&&
+                            !memcmp(l_addr, &((dap_chain_tx_out_ext_t*)item)->addr, sizeof(dap_chain_addr_t)))
                             l_tx_items_count += l_item_tx_size;
                         else
                         {
@@ -2377,7 +2399,7 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
                         continue;
                     break;
                 case DAP_CHAIN_DATUM_TOKEN_EMISSION:
-                    if(dap_strcmp(a_add,dap_chain_addr_to_str(&(l_emission->hdr.address))))
+                    if(!memcmp(l_addr, &l_emission->hdr.address, sizeof(dap_chain_addr_t)))
                         continue;
                     else
                         l_objs_addr++;
@@ -2386,6 +2408,8 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
                     continue;
                     break;
                 }
+                DAP_DELETE(l_emission);
+                DAP_DELETE(l_addr);
             }
             if (l_printed_smth)
                 dap_string_append_printf(a_str_tmp, "=========================================================\n");
@@ -2403,9 +2427,68 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
             DAP_DATUM_TYPE_STR(l_datum->header.type_id, l_type)
             const char *l_token_ticker = NULL;
             if (l_datum->header.type_id == DAP_CHAIN_DATUM_TX) { // TODO rewrite it for support of multichannel & conditional transactions
-                dap_chain_tx_in_t *obj_in = (dap_chain_tx_in_t *)dap_chain_datum_tx_item_get((dap_chain_datum_tx_t*)l_datum->data, NULL, TX_ITEM_TYPE_IN, NULL);
-                if (obj_in)
-                    l_token_ticker = dap_chain_ledger_tx_get_token_ticker_by_hash(a_net->pub.ledger, &obj_in->header.tx_prev_hash);
+                dap_chain_tx_token_t *obj_token = (dap_chain_tx_token_t*)dap_chain_datum_tx_item_get((dap_chain_datum_tx_t*)l_datum->data, NULL, TX_ITEM_TYPE_TOKEN, NULL);
+                if (obj_token) {
+                    l_token_ticker = obj_token->header.ticker;
+                } else {
+                    dap_list_t* l_tickers = NULL;
+                    const char *l_native_ticker = a_net->pub.native_ticker;
+                    dap_chain_datum_tx_t *l_tx_parent = NULL;
+                    int l_item_in_size = 0;
+                    void *l_item_in = dap_chain_datum_tx_item_get((dap_chain_datum_tx_t*)l_datum->data, NULL, TX_ITEM_TYPE_IN_ALL, &l_item_in_size);
+                    bool l_is_unchained = false;
+                    dap_hash_fast_t l_parent_hash = {0};
+                    int l_parrent_tx_out_idx;
+                    for (int l_item_in_size_current = 0; l_item_in_size_current < l_item_in_size && !l_token_ticker;) {
+                        size_t l_tmp_size = dap_chain_datum_item_tx_get_size(l_item_in);
+                        if (l_tmp_size == 0)
+                            break;
+                        l_item_in_size_current += l_tmp_size;
+                        switch (dap_chain_datum_tx_item_get_type(l_item_in)) {
+                            case TX_ITEM_TYPE_IN:
+                                l_parent_hash = ((dap_chain_tx_in_t*)l_item_in)->header.tx_prev_hash;
+                                l_parrent_tx_out_idx = ((dap_chain_tx_in_t*)l_item_in)->header.tx_out_prev_idx;
+                                l_tx_parent = dap_chain_ledger_tx_find_by_hash(a_net->pub.ledger, &((dap_chain_tx_in_t*)l_item_in)->header.tx_prev_hash);
+                                break;
+                            case TX_ITEM_TYPE_IN_COND:
+                                l_parent_hash = ((dap_chain_tx_in_cond_t*)l_item_in)->header.tx_prev_hash;
+                                l_parrent_tx_out_idx = ((dap_chain_tx_in_cond_t*)l_item_in)->header.tx_out_prev_idx;
+                                l_tx_parent = dap_chain_ledger_tx_find_by_hash(a_net->pub.ledger, &((dap_chain_tx_in_cond_t*)l_item_in)->header.tx_prev_hash);
+                                break;
+                        }
+                        if (!l_tx_parent) {
+                            l_is_unchained = true;
+                            break;
+                        }
+                        const char *l_current_token = NULL;
+                        void *l_out_unknown = (dap_chain_tx_out_cond_t*)dap_chain_datum_tx_item_get_nth(
+                                l_tx_parent, TX_ITEM_TYPE_OUT_ALL, l_parrent_tx_out_idx);
+                        switch(dap_chain_datum_tx_item_get_type(l_out_unknown)) {
+                            case TX_ITEM_TYPE_OUT:
+                                l_current_token = dap_chain_ledger_tx_get_token_ticker_by_hash(a_net->pub.ledger, &l_parent_hash);
+                                l_tickers = dap_list_append(l_tickers, l_current_token);
+                                break;
+                            case TX_ITEM_TYPE_OUT_EXT:
+                                l_current_token = ((dap_chain_tx_out_ext_t*)l_out_unknown)->token;
+                                l_tickers = dap_list_append(l_tickers, l_current_token);
+                                break;
+                            case TX_ITEM_TYPE_OUT_COND:
+                                if(((dap_chain_tx_out_cond_t*)l_out_unknown)->header.subtype != DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE) {
+                                    l_token_ticker = dap_chain_ledger_tx_get_token_ticker_by_hash(a_net->pub.ledger, &l_parent_hash);
+                                }
+                                break;
+                        }
+                    }
+                    if (l_is_unchained) {
+                        dap_string_append_printf(a_str_tmp, ": Transaction %s unchained. \n", l_objs[i].key);
+                    }
+                    if (!l_is_unchained && !l_token_ticker) {
+                        l_token_ticker = s_ticker_list_get_main_ticker(l_tickers, a_net->pub.native_ticker);
+                        if (!l_token_ticker)
+                            dap_string_append_printf(a_str_tmp, ": Can't find token ticker for transaction %s. \n", l_objs[i].key);
+                    }
+                    dap_list_free(l_tickers);
+                }
             }
             dap_string_append_printf(a_str_tmp,
                                                  "type_id=%s%s%s data_size=%u ts_create=%s", // \n included in timestamp