diff --git a/dap_chain_net.c b/dap_chain_net.c
index 594471d0828f8fd9125f20cd39c91f7dd857dcf5..7d72cf77b2ff38ba727c47ddf0b2833b0c5e4277 100755
--- a/dap_chain_net.c
+++ b/dap_chain_net.c
@@ -702,26 +702,27 @@ lb_proc_state:
         case NET_STATE_ONLINE: {
             //log_it(L_NOTICE, "State online");
             switch ( PVT(l_net)->state_target) {
-            // disconnect
-            case NET_STATE_OFFLINE:
-                PVT(l_net)->state = NET_STATE_OFFLINE;
-                log_it(L_NOTICE, "Going to disconnet");
-                pthread_mutex_unlock(&PVT(l_net)->state_mutex);
-                goto lb_proc_state;
-            case NET_STATE_ONLINE:
-                // if flag set then go to SYNC_GDB
-                if(PVT(l_net)->flags & F_DAP_CHAIN_NET_GO_SYNC)
-                    PVT(l_net)->flags &= ~F_DAP_CHAIN_NET_GO_SYNC;
-                else
-                    break;
-                // sync
-            case NET_STATE_SYNC_GDB:
-                PVT(l_net)->state = NET_STATE_SYNC_GDB;
-                pthread_mutex_unlock(&PVT(l_net)->state_mutex);
-                goto lb_proc_state;
+                // disconnect
+                case NET_STATE_OFFLINE:
+                    PVT(l_net)->state = NET_STATE_OFFLINE;
+                    log_it(L_NOTICE, "Going to disconnet");
+                    pthread_mutex_unlock(&PVT(l_net)->state_mutex);
+                    goto lb_proc_state;
+                case NET_STATE_ONLINE:
+                    // if flag set then go to SYNC_GDB
+                    if(PVT(l_net)->flags & F_DAP_CHAIN_NET_GO_SYNC)
+                        PVT(l_net)->flags &= ~F_DAP_CHAIN_NET_GO_SYNC;
+                    else
+                        break;
+                    // sync
+                case NET_STATE_SYNC_GDB:
                     PVT(l_net)->state = NET_STATE_SYNC_GDB;
                     pthread_mutex_unlock(&PVT(l_net)->state_mutex);
                     goto lb_proc_state;
+                        PVT(l_net)->state = NET_STATE_SYNC_GDB;
+                        pthread_mutex_unlock(&PVT(l_net)->state_mutex);
+                        goto lb_proc_state;
+
             }
         }
             break;
