diff --git a/dap-sdk/core/include/dap_math_ops.h b/dap-sdk/core/include/dap_math_ops.h
index b7bd03b4b92c4d74ddcb833184e97b19137e8a12..bd75c7acc2f7cf9769a85468aa193e59f65b037d 100755
--- a/dap-sdk/core/include/dap_math_ops.h
+++ b/dap-sdk/core/include/dap_math_ops.h
@@ -18,13 +18,22 @@ typedef __int128 int128_t;
 typedef unsigned __int128 uint128_t;
 #endif
 
-
 #else // __SIZEOF_INT128__ == 16
+
 typedef union uint128 {
-    uint64_t u64[2];
-    uint32_t u32[4];
+    struct{
+         uint64_t lo;
+         uint64_t hi;
+    } DAP_ALIGN_PACKED;
+    struct{
+        uint32_t c;
+        uint32_t d;
+        uint32_t a;
+        uint32_t b;
+    } DAP_ALIGN_PACKED u32;
 } uint128_t;
 
+
 typedef union int128 {
     int64_t i64[2];
     int32_t i32[4];
@@ -40,4 +49,3 @@ uint128_t dap_uint128_substract(uint128_t a, uint128_t b);
 uint128_t dap_uint128_add(uint128_t a, uint128_t b);
 bool dap_uint128_check_equal(uint128_t a, uint128_t b);
 
-
diff --git a/dap-sdk/core/src/dap_math_ops.c b/dap-sdk/core/src/dap_math_ops.c
index 502d7ecb60a71c242b8d3be79fd396d683baa5b8..ff70f40e8549d3d708b95405b0baba4321efafd7 100644
--- a/dap-sdk/core/src/dap_math_ops.c
+++ b/dap-sdk/core/src/dap_math_ops.c
@@ -39,14 +39,14 @@ uint128_t dap_uint128_substract(uint128_t a, uint128_t b)
     return a - b;
 #else
     uint128_t l_ret = {};
-    if (a.u64[0] < b.u64[0] || (a.u64[0] == b.u64[0] && a.u64[1] < b.u64[1])) {
+    if (a.hi < b.hi || (a.hi == b.hi && a.lo < b.lo)) {
         log_it(L_WARNING, "Substract result overflow");
         return l_ret;
     }
-    l_ret.u64[0] = a.u64[0] - b.u64[0];
-    l_ret.u64[1] = a.u64[1] - b.u64[1];
-    if (a.u64[1] < b.u64[1])
-        l_ret.u64[0]--;
+    l_ret.hi = a.hi - b.hi;
+    l_ret.lo = a.lo - b.lo;
+    if (a.lo < b.lo)
+        l_ret.hi--;
     return l_ret;
 #endif
 }
@@ -67,11 +67,11 @@ uint128_t dap_uint128_add(uint128_t a, uint128_t b)
     }
 #else
     uint128_t l_ret = {};
