diff --git a/dap-sdk/crypto/src/dap_sign.c b/dap-sdk/crypto/src/dap_sign.c
index b27c2c2c57e74c182b9bcfd22df6c1c2cc3cd5c5..fea8f12eb6a982aa7b9b851f77db13304ce158f0 100755
--- a/dap-sdk/crypto/src/dap_sign.c
+++ b/dap-sdk/crypto/src/dap_sign.c
@@ -479,14 +479,14 @@ dap_multi_sign_t *dap_multi_sign_deserialize(dap_sign_type_enum_t a_type, uint8_
     l_mem_shift++;
     memcpy(&l_sign->sign_count, &a_sign[l_mem_shift], 1);
     l_mem_shift++;
-    l_sign->key_seq = DAP_NEW_SIZE(dap_multi_sign_keys_t, l_sign->sign_count * sizeof(dap_multi_sign_keys_t));
+    l_sign->key_seq = DAP_NEW_Z_SIZE(dap_multi_sign_keys_t, l_sign->sign_count * sizeof(dap_multi_sign_keys_t));
     for (int i = 0; i < l_sign->sign_count; i++) {
         memcpy(&l_sign->key_seq[i].num, &a_sign[l_mem_shift], 1);
         l_mem_shift++;
         memcpy(&l_sign->key_seq[i].type, &a_sign[l_mem_shift], sizeof(dap_sign_type_t));
         l_mem_shift += sizeof(dap_sign_type_t);
     }
-    l_sign->meta = DAP_NEW_SIZE(dap_multi_sign_meta_t, l_sign->sign_count * sizeof(dap_multi_sign_meta_t));
+    l_sign->meta = DAP_NEW_Z_SIZE(dap_multi_sign_meta_t, l_sign->sign_count * sizeof(dap_multi_sign_meta_t));
     size_t l_pkeys_size = 0, l_signes_size = 0;
     for (int i = 0; i < l_sign->sign_count; i++) {
         memcpy(&l_sign->meta[i].pkey_size, &a_sign[l_mem_shift], sizeof(uint32_t));
@@ -496,13 +496,13 @@ dap_multi_sign_t *dap_multi_sign_deserialize(dap_sign_type_enum_t a_type, uint8_
         l_mem_shift += sizeof(uint32_t);
         l_signes_size += l_sign->meta[i].sign_size;
     }
-    l_sign->key_hashes = DAP_NEW_SIZE(dap_chain_hash_fast_t, l_sign->total_count * sizeof(dap_chain_hash_fast_t));
+    l_sign->key_hashes = DAP_NEW_Z_SIZE(dap_chain_hash_fast_t, l_sign->total_count * sizeof(dap_chain_hash_fast_t));
     for (int i = 0; i < l_sign->total_count; i++) {
         memcpy(&l_sign->key_hashes[i], &a_sign[l_mem_shift], sizeof(dap_chain_hash_fast_t));
         l_mem_shift += sizeof(dap_chain_hash_fast_t);
     }
     uint32_t l_data_shift = 0, l_data_size = 0;
-    l_sign->pub_keys = DAP_NEW_SIZE(uint8_t, l_pkeys_size);
+    l_sign->pub_keys = DAP_NEW_Z_SIZE(uint8_t, l_pkeys_size);
     for (int i = 0; i < l_sign->sign_count; i++) {
         l_data_size = l_sign->meta[i].pkey_size;
         memcpy( &l_sign->pub_keys[l_data_shift], &a_sign[l_mem_shift],l_data_size);
@@ -510,7 +510,7 @@ dap_multi_sign_t *dap_multi_sign_deserialize(dap_sign_type_enum_t a_type, uint8_
         l_data_shift += l_data_size;
     }
     l_data_shift = l_data_size = 0;
-    l_sign->sign_data = DAP_NEW_SIZE(uint8_t, l_signes_size);
+    l_sign->sign_data = DAP_NEW_Z_SIZE(uint8_t, l_signes_size);
     for (int i = 0; i < l_sign->sign_count; i++) {
         l_data_size = l_sign->meta[i].sign_size;
         memcpy(&l_sign->sign_data[l_data_shift], &a_sign[l_mem_shift], l_data_size);
@@ -632,7 +632,7 @@ dap_multi_sign_t *dap_multi_sign_create(dap_multi_sign_params_t *a_params, const
     dap_multi_sign_t *l_sign = DAP_NEW_Z(dap_multi_sign_t);
     l_sign->type = a_params->type;
     l_sign->total_count = a_params->total_count;
-    l_sign->key_hashes = DAP_NEW_SIZE(dap_chain_hash_fast_t, a_params->total_count * sizeof(dap_chain_hash_fast_t));
+    l_sign->key_hashes = DAP_NEW_Z_SIZE(dap_chain_hash_fast_t, a_params->total_count * sizeof(dap_chain_hash_fast_t));
     for (int i = 0; i < a_params->total_count; i++) {
         if (!dap_hash_fast(a_params->keys[i]->pub_key_data, a_params->keys[i]->pub_key_data_size, &l_sign->key_hashes[i])) {
             log_it (L_ERROR, "Can't create multi-signature hash");
@@ -641,8 +641,8 @@ dap_multi_sign_t *dap_multi_sign_create(dap_multi_sign_params_t *a_params, const
         }
     }
     l_sign->sign_count = a_params->sign_count;
-    l_sign->key_seq = DAP_NEW_SIZE(dap_multi_sign_keys_t, a_params->sign_count * sizeof(dap_multi_sign_keys_t));
-    l_sign->meta = DAP_NEW_SIZE(dap_multi_sign_meta_t, a_params->sign_count * sizeof(dap_multi_sign_meta_t));
+    l_sign->key_seq = DAP_NEW_Z_SIZE(dap_multi_sign_keys_t, a_params->sign_count * sizeof(dap_multi_sign_keys_t));
+    l_sign->meta = DAP_NEW_Z_SIZE(dap_multi_sign_meta_t, a_params->sign_count * sizeof(dap_multi_sign_meta_t));
     for (int i = 0; i < l_sign->sign_count; i++) {
         uint8_t l_num = a_params->key_seq[i];
         l_sign->key_seq[i].num = l_num;
@@ -674,7 +674,7 @@ dap_multi_sign_t *dap_multi_sign_create(dap_multi_sign_params_t *a_params, const
         uint8_t *l_pkey = dap_sign_get_pkey(l_dap_sign_step, &l_pkey_size);
         l_sign->meta[i].pkey_size = l_pkey_size;
         if (l_pkeys_mem_shift == 0) {
-            l_sign->pub_keys = DAP_NEW_SIZE(uint8_t, l_pkey_size);
+            l_sign->pub_keys = DAP_NEW_Z_SIZE(uint8_t, l_pkey_size);
         } else {
             l_sign->pub_keys = DAP_REALLOC(l_sign->pub_keys, l_pkeys_mem_shift + l_pkey_size);
         }
@@ -683,7 +683,7 @@ dap_multi_sign_t *dap_multi_sign_create(dap_multi_sign_params_t *a_params, const
         uint8_t *l_sign_step = dap_sign_get_sign(l_dap_sign_step, &l_sign_size);
         l_sign->meta[i].sign_size = l_sign_size;
         if (l_signs_mem_shift == 0) {
-            l_sign->sign_data = DAP_NEW_SIZE(uint8_t, l_sign_size);
+            l_sign->sign_data = DAP_NEW_Z_SIZE(uint8_t, l_sign_size);
         } else {
             l_sign->sign_data = DAP_REALLOC(l_sign->sign_data, l_signs_mem_shift + l_sign_size);
         }
diff --git a/dap-sdk/crypto/src/newhope/newhope.pri b/dap-sdk/crypto/src/newhope/newhope.pri
index 7f618fd998c64c703a491a08b0d0f6240454243c..19a232bca15fc416a165badc40c3aba904019c59 100755
--- a/dap-sdk/crypto/src/newhope/newhope.pri
+++ b/dap-sdk/crypto/src/newhope/newhope.pri
@@ -1,3 +1,3 @@
-INCLUDEPATH += $$PW
+INCLUDEPATH += $$PWD
 HEADERS += $$PWD/newhope_api.h  $$PWD/newhope_cpakem.h  $$PWD/newhope_cpapke.h  $$PWD/newhope_ntt.h  $$PWD/newhope_params.h  $$PWD/newhope_poly.h  $$PWD/newhope_reduce.h
 SOURCES += $$PWD/newhope_cpakem.c  $$PWD/newhope_cpapke.c  $$PWD/newhope_ntt.c  $$PWD/newhope_poly.c  $$PWD/newhope_precomp.c  $$PWD/newhope_reduce.c
diff --git a/dap-sdk/crypto/test/crypto/dap_enc_sign_multi_test.c b/dap-sdk/crypto/test/crypto/dap_enc_sign_multi_test.c
index 2a7a47bb0b41e63943080599a161a5e1af92b295..ffb2c87b5c6d7d3088639b2cc2443721ceb230c9 100755
--- a/dap-sdk/crypto/test/crypto/dap_enc_sign_multi_test.c
+++ b/dap-sdk/crypto/test/crypto/dap_enc_sign_multi_test.c
@@ -69,5 +69,5 @@ void dap_enc_multi_sign_tests_run()
     dap_print_module_name("dap_enc_sign_multi");
     init_test_case();
 
-    benchmark_mgs_time("Signing and verifying message 1 time", benchmark_test_time(test_signing_verifying, 1));
+    benchmark_mgs_time("Signing and verifying message 1 time", benchmark_test_time(test_signing_verifying, 10));
 }
diff --git a/dap-sdk/crypto/test/crypto/main.c b/dap-sdk/crypto/test/crypto/main.c
index fe0887d99f357598c5d9eedbefd79a7f94e6049d..e1073d68602601603c7c5642bea5ce86e1f94b68 100755
--- a/dap-sdk/crypto/test/crypto/main.c
+++ b/dap-sdk/crypto/test/crypto/main.c
@@ -20,7 +20,7 @@ int main(void)
  // switch off debug info from library
     dap_log_level_set(L_CRITICAL);
     const int  test_numbers = 100;
-    //dap_enc_multi_sign_tests_run();return 0;
+    dap_enc_multi_sign_tests_run();
     dap_enc_newhope_tests_run(test_numbers);
     test_encypt_decrypt      (test_numbers, DAP_ENC_KEY_TYPE_SEED_OFB,  32);
     test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_SEED_OFB,  32);
diff --git a/dap-sdk/net/core/dap_events_socket.c b/dap-sdk/net/core/dap_events_socket.c
index 6060e27a3f02081a19c98a942885ceeace575afb..2d5ad7d20f40971b3dfb2f06cf858f79404f688d 100644
--- a/dap-sdk/net/core/dap_events_socket.c
+++ b/dap-sdk/net/core/dap_events_socket.c
@@ -264,6 +264,12 @@ int dap_events_socket_kill_socket( dap_events_socket_t *a_es )
     return -1;
   }
 
+  if( !a_es->dap_worker ) {
+      log_it( L_WARNING, "%s: socket %u has no worker thread", __PRETTY_FUNCTION__, a_es->socket );
+      a_es->kill_signal = true;
+      return 0;
+  }
+
   uint32_t tn = a_es->dap_worker->number_thread;
 
   dap_worker_t *w = a_es->dap_worker;
diff --git a/dap-sdk/net/core/dap_server.c b/dap-sdk/net/core/dap_server.c
index dd199b333ba93de547e37584e4b2684bb0ce1b0d..f50290948436b444260c62a2e1b59e6b9dad0ad4 100644
--- a/dap-sdk/net/core/dap_server.c
+++ b/dap-sdk/net/core/dap_server.c
@@ -66,6 +66,7 @@
 
 #include "dap_common.h"
 #include "dap_server.h"
+#include "dap_strfuncs.h"
 
 #define LOG_TAG "server"
 
@@ -740,8 +741,6 @@ int32_t dap_server_loop( dap_server_t *d_server )
   static uint32_t pickthread = 0;  // just for test
   pthread_t thread_listener[ DAP_MAX_THREADS ];
 
-  if ( !d_server ) return 1;
-
   for( uint32_t i = 0; i < _count_threads; ++i ) {
 
     EPOLL_HANDLE efd = epoll_create1( 0 );
@@ -767,49 +766,55 @@ int32_t dap_server_loop( dap_server_t *d_server )
   struct epoll_event  pev;
   struct epoll_event  events[ 16 ];
 
-  memset(&pev, 0, sizeof(pev));
-  pev.events = EPOLLIN | EPOLLERR;
-  pev.data.fd = d_server->socket_listener;
+  if(d_server){
+      memset(&pev, 0, sizeof(pev));
+      pev.events = EPOLLIN | EPOLLERR;
+      pev.data.fd = d_server->socket_listener;
 
-  if( epoll_ctl( efd, EPOLL_CTL_ADD, d_server->socket_listener, &pev) != 0 ) {
-    log_it( L_ERROR, "epoll_ctl failed 004" );
-    goto error;
+      if( epoll_ctl( efd, EPOLL_CTL_ADD, d_server->socket_listener, &pev) != 0 ) {
+          log_it( L_ERROR, "epoll_ctl failed 004" );
+          goto error;
+      }
   }
 
   while( !bQuitSignal ) {
+    if(d_server){
+      int32_t n = epoll_wait( efd, &events[0], 16, -1 );
 
-    int32_t n = epoll_wait( efd, &events[0], 16, -1 );
+      if ( bQuitSignal )
+        break;
 
-    if ( bQuitSignal )
-      break;
+      if ( n <= 0 ) {
+        if ( errno == EINTR )
+          continue;
+        log_it( L_ERROR, "Server wakeup no events / error" );
+        break;
+      }
 
-    if ( n <= 0 ) {
-      if ( errno == EINTR )
-        continue;
-      log_it( L_ERROR, "Server wakeup no events / error" );
-      break;
-    }
+      for( int32_t i = 0; i < n; ++ i ) {
 
-    for( int32_t i = 0; i < n; ++ i ) {
+        if ( events[i].events & EPOLLIN ) {
 
-      if ( events[i].events & EPOLLIN ) {
+          int client_fd = accept( events[i].data.fd, 0, 0 );
 
-        int client_fd = accept( events[i].data.fd, 0, 0 );
+          if ( client_fd < 0 ) {
+            log_it( L_ERROR, "accept_cb: error accept socket");
+            continue;
+          }
 
-        if ( client_fd < 0 ) {
-          log_it( L_ERROR, "accept_cb: error accept socket");
-          continue;
+          set_nonblock_socket( client_fd );
+          dap_server_add_socket( client_fd, -1 );
+        }
+        else if( events[i].events & EPOLLERR ) {
+          log_it( L_ERROR, "Server socket error event" );
+          goto exit;
         }
 
-        set_nonblock_socket( client_fd );
-        dap_server_add_socket( client_fd, -1 );
-      }
-      else if( events[i].events & EPOLLERR ) {
-        log_it( L_ERROR, "Server socket error event" );
-        goto exit;
-      }
-
-    } // for
+      } // for
+    }else{
+      static const int c_dap_server_client_mode_tick_rate = 200;
+      dap_usleep(DAP_USEC_PER_SEC / c_dap_server_client_mode_tick_rate);
+    }
 
   } // while
 
diff --git a/modules/common/dap_chain_datum_token.c b/modules/common/dap_chain_datum_token.c
index 72febb8922a11d6f9c35cb0d2c067a5826af66f6..031b3ebffe787f381a9cc175f629239d14a36e10 100644
--- a/modules/common/dap_chain_datum_token.c
+++ b/modules/common/dap_chain_datum_token.c
@@ -125,13 +125,58 @@ 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");
+        dap_string_append_printf(a_str_out, "%s\n",
+                c_dap_chain_datum_token_flag_str[DAP_CHAIN_DATUM_TOKEN_FLAG_NONE]);
         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],
-                    (2^i)==DAP_CHAIN_DATUM_TOKEN_FLAG_MAX?",":"\n"  );
+    bool is_first = true;
+    for ( uint16_t i = 0;  i <= DAP_CHAIN_DATUM_TOKEN_FLAG_MAX; i++){
+        if(   a_flags &  (1 << i) ){
+            if(is_first)
+                is_first = false;
+            else
+                dap_string_append_printf(a_str_out,", ");
+            dap_string_append_printf(a_str_out,"%s", c_dap_chain_datum_token_flag_str[i]);
+        }
+        if(i == DAP_CHAIN_DATUM_TOKEN_FLAG_MAX)
+            dap_string_append_printf(a_str_out, "\n");
     }
 }
 
+
+/**
+ * @brief dap_chain_datum_token_certs_dump
+ * @param a_str_out
+ * @param a_data_n_tsd
+ * @param a_certs_size
+ */
+void dap_chain_datum_token_certs_dump(dap_string_t * a_str_out, byte_t * a_data_n_tsd, size_t a_certs_size) {
+    dap_string_append_printf(a_str_out, "signatures: ");
+    if (!a_certs_size) {
+        dap_string_append_printf(a_str_out, "<NONE>\n");
+        return;
+    }
+
+    dap_string_append_printf(a_str_out, "\n");
+
+    size_t l_offset = 0;
+    for (int i = 1; l_offset < (a_certs_size); i++) {
+        dap_sign_t *l_sign = (dap_sign_t *) (a_data_n_tsd + l_offset);
+        l_offset += dap_sign_get_size(l_sign);
+        if (l_sign->header.sign_size == 0) {
+            dap_string_append_printf(a_str_out, "<CORRUPTED - 0 size signature>\n");
+            continue;
+        }
+
+        dap_chain_hash_fast_t l_pkey_hash = {0};
+        if (dap_sign_get_pkey_hash(l_sign, &l_pkey_hash) == false) {
+            dap_string_append_printf(a_str_out, "<CORRUPTED - can't calc hash>\n");
+            continue;
+        }
+
+        char *l_hash_str = dap_chain_hash_fast_to_str_new(&l_pkey_hash);
+
+        dap_string_append_printf(a_str_out, "%d) %s, %s, %lu bytes\n", i, l_hash_str,
+                                 dap_sign_type_to_str(l_sign->header.type), l_sign->header.sign_size);
+    }
+}
diff --git a/modules/common/include/dap_chain_datum_token.h b/modules/common/include/dap_chain_datum_token.h
index 32e2f42eb5787b38fb40bb1ebb78bbbdd80ee4c5..d130cec690b5597b0cd196cf8b8974d980de3709 100644
--- a/modules/common/include/dap_chain_datum_token.h
+++ b/modules/common/include/dap_chain_datum_token.h
@@ -237,6 +237,7 @@ extern const char *c_dap_chain_datum_token_emission_type_str[];
 dap_chain_datum_token_tsd_t * dap_chain_datum_token_tsd_create(uint16_t a_type, const void * a_data, size_t a_data_size);
 dap_chain_datum_token_tsd_t* dap_chain_datum_token_tsd_get(dap_chain_datum_token_t * a_token,  size_t a_token_size);
 void dap_chain_datum_token_flags_dump(dap_string_t * a_str_out, uint16_t a_flags);
+void dap_chain_datum_token_certs_dump(dap_string_t * a_str_out, byte_t * a_data_n_tsd, size_t a_certs_size);
 
 #define dap_chain_datum_token_tsd_create_scalar(type,value) dap_chain_datum_token_tsd_create (type, &value, sizeof(value) )
 #define dap_chain_datum_token_tsd_get_scalar(a,typeconv)  *((typeconv*) a->data)
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 30e9e292fa1acf50b62c867a96d97b9275ef2a7a..04cbb57a92b7dd73f18fa2c9d9eb2bfee969b350 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -2217,7 +2217,7 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da
                                     if(l_tsd->size == sizeof(dap_chain_hash_fast_t) ){
                                         char *l_hash_str = dap_chain_hash_fast_to_str_new(
                                                     (dap_chain_hash_fast_t*) l_tsd->data );
-                                        dap_string_append_printf(a_str_out,"total_signs_remoev: %s\n", l_hash_str );
+                                        dap_string_append_printf(a_str_out,"total_signs_remove: %s\n", l_hash_str );
                                         DAP_DELETE( l_hash_str );
                                     }else
                                         dap_string_append_printf(a_str_out,"total_signs_add: <WRONG SIZE %zd>\n", l_tsd->size);
@@ -2281,13 +2281,14 @@ 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,"type: PRIVATE_DECL\n");
                     dap_string_append_printf(a_str_out,"flags: ");
                     dap_chain_datum_token_flags_dump(a_str_out, l_token->header_private_decl.flags);
-                    dap_chain_datum_token_tsd_t * l_tsd = dap_chain_datum_token_tsd_get(l_token, l_token_size);
-                    if (l_tsd == NULL)
+                    dap_chain_datum_token_tsd_t * l_tsd_first = dap_chain_datum_token_tsd_get(l_token, l_token_size);
+                    if (l_tsd_first == NULL)
                         dap_string_append_printf(a_str_out,"<CORRUPTED TSD SECTION>\n");
                     else{
                         size_t l_offset = 0;
                         size_t l_offset_max = l_token->header_private_decl.tsd_total_size;
                         while( l_offset< l_offset_max){
+                            dap_chain_datum_token_tsd_t * l_tsd = (void*)l_tsd_first + l_offset;
                             if ( (l_tsd->size+l_offset) >l_offset_max){
                                 log_it(L_WARNING, "<CORRUPTED TSD> too big size %zd when left maximum %zd",
                                        l_tsd->size, l_offset_max - l_offset);
@@ -2295,7 +2296,7 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da
                             }
                             switch( l_tsd->type){
                                 case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY:
-                                    dap_string_append_printf(a_str_out,"total_supply: %u\n",
+                                    dap_string_append_printf(a_str_out,"total_supply: %lu\n",
                                                              dap_chain_datum_token_tsd_get_scalar(l_tsd, uint128_t) );
                                 break;
                                 case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SIGNS_VALID :
@@ -2332,6 +2333,9 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da
 
                         }
                     }
+
+                    int 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_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 1513a12acc6be27e541c70dbba42ca760b2024b5..b4272b63e2e90185c59ae6861523363424cbffe9 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -2294,7 +2294,7 @@ int com_token_update(int argc, char ** argv, void *arg_func, char ** a_str_reply
                              dap_chain_node_cli_set_reply_text(a_str_reply, "Flag can't be \"%s\"",*l_str_flags);
                              return -20;
                          }
-                         l_flags |= l_flag;
+                         l_flags |= (1<<l_flag);
                          l_str_flags++;
                      }
                      // Add flags as set_flags TDS section
@@ -2337,6 +2337,7 @@ int com_token_update(int argc, char ** argv, void *arg_func, char ** a_str_reply
                     l_tsd_total_size+= dap_chain_datum_token_tsd_size( l_tsd);
                 }else if ( strcmp( argv[l_arg_index],"-total_signs_valid" )==0){ // Signs valid
                     uint16_t l_param_value = (uint16_t)atoi(l_arg_param);
+                    l_signs_total = l_param_value;
                     dap_chain_datum_token_tsd_t * l_tsd = dap_chain_datum_token_tsd_create_scalar(
                                                             DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SIGNS_VALID, l_param_value);
                     dap_list_append( l_tsd_list, l_tsd);
@@ -2604,7 +2605,7 @@ int com_token_decl(int argc, char ** argv, void *arg_func, char ** a_str_reply)
                              dap_chain_node_cli_set_reply_text(a_str_reply, "Flag can't be \"%s\"",*l_str_flags);
                              return -20;
                          }
-                         l_flags |= l_flag;
+                         l_flags |= (1<<l_flag);
                          l_str_flags++;
                      }
                 } else if ( strcmp( argv[l_arg_index],"-total_supply" )==0){ // Total supply
@@ -2613,8 +2614,9 @@ int com_token_decl(int argc, char ** argv, void *arg_func, char ** a_str_reply)
                                                             DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY, l_param_value);
                     dap_list_append( l_tsd_list, l_tsd);
                     l_tsd_total_size+= dap_chain_datum_token_tsd_size( l_tsd);
-                }else if ( strcmp( argv[l_arg_index],"-signs_valid" )==0){ // Signs valid
+                }else if ( strcmp( argv[l_arg_index],"-total_signs_valid" )==0){ // Signs valid
                     uint16_t l_param_value = (uint16_t)atoi(l_arg_param);
+                    l_signs_total = l_param_value;
                     dap_chain_datum_token_tsd_t * l_tsd = dap_chain_datum_token_tsd_create_scalar(
                                                             DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SIGNS_VALID, l_param_value);
                     dap_list_append( l_tsd_list, l_tsd);
@@ -2700,7 +2702,7 @@ int com_token_decl(int argc, char ** argv, void *arg_func, char ** a_str_reply)
                 }
                 switch (l_tsd->type){
                     case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY:
-                        log_it(L_DEBUG,"== TOTAL_SUPPLY: %llf.20",
+                        log_it(L_DEBUG,"== TOTAL_SUPPLY: %0.9llf",
                                dap_chain_balance_to_coins( dap_chain_datum_token_tsd_get_scalar(l_tsd,uint128_t) ) );
                     break;
                     case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SIGNS_VALID: