diff --git a/CMakeLists.txt b/CMakeLists.txt
index b3dc45e24351856fd940d42f496c709b34b7da01..f3633b819cf59e489340dfd74522eb695ae63020 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,7 +2,7 @@ project(cellframe-sdk C)
 cmake_minimum_required(VERSION 2.8)
 
 set(CMAKE_C_STANDARD 11)
-set(CELLFRAME_SDK_NATIVE_VERSION "2.6-52")
+set(CELLFRAME_SDK_NATIVE_VERSION "2.6-54")
 add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"")
 
 set(DAPSDK_MODULES "")
diff --git a/dap-sdk/crypto/include/dap_hash.h b/dap-sdk/crypto/include/dap_hash.h
index 368157ec342d67c2a194228bdda49f7295138813..2cff59c6bde874a244cb13a5d20e83805b35af93 100755
--- a/dap-sdk/crypto/include/dap_hash.h
+++ b/dap-sdk/crypto/include/dap_hash.h
@@ -106,7 +106,11 @@ DAP_STATIC_INLINE int dap_chain_hash_fast_to_str( dap_hash_fast_t *a_hash, char
     return DAP_CHAIN_HASH_FAST_SIZE * 2 + 2;
 }
 
-static inline char *dap_chain_hash_fast_to_str_new(dap_hash_fast_t * a_hash)
+DAP_STATIC_INLINE int dap_hash_fast_to_str(dap_hash_fast_t *a_hash, char *a_str, size_t a_str_max){
+    return dap_chain_hash_fast_to_str(a_hash,a_str,a_str_max);
+}
+
+DAP_STATIC_INLINE char *dap_chain_hash_fast_to_str_new(dap_hash_fast_t * a_hash)
 {
     const size_t c_hash_str_size = sizeof(*a_hash)*2 +1 /*trailing zero*/ +2 /* heading 0x */+4/*just to be sure*/ ;
     char * ret = DAP_NEW_Z_SIZE(char, c_hash_str_size);
@@ -114,6 +118,10 @@ static inline char *dap_chain_hash_fast_to_str_new(dap_hash_fast_t * a_hash)
     return ret;
 }
 
+DAP_STATIC_INLINE char *dap_hash_fast_to_str_new(dap_hash_fast_t * a_hash)
+{
+    return dap_chain_hash_fast_to_str_new(a_hash);
+}
 #ifdef __cplusplus
 }
 #endif
diff --git a/modules/channel/chain/dap_stream_ch_chain.c b/modules/channel/chain/dap_stream_ch_chain.c
index cb15c80a7f649ca1ef7627d9142cd062bcb0ae1b..97984100805038c474e8d6815424dd269eef1219 100644
--- a/modules/channel/chain/dap_stream_ch_chain.c
+++ b/modules/channel/chain/dap_stream_ch_chain.c
@@ -325,11 +325,11 @@ bool s_chain_pkt_callback(dap_proc_thread_t *a_thread, void *a_arg)
             }
             if (l_pkt_copy)
                 DAP_DELETE(l_pkt_copy);
+
+            DAP_DELETE(l_pkt_copy_list);
         }else{
          //   log_it(L_WARNING, "Next pkt copy list is NULL");
         }
-        if (l_pkt_copy_list)
-            DAP_DELETE(l_pkt_copy_list);
     }else
         log_it(L_WARNING, "In proc thread got CHAINS stream ch packet with zero data");
     dap_proc_thread_assign_on_worker_inter(a_thread, l_ch->stream_worker->worker, l_ch->stream->esocket );