diff --git a/dap_chain_node_cli_cmd.c b/dap_chain_node_cli_cmd.c
index dcfb5a0777893373fdf72936e8538974ef7d99b0..664fbc863506d3ab400bf864900d17ec10633575 100644
--- a/dap_chain_node_cli_cmd.c
+++ b/dap_chain_node_cli_cmd.c
@@ -1761,7 +1761,7 @@ int com_token_decl_sign(int argc, char ** argv, char ** a_str_reply)
             if(l_datum->header.type_id == DAP_CHAIN_DATUM_TOKEN_DECL) {
                 dap_chain_datum_token_t * l_datum_token = (dap_chain_datum_token_t *) l_datum->data;
                 size_t l_datum_token_size = l_datum->header.data_size;
-                size_t l_signs_size = l_datum_token_size - sizeof(l_datum_token->header);
+                size_t l_signs_size = l_datum_token_size - sizeof(l_datum_token->header_auth);
 
                 // Check for signatures, are they all in set and are good enought?
                 size_t l_signs_count = 0;
@@ -1769,7 +1769,7 @@ int com_token_decl_sign(int argc, char ** argv, char ** a_str_reply)
                 for(size_t l_offset = 0; l_offset < l_signs_size; l_signs_count++) {
                     dap_sign_t * l_sign = (dap_sign_t *) l_datum_token->signs + l_offset;
                     l_offset += dap_sign_get_size(l_sign);
-                    if( dap_sign_verify(l_sign, l_datum_token, sizeof(l_datum_token->header)) != 1) {
+                    if( dap_sign_verify(l_sign, l_datum_token, sizeof(l_datum_token->header_auth)) != 1) {
                         log_it(L_WARNING, "Wrong signature %u for datum_token with key %s in mempool!", l_signs_count, l_datum_hash_str);
                         dap_chain_node_cli_set_reply_text(a_str_reply,
                                 "Datum %s with datum token has wrong signature %u, break process and exit",
@@ -1786,7 +1786,7 @@ int com_token_decl_sign(int argc, char ** argv, char ** a_str_reply)
                                 l_signs_count, l_signs_size);
 
                 // Check if all signs are present
-                if(l_signs_count == l_datum_token->header.signs_total) {
+                if(l_signs_count == l_datum_token->header_auth.signs_total) {
                     dap_chain_node_cli_set_reply_text(a_str_reply,
                             "Datum %s with datum token has all signs on board. Can't add anything in it");
                     DAP_DELETE(l_datum);
@@ -1794,21 +1794,21 @@ int com_token_decl_sign(int argc, char ** argv, char ** a_str_reply)
                     DAP_DELETE(l_gdb_group_mempool);
                     return -7;
                 } // Check if more signs that could be (corrupted datum)
-                else if(l_signs_count > l_datum_token->header.signs_total) {
+                else if(l_signs_count > l_datum_token->header_auth.signs_total) {
                     dap_chain_node_cli_set_reply_text(a_str_reply,
                             "Warning! Datum %s with datum token has more signs on board (%u) than its possible to have (%u)!",
-                            l_signs_count, l_datum_token->header.signs_total);
+                            l_signs_count, l_datum_token->header_auth.signs_total);
                     DAP_DELETE(l_datum);
                     //DAP_DELETE(l_datum_token);
                     DAP_DELETE(l_gdb_group_mempool);
                     return -8;
                 } // Check if we have enough place to sign the datum token declaration
-                else if(l_datum_token->header.signs_total >= l_signs_count + l_certs_count) {
+                else if(l_datum_token->header_auth.signs_total >= l_signs_count + l_certs_count) {
                     size_t l_offset = 0;
                     for(size_t i = 0; i < l_certs_count; i++) {
                         dap_sign_t * l_sign = dap_sign_create(l_certs[i]->enc_key,
                                 l_datum_token,
-                                sizeof(l_datum_token->header), 0);
+                                sizeof(l_datum_token->header_auth), 0);
                         size_t l_sign_size = dap_sign_get_size(l_sign);
 
 
@@ -1880,7 +1880,7 @@ int com_token_decl_sign(int argc, char ** argv, char ** a_str_reply)
                 } else {
                     dap_chain_node_cli_set_reply_text(a_str_reply,
                             "Error! Not enought place for new signature (%u is left when we need %u signatures)",
-                            l_datum_token->header.signs_total - l_signs_count, l_certs_count);
+                            l_datum_token->header_auth.signs_total - l_signs_count, l_certs_count);
                     return -6;
                 }
             } else {
@@ -1955,9 +1955,9 @@ int com_mempool_list(int argc, char ** argv, char ** a_str_reply)
                 if ( l_datum->header.type_id == DAP_CHAIN_DATUM_TOKEN_DECL ){
                     dap_chain_datum_token_t * l_datum_token = (dap_chain_datum_token_t *) l_datum->data;
                     dap_string_append_printf(l_str_tmp,
-                         "\tDAP_CHAIN_DATUM_TOKEN_DECL: version=%u ticker=\"%s\" signs_total=%u signs_valid=%u\n",
-                                             l_datum_token->header.version, l_datum_token->header.ticker,
-                                             l_datum_token->header.signs_total, l_datum_token->header.signs_valid );
+                         "\tDAP_CHAIN_DATUM_TOKEN_DECL: type=%u ticker=\"%s\" signs_total=%u signs_valid=%u\n",
+                                             l_datum_token->header_auth.type, l_datum_token->header_auth.ticker,
+                                             l_datum_token->header_auth.signs_total, l_datum_token->header_auth.signs_valid );
                 }
             }
             // Clean up
@@ -2136,6 +2136,10 @@ int com_mempool_proc(int argc, char ** argv, char ** a_str_reply)
 int com_token_decl(int argc, char ** argv, char ** a_str_reply)
 {
     int arg_index = 1;
+
+    const char * l_type_str = NULL;
+    uint16_t l_type =0;
+
     const char * l_ticker = NULL;
 
     const char * l_total_supply_str = NULL;
@@ -2180,6 +2184,9 @@ int com_token_decl(int argc, char ** argv, char ** a_str_reply)
     // Signs minimum number thats need to authorize the emission
     dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-signs_emission", &l_signs_emission_str);
 
+    // Token type
+    dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-type", &l_type_str);
+
     if(!l_total_supply_str) {
         dap_chain_node_cli_set_reply_text(a_str_reply, "token_create requires parameter '-total_supply'");
         return -11;
@@ -2243,12 +2250,12 @@ int com_token_decl(int argc, char ** argv, char ** a_str_reply)
         l_certs_size = l_signs_total;
 
     // Create new datum token
-    dap_chain_datum_token_t * l_datum_token = DAP_NEW_Z_SIZE(dap_chain_datum_token_t, sizeof(l_datum_token->header));
-    l_datum_token->header.version = 1; // Current version
-    dap_snprintf(l_datum_token->header.ticker, sizeof(l_datum_token->header.ticker), "%s", l_ticker);
-    l_datum_token->header.total_supply = l_total_supply;
-    l_datum_token->header.signs_total = l_signs_total;
-    l_datum_token->header.signs_valid = l_signs_emission;
+    dap_chain_datum_token_t * l_datum_token = DAP_NEW_Z_SIZE(dap_chain_datum_token_t, sizeof(l_datum_token->header_auth));
+    l_datum_token->header_auth.type = 1; // Current version
+    dap_snprintf(l_datum_token->header_auth.ticker, sizeof(l_datum_token->header_auth.ticker), "%s", l_ticker);
+    l_datum_token->header_auth.total_supply = l_total_supply;
+    l_datum_token->header_auth.signs_total = l_signs_total;
+    l_datum_token->header_auth.signs_valid = l_signs_emission;
 
     size_t l_signs_offset = 0;
     // Sign header with all certificates in the list and add signs to the end of ticker declaration
@@ -2256,16 +2263,16 @@ int com_token_decl(int argc, char ** argv, char ** a_str_reply)
     for(size_t i = 0; i < l_certs_size; i++) {
         dap_sign_t * l_sign = dap_cert_sign(l_certs[i],
                 l_datum_token,
-                sizeof(l_datum_token->header),
+                sizeof(l_datum_token->header_auth),
                 0);
         size_t l_sign_size = dap_sign_get_size(l_sign);
-        l_datum_token = DAP_REALLOC(l_datum_token, sizeof(l_datum_token->header) + l_signs_offset + l_sign_size);
+        l_datum_token = DAP_REALLOC(l_datum_token, sizeof(l_datum_token->header_auth) + l_signs_offset + l_sign_size);
         memcpy(l_datum_token->signs + l_signs_offset, l_sign, l_sign_size);
         l_signs_offset += l_sign_size;
         DAP_DELETE(l_sign);
     }
     dap_chain_datum_t * l_datum = dap_chain_datum_create(DAP_CHAIN_DATUM_TOKEN_DECL, l_datum_token,
-            sizeof(l_datum_token->header) + l_signs_offset);
+            sizeof(l_datum_token->header_auth) + l_signs_offset);
     size_t l_datum_size = dap_chain_datum_size(l_datum);
 
     // Calc datum's hash