diff --git a/Cargo.lock b/Cargo.lock
index 7cff9c862c22dce6039af495a61b6b1efa348d2d..38568e10ff12c700a107533504b460a10fd89b39 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1,5 +1,7 @@
 # This file is automatically @generated by Cargo.
 # It is not intended for manual editing.
+version = 3
+
 [[package]]
 name = "aho-corasick"
 version = "0.7.15"
@@ -688,8 +690,7 @@ checksum = "4bb454f0228b18c7f4c3b0ebbee346ed9c52e7443b0999cd543ff3571205701d"
 [[package]]
 name = "dubp"
 version = "0.58.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "429ad631310968b6f0ef8b0621ff685ff03a1f69304174c7d8e7dbed47ec68aa"
+source = "git+https://git.duniter.org/libs/dubp-rs-libs#f4116b8d2b32ca7ad4e25100a2f5edd7da58edc6"
 dependencies = [
  "dubp-block",
  "dubp-common",
@@ -704,8 +705,7 @@ dependencies = [
 [[package]]
 name = "dubp-block"
 version = "0.58.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8481be98e093e9f599ef685f8b2880ac273145ce4b12bae45a6fe28b158acb38"
+source = "git+https://git.duniter.org/libs/dubp-rs-libs#f4116b8d2b32ca7ad4e25100a2f5edd7da58edc6"
 dependencies = [
  "dubp-documents",
  "dubp-documents-parser",
@@ -719,8 +719,7 @@ dependencies = [
 [[package]]
 name = "dubp-common"
 version = "0.58.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab01b4870cd960917b638dfd951996dcb19850fdc9868a46d81c7a48c1882f2a"
+source = "git+https://git.duniter.org/libs/dubp-rs-libs#f4116b8d2b32ca7ad4e25100a2f5edd7da58edc6"
 dependencies = [
  "dup-crypto",
  "serde",
@@ -732,8 +731,7 @@ dependencies = [
 [[package]]
 name = "dubp-documents"
 version = "0.58.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38c2667a2c02b657ecce47a2f8d421ddd8f193a77277518aa74585bd42303246"
+source = "git+https://git.duniter.org/libs/dubp-rs-libs#f4116b8d2b32ca7ad4e25100a2f5edd7da58edc6"
 dependencies = [
  "beef",
  "dubp-wallet",
@@ -746,8 +744,7 @@ dependencies = [
 [[package]]
 name = "dubp-documents-parser"
 version = "0.58.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9597df5d36e1e269802341908d8970d58ccde6162b402748f8b8b1bd50c1bec6"
+source = "git+https://git.duniter.org/libs/dubp-rs-libs#f4116b8d2b32ca7ad4e25100a2f5edd7da58edc6"
 dependencies = [
  "dubp-documents",
  "json-pest-parser",
@@ -760,8 +757,7 @@ dependencies = [
 [[package]]
 name = "dubp-wallet"
 version = "0.58.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d044529bbf5928e9519b9040516365e6e20f2d65f8c8e565930f5561b8ff0126"
+source = "git+https://git.duniter.org/libs/dubp-rs-libs#f4116b8d2b32ca7ad4e25100a2f5edd7da58edc6"
 dependencies = [
  "byteorder",
  "dubp-common",
@@ -797,8 +793,7 @@ dependencies = [
 [[package]]
 name = "duniter-bda-types"
 version = "0.58.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a04e49bc24390430f986d07c43a5cafd431ded3954d31d554efd6c34b77c2788"
+source = "git+https://git.duniter.org/libs/dubp-rs-libs#f4116b8d2b32ca7ad4e25100a2f5edd7da58edc6"
 dependencies = [
  "arrayvec 0.7.0",
  "bincode",
@@ -930,8 +925,7 @@ dependencies = [
 [[package]]
 name = "duniter-peer"
 version = "0.58.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "952ebba568abb1a8a1a7f83ff960a88b4c1de9cd29c74c6885ecc83ca56cccaf"
+source = "git+https://git.duniter.org/libs/dubp-rs-libs#f4116b8d2b32ca7ad4e25100a2f5edd7da58edc6"
 dependencies = [
  "beef",
  "dubp-common",
@@ -945,8 +939,7 @@ dependencies = [
 [[package]]
 name = "dup-crypto"
 version = "0.58.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f74bc2e8282dd156cd62e54686bc77a22dbaa711facac93b27d6f2c72ff5d07a"
+source = "git+https://git.duniter.org/libs/dubp-rs-libs#f4116b8d2b32ca7ad4e25100a2f5edd7da58edc6"
 dependencies = [
  "base64",
  "blake3",
diff --git a/Cargo.toml b/Cargo.toml
index fe568a64d5808253b9241a9e80429c36db7d79de..f450f21a77dbac6fe5867e0b522ccd56b66ca4d5 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -43,7 +43,7 @@ members = [
 ]
 
 [patch.crates-io]
-#dubp = { git = "https://git.duniter.org/libs/dubp-rs-libs" }
+dubp = { git = "https://git.duniter.org/libs/dubp-rs-libs" }
 
 #dubp = { path = "../dubp-rs-libs" }
 
diff --git a/dbs/src/values/utxo.rs b/dbs/src/values/utxo.rs
index 2c8bb4b50d200a6682e5c58668d5eaf601a1d18a..41647070f0a43260752f070f6f6bbcf799826678 100644
--- a/dbs/src/values/utxo.rs
+++ b/dbs/src/values/utxo.rs
@@ -17,7 +17,16 @@ use crate::*;
 use std::{collections::HashMap, ops::Deref};
 
 #[derive(
-    Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd, zerocopy::AsBytes, zerocopy::FromBytes,
+    Clone,
+    Copy,
+    Debug,
+    Eq,
+    Ord,
+    PartialEq,
+    PartialOrd,
+    zerocopy::AsBytes,
+    zerocopy::FromBytes,
+    zerocopy::Unaligned,
 )]
 #[repr(transparent)]
 pub struct UtxoValV2([u8; 52]); // 16(SourceAmount) + 32(Hash) + 4(u32)
diff --git a/tools/kv_typed/src/from_bytes.rs b/tools/kv_typed/src/from_bytes.rs
index 1646e7b1b7282068c8820d877e65fd22620ea1a9..00d2a519f18a6564497b98e2ff03e21338f7dd89 100644
--- a/tools/kv_typed/src/from_bytes.rs
+++ b/tools/kv_typed/src/from_bytes.rs
@@ -96,7 +96,7 @@ where
 
 impl<T> FromBytes for BTreeSet<T>
 where
-    T: Copy + zerocopy::FromBytes + Ord,
+    T: Copy + zerocopy::FromBytes + Ord + zerocopy::Unaligned,
 {
     type Err = LayoutVerifiedErr;
 
@@ -104,7 +104,7 @@ where
         if bytes.is_empty() {
             Ok(Self::new())
         } else {
-            let layout_verified = zerocopy::LayoutVerified::<_, [T]>::new_slice(bytes)
+            let layout_verified = zerocopy::LayoutVerified::<_, [T]>::new_slice_unaligned(bytes)
                 .ok_or(LayoutVerifiedErr(stringify!(BTreeSet<T>)))?;
             let slice = layout_verified.into_slice();
             Ok(slice.iter().copied().collect())
@@ -145,8 +145,24 @@ mod tests {
     #[test]
     fn test_btreeset_from_bytes() -> Result<(), LayoutVerifiedErr> {
         assert_eq!(
-            <BTreeSet<u64> as FromBytes>::from_bytes(&[])?,
-            BTreeSet::<u64>::new()
+            <BTreeSet<U64UBE> as FromBytes>::from_bytes(&[])?,
+            BTreeSet::<U64UBE>::new()
+        );
+        assert_eq!(
+            <BTreeSet<U64UBE> as FromBytes>::from_bytes(&<BTreeSet<U64UBE> as AsBytes>::as_bytes(
+                &BTreeSet::<U64UBE>::new(),
+                |b| b.to_vec()
+            ))?,
+            BTreeSet::<U64UBE>::new()
+        );
+        let mut my_btreeset = BTreeSet::<U64UBE>::new();
+        my_btreeset.insert(U64UBE::new(5));
+        assert_eq!(
+            <BTreeSet<U64UBE> as FromBytes>::from_bytes(&<BTreeSet<U64UBE> as AsBytes>::as_bytes(
+                &my_btreeset,
+                |b| b.to_vec()
+            ))?,
+            my_btreeset
         );
         Ok(())
     }
diff --git a/tools/kv_typed/src/lib.rs b/tools/kv_typed/src/lib.rs
index 729b5c0f047258f390d288011947cf2df6e51acf..9fed020251ce94ba50f63bb721f5e9dc8b7946ca 100644
--- a/tools/kv_typed/src/lib.rs
+++ b/tools/kv_typed/src/lib.rs
@@ -91,6 +91,7 @@ pub mod prelude {
     pub use crate::transactional_read::{TransactionalRead, TxColRo};
     pub use crate::transactional_write::{DbTxCollectionRw, TransactionalWrite, TxColRw};
     pub use crate::utils::arc::Arc;
+    pub use crate::utils::{U128UBE, U64UBE};
     pub use crate::value::{Value, ValueSliceZc, ValueZc};
     pub use crate::OwnedOrRef;
 }
diff --git a/tools/kv_typed/src/utils.rs b/tools/kv_typed/src/utils.rs
index 68bd74c49c3a93239ea3bb150c947044037b820e..8e50f212782e6df7ad779a42a4d74d69a051761c 100644
--- a/tools/kv_typed/src/utils.rs
+++ b/tools/kv_typed/src/utils.rs
@@ -15,6 +15,11 @@
 
 //! KV Typed utils
 
+use std::{
+    cmp::{Eq, Ord, Ordering, PartialEq, PartialOrd},
+    convert::From,
+};
+
 pub mod arc;
 #[cfg(not(feature = "sled_backend"))]
 pub mod ivec;
@@ -22,3 +27,80 @@ pub mod ivec;
 pub mod ivec {
     pub use sled::IVec;
 }
+
+macro_rules! num_unaligned {
+    (
+        $Wrapper:ident,
+        $Inner:ident,
+        $Std:ident
+    ) => {
+        #[derive(
+            zerocopy::Unaligned,
+            PartialEq,
+            Eq,
+            Hash,
+            Debug,
+            Copy,
+            Clone,
+            zerocopy::FromBytes,
+            zerocopy::AsBytes,
+            Default,
+        )]
+        #[repr(transparent)]
+        pub struct $Wrapper(pub zerocopy::byteorder::$Inner<byteorder::BE>);
+
+        impl PartialOrd<$Wrapper> for $Wrapper {
+            fn partial_cmp(&self, other: &$Wrapper) -> Option<Ordering> {
+                self.0.get().partial_cmp(&other.0.get())
+            }
+        }
+
+        impl Ord for $Wrapper {
+            fn cmp(&self, other: &$Wrapper) -> Ordering {
+                self.0.get().cmp(&other.0.get())
+            }
+        }
+
+        impl PartialEq<$Std> for $Wrapper {
+            fn eq(&self, other: &$Std) -> bool {
+                self.0.get().eq(other)
+            }
+        }
+
+        impl From<$Std> for $Wrapper {
+            fn from(v: $Std) -> Self {
+                Self(zerocopy::byteorder::$Inner::new(v))
+            }
+        }
+
+        impl std::fmt::Display for $Wrapper {
+            fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+                self.0.fmt(f)
+            }
+        }
+
+        impl std::str::FromStr for $Wrapper {
+            type Err = std::num::ParseIntError;
+            fn from_str(s: &str) -> Result<Self, Self::Err> {
+                $Std::from_str(s).map(Self::new)
+            }
+        }
+
+        impl $Wrapper {
+            pub fn new(v: $Std) -> Self {
+                Self(zerocopy::byteorder::$Inner::new(v))
+            }
+        }
+
+        impl From<$Wrapper> for $Std {
+            fn from(v: $Wrapper) -> Self {
+                v.0.get()
+            }
+        }
+    };
+}
+
+num_unaligned! {U128UBE, U128, u128}
+num_unaligned! {U64UBE, U64, u64}
+num_unaligned! {U32UBE, U32, u32}
+num_unaligned! {U16UBE, U16, u16}
diff --git a/tools/kv_typed/src/value.rs b/tools/kv_typed/src/value.rs
index ec71f8da518204e5a61d37d7b6a9d92a9f639967..3de15cdf9ee280bd307fb025364a5e852aee92b7 100644
--- a/tools/kv_typed/src/value.rs
+++ b/tools/kv_typed/src/value.rs
@@ -144,7 +144,8 @@ where
         + Sized
         + Sync
         + zerocopy::AsBytes
-        + zerocopy::FromBytes,
+        + zerocopy::FromBytes
+        + zerocopy::Unaligned,
     E: Error + Send + Sync + 'static,
 {
     type Elem = T;
diff --git a/tools/kv_typed/tests/test_db_schema.rs b/tools/kv_typed/tests/test_db_schema.rs
index dead76e10825e0992a0081bac6a1700171274824..a99163851782ff10cd1ec48ae387e9e86b6cbb5b 100644
--- a/tools/kv_typed/tests/test_db_schema.rs
+++ b/tools/kv_typed/tests/test_db_schema.rs
@@ -8,7 +8,7 @@ db_schema!(
         ["c1", Col1, i32, String],
         ["c2", Col2, usize, ()],
         ["c3", Col3, U32BE, Vec<u128>],
-        ["c4", Col4, U64BE, BTreeSet<u128>],
+        ["c4", Col4, U64BE, BTreeSet<U128UBE>],
     ]
 );
 
@@ -24,7 +24,7 @@ fn test_macro_db() {
                 ("col1", "i32", "String"),
                 ("col2", "usize", "()"),
                 ("col3", "U32BE", "Vec<u128>"),
-                ("col4", "U64BE", "BTreeSet<u128>")
+                ("col4", "U64BE", "BTreeSet<U128UBE>")
             ]
         );
     }
@@ -118,11 +118,13 @@ fn test_db<B: Backend>(db: &TestV1Db<B>) -> KvResult<()> {
     // Test get_ref_slice
     db.col4_write().upsert(U64BE(3), BTreeSet::new())?;
     db.col4().get_ref_slice(&U64BE(3), |numbers| {
-        assert_eq!(numbers, &[]);
+        assert_eq!(numbers, &[] as &[U128UBE]);
         Ok(())
     })?;
-    db.col4_write()
-        .upsert(U64BE(4), (&[3, 2, 4, 1]).iter().copied().collect())?;
+    db.col4_write().upsert(
+        U64BE(4),
+        (&[3, 2, 4, 1]).iter().map(|&i| U128UBE::new(i)).collect(),
+    )?;
     db.col4().get_ref_slice(&U64BE(4), |numbers| {
         assert_eq!(numbers, &[1, 2, 3, 4]);
         Ok(())
@@ -197,7 +199,10 @@ fn test_db<B: Backend>(db: &TestV1Db<B>) -> KvResult<()> {
 
                 Ok::<(), KvError>(())
             })?;
-            c4.upsert(U64BE(4), (&[7, 8, 6, 5]).iter().copied().collect());
+            c4.upsert(
+                U64BE(4),
+                (&[7, 8, 6, 5]).iter().map(|&i| U128UBE::new(i)).collect(),
+            );
             Ok(())
         });
     tres?;
@@ -209,9 +214,10 @@ fn test_db<B: Backend>(db: &TestV1Db<B>) -> KvResult<()> {
 
     // Test transactional 2
     db.write(|mut db_tx| {
-        db_tx
-            .col4
-            .upsert(U64BE(47), (&[5, 9, 3, 2]).iter().copied().collect());
+        db_tx.col4.upsert(
+            U64BE(47),
+            (&[5, 9, 3, 2]).iter().map(|&i| U128UBE::new(i)).collect(),
+        );
         Ok(())
     })?;
     db.col4().get_ref_slice(&U64BE(47), |numbers| {