@@ -693,22 +693,27 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg)
     }
         break;
     case DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_CHAINS_RVRS: {
-        dap_stream_ch_chain_sync_request_t l_sync_chains = {};
-        memcpy(&l_sync_chains, l_chain_pkt->data, l_chain_pkt_data_size);
-        dap_chain_t *l_chain = dap_chain_find_by_id(l_chain_pkt->hdr.net_id, l_chain_pkt->hdr.chain_id);
-        dap_chain_hash_fast_t *l_hash = dap_db_get_last_hash_remote(l_sync_chains.node_addr.uint64, l_chain);
-        if (l_hash) {
-            memcpy(&l_sync_chains.hash_from, l_hash, sizeof(*l_hash));
-            DAP_DELETE(l_hash);
+        if(l_chain_pkt_data_size == sizeof(dap_stream_ch_chain_sync_request_t)) {
+            dap_stream_ch_chain_sync_request_t l_request={0};
+            dap_chain_t *l_chain = dap_chain_find_by_id(l_chain_pkt->hdr.net_id, l_chain_pkt->hdr.chain_id);
+            if( l_chain){
+                dap_chain_get_atom_last_hash(l_chain,& l_request.hash_from);
+                if( dap_log_level_get()<= L_INFO){
+                    char l_hash_from_str[70]={[0]='\0'};
+                    dap_chain_hash_fast_to_str(&l_request.hash_from,l_hash_from_str,sizeof (l_hash_from_str)-1);
+                    log_it(L_INFO, "In:  SYNC_CHAINS_RVRS pkt: net 0x%016x chain 0x%016x cell 0x%016x request chains sync from %s",
+                           l_chain_pkt->hdr.net_id.uint64 , l_chain_pkt->hdr.chain_id.uint64, l_chain_pkt->hdr.cell_id.uint64,
+                           l_hash_from_str[0] ? l_hash_from_str :"(null)");
+                }
+                dap_stream_ch_chain_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_CHAINS, l_chain_pkt->hdr.net_id,
+                                              l_chain_pkt->hdr.chain_id, l_chain_pkt->hdr.cell_id, &l_request, sizeof(l_request));
+            }
+        }else{
+            log_it(L_WARNING, "DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_CHAINS_RVRS: Wrong chain packet size %zd when expected %zd", l_chain_pkt_data_size, sizeof(l_ch_chain->request));
+            dap_stream_ch_chain_pkt_write_error(a_ch, l_chain_pkt->hdr.net_id,
+                    l_chain_pkt->hdr.chain_id, l_chain_pkt->hdr.cell_id,
+                    "ERROR_CHAIN_PKT_DATA_SIZE" );
         }
-        char *l_hash_from_str = dap_chain_hash_fast_to_str_new(&l_sync_chains.hash_from);
-        log_it(L_INFO, "In:  SYNC_CHAINS_RVRS pkt: net 0x%016x chain 0x%016x cell 0x%016x request chains sync from %s",
-               l_chain_pkt->hdr.net_id.uint64 , l_chain_pkt->hdr.chain_id.uint64, l_chain_pkt->hdr.cell_id.uint64,
-               l_hash_from_str ? l_hash_from_str :"(null)");
-
-        dap_stream_ch_chain_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_CHAINS, l_chain_pkt->hdr.net_id,
-                                      l_chain_pkt->hdr.chain_id, l_chain_pkt->hdr.cell_id, &l_sync_chains, sizeof(l_sync_chains));
-        DAP_DELETE(l_hash_from_str);
     }
         break;
     case DAP_STREAM_CH_CHAIN_PKT_TYPE_ERROR:
diff --git a/modules/common/dap_chain_datum_tx_items.c b/modules/common/dap_chain_datum_tx_items.c
index de892d7e9671b7db9a21d70fccc1cb963315c4ce..4c21317ab586c34221110278e11d2b41bf35b293 100644
--- a/modules/common/dap_chain_datum_tx_items.c
+++ b/modules/common/dap_chain_datum_tx_items.c
@@ -415,4 +415,3 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_out_cond_get(dap_chain_datum_tx_t *a
     }
     return l_res;
 }
-
diff --git a/modules/common/include/dap_chain_datum_tx_items.h b/modules/common/include/dap_chain_datum_tx_items.h
index 6665d3eef27458f969d0d985b8e4797976023164..e194c7c33645b132b9560410e9a07565af2f95a7 100644
--- a/modules/common/include/dap_chain_datum_tx_items.h
+++ b/modules/common/include/dap_chain_datum_tx_items.h
@@ -48,6 +48,25 @@
  * return type, or TX_ITEM_TYPE_ANY if error
  */
 dap_chain_tx_item_type_t dap_chain_datum_tx_item_get_type(const uint8_t *a_item);
