diff --git a/modules/common/dap_chain_datum_token.c b/modules/common/dap_chain_datum_token.c
index 017e3d238717688379e60c587de666f07dd14b19..72febb8922a11d6f9c35cb0d2c067a5826af66f6 100644
--- a/modules/common/dap_chain_datum_token.c
+++ b/modules/common/dap_chain_datum_token.c
@@ -57,7 +57,7 @@ dap_chain_datum_token_tsd_t * dap_chain_datum_token_tsd_create(uint16_t a_type,
     dap_chain_datum_token_tsd_t * l_tsd = DAP_NEW_Z_SIZE(dap_chain_datum_token_tsd_t,
                                                          sizeof(dap_chain_datum_token_tsd_t) + a_data_size );
     if ( l_tsd ){
-        memcpy(l_tsd->data,&a_data , a_data_size );
+        memcpy(l_tsd->data, a_data , a_data_size );
         l_tsd->type = a_type;
         l_tsd->size = a_data_size;
     }
@@ -74,23 +74,19 @@ dap_chain_datum_token_tsd_t * dap_chain_datum_token_tsd_create(uint16_t a_type,
 dap_chain_datum_token_tsd_t* dap_chain_datum_token_tsd_get(dap_chain_datum_token_t * a_token, size_t a_token_size)
 {
     // Check if token type could have tsd section
-    size_t l_hdr_size;
+    size_t l_hdr_size = sizeof(*a_token);
     size_t l_tsd_size;
+
+    if (l_hdr_size > a_token_size){
+        log_it(L_WARNING, "Token size smaller then header, corrupted data");
+        return NULL;
+    }
+
     switch( a_token->type){
         case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL:
-            l_hdr_size = sizeof (a_token->header_private_decl);
-            if (l_hdr_size> a_token_size){
-                log_it(L_WARNING, "Token size smaller then header, corrupted data");
-                return NULL;
-            }
             l_tsd_size = a_token->header_private_decl.tsd_total_size;
         break;
         case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE:
-            l_hdr_size = sizeof(a_token->header_private_update);
-            if (l_hdr_size> a_token_size){
-                log_it(L_WARNING, "Token size smaller then header, corrupted data");
-                return NULL;
-            }
             l_tsd_size = a_token->header_private_update.tsd_total_size;
         break;
         default: return NULL;
@@ -128,6 +124,10 @@ dap_chain_datum_token_tsd_t* dap_chain_datum_token_tsd_get(dap_chain_datum_token
  */
 void dap_chain_datum_token_flags_dump(dap_string_t * a_str_out, uint16_t a_flags)
 {
+    if(!a_flags){
+        dap_string_append_printf(a_str_out, "<NONE>\n");
+        return;
+    }
     for ( uint16_t i = 0;  (2^i) <=DAP_CHAIN_DATUM_TOKEN_FLAG_MAX; i++ ){
         if(   a_flags & (2^i) )
             dap_string_append_printf(a_str_out,"%s%s", c_dap_chain_datum_token_flag_str[2^i],
diff --git a/modules/common/include/dap_chain_datum_token.h b/modules/common/include/dap_chain_datum_token.h
index f347de9d1a40e2a85816ca6ab105bab9fcefb570..32e2f42eb5787b38fb40bb1ebb78bbbdd80ee4c5 100644
--- a/modules/common/include/dap_chain_datum_token.h
+++ b/modules/common/include/dap_chain_datum_token.h
@@ -242,7 +242,7 @@ void dap_chain_datum_token_flags_dump(dap_string_t * a_str_out, uint16_t a_flags
 #define dap_chain_datum_token_tsd_get_scalar(a,typeconv)  *((typeconv*) a->data)
 
 // NULL-terminated string
-#define dap_chain_datum_token_tsd_create_string(type,str) dap_chain_datum_token_tsd_create (type,str, dap_strlen(str))
+#define dap_chain_datum_token_tsd_create_string(type,str) dap_chain_datum_token_tsd_create (type,str, dap_strlen(str)+1)
 #define dap_chain_datum_token_tsd_get_string(a)  ( ((char*) a->data )[a->size-1] == '\0'? (char*) a->data  : "<CORRUPTED STRING>" )
 #define dap_chain_datum_token_tsd_get_string_const(a)  ( ((const char*) a->data )[a->size-1] == '\0'? (const char*) a->data : "<CORRUPTED STRING>" )
 
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 991580d3c771a2ec6a539dcd451f8918588f21b9..1513a12acc6be27e541c70dbba42ca760b2024b5 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -1,4 +1,4 @@
-/*
+/*
  * Authors:
  * Dmitriy A. Gerasimov <gerasimov.dmitriy@demlabs.net>
  * Alexander Lysikov <alexander.lysikov@demlabs.net>
@@ -2145,11 +2145,11 @@ int com_mempool_proc(int argc, char ** argv, void *arg_func, char ** a_str_reply
                             dap_string_append_printf(l_str_tmp, "Error! Datum doesn't pass verifications, examine node log files");
                             ret = -6;
                         }else{
-                            dap_string_append_printf(l_str_tmp, "Datum processed well.");
-                            if (dap_chain_global_db_gr_del( dap_strdup(l_datum_hash_str), l_gdb_group_mempool)){
+                            dap_string_append_printf(l_str_tmp, "Datum processed well. ");
+                            if (!dap_chain_global_db_gr_del( dap_strdup(l_datum_hash_str), l_gdb_group_mempool)){
                                 dap_string_append_printf(l_str_tmp, "Warning! Can't delete datum from mempool!");
                             }else
-                                dap_string_append_printf(l_str_tmp, "Removed datum from mempool");
+                                dap_string_append_printf(l_str_tmp, "Removed datum from mempool.");
                         }
                     }else{
                         dap_string_append_printf(l_str_tmp, "Error! Can't move to no-concensus chains from mempool");
@@ -2707,6 +2707,10 @@ int com_token_decl(int argc, char ** argv, void *arg_func, char ** a_str_reply)
                         log_it(L_DEBUG,"== TOTAL_SIGNS_VALID: %u",
                                 dap_chain_datum_token_tsd_get_scalar(l_tsd,uint16_t) );
                     break;
+                    case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_DATUM_TYPE_ALLOWED_ADD:
+                        log_it(L_DEBUG,"== DATUM_TYPE_ALLOWED_ADD: %s",
+                               dap_chain_datum_token_tsd_get_string_const(l_tsd) );
+                    break;
                     case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_ALLOWED_ADD:
                         log_it(L_DEBUG,"== TX_SENDER_ALLOWED_ADD: %s",
                                 dap_chain_datum_token_tsd_get_string_const(l_tsd) );
@@ -2727,6 +2731,7 @@ int com_token_decl(int argc, char ** argv, void *arg_func, char ** a_str_reply)
                 }
                 size_t l_tsd_size = dap_chain_datum_token_tsd_size( l_tsd);
                 memcpy(l_datum_token->data_n_tsd + l_datum_data_offset, l_tsd, l_tsd_size);
+                l_datum_token->header_private_decl.tsd_total_size += l_tsd_size;
                 l_datum_data_offset += l_tsd_size;
             }
 
@@ -2834,7 +2839,7 @@ int com_token_decl(int argc, char ** argv, void *arg_func, char ** a_str_reply)
     }
 
     dap_chain_datum_t * l_datum = dap_chain_datum_create(DAP_CHAIN_DATUM_TOKEN_DECL, l_datum_token,
-            sizeof(l_datum_token->header_private) + l_datum_data_offset);
+            sizeof(*l_datum_token) + l_datum_data_offset);
     size_t l_datum_size = dap_chain_datum_size(l_datum);
 
     // Calc datum's hash