diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c
index ab5d617d167682665721b6c2fbb9a57f7ab1aed4..661745602f9134e374b83c46ffd2d8e30e2dc940 100644
--- a/modules/chain/dap_chain_ledger.c
+++ b/modules/chain/dap_chain_ledger.c
@@ -2209,7 +2209,17 @@ int dap_chain_ledger_token_emission_add_check(dap_ledger_t *a_ledger, byte_t *a_
                 dap_sign_t *l_sign = (dap_sign_t *)(l_emission->tsd_n_signs + l_emission->data.type_auth.tsd_total_size);
                 size_t l_offset = (byte_t *)l_sign - (byte_t *)l_emission;
                 uint16_t l_aproves = 0, l_aproves_valid = l_token_item->auth_signs_valid;
-                for (uint16_t i = 0; i < l_emission->data.type_auth.signs_count && l_offset < l_emission_size; i++) {
+                size_t l_sign_data_check_size = sizeof(l_emission->hdr);
+                size_t l_sign_auth_count = l_emission->data.type_auth.signs_count;
+                size_t l_sign_auth_size = l_emission->data.type_auth.size;
+                void *l_emi_ptr_check_size = &l_emission->hdr;
+                if (l_emission->hdr.version == 3) {
+                    l_sign_data_check_size = sizeof(dap_chain_datum_token_emission_t) + l_emission->data.type_auth.tsd_total_size;
+                    l_emission->data.type_auth.signs_count = 0;
+                    l_emission->data.type_auth.size = 0;
+                    l_emi_ptr_check_size = l_emission;
+                }
+                for (uint16_t i = 0; i < l_sign_auth_count && l_offset < l_emission_size; i++) {
                     if (dap_sign_verify_size(l_sign, l_emission_size - l_offset)) {
                         dap_chain_hash_fast_t l_sign_pkey_hash;
                         dap_sign_get_pkey_hash(l_sign, &l_sign_pkey_hash);
@@ -2217,7 +2227,7 @@ int dap_chain_ledger_token_emission_add_check(dap_ledger_t *a_ledger, byte_t *a_
                         for (uint16_t k=0; k< l_token_item->auth_signs_total; k++) {
                             if (dap_hash_fast_compare(&l_sign_pkey_hash, &l_token_item->auth_signs_pkey_hash[k])) {
                                 // Verify if its token emission header signed
-                                if (dap_sign_verify(l_sign, &l_emission->hdr, sizeof(l_emission->hdr)) == 1) {
+                                if (dap_sign_verify(l_sign, l_emi_ptr_check_size, l_sign_data_check_size) == 1) {
                                     l_aproves++;
                                     break;
                                 }
@@ -2229,6 +2239,10 @@ int dap_chain_ledger_token_emission_add_check(dap_ledger_t *a_ledger, byte_t *a_
                     } else
                         break;
                 }
+                if (l_emission->hdr.version == 3) {
+                    l_emission->data.type_auth.signs_count = l_sign_auth_count;
+                    l_emission->data.type_auth.size = l_sign_auth_size;
+                }
                 if (l_aproves < l_aproves_valid ){
                     if(s_debug_more) {
                         char *l_balance = dap_chain_balance_print(l_emission->hdr.value_256);
diff --git a/modules/common/dap_chain_datum_token.c b/modules/common/dap_chain_datum_token.c
index b6f4e5fdad1341b5b0a3c0fe77fb07314b0e6517..f41d9ee01c7284bfa3be820d195de7fd5dd64491 100644
--- a/modules/common/dap_chain_datum_token.c
+++ b/modules/common/dap_chain_datum_token.c
@@ -315,7 +315,7 @@ dap_sign_t ** dap_chain_datum_token_signs_parse(dap_chain_datum_token_t * a_datu
 dap_chain_datum_token_emission_t *dap_chain_datum_emission_create(uint256_t a_value, const char *a_ticker, dap_chain_addr_t *a_addr)
 {
     dap_chain_datum_token_emission_t *l_emission = DAP_NEW_Z(dap_chain_datum_token_emission_t);
-    l_emission->hdr.version = 2;
+    l_emission->hdr.version = 3;
     l_emission->hdr.value_256 = a_value;
     strncpy(l_emission->hdr.ticker, a_ticker, DAP_CHAIN_TICKER_SIZE_MAX - 1);
     l_emission->hdr.ticker[DAP_CHAIN_TICKER_SIZE_MAX - 1] = '\0';
@@ -407,6 +407,9 @@ dap_chain_datum_token_emission_t *dap_chain_datum_emission_add_sign(dap_enc_key_
     if (!a_emission || a_emission->hdr.type != DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_AUTH)
         return NULL;
 
+    size_t l_signs_count = a_emission->data.type_auth.signs_count;
+    size_t l_old_signs_size = a_emission->data.type_auth.size;
+
     if (a_emission->data.type_auth.size > a_emission->data.type_auth.tsd_total_size)
     {
         size_t l_pub_key_size = 0;
@@ -420,8 +423,9 @@ dap_chain_datum_token_emission_t *dap_chain_datum_emission_add_sign(dap_enc_key_
         }
         DAP_DELETE(l_pub_key);
     }
-
-    dap_sign_t *l_new_sign = dap_sign_create(a_sign_key, a_emission, sizeof(a_emission->hdr), 0);
+    a_emission->data.type_auth.signs_count = 0;
+    a_emission->data.type_auth.size = 0;
+    dap_sign_t *l_new_sign = dap_sign_create(a_sign_key, a_emission, sizeof(dap_chain_datum_token_emission_t) + a_emission->data.type_auth.tsd_total_size, 0);
     if (!l_new_sign)
         return NULL;
     size_t l_emission_size = dap_chain_datum_emission_get_size((uint8_t *)a_emission);
@@ -429,8 +433,10 @@ dap_chain_datum_token_emission_t *dap_chain_datum_emission_add_sign(dap_enc_key_
     size_t l_sign_size = dap_sign_get_size(l_new_sign);
     memcpy(l_ret->tsd_n_signs + l_ret->data.type_auth.size, l_new_sign, l_sign_size);
     DAP_DELETE(l_new_sign);
-    l_ret->data.type_auth.size += l_sign_size;
-    l_ret->data.type_auth.signs_count++;
+    l_old_signs_size += l_sign_size;
+    l_signs_count++;
+    l_ret->data.type_auth.size = l_old_signs_size;
+    l_ret->data.type_auth.signs_count = l_signs_count;
     return l_ret;
 }