+DAP_STATIC_INLINE const char * dap_chain_datum_tx_item_type_to_str(dap_chain_tx_item_type_t a_item_type)
+{
+    switch(a_item_type){
+        case TX_ITEM_TYPE_IN: return "TX_ITEM_TYPE_IN";
+        case TX_ITEM_TYPE_OUT: return "TX_ITEM_TYPE_OUT";
+        case TX_ITEM_TYPE_OUT_EXT: return "TX_ITEM_TYPE_OUT_EXT";
+        case TX_ITEM_TYPE_PKEY: return "TX_ITEM_TYPE_PKEY";
+        case TX_ITEM_TYPE_SIG: return "TX_ITEM_TYPE_SIG";
+        case TX_ITEM_TYPE_TOKEN: return "TX_ITEM_TYPE_TOKEN";
+        case TX_ITEM_TYPE_TOKEN_EXT: return "TX_ITEM_TYPE_TOKEN_EXT";
+        case TX_ITEM_TYPE_IN_COND: return "TX_ITEM_TYPE_IN_COND";
+        case TX_ITEM_TYPE_OUT_COND: return "TX_ITEM_TYPE_OUT_COND";
+        case TX_ITEM_TYPE_RECEIPT: return "TX_ITEM_TYPE_RECEIPT";
+        case TX_ITEM_TYPE_OUT_ALL: return "TX_ITEM_TYPE_OUT_ALL";
+        case TX_ITEM_TYPE_ANY: return "TX_ITEM_TYPE_ANY";
+        default: return "UNDEFINED";
+    }
+
+}
 
 /**
  * Get item size
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 3490234113f30e068257a98d2df1dde562ec9c47..aac0e599e44eb706b08d5701a8f42af536baa53f 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -605,7 +605,8 @@ static int s_net_states_proc(dap_chain_net_t *a_net)
                         if(dap_log_level_get() <= L_DEBUG){
                             char l_hash_str[128]={[0]='\0'};
                             dap_chain_hash_fast_to_str(&l_request.hash_from,l_hash_str,sizeof (l_hash_str)-1);
-                            log_it(L_DEBUG,"Send sync chain request from %s to infinity",l_hash_str);
+                            log_it(L_DEBUG,"Send sync chain request to"NODE_ADDR_FP_STR" for %s:%s from %s to infinity",
+                                   NODE_ADDR_FP_ARGS_S(l_node_client->remote_node_addr) ,a_net->pub.name, l_chain->name,  l_hash_str);
                         }
                     }else
                         log_it(L_DEBUG,"Send sync chain request for all the chains for addr "NODE_ADDR_FP_STR,
@@ -628,7 +629,7 @@ static int s_net_states_proc(dap_chain_net_t *a_net)
                             log_it(L_ERROR, "Sync of chain '%s' error %d", l_chain->name,l_res);
                     }
 
-                    /*
+
                     dap_chain_node_client_reset(l_node_client);
 
                     l_request.node_addr.uint64 = dap_chain_net_get_cur_addr_int(a_net);
@@ -652,7 +653,6 @@ static int s_net_states_proc(dap_chain_net_t *a_net)
                         default:
                             log_it(L_ERROR, "Reverse sync of chain '%s' error %d", l_chain->name,l_res);
                     }
-                    */
 
                 }
                 l_tmp = dap_list_next(l_tmp);
@@ -2193,6 +2193,7 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da
             dap_string_append_printf(a_str_out,"==Datum Token Declaration\n");
             dap_string_append_printf(a_str_out, "ticker: %s\n", l_token->ticker);
             dap_string_append_printf(a_str_out, "size: %zd\n", l_token_size);
