diff --git a/dap-sdk b/dap-sdk
index 919d73ce8bc32506a11fb96b588666a00b8d101c..df57c58e1327f2cf1719b39e64d5ef20c6f86d93 160000
--- a/dap-sdk
+++ b/dap-sdk
@@ -1 +1 @@
-Subproject commit 919d73ce8bc32506a11fb96b588666a00b8d101c
+Subproject commit df57c58e1327f2cf1719b39e64d5ef20c6f86d93
diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c
index 10253754e525e87ceec09f3579294af93e8cd357..5472dd79289098cc4b54f8b4927857f06d493cd3 100644
--- a/modules/chain/dap_chain_ledger.c
+++ b/modules/chain/dap_chain_ledger.c
@@ -190,6 +190,8 @@ typedef struct dap_chain_ledger_token_item {
     size_t             tx_send_allow_size;
     dap_chain_addr_t * tx_send_block;
     size_t             tx_send_block_size;
+    char *description_token;
+    size_t description_token_size;
     UT_hash_handle hh;
 } dap_chain_ledger_token_item_t;
 
@@ -1164,7 +1166,8 @@ int dap_chain_ledger_token_add(dap_ledger_t *a_ledger, dap_chain_datum_token_t *
                 .auth_pkeys         = DAP_NEW_Z_SIZE(dap_pkey_t*, sizeof(dap_pkey_t*) * l_token->signs_total),
                 .auth_pkeys_hash    = DAP_NEW_Z_SIZE(dap_chain_hash_fast_t, sizeof(dap_chain_hash_fast_t) * l_token->signs_total),
                 .auth_signs_total   = l_auth_signs_total,
-                .auth_signs_valid   = l_auth_signs_valid
+                .auth_signs_valid   = l_auth_signs_valid,
+                .description_token_size = 0
         };
         if ( !l_token_item->auth_pkeys ) {
             if (l_token)
@@ -1687,6 +1690,19 @@ static int s_token_tsd_parse(dap_ledger_t * a_ledger, dap_chain_ledger_token_ite
                     return -10;
                 }
             }break;
+            case DAP_CHAIN_DATUM_TOKEN_TSD_TOKEN_DESCRIPTION: {
+                if (l_tsd->size == 0){
+                    if (s_debug_more)
+                        log_it(L_ERROR, "TSD param DAP_CHAIN_DATUM_TOKEN_TSD_TOKEN_DESCRIPTION expected to "
+                                        "have 0 bytes data length");
+                    return  -10;
+                }
+                if (a_token_item->description_token_size != 0)
+                    DAP_DELETE(a_token_item->description_token);
+                a_token_item->description_token_size = l_tsd->size;
+                a_token_item->description_token = DAP_NEW_Z_SIZE(char, l_tsd->size);
+                memcpy(a_token_item->description_token, l_tsd->data, l_tsd->size);
+            } break;
             default:{}
         }
     }
@@ -2018,7 +2034,7 @@ dap_list_t *dap_chain_ledger_token_info(dap_ledger_t *a_ledger)
             size_t l_certs_field_size = l_token_item->datum_token_size - sizeof(*l_token_item->datum_token) - l_token_item->datum_token->header_native_decl.tsd_total_size;
             dap_chain_datum_token_certs_dump(l_str_tmp, l_token_item->datum_token->data_n_tsd + l_token_item->datum_token->header_native_decl.tsd_total_size,
                                          l_certs_field_size, "hex");
