diff --git a/dap-sdk/core/include/dap_common.h b/dap-sdk/core/include/dap_common.h
index fdbbfc47941324f7791e12e08ef0a1aa74b97c70..c745691b7d57f58c656dc45ca323c4ac328175e6 100755
--- a/dap-sdk/core/include/dap_common.h
+++ b/dap-sdk/core/include/dap_common.h
@@ -72,6 +72,8 @@ typedef uint8_t byte_t;
 // Extracts a size_t from a pointer
 #define DAP_POINTER_TO_SIZE(p) ((size_t) (p))
 
+#define DAP_END_OF_DAYS 4102444799
+
 #if defined(__GNUC__) ||defined (__clang__)
   #define DAP_ALIGN_PACKED  __attribute__((aligned(1),packed))
 #else
diff --git a/dap-sdk/core/src/dap_common.c b/dap-sdk/core/src/dap_common.c
index d841a31371cbe6d36057afa9f1ecf199850149e7..489a5e1fe503a5ea47b933b9d47f617d5d73ead9 100755
--- a/dap-sdk/core/src/dap_common.c
+++ b/dap-sdk/core/src/dap_common.c
@@ -1068,11 +1068,14 @@ void dap_usleep(time_t a_microseconds)
 
 
 char* dap_ctime_r(time_t *a_time, char* a_buf){
-    struct tm *l_time = localtime(a_time);
-    char *l_str_time = asctime_r(l_time, a_buf);
+    if (*a_time > DAP_END_OF_DAYS) {
+        return "(null)\r\n";
+    }
+    struct tm l_time;
+    localtime_r(a_time, &l_time);
+    char *l_str_time = asctime_r(&l_time, a_buf);
     if (l_str_time)
         return  l_str_time;
     else
-        return "(null)\n";
-//    localtime_r()
+        return "(null)\r\n";
 }
diff --git a/modules/common/dap_chain_datum.c b/modules/common/dap_chain_datum.c
index 0768ef82f4b955c51d1115430dd950d5de0753a7..80fa7d5b110c7edac513d279a9d7f3decb9d5231 100644
--- a/modules/common/dap_chain_datum.c
+++ b/modules/common/dap_chain_datum.c
@@ -31,20 +31,6 @@
 
 #define LOG_TAG "dap_chain_datum"
 
