diff --git a/rust-bins/duniter-dbex/src/main.rs b/rust-bins/duniter-dbex/src/main.rs
index bc2f22c077f698c7b57d8d04cd0e72b7a54dcbe7..ddd314b8b07b9867231f7aaeb712101d83a031d4 100644
--- a/rust-bins/duniter-dbex/src/main.rs
+++ b/rust-bins/duniter-dbex/src/main.rs
@@ -31,15 +31,18 @@ use self::cli::{Database, Opt, OutputFormat, SubCommand};
 use self::stringify_json_value::stringify_json_value;
 use anyhow::anyhow;
 use comfy_table::Table;
-use duniter_dbs::bc_v2::{BcV2Db, BcV2DbWritable};
+use duniter_dbs::databases::bc_v2::{BcV2Db, BcV2DbWritable};
+use duniter_dbs::databases::{
+    bc_v1::{BcV1Db, BcV1DbWritable},
+    gva_v1::{GvaV1Db, GvaV1DbWritable},
+    txs_mp_v2::{TxsMpV2Db, TxsMpV2DbWritable},
+};
 use duniter_dbs::kv_typed::backend::sled;
 use duniter_dbs::kv_typed::prelude::*;
 use duniter_dbs::prelude::*;
 use duniter_dbs::regex::Regex;
 use duniter_dbs::serde_json::{Map, Value};
 use duniter_dbs::smallvec::{smallvec, SmallVec};
-use duniter_dbs::{BcV1Db, GvaV1Db, TxsMpV2Db};
-use duniter_dbs::{BcV1DbWritable, GvaV1DbWritable, TxsMpV2DbWritable};
 use rayon::prelude::*;
 use std::{
     collections::{HashMap, HashSet},
diff --git a/rust-bins/duniter-dbex/src/migrate.rs b/rust-bins/duniter-dbex/src/migrate.rs
index 1678bdeb23a12696d7fa533031656ba16225edcf..b04f307825a438dbd6ffccc1c156d9c832d958cd 100644
--- a/rust-bins/duniter-dbex/src/migrate.rs
+++ b/rust-bins/duniter-dbex/src/migrate.rs
@@ -18,7 +18,7 @@ use dubp::{
     block::parser::parse_json_block_from_serde_value, block::parser::ParseJsonBlockError,
     block::prelude::DubpBlockTrait, block::DubpBlock, common::prelude::BlockNumber,
 };
-use duniter_dbs::{BcV1DbReadable, FileBackend};
+use duniter_dbs::{databases::bc_v1::BcV1DbReadable, FileBackend};
 use fast_threadpool::{ThreadPool, ThreadPoolConfig};
 use std::{ops::Deref, path::PathBuf};
 
diff --git a/rust-libs/duniter-dbs-read-ops/src/lib.rs b/rust-libs/duniter-dbs-read-ops/src/lib.rs
index c123d2671b5a199c7433beeae4cba064874fa8a6..60dfe0d0387dc59ff461d7307878f02b80ffce0d 100644
--- a/rust-libs/duniter-dbs-read-ops/src/lib.rs
+++ b/rust-libs/duniter-dbs-read-ops/src/lib.rs
@@ -23,7 +23,7 @@
 )]
 
 use dubp::crypto::hashs::Hash;
-use duniter_dbs::{bc_v2::BcV2DbReadable, HashKeyV2};
+use duniter_dbs::{databases::bc_v2::BcV2DbReadable, HashKeyV2};
 use duniter_dbs::{kv_typed::prelude::*, BlockMetaV2};
 
 pub fn get_current_block_meta<BcDb: BcV2DbReadable>(bc_db: &BcDb) -> KvResult<Option<BlockMetaV2>> {
diff --git a/rust-libs/duniter-dbs-write-ops/src/bc.rs b/rust-libs/duniter-dbs-write-ops/src/bc.rs
index 47d573c5d718259ebd91ca4decd3747e3bff1fd9..6ab6ca807cbab2a8688e0fee9c5f5a7ca9c599be 100644
--- a/rust-libs/duniter-dbs-write-ops/src/bc.rs
+++ b/rust-libs/duniter-dbs-write-ops/src/bc.rs
@@ -18,10 +18,10 @@ mod txs;
 mod uds;
 
 use crate::*;
-use duniter_dbs::bc_v2::BcV2DbWritable;
+use duniter_dbs::databases::bc_v2::BcV2DbWritable;
 
 pub fn apply_block<B: Backend>(
-    bc_db: &duniter_dbs::bc_v2::BcV2Db<B>,
+    bc_db: &duniter_dbs::databases::bc_v2::BcV2Db<B>,
     block: &DubpBlockV10,
 ) -> KvResult<BlockMetaV2> {
     //log::info!("apply_block #{}", block.number().0);
@@ -84,7 +84,7 @@ pub fn apply_block<B: Backend>(
 }
 
 pub fn revert_block<B: Backend>(
-    bc_db: &duniter_dbs::bc_v2::BcV2Db<B>,
+    bc_db: &duniter_dbs::databases::bc_v2::BcV2Db<B>,
     block: &DubpBlockV10,
 ) -> KvResult<Option<BlockMetaV2>> {
     (
diff --git a/rust-libs/duniter-dbs-write-ops/src/bc/identities.rs b/rust-libs/duniter-dbs-write-ops/src/bc/identities.rs
index 848529a8ef9133f59d378034a89c5867c8a4e32c..0249308747014d1ce3f7ea5ffe6f5631ac97b00b 100644
--- a/rust-libs/duniter-dbs-write-ops/src/bc/identities.rs
+++ b/rust-libs/duniter-dbs-write-ops/src/bc/identities.rs
@@ -14,7 +14,7 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use crate::*;
-use duniter_dbs::bc_v2::IdentitiesEvent;
+use duniter_dbs::databases::bc_v2::IdentitiesEvent;
 use duniter_dbs::IdtyDbV2;
 
 pub(crate) fn update_identities<B: Backend>(
diff --git a/rust-libs/duniter-dbs-write-ops/src/bc/txs.rs b/rust-libs/duniter-dbs-write-ops/src/bc/txs.rs
index e00e4f88dbb049c564655d4d947c2bcc41d76bce..87b36acc78f41f6b5b240b0c22a7e9f89741d492 100644
--- a/rust-libs/duniter-dbs-write-ops/src/bc/txs.rs
+++ b/rust-libs/duniter-dbs-write-ops/src/bc/txs.rs
@@ -15,7 +15,7 @@
 
 use crate::*;
 use duniter_dbs::{
-    bc_v2::{TxsHashsEvent, UdsEvent},
+    databases::bc_v2::{TxsHashsEvent, UdsEvent},
     UdIdV2,
 };
 
diff --git a/rust-libs/duniter-dbs-write-ops/src/bc/uds.rs b/rust-libs/duniter-dbs-write-ops/src/bc/uds.rs
index 2dde737f962df4b644ff0a1efa704358f947e935..e8323f9bfc66a80d2593efcd40554106123f384a 100644
--- a/rust-libs/duniter-dbs-write-ops/src/bc/uds.rs
+++ b/rust-libs/duniter-dbs-write-ops/src/bc/uds.rs
@@ -15,7 +15,7 @@
 
 use crate::*;
 use duniter_dbs::{
-    bc_v2::{IdentitiesEvent, UdsEvent, UdsRevalEvent},
+    databases::bc_v2::{IdentitiesEvent, UdsEvent, UdsRevalEvent},
     UdIdV2,
 };
 
diff --git a/rust-libs/duniter-dbs-write-ops/src/lib.rs b/rust-libs/duniter-dbs-write-ops/src/lib.rs
index 04edc631a143ea7e156f60bf13e0770d8a52514b..607d90124538da8673bd820c0d97659394e377cd 100644
--- a/rust-libs/duniter-dbs-write-ops/src/lib.rs
+++ b/rust-libs/duniter-dbs-write-ops/src/lib.rs
@@ -37,9 +37,13 @@ use dubp::documents::{
 };
 use dubp::wallet::prelude::*;
 use duniter_dbs::{
-    bc_v2::BcV2Db, kv_typed::prelude::*, BlockMetaV2, DuniterDbs, FileBackend, HashKeyV2,
-    PendingTxDbV2, PubKeyKeyV2, PubKeyValV2, SourceAmountValV2, TxsMpV2Db, TxsMpV2DbReadable,
-    TxsMpV2DbWritable, UtxoValV2, WalletConditionsV2,
+    databases::{
+        bc_v2::BcV2Db,
+        txs_mp_v2::{TxsMpV2Db, TxsMpV2DbReadable, TxsMpV2DbWritable},
+    },
+    kv_typed::prelude::*,
+    BlockMetaV2, DuniterDbs, FileBackend, HashKeyV2, PendingTxDbV2, PubKeyKeyV2, PubKeyValV2,
+    SourceAmountValV2, UtxoValV2, WalletConditionsV2,
 };
 use resiter::filter_map::FilterMap;
 use resiter::flatten::Flatten;
diff --git a/rust-libs/duniter-dbs-write-ops/src/txs_mp.rs b/rust-libs/duniter-dbs-write-ops/src/txs_mp.rs
index c47a52dd2103c58a696087d5f48e523e03c4320f..7f9e5139532553954fa592d61079721972a2bdd2 100644
--- a/rust-libs/duniter-dbs-write-ops/src/txs_mp.rs
+++ b/rust-libs/duniter-dbs-write-ops/src/txs_mp.rs
@@ -41,7 +41,7 @@ pub fn add_pending_tx<
     B: Backend,
     F: FnOnce(
         &TransactionDocumentV10,
-        &TxColRw<B::Col, duniter_dbs::txs_mp_v2::TxsEvent>,
+        &TxColRw<B::Col, duniter_dbs::databases::txs_mp_v2::TxsEvent>,
     ) -> KvResult<()>,
 >(
     control: F,
diff --git a/rust-libs/duniter-dbs/src/databases.rs b/rust-libs/duniter-dbs/src/databases.rs
new file mode 100644
index 0000000000000000000000000000000000000000..e459678400aa7193b167a1e585f2fb30cabe973d
--- /dev/null
+++ b/rust-libs/duniter-dbs/src/databases.rs
@@ -0,0 +1,20 @@
+//  Copyright (C) 2020 Éloïs SANCHEZ.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+pub mod bc_v1;
+pub mod bc_v2;
+pub mod cm_v1;
+pub mod gva_v1;
+pub mod txs_mp_v2;
diff --git a/rust-libs/duniter-dbs/src/bc_v1.rs b/rust-libs/duniter-dbs/src/databases/bc_v1.rs
similarity index 100%
rename from rust-libs/duniter-dbs/src/bc_v1.rs
rename to rust-libs/duniter-dbs/src/databases/bc_v1.rs
diff --git a/rust-libs/duniter-dbs/src/bc_v2.rs b/rust-libs/duniter-dbs/src/databases/bc_v2.rs
similarity index 100%
rename from rust-libs/duniter-dbs/src/bc_v2.rs
rename to rust-libs/duniter-dbs/src/databases/bc_v2.rs
diff --git a/rust-libs/duniter-dbs/src/cm_v1.rs b/rust-libs/duniter-dbs/src/databases/cm_v1.rs
similarity index 100%
rename from rust-libs/duniter-dbs/src/cm_v1.rs
rename to rust-libs/duniter-dbs/src/databases/cm_v1.rs
diff --git a/rust-libs/duniter-dbs/src/gva_v1.rs b/rust-libs/duniter-dbs/src/databases/gva_v1.rs
similarity index 100%
rename from rust-libs/duniter-dbs/src/gva_v1.rs
rename to rust-libs/duniter-dbs/src/databases/gva_v1.rs
diff --git a/rust-libs/duniter-dbs/src/txs_mp_v2.rs b/rust-libs/duniter-dbs/src/databases/txs_mp_v2.rs
similarity index 100%
rename from rust-libs/duniter-dbs/src/txs_mp_v2.rs
rename to rust-libs/duniter-dbs/src/databases/txs_mp_v2.rs
diff --git a/rust-libs/duniter-dbs/src/lib.rs b/rust-libs/duniter-dbs/src/lib.rs
index 4ff45f4362517a739e43659e593ec19bf2463b76..f96cd188544d5b6de98baf60a4d89ef040443808 100644
--- a/rust-libs/duniter-dbs/src/lib.rs
+++ b/rust-libs/duniter-dbs/src/lib.rs
@@ -22,13 +22,9 @@
     unused_import_braces
 )]
 
-mod bc_v1;
-pub mod bc_v2;
-pub mod cm_v1;
-pub mod gva_v1;
+pub mod databases;
 mod keys;
 mod open_dbs;
-pub mod txs_mp_v2;
 mod values;
 
 // Re-export dependencies
@@ -56,8 +52,6 @@ pub use crate::open_dbs::open_dbs;
 
 // Export profession types
 pub use crate::keys::utxo_id::UtxoIdDbV2;
-pub use bc_v1::{BcV1Db, BcV1DbReadable, BcV1DbRo, BcV1DbWritable, MainBlocksEvent, UidsEvent};
-pub use gva_v1::{GvaV1Db, GvaV1DbReadable, GvaV1DbRo, GvaV1DbWritable};
 pub use keys::all::AllKeyV1;
 pub use keys::block_number::BlockNumberKeyV1;
 pub use keys::blockstamp::BlockstampKeyV1;
@@ -70,7 +64,6 @@ pub use keys::ud_id::UdIdV2;
 pub use keys::uid::UidKeyV1;
 pub use keys::utxo_id::GvaUtxoIdDbV1;
 pub use keys::wallet_conditions::{WalletConditionsV1, WalletConditionsV2};
-pub use txs_mp_v2::{TxsMpV2Db, TxsMpV2DbReadable, TxsMpV2DbRo, TxsMpV2DbWritable};
 pub use values::block_db::{BlockDbEnum, BlockDbV1, TransactionInBlockDbV1};
 pub use values::block_head_db::BlockHeadDbV1;
 pub use values::block_meta::BlockMetaV2;
@@ -121,21 +114,23 @@ pub type FileBackend = kv_typed::backend::memory::Mem;
 
 #[derive(Clone, Debug)]
 pub struct DuniterDbs<B: Backend> {
-    pub bc_db_ro: bc_v2::BcV2DbRo<B>,
-    pub cm_db: cm_v1::CmV1Db<MemSingleton>,
-    pub gva_db: GvaV1Db<B>,
-    pub txs_mp_db: TxsMpV2Db<B>,
+    pub bc_db_ro: databases::bc_v2::BcV2DbRo<B>,
+    pub cm_db: databases::cm_v1::CmV1Db<MemSingleton>,
+    pub gva_db: databases::gva_v1::GvaV1Db<B>,
+    pub txs_mp_db: databases::txs_mp_v2::TxsMpV2Db<B>,
 }
 
 impl DuniterDbs<Mem> {
     pub fn mem() -> KvResult<Self> {
-        use bc_v2::BcV2DbWritable as _;
-        use cm_v1::CmV1DbWritable as _;
+        use databases::bc_v2::BcV2DbWritable as _;
+        use databases::cm_v1::CmV1DbWritable as _;
+        use databases::gva_v1::GvaV1DbWritable as _;
+        use databases::txs_mp_v2::TxsMpV2DbWritable as _;
         Ok(DuniterDbs {
-            bc_db_ro: bc_v2::BcV2Db::<Mem>::open(MemConf::default())?.get_ro_handler(),
-            cm_db: cm_v1::CmV1Db::<MemSingleton>::open(MemSingletonConf::default())?,
-            gva_db: GvaV1Db::<Mem>::open(MemConf::default())?,
-            txs_mp_db: TxsMpV2Db::<Mem>::open(MemConf::default())?,
+            bc_db_ro: databases::bc_v2::BcV2Db::<Mem>::open(MemConf::default())?.get_ro_handler(),
+            cm_db: databases::cm_v1::CmV1Db::<MemSingleton>::open(MemSingletonConf::default())?,
+            gva_db: databases::gva_v1::GvaV1Db::<Mem>::open(MemConf::default())?,
+            txs_mp_db: databases::txs_mp_v2::TxsMpV2Db::<Mem>::open(MemConf::default())?,
         })
     }
 }
diff --git a/rust-libs/duniter-dbs/src/open_dbs.rs b/rust-libs/duniter-dbs/src/open_dbs.rs
index 001a06718c591ec1661728d3389d10c7684285eb..0c4795e506fff8971eec53f7dcf6aec0a71d7ba1 100644
--- a/rust-libs/duniter-dbs/src/open_dbs.rs
+++ b/rust-libs/duniter-dbs/src/open_dbs.rs
@@ -13,23 +13,32 @@
 // You should have received a copy of the GNU Affero General Public License
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
-use crate::bc_v2::BcV2DbWritable as _;
-use crate::cm_v1::CmV1DbWritable as _;
+use crate::databases::bc_v2::BcV2DbWritable as _;
+use crate::databases::cm_v1::CmV1DbWritable as _;
+use crate::databases::gva_v1::GvaV1DbWritable as _;
+use crate::databases::txs_mp_v2::TxsMpV2DbWritable as _;
 use crate::*;
 
 pub fn open_dbs<B: BackendConf>(
     home_path_opt: Option<&Path>,
-) -> (crate::bc_v2::BcV2Db<B>, DuniterDbs<B>) {
-    let bc_db = crate::bc_v2::BcV2Db::<B>::open(B::gen_backend_conf("bc_v2", home_path_opt))
-        .expect("fail to open BcV2 DB");
+) -> (crate::databases::bc_v2::BcV2Db<B>, DuniterDbs<B>) {
+    let bc_db =
+        crate::databases::bc_v2::BcV2Db::<B>::open(B::gen_backend_conf("bc_v2", home_path_opt))
+            .expect("fail to open BcV2 DB");
     let dbs = DuniterDbs {
         bc_db_ro: bc_db.get_ro_handler(),
-        cm_db: crate::cm_v1::CmV1Db::<MemSingleton>::open(MemSingletonConf::default())
+        cm_db: crate::databases::cm_v1::CmV1Db::<MemSingleton>::open(MemSingletonConf::default())
             .expect("fail to open CmV1 DB"),
-        gva_db: GvaV1Db::<B>::open(B::gen_backend_conf("gva_v1", home_path_opt))
-            .expect("fail to open Gva DB"),
-        txs_mp_db: TxsMpV2Db::<B>::open(B::gen_backend_conf("txs_mp_v2", home_path_opt))
-            .expect("fail to open TxsMp DB"),
+        gva_db: crate::databases::gva_v1::GvaV1Db::<B>::open(B::gen_backend_conf(
+            "gva_v1",
+            home_path_opt,
+        ))
+        .expect("fail to open Gva DB"),
+        txs_mp_db: crate::databases::txs_mp_v2::TxsMpV2Db::<B>::open(B::gen_backend_conf(
+            "txs_mp_v2",
+            home_path_opt,
+        ))
+        .expect("fail to open TxsMp DB"),
     };
     (bc_db, dbs)
 }
diff --git a/rust-libs/duniter-dbs/tests/test_explorer.rs b/rust-libs/duniter-dbs/tests/test_explorer.rs
index cbfdb4c5cb267b45dc06511d3dbf758f12fa66c8..76e0b7a9cdd534a059aca712019312742da00b19 100644
--- a/rust-libs/duniter-dbs/tests/test_explorer.rs
+++ b/rust-libs/duniter-dbs/tests/test_explorer.rs
@@ -22,7 +22,10 @@ mod explorer {
     use duniter_dbs::kv_typed::regex;
     use duniter_dbs::prelude::*;
     use duniter_dbs::smallvec::smallvec;
-    use duniter_dbs::{BcV1Db, BcV1DbWritable, PublicKeySingletonDbV1, UidKeyV1};
+    use duniter_dbs::{
+        databases::bc_v1::{BcV1Db, BcV1DbWritable},
+        PublicKeySingletonDbV1, UidKeyV1,
+    };
     use std::{num::NonZeroUsize, str::FromStr};
     use tempdir::TempDir;
     use unwrap::unwrap;
diff --git a/rust-libs/duniter-dbs/tests/test_read_write.rs b/rust-libs/duniter-dbs/tests/test_read_write.rs
index b1af6b37b5391ab65a12597d59a07b1febaab819..e08ac88e88a49e9dd98cc009de380c598ede4f9c 100644
--- a/rust-libs/duniter-dbs/tests/test_read_write.rs
+++ b/rust-libs/duniter-dbs/tests/test_read_write.rs
@@ -18,8 +18,8 @@ use dubp::common::crypto::keys::PublicKey as _;
 use dubp::common::prelude::*;
 use duniter_dbs::kv_typed::prelude::*;
 use duniter_dbs::{
-    BcV1Db, BcV1DbReadable, BcV1DbWritable, BlockDbV1, BlockNumberKeyV1, MainBlocksEvent,
-    PublicKeySingletonDbV1, UidKeyV1,
+    databases::bc_v1::{BcV1Db, BcV1DbReadable, BcV1DbWritable, MainBlocksEvent},
+    BlockDbV1, BlockNumberKeyV1, PublicKeySingletonDbV1, UidKeyV1,
 };
 use kv_typed::channel::TryRecvError;
 use std::str::FromStr;
diff --git a/rust-libs/duniter-mempools/src/lib.rs b/rust-libs/duniter-mempools/src/lib.rs
index 63ecd1943cb7a54eef9f2f10ee4f39289f5f7d87..2851b54166d533745560e318342dde62cb11bcbe 100644
--- a/rust-libs/duniter-mempools/src/lib.rs
+++ b/rust-libs/duniter-mempools/src/lib.rs
@@ -28,7 +28,10 @@ use dubp::common::crypto::keys::ed25519::PublicKey;
 use dubp::documents::prelude::*;
 use dubp::documents::transaction::TransactionDocumentV10;
 use duniter_dbs::kv_typed::prelude::*;
-use duniter_dbs::{bc_v2::BcV2DbReadable, TxsMpV2Db, TxsMpV2DbReadable};
+use duniter_dbs::{
+    databases::bc_v2::BcV2DbReadable,
+    databases::txs_mp_v2::{TxsMpV2Db, TxsMpV2DbReadable},
+};
 use thiserror::Error;
 
 #[derive(Clone, Copy, Debug, Default)]
diff --git a/rust-libs/duniter-module/src/lib.rs b/rust-libs/duniter-module/src/lib.rs
index e16aa988dacecb0748577915354d6ec309737f8d..1ad5b71c1e47db99b081a716b23488e73b0ed206 100644
--- a/rust-libs/duniter-module/src/lib.rs
+++ b/rust-libs/duniter-module/src/lib.rs
@@ -150,7 +150,7 @@ macro_rules! plug_duniter_modules {
                     ..Default::default()
                 };
 
-                use duniter_dbs::cm_v1::CmV1DbWritable as _;
+                use duniter_dbs::databases::cm_v1::CmV1DbWritable as _;
                 use duniter_dbs::kv_typed::prelude::DbCollectionRw as _;
                 dbs_pool.execute(|dbs| dbs.cm_db.self_peer_old_write().upsert((), self_peer)).await?.context("fail to save self peer card")?;
 
diff --git a/rust-libs/duniter-server/src/lib.rs b/rust-libs/duniter-server/src/lib.rs
index f926dd29343656ad9d4b3ab2899cdb8e5a034072..8b340dac3a3071ab0f5beffc71ca91493c0b4368 100644
--- a/rust-libs/duniter-server/src/lib.rs
+++ b/rust-libs/duniter-server/src/lib.rs
@@ -33,10 +33,15 @@ use dubp::documents::{prelude::*, transaction::TransactionDocumentV10};
 use dubp::{
     block::prelude::*, common::crypto::hashs::Hash, documents_parser::prelude::FromStringObject,
 };
-use duniter_dbs::bc_v2::BcV2Db;
-use duniter_dbs::cm_v1::{CmV1DbReadable, CmV1DbWritable};
 use duniter_dbs::{
-    kv_typed::prelude::*, GvaV1DbReadable, HashKeyV2, PendingTxDbV2, TxsMpV2DbReadable,
+    databases::{
+        bc_v2::BcV2Db,
+        cm_v1::{CmV1DbReadable, CmV1DbWritable},
+        gva_v1::GvaV1DbReadable,
+        txs_mp_v2::TxsMpV2DbReadable,
+    },
+    kv_typed::prelude::*,
+    HashKeyV2, PendingTxDbV2,
 };
 use duniter_dbs::{prelude::*, BlockMetaV2, FileBackend};
 use duniter_gva_dbs_reader::txs_history::TxsHistory;
@@ -57,7 +62,8 @@ pub struct DuniterServer {
     conf: DuniterConf,
     current: Option<BlockMetaV2>,
     dbs_pool: fast_threadpool::ThreadPoolSyncHandler<DuniterDbs<FileBackend>>,
-    pending_txs_subscriber: flume::Receiver<Arc<Events<duniter_dbs::txs_mp_v2::TxsEvent>>>,
+    pending_txs_subscriber:
+        flume::Receiver<Arc<Events<duniter_dbs::databases::txs_mp_v2::TxsEvent>>>,
     txs_mempool: TxsMempool,
 }
 
@@ -178,10 +184,10 @@ impl DuniterServer {
             use std::ops::Deref as _;
             for event in events.deref() {
                 match event {
-                    duniter_dbs::txs_mp_v2::TxsEvent::Upsert { key, value } => {
+                    duniter_dbs::databases::txs_mp_v2::TxsEvent::Upsert { key, value } => {
                         new_pending_txs.insert(key.0, value.0.clone());
                     }
-                    duniter_dbs::txs_mp_v2::TxsEvent::Remove { key } => {
+                    duniter_dbs::databases::txs_mp_v2::TxsEvent::Remove { key } => {
                         new_pending_txs.remove(&key.0);
                     }
                     _ => (),
diff --git a/rust-libs/modules/gva/db-writer/src/identities.rs b/rust-libs/modules/gva/db-writer/src/identities.rs
index e6b55563b30f8ff8dbdd244170ee1f2834310fc2..4815d39a96ef9444bba89d7a67b168cc91a62af8 100644
--- a/rust-libs/modules/gva/db-writer/src/identities.rs
+++ b/rust-libs/modules/gva/db-writer/src/identities.rs
@@ -14,7 +14,7 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use crate::*;
-use duniter_dbs::gva_v1::GvaIdentitiesEvent;
+use duniter_dbs::databases::gva_v1::GvaIdentitiesEvent;
 
 pub(crate) fn update_identities<B: Backend>(
     block: &DubpBlockV10,
diff --git a/rust-libs/modules/gva/db-writer/src/lib.rs b/rust-libs/modules/gva/db-writer/src/lib.rs
index 6346c5bb42d26da60f1e336661c42ce940b07296..2c6a309d8c035321f25827d15fbb84e2f2836e4c 100644
--- a/rust-libs/modules/gva/db-writer/src/lib.rs
+++ b/rust-libs/modules/gva/db-writer/src/lib.rs
@@ -33,10 +33,11 @@ use dubp::documents::{
     prelude::*, transaction::TransactionDocumentTrait, transaction::TransactionDocumentV10,
 };
 use dubp::wallet::prelude::*;
-use duniter_dbs::gva_v1::*;
+use duniter_dbs::databases::gva_v1::*;
 use duniter_dbs::{
-    kv_typed::prelude::*, GvaV1Db, GvaV1DbReadable, GvaV1DbWritable, HashKeyV2, PubKeyKeyV2,
-    SourceAmountValV2, TxDbV2, WalletConditionsV2,
+    databases::gva_v1::{GvaV1Db, GvaV1DbReadable, GvaV1DbWritable},
+    kv_typed::prelude::*,
+    HashKeyV2, PubKeyKeyV2, SourceAmountValV2, TxDbV2, WalletConditionsV2,
 };
 use resiter::filter::Filter;
 use std::collections::HashMap;
@@ -214,7 +215,7 @@ mod tests {
 
     #[test]
     fn test_gva_apply_block() -> anyhow::Result<()> {
-        let gva_db = duniter_dbs::gva_v1::GvaV1Db::<Mem>::open(MemConf::default())?;
+        let gva_db = duniter_dbs::databases::gva_v1::GvaV1Db::<Mem>::open(MemConf::default())?;
 
         let s1 = WalletScriptV10::single_sig(PublicKey::from_base58(
             "D9D2zaJoWYWveii1JRYLVK3J4Z7ZH3QczoKrnQeiM6mx",
diff --git a/rust-libs/modules/gva/db-writer/src/tx.rs b/rust-libs/modules/gva/db-writer/src/tx.rs
index 73314585755bf1761052ecba1c7780c76df0f524..2a5e1836b43eeb29bc569be27eb0d72fce322f17 100644
--- a/rust-libs/modules/gva/db-writer/src/tx.rs
+++ b/rust-libs/modules/gva/db-writer/src/tx.rs
@@ -14,7 +14,7 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use crate::*;
-use duniter_dbs::gva_v1::BalancesEvent;
+use duniter_dbs::databases::gva_v1::BalancesEvent;
 
 pub(crate) type ScriptsHash = HashMap<WalletScriptV10, Hash>;
 
@@ -323,7 +323,7 @@ mod tests {
         let o1_amount = ud0_amount - SourceAmount::with_base0(600);
         let o2_amount = ud0_amount - SourceAmount::with_base0(400);
 
-        let gva_db = duniter_dbs::gva_v1::GvaV1Db::<Mem>::open(MemConf::default())?;
+        let gva_db = duniter_dbs::databases::gva_v1::GvaV1Db::<Mem>::open(MemConf::default())?;
 
         let b0 = BlockMetaV2 {
             dividend: Some(ud0_amount),
diff --git a/rust-libs/modules/gva/db-writer/src/utxos.rs b/rust-libs/modules/gva/db-writer/src/utxos.rs
index 950808ee34d02aa07d7b1ec0511c29a7257a3608..b04ac63f34852e44035c2b5809589fb58a8a85ff 100644
--- a/rust-libs/modules/gva/db-writer/src/utxos.rs
+++ b/rust-libs/modules/gva/db-writer/src/utxos.rs
@@ -17,8 +17,8 @@ use crate::*;
 use duniter_dbs::GvaUtxoIdDbV1;
 
 pub(crate) fn write_utxo_v10<'s, B: Backend>(
-    scripts_by_pubkey: &mut TxColRw<B::Col, duniter_dbs::gva_v1::ScriptsByPubkeyEvent>,
-    gva_utxos: &mut TxColRw<B::Col, duniter_dbs::gva_v1::GvaUtxosEvent>,
+    scripts_by_pubkey: &mut TxColRw<B::Col, duniter_dbs::databases::gva_v1::ScriptsByPubkeyEvent>,
+    gva_utxos: &mut TxColRw<B::Col, duniter_dbs::databases::gva_v1::GvaUtxosEvent>,
     utxo: UtxoV10<'s>,
     utxo_script_hash: Hash,
 ) -> KvResult<()> {
@@ -49,8 +49,8 @@ pub(crate) fn write_utxo_v10<'s, B: Backend>(
 }
 
 pub(crate) fn remove_utxo_v10<B: Backend>(
-    scripts_by_pubkey: &mut TxColRw<B::Col, duniter_dbs::gva_v1::ScriptsByPubkeyEvent>,
-    gva_utxos: &mut TxColRw<B::Col, duniter_dbs::gva_v1::GvaUtxosEvent>,
+    scripts_by_pubkey: &mut TxColRw<B::Col, duniter_dbs::databases::gva_v1::ScriptsByPubkeyEvent>,
+    gva_utxos: &mut TxColRw<B::Col, duniter_dbs::databases::gva_v1::GvaUtxosEvent>,
     utxo_id: UtxoIdV10,
     utxo_script: &WalletScriptV10,
     utxo_script_hash: Hash,
diff --git a/rust-libs/modules/gva/dbs-reader/src/find_inputs.rs b/rust-libs/modules/gva/dbs-reader/src/find_inputs.rs
index 2719a5ede9facd45500a502244fb61798ccf4b9d..084dbb648d44abebcd2c84c59d30e9e6b9e67c89 100644
--- a/rust-libs/modules/gva/dbs-reader/src/find_inputs.rs
+++ b/rust-libs/modules/gva/dbs-reader/src/find_inputs.rs
@@ -137,18 +137,20 @@ impl DbsReader {
 mod tests {
     use super::*;
     use duniter_dbs::{
-        bc_v2::BcV2DbWritable, gva_v1::GvaV1DbWritable, txs_mp_v2::TxsMpV2DbWritable, BlockMetaV2,
-        GvaUtxoIdDbV1, SourceAmountValV2, UdIdV2, UtxoIdDbV2, UtxoValV2, WalletConditionsV2,
+        databases::{bc_v2::BcV2DbWritable, gva_v1::GvaV1DbWritable, txs_mp_v2::TxsMpV2DbWritable},
+        BlockMetaV2, GvaUtxoIdDbV1, SourceAmountValV2, UdIdV2, UtxoIdDbV2, UtxoValV2,
+        WalletConditionsV2,
     };
 
     const UD0: i64 = 10;
 
     #[test]
     fn test_find_inputs() -> anyhow::Result<()> {
-        let bc_db = duniter_dbs::bc_v2::BcV2Db::<Mem>::open(MemConf::default())?;
-        let gva_db = duniter_dbs::gva_v1::GvaV1Db::<Mem>::open(MemConf::default())?;
+        let bc_db = duniter_dbs::databases::bc_v2::BcV2Db::<Mem>::open(MemConf::default())?;
+        let gva_db = duniter_dbs::databases::gva_v1::GvaV1Db::<Mem>::open(MemConf::default())?;
         let db_reader = create_dbs_reader(unsafe { std::mem::transmute(&gva_db.get_ro_handler()) });
-        let txs_mp_db = duniter_dbs::txs_mp_v2::TxsMpV2Db::<Mem>::open(MemConf::default())?;
+        let txs_mp_db =
+            duniter_dbs::databases::txs_mp_v2::TxsMpV2Db::<Mem>::open(MemConf::default())?;
 
         let b0 = BlockMetaV2 {
             dividend: Some(SourceAmount::with_base0(UD0)),
diff --git a/rust-libs/modules/gva/dbs-reader/src/lib.rs b/rust-libs/modules/gva/dbs-reader/src/lib.rs
index 99676f7053dcd10620d32f117a4d8b0c3fbee39c..820de44e0a50a0dc98ee556f9a3de56b7a151b38 100644
--- a/rust-libs/modules/gva/dbs-reader/src/lib.rs
+++ b/rust-libs/modules/gva/dbs-reader/src/lib.rs
@@ -35,11 +35,14 @@ use dubp::common::crypto::hashs::Hash;
 use dubp::common::crypto::keys::ed25519::PublicKey;
 use dubp::documents::transaction::TransactionDocumentV10;
 use dubp::{common::prelude::BlockNumber, wallet::prelude::*};
-use duniter_dbs::bc_v2::{BcV2DbReadable, BcV2DbRo};
-use duniter_dbs::{gva_v1::GvaV1DbRo, FileBackend};
+use duniter_dbs::databases::{
+    bc_v2::{BcV2DbReadable, BcV2DbRo},
+    gva_v1::{GvaV1DbReadable, GvaV1DbRo},
+    txs_mp_v2::TxsMpV2DbReadable,
+};
+use duniter_dbs::FileBackend;
 use duniter_dbs::{
-    kv_typed::prelude::*, GvaV1DbReadable, HashKeyV2, PubKeyKeyV2, SourceAmountValV2, TxDbV2,
-    TxsMpV2DbReadable, UtxoIdDbV2,
+    kv_typed::prelude::*, HashKeyV2, PubKeyKeyV2, SourceAmountValV2, TxDbV2, UtxoIdDbV2,
 };
 use resiter::filter::Filter;
 use resiter::filter_map::FilterMap;
@@ -88,8 +91,8 @@ impl DbsReader {
 #[cfg(test)]
 impl DbsReader {
     pub(crate) fn mem() -> Self {
-        use duniter_dbs::gva_v1::GvaV1DbWritable;
-        let gva_db = duniter_dbs::gva_v1::GvaV1Db::<Mem>::open(MemConf::default())
+        use duniter_dbs::databases::gva_v1::GvaV1DbWritable;
+        let gva_db = duniter_dbs::databases::gva_v1::GvaV1Db::<Mem>::open(MemConf::default())
             .expect("fail to create memory gva db");
         create_dbs_reader(unsafe { std::mem::transmute(&gva_db.get_ro_handler()) })
     }
diff --git a/rust-libs/modules/gva/dbs-reader/src/uds_of_pubkey.rs b/rust-libs/modules/gva/dbs-reader/src/uds_of_pubkey.rs
index 1033e720681c6a086941f5ff35e730f44a0c8316..4c9eb8107cef31b54595f7897945a12bc2de259b 100644
--- a/rust-libs/modules/gva/dbs-reader/src/uds_of_pubkey.rs
+++ b/rust-libs/modules/gva/dbs-reader/src/uds_of_pubkey.rs
@@ -16,7 +16,7 @@
 use crate::*;
 use duniter_dbs::smallvec::SmallVec;
 use duniter_dbs::{
-    bc_v2::{UdsEvent, UdsRevalEvent},
+    databases::bc_v2::{UdsEvent, UdsRevalEvent},
     GvaIdtyDbV1, UdIdV2,
 };
 
@@ -472,7 +472,10 @@ mod tests {
 
     use super::*;
     use duniter_dbs::smallvec::smallvec as svec;
-    use duniter_dbs::{bc_v2::BcV2DbWritable, GvaV1DbWritable, SourceAmountValV2, UdIdV2};
+    use duniter_dbs::{
+        databases::{bc_v2::BcV2DbWritable, gva_v1::GvaV1DbWritable},
+        SourceAmountValV2, UdIdV2,
+    };
     use std::iter::FromIterator;
 
     #[test]
@@ -533,9 +536,9 @@ mod tests {
             first_ud: Some(BlockNumber(29)),
         };
 
-        let bc_db = duniter_dbs::bc_v2::BcV2Db::<Mem>::open(MemConf::default())?;
+        let bc_db = duniter_dbs::databases::bc_v2::BcV2Db::<Mem>::open(MemConf::default())?;
         let bc_db_ro = bc_db.get_ro_handler();
-        let gva_db = duniter_dbs::gva_v1::GvaV1Db::<Mem>::open(MemConf::default())?;
+        let gva_db = duniter_dbs::databases::gva_v1::GvaV1Db::<Mem>::open(MemConf::default())?;
         let db_reader = create_dbs_reader(unsafe { std::mem::transmute(&gva_db.get_ro_handler()) });
         bc_db
             .uds_reval_write()
@@ -701,7 +704,7 @@ mod tests {
     #[test]
     fn test_unspent_uds_of_pubkey() -> KvResult<()> {
         let pk = PublicKey::default();
-        let bc_db = duniter_dbs::bc_v2::BcV2Db::<Mem>::open(MemConf::default())?;
+        let bc_db = duniter_dbs::databases::bc_v2::BcV2Db::<Mem>::open(MemConf::default())?;
         let dbs_reader = DbsReader::mem();
 
         bc_db
diff --git a/rust-libs/modules/gva/dbs-reader/src/utxos.rs b/rust-libs/modules/gva/dbs-reader/src/utxos.rs
index 7f316c243f24e430949e1728aa9c759b9f9eee26..e4339143ea84be3f0a411d3a3e25249771afb115 100644
--- a/rust-libs/modules/gva/dbs-reader/src/utxos.rs
+++ b/rust-libs/modules/gva/dbs-reader/src/utxos.rs
@@ -306,16 +306,17 @@ where
 mod tests {
 
     use super::*;
-    use duniter_dbs::GvaV1DbWritable;
-    use duniter_dbs::TxsMpV2DbWritable;
+    use duniter_dbs::databases::gva_v1::GvaV1DbWritable;
+    use duniter_dbs::databases::txs_mp_v2::TxsMpV2DbWritable;
 
     #[test]
     fn test_find_script_utxos() -> anyhow::Result<()> {
         let script = WalletScriptV10::single_sig(PublicKey::default());
 
-        let gva_db = duniter_dbs::gva_v1::GvaV1Db::<Mem>::open(MemConf::default())?;
+        let gva_db = duniter_dbs::databases::gva_v1::GvaV1Db::<Mem>::open(MemConf::default())?;
         let db_reader = create_dbs_reader(unsafe { std::mem::transmute(&gva_db.get_ro_handler()) });
-        let txs_mp_db = duniter_dbs::txs_mp_v2::TxsMpV2Db::<Mem>::open(MemConf::default())?;
+        let txs_mp_db =
+            duniter_dbs::databases::txs_mp_v2::TxsMpV2Db::<Mem>::open(MemConf::default())?;
 
         gva_db.gva_utxos_write().upsert(
             GvaUtxoIdDbV1::new(script.clone(), 0, Hash::default(), 0),
diff --git a/rust-libs/modules/gva/src/lib.rs b/rust-libs/modules/gva/src/lib.rs
index 9a855f4dffaeaa3500a6934b4e9d4a0f2fbcb06c..0b1cb6612d5709f1e44fb1f3b1f44e442b21a07d 100644
--- a/rust-libs/modules/gva/src/lib.rs
+++ b/rust-libs/modules/gva/src/lib.rs
@@ -57,9 +57,9 @@ use dubp::documents::prelude::*;
 use dubp::documents::transaction::{TransactionDocumentTrait, TransactionDocumentV10};
 use dubp::documents_parser::prelude::*;
 use dubp::wallet::prelude::*;
-use duniter_dbs::gva_v1::GvaV1DbRo;
+use duniter_dbs::databases::{gva_v1::GvaV1DbRo, txs_mp_v2::TxsMpV2DbReadable};
 use duniter_dbs::prelude::*;
-use duniter_dbs::{kv_typed::prelude::*, FileBackend, TxDbV2, TxsMpV2DbReadable};
+use duniter_dbs::{kv_typed::prelude::*, FileBackend, TxDbV2};
 #[cfg(not(test))]
 use duniter_gva_dbs_reader::create_dbs_reader;
 #[cfg(not(test))]
@@ -217,7 +217,7 @@ impl GvaModule {
     async fn get_gva_db_ro(
         dbs_pool: &fast_threadpool::ThreadPoolAsyncHandler<DuniterDbs<FileBackend>>,
     ) -> &'static GvaV1DbRo<FileBackend> {
-        use duniter_dbs::gva_v1::GvaV1DbWritable as _;
+        use duniter_dbs::databases::gva_v1::GvaV1DbWritable as _;
         dbs_pool
             .execute(|dbs| GVA_DB_RO.get_or_init(|| dbs.gva_db.get_ro_handler()))
             .await
@@ -356,7 +356,7 @@ mod tests {
     use super::*;
     use dubp::documents::transaction::TransactionInputV10;
     use duniter_conf::DuniterConf;
-    use duniter_dbs::bc_v2::*;
+    use duniter_dbs::databases::bc_v2::*;
     use duniter_dbs::SourceAmountValV2;
     use duniter_gva_dbs_reader::pagination::*;
     use duniter_mempools::Mempools;
diff --git a/rust-libs/modules/gva/src/queries.rs b/rust-libs/modules/gva/src/queries.rs
index 17146d9795581c4d357c7c988088171d738a04a6..2d240cdf35eb1cc29d1b658c36ddaa10c34744c6 100644
--- a/rust-libs/modules/gva/src/queries.rs
+++ b/rust-libs/modules/gva/src/queries.rs
@@ -20,7 +20,7 @@ pub mod uds;
 pub mod utxos_of_script;
 
 use crate::*;
-use duniter_dbs::cm_v1::CmV1DbReadable as _;
+use duniter_dbs::databases::cm_v1::CmV1DbReadable as _;
 
 #[derive(async_graphql::MergedObject, Default)]
 pub struct QueryRoot(
diff --git a/rust-libs/modules/gva/src/queries/uds.rs b/rust-libs/modules/gva/src/queries/uds.rs
index 2d2443ab285b2b6f2e9bd9e7451f8b8f7b14a1f5..a52a2ad4ce7afc4d44e111269d08fb872d0e5be7 100644
--- a/rust-libs/modules/gva/src/queries/uds.rs
+++ b/rust-libs/modules/gva/src/queries/uds.rs
@@ -15,7 +15,7 @@
 
 use crate::*;
 use async_graphql::connection::*;
-use duniter_dbs::bc_v2::BcV2DbReadable;
+use duniter_dbs::databases::bc_v2::BcV2DbReadable;
 use duniter_gva_dbs_reader::{uds_of_pubkey::UdsWithSum, PagedData};
 
 #[derive(Default)]
@@ -160,7 +160,7 @@ mod tests {
     #[tokio::test]
     async fn query_current_ud() -> anyhow::Result<()> {
         let mut dbs_reader = MockDbsReader::new();
-        use duniter_dbs::bc_v2::BcV2DbRo;
+        use duniter_dbs::databases::bc_v2::BcV2DbRo;
         dbs_reader
             .expect_get_current_ud::<BcV2DbRo<FileBackend>>()
             .times(1)
diff --git a/rust-libs/modules/gva/src/queries/utxos_of_script.rs b/rust-libs/modules/gva/src/queries/utxos_of_script.rs
index 00edaae9aeceafa660fca9fd823bde4aab7914b5..cccaa81244eecaedf7a22b7f8651eb12b62d1724 100644
--- a/rust-libs/modules/gva/src/queries/utxos_of_script.rs
+++ b/rust-libs/modules/gva/src/queries/utxos_of_script.rs
@@ -15,7 +15,7 @@
 
 use crate::*;
 use async_graphql::connection::*;
-use duniter_dbs::GvaV1DbReadable;
+use duniter_dbs::databases::gva_v1::GvaV1DbReadable;
 use duniter_gva_dbs_reader::{
     utxos::{UtxoCursor, UtxosWithSum},
     PagedData,
diff --git a/rust-libs/modules/gva/src/subscriptions.rs b/rust-libs/modules/gva/src/subscriptions.rs
index 7dd697b27a26cd9453803553aebf19713732a1ab..391c4f58256d0d39692694c266dca90f6896d172 100644
--- a/rust-libs/modules/gva/src/subscriptions.rs
+++ b/rust-libs/modules/gva/src/subscriptions.rs
@@ -36,7 +36,7 @@ impl SubscriptionRoot {
         r.into_stream().filter_map(|events| {
             let mut txs = Vec::new();
             for event in events.deref() {
-                if let duniter_dbs::txs_mp_v2::TxsEvent::Upsert {
+                if let duniter_dbs::databases::txs_mp_v2::TxsEvent::Upsert {
                     value: ref pending_tx,
                     ..
                 } = event