+            dap_hash_fast_t l_hash ={0};
             switch (l_token->type) {
                 case DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE:{
                     dap_string_append_printf(a_str_out, "type: SIMPLE\n");
@@ -2236,7 +2237,7 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da
                                 case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SIGNS_ADD :
                                     if(l_tsd->size == sizeof(dap_chain_hash_fast_t) ){
                                         char *l_hash_str;
-                                        if(!dap_strcmp(a_hash_out_type, "hex"))
+                                        if(!dap_strcmp(a_hash_out_type, "hex") || !dap_strcmp(a_hash_out_type, "content_hash") )
                                             l_hash_str = dap_chain_hash_fast_to_str_new((dap_chain_hash_fast_t*) l_tsd->data);
                                         else
                                             l_hash_str = dap_enc_base58_encode_hash_to_str((dap_chain_hash_fast_t*) l_tsd->data);
@@ -2248,7 +2249,7 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da
                                 case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SIGNS_REMOVE :
                                     if(l_tsd->size == sizeof(dap_chain_hash_fast_t) ){
                                         char *l_hash_str;
-                                        if(!dap_strcmp(a_hash_out_type,"hex"))
+                                        if(!dap_strcmp(a_hash_out_type,"hex")|| !dap_strcmp(a_hash_out_type, "content_hash"))
                                             l_hash_str = dap_chain_hash_fast_to_str_new((dap_chain_hash_fast_t*) l_tsd->data);
                                         else
                                             l_hash_str = dap_enc_base58_encode_hash_to_str((dap_chain_hash_fast_t*) l_tsd->data);
@@ -2371,6 +2372,128 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da
 
                     size_t l_certs_field_size = l_token_size - sizeof(*l_token) - l_token->header_private_decl.tsd_total_size;
                     dap_chain_datum_token_certs_dump(a_str_out, l_token->data_n_tsd, l_certs_field_size);
+                }break;
+                case DAP_CHAIN_DATUM_TX:{
+                    dap_chain_datum_tx_t * l_tx =(dap_chain_datum_tx_t *) a_datum->data;
+                    char buf[50];
+                    time_t l_ts_created = l_tx->header.ts_created;
+                    dap_string_append_printf(a_str_out,"type: TX\n");
+                    dap_string_append_printf(a_str_out,"type: ts_created: %s \n",ctime_r(&l_ts_created, buf));
+                    int l_items_count = -1;
+                    dap_list_t * l_items = dap_chain_datum_tx_items_get(l_tx,TX_ITEM_TYPE_ANY,&l_items_count);
+                    dap_string_append_printf(a_str_out,"type: items_count: %d \n", l_items_count );
+                    if (l_items_count>0){
+                        size_t n=0;
+                        for( dap_list_t * l_cur = l_items; l_cur; l_cur = l_cur->next ){
+                            dap_string_append_printf(a_str_out,"Item #%zd\n",n);
+                            byte_t *l_tx_item = l_cur->data;
+                            dap_chain_tx_item_type_t l_item_type = dap_chain_datum_tx_item_get_type(l_tx_item);
+                            dap_string_append_printf(a_str_out,"\ttype: %s \n",
+                                                     dap_chain_datum_tx_item_type_to_str (l_item_type) );
+                            switch (l_item_type) {
+                                case TX_ITEM_TYPE_IN:{
+                                    dap_chain_tx_in_t * l_in = l_cur->data;
+                                    dap_string_append_printf(a_str_out,"\ttx_out_prev_idx: %u\n", l_in->header.tx_out_prev_idx );
+                                    dap_string_append_printf(a_str_out,"\ttx_out_prev_idx : %u\n", l_in->header.tx_prev_hash );
+                                    char l_tx_prev_hash_str[70]={[0]='\0'};
+                                    dap_hash_fast_to_str(&l_in->header.tx_prev_hash, l_tx_prev_hash_str,sizeof (l_tx_prev_hash_str)-1);
+                                    dap_string_append_printf(a_str_out,"\ttx_prev_hash : %s\n", l_tx_prev_hash_str );
+                                } break;
+                                case TX_ITEM_TYPE_OUT:{
+                                    dap_chain_tx_out_t * l_out = l_cur->data;
+                                    dap_string_append_printf(a_str_out,"\tvalue: %u\n", l_out->header.value );
+                                    char * l_addr_str = dap_chain_addr_to_str(&l_out->addr);
+                                    dap_string_append_printf(a_str_out,"\taddr : %s\n", l_addr_str );
+                                    DAP_DELETE(l_addr_str);
+                                } break;
+                                case TX_ITEM_TYPE_OUT_EXT:{
+                                    dap_chain_tx_out_ext_t * l_out_ext = l_cur->data;
+                                    dap_string_append_printf(a_str_out,"\tvalue: %u\n", l_out_ext->header.value );
+                                    char * l_addr_str = dap_chain_addr_to_str(&l_out_ext->addr);
+                                    dap_string_append_printf(a_str_out,"\taddr : %s\n", l_addr_str );
+                                    dap_string_append_printf(a_str_out,"\ttoken : %s\n", l_out_ext->token );
+                                    DAP_DELETE(l_addr_str);
+                                } break;
+                                case TX_ITEM_TYPE_SIG:{
+                                    dap_chain_tx_sig_t * l_item_sign = l_cur->data;
+                                    dap_sign_t *l_sign = l_item_sign->sig;
+                                    dap_hash_fast_t l_sign_hash;
+                                    char l_sign_hash_str[70]={[0]='\0'};
+                                    dap_string_append_printf(a_str_out,"\tsig_size: %u\n", l_item_sign->header.sig_size );
+                                    dap_string_append_printf(a_str_out,"\ttype: %s\n", dap_sign_type_to_str(l_sign->header.type) );
+                                    dap_sign_get_pkey_hash(l_sign,&l_sign_hash);
+                                    dap_hash_fast_to_str(&l_sign_hash,&l_sign_hash_str,sizeof (l_sign_hash_str)-1);
+                                    dap_string_append_printf(a_str_out,"\tpkey_hash: %s\n", l_sign_hash_str );
+                                } break;
+                                case TX_ITEM_TYPE_TOKEN:{
+                                    dap_chain_tx_token_t * l_token = l_cur->data;
+                                    dap_string_append_printf(a_str_out,"\tticker: %s\n", l_token->header.ticker );
+                                    dap_string_append_printf(a_str_out,"\ttoken_emission_chain: 0x%016x\n", l_token->header.token_emission_chain_id );
+                                    char l_token_emission_hash_str[70]={ [0]='\0'};
+                                    dap_chain_hash_fast_to_str(& l_token->header.token_emission_hash,l_token_emission_hash_str,
+                                                               sizeof (l_token_emission_hash_str)-1);
+                                    dap_string_append_printf(a_str_out,"\ttoken_emission_hash: %s", l_token_emission_hash_str );
+                                } break;
+                                case TX_ITEM_TYPE_TOKEN_EXT:{
+                                    dap_chain_tx_token_ext_t * l_token = l_cur->data;
+                                    dap_string_append_printf(a_str_out,"\tversion: %u\n",l_token->header.version );
+                                    dap_string_append_printf(a_str_out,"\tticker: %s\n", l_token->header.ticker );
+                                    dap_string_append_printf(a_str_out,"\text_net: 0x%016x\n",l_token->header.ext_net_id );
+                                    dap_string_append_printf(a_str_out,"\text_chain: 0x%016x\n",l_token->header.ext_chain_id  );
+                                    dap_string_append_printf(a_str_out,"\text_tx_out_idx: %u\n",l_token->header.ext_tx_out_idx  );
+                                    char l_token_emission_hash_str[70]={ [0]='\0'};
+                                    dap_chain_hash_fast_to_str(& l_token->header.ext_tx_hash,l_token_emission_hash_str,
+                                                               sizeof (l_token_emission_hash_str)-1);
+                                    dap_string_append_printf(a_str_out,"\text_tx_hash: %s", l_token_emission_hash_str );
+                                } break;
+                                case TX_ITEM_TYPE_IN_COND:{
+                                    dap_chain_tx_in_cond_t * l_in = l_cur->data;
+                                    dap_string_append_printf(a_str_out,"\ttx_out_prev_idx: %u\n", l_in->header.tx_out_prev_idx );
+                                    dap_string_append_printf(a_str_out,"\ttx_out_prev_idx : %u\n", l_in->header.tx_prev_hash );
+                                    dap_string_append_printf(a_str_out,"\treceipt_idx : %u\n", l_in->header.receipt_idx );
+                                    char l_tx_prev_hash_str[70]={[0]='\0'};
+                                    dap_hash_fast_to_str(&l_in->header.tx_prev_hash, l_tx_prev_hash_str,sizeof (l_tx_prev_hash_str)-1);
+                                    dap_string_append_printf(a_str_out,"\ttx_prev_hash : %s\n", l_tx_prev_hash_str );
+                                } break;
+                                case TX_ITEM_TYPE_OUT_COND:{
+                                    dap_chain_tx_out_cond_t * l_out = l_cur->data;
+                                    dap_string_append_printf(a_str_out,"\tvalue: %u\n", l_out->header.value );
+                                    switch ( l_out->header.subtype){
+                                        case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY:{
+                                            dap_string_append_printf(a_str_out,"\tsubtype: DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY\n");
+                                            dap_string_append_printf(a_str_out,"\srv_uid: 0x%016x\n", l_out->subtype.srv_pay.srv_uid.uint64 );
+                                            switch (l_out->subtype.srv_pay.unit.enm) {
+                                                case SERV_UNIT_UNDEFINED: dap_string_append_printf(a_str_out,"\tunit: SERV_UNIT_UNDEFINED\n"); break;
+                                                case SERV_UNIT_MB: dap_string_append_printf(a_str_out,"\tunit: SERV_UNIT_MB\n"); break;
+                                                case SERV_UNIT_SEC: dap_string_append_printf(a_str_out,"\tunit: SERV_UNIT_SEC\n"); break;
+                                                case SERV_UNIT_DAY: dap_string_append_printf(a_str_out,"\tunit: SERV_UNIT_DAY\n"); break;
+                                                case SERV_UNIT_KB: dap_string_append_printf(a_str_out,"\tunit: SERV_UNIT_KB\n"); break;
+                                                case SERV_UNIT_B : dap_string_append_printf(a_str_out,"\tunit: SERV_UNIT_B\n"); break;
+                                                default: dap_string_append_printf(a_str_out,"\tunit: SERV_UNIT_UNKNOWN\n"); break;
+                                            }
+                                            dap_string_append_printf(a_str_out,"\tunit_price_max: %llu\n", l_out->subtype.srv_pay.unit_price_max_datoshi);
+                                            char l_pkey_hash_str[70]={[0]='\0'};
+                                            dap_chain_hash_fast_to_str(&l_out->subtype.srv_pay.pkey_hash, l_pkey_hash_str, sizeof (l_pkey_hash_str)-1);
+                                            dap_string_append_printf(a_str_out,"\tpkey_hash: %s\n", l_pkey_hash_str );
+                                        }break;
+                                        case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE:{
+                                            dap_string_append_printf(a_str_out,"\tsubtype: DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE\n");
+                                        }break;
+                                        case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE:{
+                                            dap_string_append_printf(a_str_out,"\tsubtype: DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE\n");
+                                        }break;
+                                    }
+                                    dap_string_append_printf(a_str_out,"\tparams_size : %u\n", l_out->params_size );
+                                } break;
+                                case TX_ITEM_TYPE_RECEIPT:{} break;
+                                default:{}
+                            }
+                            n++;
+                        }
+                    }
+                    dap_list_free(l_items);
+
+
                 }break;
                 case DAP_CHAIN_DATUM_TOKEN_TYPE_PUBLIC:{
                     dap_string_append_printf(a_str_out,"type: PUBLIC\n");
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 14ff5131d5b51d0298ecb32cf5637f72730e4f32..2effd1679c4741f4c0f20a4fe890abf8b7eaf9e3 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -2053,17 +2053,17 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
         for(size_t i = 0; i < l_objs_size; i++) {
             dap_chain_datum_t * l_datum = (dap_chain_datum_t*) l_objs[i].value;
             char buf[50];
-            char * l_key;
-            if(!dap_strcmp(a_hash_out_type,"hex"))
-                // hex format
-                l_key = dap_strdup(l_objs[i].key);
-            else
-                // base58 format
-                l_key = dap_enc_base58_from_hex_str_to_str(l_objs[i].key);
+            char * l_key  = dap_strdup(l_objs[i].key);
             time_t l_ts_create = (time_t) l_datum->header.ts_create;
-            dap_string_append_printf(a_str_tmp, "hash %s: type_id=%s  data_size=%u ts_create=%s", // \n included in timestamp
+
+            dap_hash_fast_t l_data_hash;
+            char l_data_hash_str[70]={[0]='\0'};
+            dap_hash_fast(l_datum->data,l_datum->header.data_size,&l_data_hash);
+            dap_hash_fast_to_str(&l_data_hash,l_data_hash_str,sizeof (l_data_hash_str)-1);
+
+            dap_string_append_printf(a_str_tmp, "hash %s: type_id=%s  data_size=%u data_hash=%s ts_create=%s", // \n included in timestamp
                     l_key, c_datum_type_str[l_datum->header.type_id],
-                    l_datum->header.data_size, ctime_r(&l_ts_create, buf));
+                    l_datum->header.data_size, l_data_hash_str, ctime_r(&l_ts_create, buf));
             DAP_DELETE(l_key);
             dap_chain_net_dump_datum(a_str_tmp, l_datum, a_hash_out_type);
         }
@@ -2088,15 +2088,8 @@ int com_mempool_list(int argc, char ** argv, void *arg_func, char ** a_str_reply
     dap_chain_t * l_chain = NULL;
     dap_chain_net_t * l_net = NULL;
 
-    const char * l_hash_out_type = NULL;
+    const char * l_hash_out_type = "hex";
     dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-H", &l_hash_out_type);
-    if(!l_hash_out_type)
-        l_hash_out_type = "hex";
-    if(dap_strcmp(l_hash_out_type,"hex") && dap_strcmp(l_hash_out_type,"base58")) {
-        dap_chain_node_cli_set_reply_text(a_str_reply, "invalid parameter -H, valid values: -H <hex | base58>");
-        return -1;
-    }
-
     dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, argc, argv, a_str_reply, &l_chain, &l_net);
     if(!l_net)
         return -1;
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index dcff1c6d7923b498a6fa84207f2c12d558d43013..ffe522621815eb837c693c8caa957f7db3dfc532 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -54,6 +54,7 @@
 
 typedef struct dap_chain_cs_dag_event_item {
     dap_chain_hash_fast_t hash;
+    dap_chain_hash_fast_t hash_event_content;
     time_t ts_added;
     dap_chain_cs_dag_event_t *event;
     size_t event_size;
@@ -68,6 +69,7 @@ typedef struct dap_chain_cs_dag_pvt {
     pthread_rwlock_t events_rwlock;
 
     dap_chain_cs_dag_event_item_t * events;
+    dap_chain_cs_dag_event_item_t * events_tmp; // Tmp value for HASH_ITER
 
     dap_chain_cs_dag_event_item_t * tx_events;
     dap_chain_cs_dag_event_item_t * events_treshold;
@@ -960,8 +962,11 @@ static dap_chain_atom_ptr_t s_chain_callback_atom_iter_get_first(dap_chain_atom_
     }
     dap_chain_cs_dag_t * l_dag = DAP_CHAIN_CS_DAG(a_atom_iter->chain);
     dap_chain_cs_dag_pvt_t *l_dag_pvt = l_dag ? PVT(l_dag) : NULL;
-    a_atom_iter->cur_item = l_dag_pvt->events;
-    a_atom_iter->cur = (dap_chain_cs_dag_event_t*) (l_dag_pvt->events ? l_dag_pvt->events->event : NULL);
+    l_dag_pvt->events_tmp = NULL;
+    dap_chain_cs_dag_event_item_t * l_cur_item = NULL;
+    HASH_ITER(hh,l_dag_pvt->events, l_cur_item, l_dag_pvt->events_tmp);
+    a_atom_iter->cur_item = l_cur_item;
+    a_atom_iter->cur = (dap_chain_cs_dag_event_t*) (l_cur_item ? l_cur_item->event : NULL);
     a_atom_iter->cur_size = l_dag_pvt->events ? l_dag_pvt->events->event_size : 0;
 
 //    a_atom_iter->cur =  a_atom_iter->cur ?
@@ -1329,8 +1334,8 @@ static int s_cli_dag(int argc, char ** argv, void *arg_func, char **a_str_reply)
             }
         }
 
-        //if (l_event_hash_str)
-        //    dap_chain_str_to_hash_fast(l_event_hash_str,&l_event_hash);
+        if (l_event_hash_hex_str)
+            dap_chain_hash_fast_from_str(l_event_hash_hex_str,&l_event_hash);
 
         switch ( l_event_subcmd ){
             case SUBCMD_EVENT_CREATE:{
@@ -1452,7 +1457,7 @@ static int s_cli_dag(int argc, char ** argv, void *arg_func, char **a_str_reply)
                         else {
                             ret = -23;
                             dap_chain_node_cli_set_reply_text(a_str_reply,
-                                                              "Can't find events in events_last table\n");
+                                                              "Can't find event %s in events_last table\n", l_event_hash_str);
                             break;
                         }
                     }else if ( strcmp(l_from_events_str,"events") == 0){
@@ -1465,7 +1470,7 @@ static int s_cli_dag(int argc, char ** argv, void *arg_func, char **a_str_reply)
                         else {
                             ret = -24;
                             dap_chain_node_cli_set_reply_text(a_str_reply,
-                                                              "Can't find events in events table\n");
+                                                              "Can't find event %s in events table\n", l_event_hash_str);
                             break;
                         }