-const char * c_datum_type_str[]={
-    [DAP_CHAIN_DATUM_TX]="DATUM_TX",
-    [DAP_CHAIN_DATUM_TX_REQUEST]="DATUM_TX_REQUEST",
-    [DAP_CHAIN_DATUM_WASM_CODE]="DATUM_WASM_CODE",
-    [DAP_CHAIN_DATUM_WASM_DATA]="DATUM_WASM_DATA",
-    [DAP_CHAIN_DATUM_EVM_CODE]="DATUM_EVM_CODE",
-    [DAP_CHAIN_DATUM_EVM_DATA]="DATUM_EVM_DATA",
-    [DAP_CHAIN_DATUM_CA]="DATUM_CA",
-    [DAP_CHAIN_DATUM_CUSTOM]="DATUM_CUSTOM",
-    [DAP_CHAIN_DATUM_TOKEN_DECL]="DATUM_TOKEN_DECL",
-    [DAP_CHAIN_DATUM_TOKEN_EMISSION]="DATUM_TOKEN_EMISSION",
-    [DAP_CHAIN_DATUM_CUSTOM] = "DAP_CHAIN_DATUM_CUSTOM"
-};
-
 /**
  * @brief dap_chain_datum_create
  * @param a_type_id
diff --git a/modules/common/include/dap_chain_datum.h b/modules/common/include/dap_chain_datum.h
index 162c43ba1f683693debc129b668368ed4e6bf37b..188a5a400d12af00abc5f18910fe6e6da862ac4a 100644
--- a/modules/common/include/dap_chain_datum.h
+++ b/modules/common/include/dap_chain_datum.h
@@ -63,8 +63,31 @@
 
 #define DAP_CHAIN_DATUM_CUSTOM               0xffff
 
-
-extern const char * c_datum_type_str[];
+#define DAP_DATUM_TYPE_STR(t, s)                \
+    switch (t) {                            \
+        case DAP_CHAIN_DATUM_TX:            \
+            s = "DATUM_TX"; break;          \
+        case DAP_CHAIN_DATUM_TX_REQUEST:    \
+            s = "DATUM_WASM_CODE"; break;   \
+        case DAP_CHAIN_DATUM_WASM_CODE:     \
+            s = "DATUM_WASM_CODE"; break;   \
+        case DAP_CHAIN_DATUM_WASM_DATA:     \
+            s = "DATUM_WASM_DATA"; break;   \
+        case DAP_CHAIN_DATUM_EVM_CODE:      \
+            s = "DATUM_EVM_CODE"; break;    \
+        case DAP_CHAIN_DATUM_EVM_DATA:      \
+            s = "DATUM_EVM_DATA"; break;    \
+        case DAP_CHAIN_DATUM_CA:            \
+            s = "DATUM_CA"; break;          \
+        case DAP_CHAIN_DATUM_CUSTOM:        \
+            s = "DATUM_CUSTOM"; break;      \
+        case DAP_CHAIN_DATUM_TOKEN_DECL:    \
+            s = "DATUM_TOKEN_DECL"; break;  \
+        case DAP_CHAIN_DATUM_TOKEN_EMISSION:\
+            s = "DATUM_TOKEN_EMISSION"; break;\
+        default:                            \
+            s = "DATUM_UNKNOWN"; break;     \
+}
 
 #define DAP_CHAIN_DATUM_ID_SIZE 2
 
@@ -109,29 +132,6 @@ typedef dap_chain_datum_t* (*dap_chain_datum_callback_iter_get_first_t)(dap_chai
 typedef dap_chain_datum_t* (*dap_chain_datum_callback_iter_get_next_t)(dap_chain_datum_iter_t *  );
 typedef void (*dap_chain_datum_callback_iter_delete_t)(dap_chain_datum_iter_t *  );
 
-/**
- * @brief dap_chain_datum_typeid_to_str
- * @param a_type_id
- * @return
- */
-static inline const char * dap_chain_datum_type_id_to_str(uint16_t a_type_id){
-    switch ( a_type_id ){
-        case DAP_CHAIN_DATUM_TX:
-        case DAP_CHAIN_DATUM_TX_REQUEST:
-        case DAP_CHAIN_DATUM_WASM_CODE:
-        case DAP_CHAIN_DATUM_WASM_DATA:
-        case DAP_CHAIN_DATUM_EVM_CODE:
-        case DAP_CHAIN_DATUM_EVM_DATA:
-        case DAP_CHAIN_DATUM_CA:
-        case DAP_CHAIN_DATUM_TOKEN_DECL:
-        case DAP_CHAIN_DATUM_TOKEN_EMISSION:
-	case DAP_CHAIN_DATUM_TOKEN_DISMISSAL:
-        case DAP_CHAIN_DATUM_CUSTOM:
-            return c_datum_type_str[a_type_id];
-        default:
-            return "(wrong datum type id)";
-    }
-}
 
 /**
  * @brief dap_chain_datum_size
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 258e8f8fb2fe22f43699cc1b4744a48c23b4a32c..46f637ca35f87e6d02d231d2ccacc08730b1ca5f 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -2151,10 +2151,12 @@ void dap_chain_net_proc_mempool (dap_chain_net_t * a_net)
                 }else{
                     l_datums[i] = l_datum;
                     if(i < l_objs_size_tmp) {
-                        char buf[50];
+                        char buf[50] = { '\0' };
+                        const char *l_type = NULL;
+                        DAP_DATUM_TYPE_STR(l_datum->header.type_id, l_type)
                         time_t l_ts_create = (time_t) l_datum->header.ts_create;
                         log_it(L_INFO, "\t\t0x%s: type_id=%s ts_create=%s data_size=%u",
-                                l_objs[i].key, c_datum_type_str[l_datum->header.type_id],
+                                l_objs[i].key, l_type,
                                 dap_ctime_r(&l_ts_create, buf), l_datum->header.data_size);
                     }
                 }
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index c1fd94f152e049956d45446ca7ebdf3144e4d467..aaf69fdca92942daa3268b652a89ad0c699e4c1d 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -1713,13 +1713,13 @@ int com_tx_wallet(int argc, char ** argv, void *arg_func, char **str_reply)
             if(l_addr_tokens_size > 0)
                 dap_string_append_printf(l_string_ret, "balance:\n");
             else
-                dap_string_append_printf(l_string_ret, "balance:\u00a00");
+                dap_string_append_printf(l_string_ret, "balance:\xA0""0");
             for(size_t i = 0; i < l_addr_tokens_size; i++) {
                 if(l_addr_tokens[i]) {
                     uint128_t l_balance = dap_chain_ledger_calc_balance(l_ledger, l_addr, l_addr_tokens[i]);
                     char *l_balance_coins = dap_chain_balance_to_coins(l_balance);
                     char *l_balance_datoshi = dap_chain_balance_print(l_balance);
-                    dap_string_append_printf(l_string_ret, "\t\u00a0%s (%s) %s", l_balance_coins,
+                    dap_string_append_printf(l_string_ret, "\t\xA0""%s (%s) %s", l_balance_coins,
                             l_balance_datoshi, l_addr_tokens[i]);
                     if(i < l_addr_tokens_size - 1)
                         dap_string_append_printf(l_string_ret, "\n");
@@ -2053,22 +2053,22 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
         for(size_t i = 0; i < l_objs_size; i++) {
             dap_chain_datum_t * l_datum = (dap_chain_datum_t*) l_objs[i].value;
             time_t l_ts_create = (time_t) l_datum->header.ts_create;
-            if (l_datum->header.data_size > l_objs[i].value_len) {
-                log_it(L_ERROR, "Trash datum in GDB %s.%s, key: %s", a_net->pub.name, a_chain->name, l_objs[i].key);
+            if (!l_datum->header.data_size || (l_datum->header.data_size > l_objs[i].value_len)) {
+                //log_it(L_ERROR, "Trash datum in GDB %s.%s, key: %s", a_net->pub.name, a_chain->name, l_objs[i].key);
                 continue;
             }
-            char buf[50];
+            char buf[50] = {[0]='\0'};
             dap_hash_fast_t l_data_hash;
-            char l_data_hash_str[70]={[0]='\0'};
+            char l_data_hash_str[70] = {[0]='\0'};
             dap_hash_fast(l_datum->data,l_datum->header.data_size,&l_data_hash);
             dap_hash_fast_to_str(&l_data_hash,l_data_hash_str,sizeof (l_data_hash_str)-1);
-
+            const char *l_type = NULL;
+            DAP_DATUM_TYPE_STR(l_datum->header.type_id, l_type)
             dap_string_append_printf(a_str_tmp, "hash %s: type_id=%s  data_size=%u data_hash=%s ts_create=%s", // \n included in timestamp
-                    l_objs[i].key, c_datum_type_str[l_datum->header.type_id],
+                    l_objs[i].key, l_type,
                     l_datum->header.data_size, l_data_hash_str, dap_ctime_r(&l_ts_create, buf));
             dap_chain_net_dump_datum(a_str_tmp, l_datum, a_hash_out_type);
         }
-
         dap_chain_global_db_objs_delete(l_objs, l_objs_size);
     }
 
@@ -2277,8 +2277,10 @@ int com_mempool_proc(int argc, char ** argv, void *arg_func, char ** a_str_reply
             if(l_datum) {
                 char buf[50];
                 time_t l_ts_create = (time_t) l_datum->header.ts_create;
+                const char *l_type = NULL;
+                DATUM_TYPE_STR(l_datum->header.type_id, l_type)
                 dap_string_append_printf(l_str_tmp, "hash %s: type_id=%s ts_create=%s data_size=%u\n",
-                        l_datum_hash_out_str, c_datum_type_str[l_datum->header.type_id],
+                        l_datum_hash_out_str, l_type,
                         dap_ctime_r(&l_ts_create, buf), l_datum->header.data_size);
                 int l_verify_datum= dap_chain_net_verify_datum_for_add( l_net, l_datum) ;
                 if (l_verify_datum != 0){
diff --git a/modules/net/srv/dap_chain_net_srv_order.c b/modules/net/srv/dap_chain_net_srv_order.c
index db2c45a75de7b2c17b3ea6dcbe3690c5f2c476ee..a5e1499e1bc0f2922a0cff4aa530aa1223cfd84a 100644
--- a/modules/net/srv/dap_chain_net_srv_order.c
+++ b/modules/net/srv/dap_chain_net_srv_order.c
@@ -470,7 +470,7 @@ void dap_chain_net_srv_order_dump_to_string(dap_chain_net_srv_order_t *a_order,d
         }
 
         dap_string_append_printf(a_str_out, "  srv_uid:          0x%016llX\n", a_order->srv_uid.uint64 );
-        dap_string_append_printf(a_str_out, "  price:           \u00a0%.7Lf (%llu)\n", dap_chain_datoshi_to_coins(a_order->price) , a_order->price);
+        dap_string_append_printf(a_str_out, "  price:           \xA0""%.7Lf (%llu)\n", dap_chain_datoshi_to_coins(a_order->price) , a_order->price);
         if( a_order->price_unit.uint32 )
             dap_string_append_printf(a_str_out, "  price_unit:       %s\n", dap_chain_net_srv_price_unit_uid_to_str(a_order->price_unit) );
         if ( a_order->node_addr.uint64)
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index f92184c08e26d465ebbeaf1683337207a84acc36..4083a15849b7f202a143b99564ad05ca7ffeb7e0 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -1509,9 +1509,11 @@ static int s_cli_dag(int argc, char ** argv, void *arg_func, char **a_str_reply)
                     time_t l_datum_ts_create = (time_t) l_datum->header.ts_create;
 
                     // Nested datum
+                    const char *l_datum_type = NULL;
+                    DAP_DATUM_TYPE_STR(l_datum->header.type_id, l_datum_type)
                     dap_string_append_printf(l_str_tmp,"\t\t\t\tdatum:\tdatum_size: %u\n",l_datum_size);
                     dap_string_append_printf(l_str_tmp,"\t\t\t\t\t\tversion:=0x%02X\n", l_datum->header.version_id);
-                    dap_string_append_printf(l_str_tmp,"\t\t\t\t\t\ttype_id:=%s\n", c_datum_type_str[l_datum->header.type_id]);
+                    dap_string_append_printf(l_str_tmp,"\t\t\t\t\t\ttype_id:=%s\n", l_datum_type);
                     dap_string_append_printf(l_str_tmp,"\t\t\t\t\t\tts_create=%s\n", dap_ctime_r( &l_datum_ts_create,buf ));
                     dap_string_append_printf(l_str_tmp,"\t\t\t\t\t\tdata_size=%u\n", l_datum->header.data_size);