-            l_item_str = dap_strdup_printf("-->Token name '%s', type %s, flags: %s\n"
+            l_item_str = dap_strdup_printf("-->Token name '%s', type %s, flags: %s, description: '%s'\n"
                                             "\tSupply (current/total) %s/%s\n"
                                             "\tDecimals: 18\n"
                                             "\tAuth signs (valid/total) %zu/%zu\n"
@@ -2026,6 +2042,7 @@ dap_list_t *dap_chain_ledger_token_info(dap_ledger_t *a_ledger)
                                             "%s"
                                             "\tTotal emissions %u\n___\n",
                                             l_token_item->ticker, l_type_str, s_flag_str_from_code(l_token_item->datum_token->header_native_decl.flags),
+                                           l_token_item->description_token_size != 0 ? l_token_item->description_token : "The token description is not set",
                                             l_balance_cur, l_balance_total,
                                             l_token_item->auth_signs_valid, l_token_item->auth_signs_total,
                                             l_str_tmp->str,
diff --git a/modules/common/dap_chain_datum.c b/modules/common/dap_chain_datum.c
index 6681b046e01a303fa920097a4ec08f4444a189e4..dafae10e2933d5c059d56f1fdc450bdd56fcaaf1 100644
--- a/modules/common/dap_chain_datum.c
+++ b/modules/common/dap_chain_datum.c
@@ -213,6 +213,9 @@ void dap_chain_datum_token_dump_tsd(dap_string_t *a_str_out, dap_chain_datum_tok
                 dap_string_append_printf(a_str_out, "tx_receiver_blocked_remove: %s\n",
                                          dap_tsd_get_string_const(l_tsd) );
             continue;
+            case DAP_CHAIN_DATUM_TOKEN_TSD_TOKEN_DESCRIPTION:
+                dap_string_append_printf(a_str_out, "description: '%s'\n", l_tsd->data);
+                continue;
             default: dap_string_append_printf(a_str_out, "<0x%04hX>: <size %u>\n", l_tsd->type, l_tsd->size);
         }
     }
diff --git a/modules/common/include/dap_chain_datum_token.h b/modules/common/include/dap_chain_datum_token.h
index 2cd1b1060ba220353df0e5127ed9ed4b26d1910a..a47c2161893549c34f478f136b6f50e0063d80f5 100644
--- a/modules/common/include/dap_chain_datum_token.h
+++ b/modules/common/include/dap_chain_datum_token.h
@@ -266,6 +266,9 @@ extern const char *c_dap_chain_datum_token_flag_str[];
 // Emission for delegated token
 #define DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_DELEGATE_EMISSION_FROM_STAKE_LOCK	0x0027
 
+// Description token
+#define DAP_CHAIN_DATUM_TOKEN_TSD_TOKEN_DESCRIPTION                         0x0028
+
 
 
 
diff --git a/modules/net/dap_chain_node_cli.c b/modules/net/dap_chain_node_cli.c
index eeb9a77da79c3818bbc184e2975138c9788bacc5..72d0730e0dc715ad007c1fbfb6b6cedbf4f48cf3 100644
--- a/modules/net/dap_chain_node_cli.c
+++ b/modules/net/dap_chain_node_cli.c
@@ -173,6 +173,7 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
                             "\t -flags <value>:\t List of flags from <value> to token declaration or update\n"
                             "\t -total_supply <value>:\t Set total supply - emission's maximum - to the <value>\n"
                             "\t -total_signs_valid <value>:\t Set valid signatures count's minimum\n"
+                            "\t -description <value>:\t Updated description for this token\n"
                             "\nDatum type allowed/blocked:\n"
                             "\t -datum_type_allowed <value>:\t Set allowed datum type(s)\n"
                             "\t -datum_type_blocked <value>:\t Set blocked datum type(s)\n"
@@ -222,6 +223,7 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
             "\t -flags <value>:\t List of flags from <value> to token declaration\n"
             "\t -total_supply <value>:\t Set total supply - emission's maximum - to the <value>\n"
             "\t -total_signs_valid <value>:\t Set valid signatures count's minimum\n"
+            "\t -description <value>:\t Updated description for this token\n"
             "\nDatum type allowed/blocked:\n"
             "\t -datum_type_allowed <value>:\t Set allowed datum type(s)\n"
             "\t -datum_type_blocked <value>:\t Set blocked datum type(s)\n"
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index c9d75f04a2e1df6f0e72ccebb0f6a2d7e0fa8e55..9586c4befe5d86c116615daf1ac0ec536a58e085 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -3273,9 +3273,10 @@ typedef struct _dap_cli_token_additional_params {
     const char* tx_receiver_blocked;
     const char* tx_sender_allowed;
     const char* tx_sender_blocked;
-    uint16_t parsed_flags;
-    size_t tsd_total_size;
-    byte_t *parsed_tsd;
+    uint16_t    parsed_flags;
+    size_t      tsd_total_size;
+    byte_t      *parsed_tsd;
+    size_t      parsed_tsd_size;
 } dap_cli_token_additional_params;
 
 typedef struct _dap_sdk_cli_params {
@@ -3428,6 +3429,7 @@ static int s_parse_additional_token_decl_arg(int a_argc, char ** a_argv, char **
     size_t l_tsd_total_size = 0;
     uint16_t l_flags = 0;
     char ** l_str_flags = NULL;
+    a_params->ext.parsed_tsd_size = 0;
 
     if (a_params->ext.flags){   // Flags
          l_str_flags = dap_strsplit(a_params->ext.flags,",",0xffff );
@@ -3492,6 +3494,8 @@ static int s_parse_additional_token_decl_arg(int a_argc, char ** a_argv, char **
     const char* l_remove_signs = NULL;
     dap_cli_server_cmd_find_option_val(a_argv, 0, a_argc, "-new_certs", &l_new_certs_str);
     dap_cli_server_cmd_find_option_val(a_argv, 0, a_argc, "-remove_certs", &l_remove_signs);
+    const char *l_description_token  = NULL;
+    dap_cli_server_cmd_find_option_val(a_argv, 0, a_argc, "-description", &l_description_token);
 
     //Added remove signs
     if (l_remove_signs) {
@@ -3531,6 +3535,13 @@ static int s_parse_additional_token_decl_arg(int a_argc, char ** a_argv, char **
         }
         DAP_DEL_Z(l_new_certs);
     }
+    if (l_description_token) {
+        dap_tsd_t *l_desc_token = dap_tsd_create(DAP_CHAIN_DATUM_TOKEN_TSD_TOKEN_DESCRIPTION, l_description_token,
+                                                 dap_strlen(l_description_token));//dap_tsd_create_string(DAP_CHAIN_DATUM_TOKEN_TSD_TOKEN_DESCRIPTION, l_description_token);
+        l_tsd_list = dap_list_append(l_tsd_list, l_desc_token);
+        l_tsd_total_size += dap_tsd_size(l_desc_token);
+        a_params->ext.parsed_tsd_size += dap_tsd_size(l_desc_token);
+    }
     size_t l_tsd_offset = 0;
     a_params->ext.parsed_tsd = DAP_NEW_SIZE(byte_t, l_tsd_total_size);
     if(l_tsd_total_size && !a_params->ext.parsed_tsd) {
@@ -3581,6 +3592,9 @@ static int s_parse_additional_token_decl_arg(int a_argc, char ** a_argv, char **
                 } else
                     log_it(L_DEBUG,"== total_pkeys_add: <WRONG SIZE %u>", l_tsd->size);
             break;
+            case DAP_CHAIN_DATUM_TOKEN_TSD_TOKEN_DESCRIPTION:
+                log_it(L_DEBUG, "== description: %s", l_tsd->data);
+            break;
             default: log_it(L_DEBUG, "== 0x%04X: binary data %u size ",l_tsd->type, l_tsd->size );
         }
         size_t l_tsd_size = dap_tsd_size(l_tsd);
@@ -3811,9 +3825,12 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply)
             if (l_params->ext.tx_sender_blocked)
                 l_tsd_list = s_parse_wallet_addresses(l_params->ext.tx_sender_blocked, l_tsd_list, &l_tsd_total_size, DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_BLOCKED_ADD);
 
+            if (l_params->ext.parsed_tsd)
+                l_tsd_total_size += l_params->ext.parsed_tsd_size;
+
 
             // Create new datum token
-            l_datum_token = DAP_NEW_Z_SIZE(dap_chain_datum_token_t, sizeof(dap_chain_datum_token_t) + l_params->ext.tsd_total_size);
+            l_datum_token = DAP_NEW_Z_SIZE(dap_chain_datum_token_t, sizeof(dap_chain_datum_token_t) + l_tsd_total_size);
             if (!l_datum_token) {
                 log_it(L_CRITICAL, "Memory allocation error");
                 dap_cli_server_cmd_set_reply_text(a_str_reply, "Out of memory in com_token_decl");
@@ -3824,20 +3841,20 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply)
             l_datum_token->type = l_params->type;
             l_datum_token->subtype = l_params->subtype;
             if (l_params->subtype == DAP_CHAIN_DATUM_TOKEN_SUBTYPE_PRIVATE) {
-                log_it(L_DEBUG,"Prepared TSD sections for private token on %zd total size", l_params->ext.tsd_total_size);
+                log_it(L_DEBUG,"Prepared TSD sections for private token on %zd total size", l_tsd_total_size);
                 snprintf(l_datum_token->ticker, sizeof(l_datum_token->ticker), "%s", l_ticker);
                 l_datum_token->header_private_decl.flags = l_params->ext.parsed_flags;
                 l_datum_token->total_supply = l_total_supply;
                 l_datum_token->signs_valid = l_signs_emission;
-                l_datum_token->header_private_decl.tsd_total_size = l_params->ext.tsd_total_size;
+                l_datum_token->header_private_decl.tsd_total_size = l_tsd_total_size;
                 l_datum_token->header_private_decl.decimals = atoi(l_params->decimals_str);
             } else { //DAP_CHAIN_DATUM_TOKEN_TYPE_NATIVE_DECL
-                log_it(L_DEBUG,"Prepared TSD sections for CF20 token on %zd total size", l_params->ext.tsd_total_size);
+                log_it(L_DEBUG,"Prepared TSD sections for CF20 token on %zd total size", l_tsd_total_size);
                 snprintf(l_datum_token->ticker, sizeof(l_datum_token->ticker), "%s", l_ticker);
                 l_datum_token->header_native_decl.flags = l_params->ext.parsed_flags;
                 l_datum_token->total_supply = l_total_supply;
                 l_datum_token->signs_valid = l_signs_emission;
-                l_datum_token->header_native_decl.tsd_total_size = l_params->ext.tsd_total_size;
+                l_datum_token->header_native_decl.tsd_total_size = l_tsd_total_size;
                 l_datum_token->header_native_decl.decimals = atoi(l_params->decimals_str);
             }
             // Add TSD sections in the end
@@ -3876,6 +3893,13 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply)
                 memcpy(l_datum_token->data_n_tsd + l_datum_data_offset, l_tsd, l_tsd_size);
                 l_datum_data_offset += l_tsd_size;
             }
+            if (l_params->ext.parsed_tsd) {
+                memcpy(l_datum_token->data_n_tsd + l_datum_data_offset,
+                       l_params->ext.parsed_tsd,
+                       l_params->ext.tsd_total_size);
+                l_datum_data_offset += l_params->ext.tsd_total_size;
+                DAP_DELETE(l_params->ext.parsed_tsd);
+            }
             log_it(L_DEBUG, "%s token declaration '%s' initialized", l_params->subtype == DAP_CHAIN_DATUM_TOKEN_SUBTYPE_PRIVATE ?
                             "Private" : "CF20", l_datum_token->ticker);
         }break;//end
@@ -4081,7 +4105,7 @@ int com_token_update(int a_argc, char ** a_argv, char ** a_str_reply)
             // Add TSD sections in the end
             // Add TSD sections in the end
             if (l_params->ext.tsd_total_size) {
-                memcpy(l_datum_token->data_n_tsd, l_params->ext.parsed_tsd, l_params->ext.tsd_total_size);
+                memcpy(l_datum_token->data_n_tsd, l_params->ext.parsed_tsd, l_params->ext.parsed_tsd_size);
                 DAP_DELETE(l_params->ext.parsed_tsd);
             }
             log_it(L_DEBUG, "%s token declaration update '%s' initialized", (	l_params->subtype == DAP_CHAIN_DATUM_TOKEN_SUBTYPE_PRIVATE)	?