-    l_ret.u64[0] = a.u64[0] + b.u64[0];
-    l_ret.u64[1] = a.u64[1] + b.u64[1];
-    if (l_ret.u64[1] < a.u64[1] || l_ret.u64[1] < b.u64[1])
-        l_ret.u64[0]++;
-    if (l_ret.u64[0] < a.u64[0] || l_ret.u64[0] < b.u64[0]) {
+    l_ret.hi = a.hi + b.hi;
+    l_ret.lo = a.lo + b.lo;
+    if (l_ret.lo < a.lo || l_ret.lo < b.lo)
+        l_ret.hi++;
+    if (l_ret.hi < a.hi || l_ret.hi < b.hi) {
         log_it(L_WARNING, "Sum result overflow");
         uint128_t l_nul = {};
         return l_nul;
@@ -91,7 +91,7 @@ bool dap_uint128_check_equal(uint128_t a, uint128_t b)
 #ifdef DAP_GLOBAL_IS_INT128
     return a == b;
 #else
-    return a.u64[0]==b.u64[0] && a.u64[1]==b.u64[1];
+    return a.hi==b.hi && a.lo==b.lo;
 #endif
 
 }
diff --git a/dap-sdk/net/stream/stream/include/dap_stream.h b/dap-sdk/net/stream/stream/include/dap_stream.h
index baa5a86ba0f68b3856418e377c545148eb4ab29f..b6685a93c473da560e390b0bee0ec031698962a9 100644
--- a/dap-sdk/net/stream/stream/include/dap_stream.h
+++ b/dap-sdk/net/stream/stream/include/dap_stream.h
@@ -53,7 +53,8 @@ typedef struct dap_stream {
     int id;
     dap_stream_session_t * session;
     dap_events_socket_t * esocket; // Connection
-    uint128_t esocket_uuid;
+    // uint128_t esocket_uuid;
+    uint64_t esocket_uuid;
     dap_stream_worker_t * stream_worker;
     struct dap_http_client * conn_http; // HTTP-specific
 
diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c
index 792a6d978297f494055b52d0404ae9e243ea8518..b6150a0e5e2ca7af04fa048be2b0a9ac224789a3 100644
--- a/modules/chain/dap_chain_ledger.c
+++ b/modules/chain/dap_chain_ledger.c
@@ -2621,8 +2621,8 @@ uint128_t dap_chain_ledger_calc_balance(dap_ledger_t *a_ledger, const dap_chain_
     pthread_rwlock_unlock(&PVT(a_ledger)->balance_accounts_rwlock);
     if (l_balance_item) {
         if(s_debug_more)
-            log_it (L_INFO,"Found address in cache with balance %"DAP_UINT64_FORMAT_U"",
-                            dap_chain_uint128_to(l_balance_item->balance));
+            log_it (L_INFO,"Found address in cache with balance %s",
+                            dap_chain_balance_print(l_balance_item->balance));
         l_ret = l_balance_item->balance;
     } else {
         if (s_debug_more)
diff --git a/modules/common/dap_chain_common.c b/modules/common/dap_chain_common.c
index 3189c9ec51e390b3fe0ae5c596c51b256626d4df..d10e19b974ab94ef3718ca3128b1f183dfba843b 100644
--- a/modules/common/dap_chain_common.c
+++ b/modules/common/dap_chain_common.c
@@ -290,10 +290,10 @@ uint64_t dap_chain_uint128_to(uint128_t a_from)
     }
     return (uint64_t)a_from;
 #else
-    if (a_from.u64[0]) {
+    if (a_from.hi) {
         log_it(L_ERROR, "Can't convert balance to uint64_t. It's too big.");
     }
-    return a_from.u64[1];
+    return a_from.lo;
 #endif
 }
 
@@ -308,21 +308,22 @@ char *dap_chain_balance_print(uint128_t a_balance)
         l_value /= 10;
     } while (l_value);
 #else
+    uint32_t l_tmp[4] = {l_value.u32.a, l_value.u32.b, l_value.u32.c, l_value.u32.d};
     uint64_t t, q;
     do {
         q = 0;
         // Byte order is 1, 0, 3, 2 for little endian
         for (int i = 1; i <= 3; ) {
-            t = q << 32 | l_value.u32[i];
+            t = q << 32 | l_tmp[i];
             q = t % 10;
-            l_value.u32[i] = t / 10;
+            l_tmp[i] = t / 10;
             if (i == 2) i = 4; // end of cycle
             if (i == 3) i = 2;
             if (i == 0) i = 3;
             if (i == 1) i = 0;
         }
         l_buf[l_pos++] = q + '0';
-    } while (l_value.u32[2]);
+    } while (l_tmp[2]);
 #endif
     int l_strlen = strlen(l_buf) - 1;
     for (int i = 0; i < (l_strlen + 1) / 2; i++) {
@@ -426,30 +427,30 @@ uint128_t dap_chain_balance_scan(char *a_balance)
             return l_nul;
 #else
         uint128_t l_tmp;
-        l_tmp.u64[0] = 0;
-        l_tmp.u64[1] = c_pow10[i].u32[2] * l_digit;
+        l_tmp.hi = 0;
+        l_tmp.lo = c_pow10[i].u32[2] * l_digit;
         l_ret = dap_uint128_add(l_ret, l_tmp);
-        if (l_ret.u64[0] == 0 && l_ret.u64[1] == 0)
+        if (l_ret.hi == 0 && l_ret.lo == 0)
             return l_nul;
         uint64_t l_mul = c_pow10[i].u32[3] * l_digit;
-        l_tmp.u64[1] = l_mul << 32;
-        l_tmp.u64[0] = l_mul >> 32;
+        l_tmp.lo = l_mul << 32;
+        l_tmp.hi = l_mul >> 32;
         l_ret = dap_uint128_add(l_ret, l_tmp);
-        if (l_ret.u64[0] == 0 && l_ret.u64[1] == 0)
+        if (l_ret.hi == 0 && l_ret.lo == 0)
             return l_nul;
-        l_tmp.u64[1] = 0;
-        l_tmp.u64[0] = c_pow10[i].u32[0] * l_digit;
+        l_tmp.lo = 0;
+        l_tmp.hi = c_pow10[i].u32[0] * l_digit;
         l_ret = dap_uint128_add(l_ret, l_tmp);
-        if (l_ret.u64[0] == 0 && l_ret.u64[1] == 0)
+        if (l_ret.hi == 0 && l_ret.lo == 0)
             return l_nul;
         l_mul = c_pow10[i].u32[1] * l_digit;
         if (l_mul >> 32) {
             log_it(L_WARNING, "Input number is too big");
             return l_nul;
         }
-        l_tmp.u64[0] = l_mul << 32;
+        l_tmp.hi = l_mul << 32;
         l_ret = dap_uint128_add(l_ret, l_tmp);
-        if (l_ret.u64[0] == 0 && l_ret.u64[1] == 0)
+        if (l_ret.hi == 0 && l_ret.lo == 0)
             return l_nul;
 #endif
     }
diff --git a/modules/common/include/dap_chain_common.h b/modules/common/include/dap_chain_common.h
index 3a6f8fb209fadcb90199ea01ec90876f1a199962..2d1e24def5b95443da24da1acac4515c6b6cb71f 100644
--- a/modules/common/include/dap_chain_common.h
+++ b/modules/common/include/dap_chain_common.h
@@ -247,7 +247,8 @@ DAP_STATIC_INLINE uint128_t dap_chain_uint128_from(uint64_t a_from)
 #ifdef DAP_GLOBAL_IS_INT128
     return (uint128_t)a_from;
 #else
-    uint128_t l_ret = { .u64 = {0, a_from} };
+    // uint128_t l_ret = { .u64 = {0, a_from} };
+    uint128_t l_ret = { .hi=0, .lo=a_from };
     return l_ret;
 #endif
 }
diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c
index b2e69b18ba1a486b287f9fa4006f80fb4882e373..e19b286d93ae76b7eb5313f30a3c2c7a81dab956 100644
--- a/modules/net/dap_chain_node_cli_cmd_tx.c
+++ b/modules/net/dap_chain_node_cli_cmd_tx.c
@@ -805,8 +805,9 @@ static char* dap_db_history_token_list(dap_chain_t * a_chain, const char *a_toke
                 case DAP_CHAIN_DATUM_TOKEN_TYPE_PUBLIC: {
                     char *l_addr = dap_chain_addr_to_str(&l_token->header_public.premine_address);
                     dap_string_append_printf(l_str_out,
-                            " total_supply: %.0Lf(%s), flags: 0x%x\n, premine_supply: %s, premine_address '%s'\n",
-                            l_token->header_public.total_supply / DATOSHI_LD,
+                            " total_supply: %s(%s), flags: 0x%x\n, premine_supply: %s, premine_address '%s'\n",
+                            // l_token->header_public.total_supply / DATOSHI_LD,
+                            dap_chain_balance_to_coins(l_token->header_public.total_supply),
                             dap_chain_balance_print(l_token->header_public.total_supply),
                             l_token->header_public.flags,
                             dap_chain_balance_print(l_token->header_public.premine_supply),
@@ -936,8 +937,9 @@ static char* dap_db_history_filter(dap_chain_t * a_chain, dap_ledger_t *a_ledger
                 case DAP_CHAIN_DATUM_TOKEN_TYPE_PUBLIC: {
                     char *l_addr = dap_chain_addr_to_str(&l_token->header_public.premine_address);
                     dap_string_append_printf(l_str_out,
-                            " total_supply: %.0Lf(%s), flags: 0x%x\n, premine_supply: %s, premine_address '%s'\n",
-                            l_token->header_public.total_supply / DATOSHI_LD,
+                            " total_supply: %s(%s), flags: 0x%x\n, premine_supply: %s, premine_address '%s'\n",
+                            //l_token->header_public.total_supply / DATOSHI_LD,
+                            dap_chain_balance_to_coins(l_token->header_public.total_supply),
                             dap_chain_balance_print(l_token->header_public.total_supply),
                             l_token->header_public.flags,
                             dap_chain_balance_print(l_token->header_public.premine_supply),