diff --git a/blockchain/apply_valid_block.rs b/blockchain/apply_valid_block.rs
index 23e781dffa3435ba91acb69e17685071ae1a7f63..4b5ecfdc3f3041f0b3f4f9b2a6132cf1d4287d92 100644
--- a/blockchain/apply_valid_block.rs
+++ b/blockchain/apply_valid_block.rs
@@ -24,9 +24,7 @@ use duniter_documents::blockchain::Document;
 use duniter_documents::BlockId;
 use duniter_wotb::data::{NewLinkResult, RemLinkResult};
 use duniter_wotb::{NodeId, WebOfTrust};
-use rustbreak::backend::Backend;
 use std::collections::{HashMap, HashSet};
-use std::fmt::Debug;
 
 #[derive(Debug)]
 /// Stores all queries to apply in database to "apply" the block
@@ -43,10 +41,10 @@ pub enum ApplyValidBlockError {
     RevokeUnknowNodeId(),
 }
 
-pub fn apply_valid_block<W: WebOfTrust, B: Backend + Debug>(
+pub fn apply_valid_block<W: WebOfTrust>(
     block: &BlockDocument,
     wot_index: &mut HashMap<PubKey, NodeId>,
-    wot_db: &BinDB<W, B>,
+    wot_db: &BinDB<W>,
     expire_certs: &HashMap<(NodeId, NodeId), BlockId>,
     old_fork_id: Option<ForkId>,
 ) -> Result<ValidBlockApplyReqs, ApplyValidBlockError> {
diff --git a/blockchain/check_and_apply_block.rs b/blockchain/check_and_apply_block.rs
index 620aad46cabefa51a3549a1e218bbe86bfb0af77..62366dd6548a25fbd6b6d7e8b4e44cafb7662834 100644
--- a/blockchain/check_and_apply_block.rs
+++ b/blockchain/check_and_apply_block.rs
@@ -22,8 +22,6 @@ use duniter_dal::*;
 use duniter_documents::blockchain::Document;
 use duniter_documents::{BlockHash, BlockId, Blockstamp, PreviousBlockstamp};
 use duniter_network::NetworkBlock;
-use rustbreak::backend::Backend;
-use std::fmt::Debug;
 use *;
 
 #[derive(Debug, Copy, Clone)]
@@ -55,13 +53,13 @@ impl From<ApplyValidBlockError> for BlockError {
     }
 }
 
-pub fn check_and_apply_block<W: WebOfTrust, B: Backend + Debug>(
+pub fn check_and_apply_block<W: WebOfTrust>(
     blocks_databases: &BlocksV10DBs,
-    certs_db: &BinFileDB<CertsExpirV10Datas>,
+    certs_db: &BinDB<CertsExpirV10Datas>,
     block: &Block,
     current_blockstamp: &Blockstamp,
     wotb_index: &mut HashMap<PubKey, NodeId>,
-    wot_db: &BinDB<W, B>,
+    wot_db: &BinDB<W>,
     forks_states: &[ForkStatus],
 ) -> Result<ValidBlockApplyReqs, BlockError> {
     let (block_doc, already_have_block) = match *block {
diff --git a/blockchain/dbex.rs b/blockchain/dbex.rs
index 8833738f3993a2946c23cfdf4551410098acbeda..a07cc1f29e72d36df4a4e6df3d331565ee50ecb5 100644
--- a/blockchain/dbex.rs
+++ b/blockchain/dbex.rs
@@ -64,9 +64,9 @@ pub fn dbex_tx<DC: DuniterConf>(profile: &str, conf: &DC, _csv: bool, query: &DB
 
     // Open databases
     let load_dbs_begin = SystemTime::now();
-    //let blocks_databases = BlocksV10DBs::open(&db_path, false);
-    let currency_databases = CurrencyV10DBs::<FileBackend>::open(&db_path);
-    let wot_databases = WotsV10DBs::open(&db_path, false);
+    //let blocks_databases = BlocksV10DBs::open(Some(&db_path));
+    let currency_databases = CurrencyV10DBs::open(Some(&db_path));
+    let wot_databases = WotsV10DBs::open(Some(&db_path));
     let load_dbs_duration = SystemTime::now()
         .duration_since(load_dbs_begin)
         .expect("duration_since error !");
@@ -122,7 +122,7 @@ pub fn dbex_wot<DC: DuniterConf>(profile: &str, conf: &DC, csv: bool, query: &DB
     let load_dbs_begin = SystemTime::now();
     let currency_params_db =
         open_db::<CurrencyParamsV10Datas>(&db_path, "params.db").expect("Fail to open params db");
-    let wot_databases = WotsV10DBs::open(&db_path, false);
+    let wot_databases = WotsV10DBs::open(Some(&db_path));
     let load_dbs_duration = SystemTime::now()
         .duration_since(load_dbs_begin)
         .expect("duration_since error");
@@ -155,7 +155,7 @@ pub fn dbex_wot<DC: DuniterConf>(profile: &str, conf: &DC, csv: bool, query: &DB
         .expect("Fail to read IdentitiesDB !");
 
     // Open wot db
-    let wot_db = open_wot_db::<RustyWebOfTrust>(&db_path).expect("Fail to open WotDB !");
+    let wot_db = open_wot_db::<RustyWebOfTrust>(Some(&db_path)).expect("Fail to open WotDB !");
 
     // Print wot blockstamp
     //println!("Wot : Current blockstamp = {}.", wot_blockstamp);
diff --git a/blockchain/lib.rs b/blockchain/lib.rs
index 40d256276c6decefe5a6839f39192d95fdfceb64..410379bfb754e51498063199747fc7b75d2b4010 100644
--- a/blockchain/lib.rs
+++ b/blockchain/lib.rs
@@ -16,19 +16,10 @@
 //! Module managing the Duniter blockchain.
 
 #![cfg_attr(feature = "strict", deny(warnings))]
-#![cfg_attr(
-    feature = "cargo-clippy",
-    allow(unused_collect, duration_subsec)
-)]
+#![cfg_attr(feature = "cargo-clippy", allow(unused_collect, duration_subsec))]
 #![deny(
-    missing_docs,
-    missing_debug_implementations,
-    missing_copy_implementations,
-    trivial_casts,
-    trivial_numeric_casts,
-    unsafe_code,
-    unstable_features,
-    unused_import_braces,
+    missing_docs, missing_debug_implementations, missing_copy_implementations, trivial_casts,
+    trivial_numeric_casts, unsafe_code, unstable_features, unused_import_braces,
     unused_qualifications
 )]
 
@@ -44,7 +35,6 @@ extern crate duniter_message;
 extern crate duniter_module;
 extern crate duniter_network;
 extern crate duniter_wotb;
-extern crate rustbreak;
 extern crate serde;
 extern crate serde_json;
 extern crate sqlite;
@@ -57,7 +47,6 @@ mod sync;
 mod ts_parsers;
 
 use std::collections::HashMap;
-use std::fmt::Debug;
 use std::ops::Deref;
 use std::path::PathBuf;
 use std::str;
@@ -86,7 +75,6 @@ use duniter_network::{
 use duniter_wotb::data::rusty::RustyWebOfTrust;
 use duniter_wotb::operations::distance::RustyDistanceCalculator;
 use duniter_wotb::{NodeId, WebOfTrust};
-use rustbreak::backend::{Backend, FileBackend};
 
 /// The blocks are requested by packet groups. This constant sets the block packet size.
 pub static CHUNK_SIZE: &'static u32 = &50;
@@ -113,7 +101,7 @@ pub struct BlockchainModule {
     /// Blocks Databases
     pub blocks_databases: BlocksV10DBs,
     /// Currency databases
-    currency_databases: CurrencyV10DBs<FileBackend>,
+    currency_databases: CurrencyV10DBs,
     /// The block under construction
     pub pending_block: Option<Box<BlockDocument>>,
     /// Current state of all forks
@@ -165,9 +153,9 @@ impl BlockchainModule {
         let db_path = duniter_conf::get_blockchain_db_path(profile, &conf.currency());
 
         // Open databases
-        let blocks_databases = BlocksV10DBs::open(&db_path, false);
-        let wot_databases = WotsV10DBs::open(&db_path, false);
-        let currency_databases = CurrencyV10DBs::<FileBackend>::open(&db_path);
+        let blocks_databases = BlocksV10DBs::open(Some(&db_path));
+        let wot_databases = WotsV10DBs::open(Some(&db_path));
+        let currency_databases = CurrencyV10DBs::open(Some(&db_path));
 
         // Get current blockstamp
         let current_blockstamp = duniter_dal::block::get_current_blockstamp(&blocks_databases)
@@ -306,12 +294,12 @@ impl BlockchainModule {
             }
         }
     }
-    fn receive_network_documents<W: WebOfTrust, B: Backend + Debug>(
+    fn receive_network_documents<W: WebOfTrust>(
         &mut self,
         network_documents: &[NetworkDocument],
         current_blockstamp: &Blockstamp,
         wotb_index: &mut HashMap<PubKey, NodeId>,
-        wot_db: &BinDB<W, B>,
+        wot_db: &BinDB<W>,
     ) -> Blockstamp {
         let mut blockchain_documents = Vec::new();
         let mut current_blockstamp = *current_blockstamp;
@@ -321,7 +309,7 @@ impl BlockchainModule {
         for network_document in network_documents {
             match *network_document {
                 NetworkDocument::Block(ref network_block) => {
-                    match check_and_apply_block(
+                    match check_and_apply_block::<W>(
                         &self.blocks_databases,
                         &self.wot_databases.certs_db,
                         &Block::NetworkBlock(network_block),
@@ -446,12 +434,12 @@ impl BlockchainModule {
             }
         }
     }
-    fn receive_blocks<W: WebOfTrust, B: Backend + Debug>(
+    fn receive_blocks<W: WebOfTrust>(
         &mut self,
         blocks_in_box: &[Box<NetworkBlock>],
         current_blockstamp: &Blockstamp,
         wotb_index: &mut HashMap<PubKey, NodeId>,
-        wot: &BinDB<W, B>,
+        wot: &BinDB<W>,
     ) -> Blockstamp {
         debug!("BlockchainModule : receive_blocks()");
         let blocks: Vec<&NetworkBlock> = blocks_in_box.into_iter().map(|b| b.deref()).collect();
@@ -461,7 +449,7 @@ impl BlockchainModule {
         let mut save_currency_dbs = false;
         for block in blocks {
             if let Ok(ValidBlockApplyReqs(bc_db_query, wot_dbs_queries, tx_dbs_queries)) =
-                check_and_apply_block::<W, B>(
+                check_and_apply_block::<W>(
                     &self.blocks_databases,
                     &self.wot_databases.certs_db,
                     &Block::NetworkBlock(block),
@@ -528,7 +516,7 @@ impl BlockchainModule {
                 .expect("Fatal eror : get_wotb_index : Fail to read blockchain databases");
 
         // Open wot file
-        let wot_db = open_wot_db::<RustyWebOfTrust>(&dbs_path).expect("Fail to open WotDB !");
+        let wot_db = open_wot_db::<RustyWebOfTrust>(Some(&dbs_path)).expect("Fail to open WotDB !");
 
         // Get current block
         let mut current_blockstamp = duniter_dal::block::get_current_blockstamp(
diff --git a/blockchain/revert_block.rs b/blockchain/revert_block.rs
index 497b5320f982d7d6293f4dd1978fe1039b5a099a..4ac1e0f48bebd0cfdfc1ade1033dd60e41e271cc 100644
--- a/blockchain/revert_block.rs
+++ b/blockchain/revert_block.rs
@@ -24,9 +24,7 @@ use duniter_documents::blockchain::v10::documents::transaction::{TxAmount, TxBas
 use duniter_documents::blockchain::Document;
 use duniter_wotb::data::{NewLinkResult, RemLinkResult};
 use duniter_wotb::{NodeId, WebOfTrust};
-use rustbreak::backend::Backend;
 use std::collections::HashMap;
-use std::fmt::Debug;
 
 #[derive(Debug)]
 /// Stores all queries to apply in database to "apply" the block
@@ -43,10 +41,10 @@ pub enum RevertValidBlockError {
     RevokeUnknowNodeId(),
 }
 
-pub fn revert_block<W: WebOfTrust, B: Backend + Debug>(
+pub fn revert_block<W: WebOfTrust>(
     dal_block: &DALBlock,
     wot_index: &mut HashMap<PubKey, NodeId>,
-    wot_db: &BinDB<W, B>,
+    wot_db: &BinDB<W>,
     to_fork_id: Option<ForkId>,
     txs: &TxV10Datas,
 ) -> Result<ValidBlockRevertReqs, RevertValidBlockError> {
diff --git a/blockchain/sync.rs b/blockchain/sync.rs
index 3c42f95b32e3a9137fe699001d54bdd8d5e28725..d2ba4d32ef2411c69e907863c0f17948d49c04ad 100644
--- a/blockchain/sync.rs
+++ b/blockchain/sync.rs
@@ -27,7 +27,6 @@ use duniter_dal::ForkId;
 use duniter_documents::{BlockHash, BlockId, Hash};
 use duniter_network::NetworkBlock;
 use duniter_wotb::NodeId;
-use rustbreak::{deser::Bincode, MemoryDatabase};
 use std::collections::{HashMap, VecDeque};
 use std::fs;
 use std::ops::Deref;
@@ -157,7 +156,7 @@ pub fn sync_ts<DC: DuniterConf>(
         // Get current local blockstamp
         debug!("Get local current blockstamp...");
         let db_path = duniter_conf::get_blockchain_db_path(&profile_copy, &currency);
-        let blocks_databases = BlocksV10DBs::open(&db_path, false);
+        let blocks_databases = BlocksV10DBs::open(Some(&db_path));
         let current_blockstamp: Blockstamp = duniter_dal::block::get_current_blockstamp(
             &blocks_databases,
         ).expect("ForksV10DB : RustBreakError !")
@@ -258,10 +257,10 @@ pub fn sync_ts<DC: DuniterConf>(
     duniter_conf::write_conf_file(profile, &conf).expect("Fail to write new conf !");
 
     // Open wot db
-    let wot_db = open_wot_db::<RustyWebOfTrust>(&db_path).expect("Fail to open WotDB !");
+    let wot_db = open_wot_db::<RustyWebOfTrust>(Some(&db_path)).expect("Fail to open WotDB !");
 
     // Open blocks databases
-    let databases = BlocksV10DBs::open(&db_path, false);
+    let databases = BlocksV10DBs::open(Some(&db_path));
 
     // Get local current blockstamp
     debug!("Get local current blockstamp...");
@@ -401,7 +400,7 @@ pub fn sync_ts<DC: DuniterConf>(
         let wot_job_begin = SystemTime::now();
         // Open databases
         let db_path = duniter_conf::get_blockchain_db_path(&profile_copy2, &currency_copy2);
-        let databases = WotsV10DBs::open(&db_path, false);
+        let databases = WotsV10DBs::open(Some(&db_path));
 
         // Listen db requets
         let mut all_wait_duration = Duration::from_millis(0);
@@ -442,7 +441,7 @@ pub fn sync_ts<DC: DuniterConf>(
         let tx_job_begin = SystemTime::now();
         // Open databases
         let db_path = duniter_conf::get_blockchain_db_path(&profile_copy, &currency_copy);
-        let databases = CurrencyV10DBs::<FileBackend>::open(&db_path);
+        let databases = CurrencyV10DBs::open(Some(&db_path));
 
         // Listen db requets
         let mut all_wait_duration = Duration::from_millis(0);
@@ -480,8 +479,8 @@ pub fn sync_ts<DC: DuniterConf>(
     // Apply blocks
     let mut blocks_not_expiring = VecDeque::with_capacity(200_000);
     let mut last_block_expiring: isize = -1;
-    let certs_db = MemoryDatabase::<CertsExpirV10Datas, Bincode>::memory(HashMap::new())
-        .expect("Fail to create memory certs_db");
+    let certs_db =
+        BinDB::Mem(open_memory_db::<CertsExpirV10Datas>().expect("Fail to create memory certs_db"));
     let mut currency_params = CurrencyParameters::default();
     let mut get_currency_params = false;
     let mut certs_count = 0;
@@ -534,7 +533,7 @@ pub fn sync_ts<DC: DuniterConf>(
         // Apply block
         let apply_valid_block_begin = SystemTime::now();
         if let Ok(ValidBlockApplyReqs(block_req, wot_db_reqs, currency_db_reqs)) =
-            apply_valid_block::<RustyWebOfTrust, FileBackend>(
+            apply_valid_block::<RustyWebOfTrust>(
                 &block_doc,
                 &mut wotb_index,
                 &wot_db,
diff --git a/conf/lib.rs b/conf/lib.rs
index 7ebf86f278e7d2eb19d43fd89d21dc18b257d291..5964847e219113abbb896aa2c16aba2000985f60 100644
--- a/conf/lib.rs
+++ b/conf/lib.rs
@@ -18,14 +18,8 @@
 
 #![cfg_attr(feature = "strict", deny(warnings))]
 #![deny(
-    missing_docs,
-    missing_debug_implementations,
-    missing_copy_implementations,
-    trivial_casts,
-    trivial_numeric_casts,
-    unsafe_code,
-    unstable_features,
-    unused_import_braces,
+    missing_docs, missing_debug_implementations, missing_copy_implementations, trivial_casts,
+    trivial_numeric_casts, unsafe_code, unstable_features, unused_import_braces,
     unused_qualifications
 )]
 
diff --git a/core/lib.rs b/core/lib.rs
index c4e2d0911c24e24f0b46692118efa8f61baecec2..fcbe70d09e13446a0a4b3d8e5632c4f3dda9199f 100644
--- a/core/lib.rs
+++ b/core/lib.rs
@@ -18,14 +18,8 @@
 #![cfg_attr(feature = "strict", deny(warnings))]
 #![cfg_attr(feature = "cargo-clippy", allow(implicit_hasher))]
 #![deny(
-    missing_docs,
-    missing_debug_implementations,
-    missing_copy_implementations,
-    trivial_casts,
-    trivial_numeric_casts,
-    unsafe_code,
-    unstable_features,
-    unused_import_braces,
+    missing_docs, missing_debug_implementations, missing_copy_implementations, trivial_casts,
+    trivial_numeric_casts, unsafe_code, unstable_features, unused_import_braces,
     unused_qualifications
 )]
 
diff --git a/crypto/lib.rs b/crypto/lib.rs
index c05b5fc79217ec29b634dc90fa6a851124c2d55a..5f43cce266558af94012e3305a84eed8dc2eb16d 100644
--- a/crypto/lib.rs
+++ b/crypto/lib.rs
@@ -17,14 +17,8 @@
 
 #![cfg_attr(feature = "strict", deny(warnings))]
 #![deny(
-    missing_docs,
-    missing_debug_implementations,
-    missing_copy_implementations,
-    trivial_casts,
-    trivial_numeric_casts,
-    unsafe_code,
-    unstable_features,
-    unused_import_braces,
+    missing_docs, missing_debug_implementations, missing_copy_implementations, trivial_casts,
+    trivial_numeric_casts, unsafe_code, unstable_features, unused_import_braces,
     unused_qualifications
 )]
 
diff --git a/dal/balance.rs b/dal/balance.rs
index 242fe2817709404d14099192b2d61e06ba4274f2..0852960c41981a82348af8bb3ace8b103eecf002 100644
--- a/dal/balance.rs
+++ b/dal/balance.rs
@@ -18,7 +18,7 @@ use *;
 
 /// Get address balance
 pub fn get_address_balance(
-    balances_db: &BinFileDB<BalancesV10Datas>,
+    balances_db: &BinDB<BalancesV10Datas>,
     address: &UTXOConditionsGroup,
 ) -> Result<Option<SourceAmount>, DALError> {
     Ok(balances_db.read(|db| {
diff --git a/dal/block.rs b/dal/block.rs
index 42a5f756893b20b07d13ea757ed25115af640b36..532aa9f3bf5bea74d150d03b7d036e8360ba4af5 100644
--- a/dal/block.rs
+++ b/dal/block.rs
@@ -13,9 +13,6 @@
 // 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/>.
 
-extern crate rustbreak;
-extern crate serde;
-
 use super::constants::MAX_FORKS;
 use duniter_crypto::keys::*;
 use duniter_documents::blockchain::v10::documents::BlockDocument;
@@ -49,7 +46,7 @@ impl DALBlock {
 
 ///Get forks status
 pub fn get_forks(
-    forks_db: &BinFileDB<ForksV10Datas>,
+    forks_db: &BinDB<ForksV10Datas>,
     current_blockstamp: Blockstamp,
 ) -> Result<Vec<ForkStatus>, DALError> {
     Ok(forks_db.read(|forks_db| {
@@ -145,7 +142,7 @@ pub fn get_current_blockstamp(blocks_db: &BlocksV10DBs) -> Result<Option<Blockst
 
 /// Get block fork id
 pub fn get_fork_id_of_blockstamp(
-    forks_blocks_db: &BinFileDB<ForksBlocksV10Datas>,
+    forks_blocks_db: &BinDB<ForksBlocksV10Datas>,
     blockstamp: &Blockstamp,
 ) -> Result<Option<ForkId>, DALError> {
     Ok(forks_blocks_db.read(|db| {
@@ -160,8 +157,8 @@ pub fn get_fork_id_of_blockstamp(
 impl DALBlock {
     /// Delete fork
     pub fn delete_fork(
-        forks_db: &BinFileDB<ForksV10Datas>,
-        forks_blocks_db: &BinFileDB<ForksBlocksV10Datas>,
+        forks_db: &BinDB<ForksV10Datas>,
+        forks_blocks_db: &BinDB<ForksBlocksV10Datas>,
         fork_id: ForkId,
     ) -> Result<(), DALError> {
         let fork_meta_datas = forks_db
@@ -185,7 +182,7 @@ impl DALBlock {
     }
     /// Assign fork id to new block
     pub fn assign_fork_to_new_block(
-        forks_db: &BinFileDB<ForksV10Datas>,
+        forks_db: &BinDB<ForksV10Datas>,
         new_block_previous_blockstamp: &PreviousBlockstamp,
         new_block_hash: &BlockHash,
     ) -> Result<(Option<ForkId>, bool), DALError> {
@@ -232,7 +229,7 @@ impl DALBlock {
     }
     /// Get fork block
     pub fn get_block_fork(
-        forks_db: &BinFileDB<ForksV10Datas>,
+        forks_db: &BinDB<ForksV10Datas>,
         previous_blockstamp: &PreviousBlockstamp,
     ) -> Result<Option<ForkId>, DALError> {
         Ok(forks_db.read(|forks_db| {
@@ -246,7 +243,7 @@ impl DALBlock {
     }
     /// Get block hash
     pub fn get_block_hash(
-        db: &BinFileDB<LocalBlockchainV10Datas>,
+        db: &BinDB<LocalBlockchainV10Datas>,
         block_number: BlockId,
     ) -> Result<Option<BlockHash>, DALError> {
         Ok(db.read(|db| {
@@ -259,8 +256,8 @@ impl DALBlock {
     }
     /// Return true if the node already knows this block
     pub fn already_have_block(
-        blockchain_db: &BinFileDB<LocalBlockchainV10Datas>,
-        forks_blocks_db: &BinFileDB<ForksBlocksV10Datas>,
+        blockchain_db: &BinDB<LocalBlockchainV10Datas>,
+        forks_blocks_db: &BinDB<ForksBlocksV10Datas>,
         blockstamp: Blockstamp,
     ) -> Result<bool, DALError> {
         let already_have_block = forks_blocks_db.read(|db| db.contains_key(&blockstamp))?;
@@ -279,8 +276,8 @@ impl DALBlock {
     }
     /// Get stackables blocks
     pub fn get_stackables_blocks(
-        forks_db: &BinFileDB<ForksV10Datas>,
-        forks_blocks_db: &BinFileDB<ForksBlocksV10Datas>,
+        forks_db: &BinDB<ForksV10Datas>,
+        forks_blocks_db: &BinDB<ForksBlocksV10Datas>,
         current_blockstamp: &Blockstamp,
     ) -> Result<Vec<DALBlock>, DALError> {
         debug!("get_stackables_blocks() after {}", current_blockstamp);
@@ -309,7 +306,7 @@ impl DALBlock {
     }
     /// Get stackables forks
     pub fn get_stackables_forks(
-        db: &BinFileDB<ForksV10Datas>,
+        db: &BinDB<ForksV10Datas>,
         current_blockstamp: &Blockstamp,
     ) -> Result<Vec<usize>, DALError> {
         Ok(db.read(|db| {
@@ -326,8 +323,8 @@ impl DALBlock {
     }
     /// Get block
     pub fn get_block(
-        blockchain_db: &BinFileDB<LocalBlockchainV10Datas>,
-        forks_blocks_db: Option<&BinFileDB<ForksBlocksV10Datas>>,
+        blockchain_db: &BinDB<LocalBlockchainV10Datas>,
+        forks_blocks_db: Option<&BinDB<ForksBlocksV10Datas>>,
         blockstamp: &Blockstamp,
     ) -> Result<Option<DALBlock>, DALError> {
         let dal_block = blockchain_db.read(|db| db.get(&blockstamp.id).cloned())?;
@@ -341,7 +338,7 @@ impl DALBlock {
     }
     /// Get block in local blockchain
     pub fn get_block_in_local_blockchain(
-        db: &BinFileDB<LocalBlockchainV10Datas>,
+        db: &BinDB<LocalBlockchainV10Datas>,
         block_id: BlockId,
     ) -> Result<Option<BlockDocument>, DALError> {
         Ok(db.read(|db| {
@@ -355,7 +352,7 @@ impl DALBlock {
     /// Get current frame of calculating members
     pub fn get_current_frame(
         &self,
-        db: &BinFileDB<LocalBlockchainV10Datas>,
+        db: &BinDB<LocalBlockchainV10Datas>,
     ) -> Result<HashMap<PubKey, usize>, DALError> {
         let frame_begin = self.block.number.0 - self.block.issuers_frame as u32;
         Ok(db.read(|db| {
@@ -378,7 +375,7 @@ impl DALBlock {
         })?)
     }
     /// Compute median issuers frame
-    pub fn compute_median_issuers_frame(&mut self, db: &BinFileDB<LocalBlockchainV10Datas>) -> () {
+    pub fn compute_median_issuers_frame(&mut self, db: &BinDB<LocalBlockchainV10Datas>) -> () {
         let current_frame = self
             .get_current_frame(db)
             .expect("Fatal error : fail to read LocalBlockchainV10DB !");
diff --git a/dal/certs.rs b/dal/certs.rs
index 96269f2018d8d0aa3a50b3c2904972d0b8bc63a3..fea1325eb231a1a775bffc6f13d48ac71eff17d0 100644
--- a/dal/certs.rs
+++ b/dal/certs.rs
@@ -18,14 +18,12 @@ extern crate duniter_wotb;
 
 use duniter_documents::BlockId;
 use duniter_wotb::NodeId;
-use rustbreak::backend::Backend;
 use std::collections::HashMap;
-use std::fmt::Debug;
 use {BinDB, CertsExpirV10Datas, DALError};
 
 /// Find certifications that emitted in indicated blocks expiring
-pub fn find_expire_certs<B: Backend + Debug>(
-    certs_db: &BinDB<CertsExpirV10Datas, B>,
+pub fn find_expire_certs(
+    certs_db: &BinDB<CertsExpirV10Datas>,
     blocks_expiring: Vec<BlockId>,
 ) -> Result<HashMap<(NodeId, NodeId), BlockId>, DALError> {
     Ok(certs_db.read(|db| {
diff --git a/dal/currency_params.rs b/dal/currency_params.rs
index daf0332aa9e509a02e3457138dc6afa198f5f0b3..77fb3f8175428a5464ff237c09a15971918cfa03 100644
--- a/dal/currency_params.rs
+++ b/dal/currency_params.rs
@@ -140,7 +140,7 @@ impl CurrencyParameters {
 
 /// Get currency parameters
 pub fn get_currency_params(
-    blockchain_db: &BinFileDB<LocalBlockchainV10Datas>,
+    blockchain_db: &BinDB<LocalBlockchainV10Datas>,
 ) -> Result<Option<CurrencyParameters>, DALError> {
     Ok(blockchain_db.read(|db| {
         if let Some(genesis_block) = db.get(&BlockId(0)) {
diff --git a/dal/identity.rs b/dal/identity.rs
index 268fd90df0543445a474b3ef5c651ea76df60b65..c2af1aca008d66967f1ecb330c539bb596949234 100644
--- a/dal/identity.rs
+++ b/dal/identity.rs
@@ -18,9 +18,7 @@ use duniter_crypto::keys::*;
 use duniter_documents::blockchain::v10::documents::IdentityDocument;
 use duniter_documents::{BlockId, Blockstamp};
 use duniter_wotb::NodeId;
-use rustbreak::backend::Backend;
 use std::collections::HashMap;
-use std::fmt::Debug;
 use {BinDB, DALError, IdentitiesV10Datas, MsExpirV10Datas};
 
 #[derive(Clone, Debug, Deserialize, Serialize)]
@@ -64,8 +62,8 @@ pub struct DALIdentity {
 }
 
 /// Get uid from pubkey
-pub fn get_uid<B: Backend + Debug>(
-    identities_db: &BinDB<IdentitiesV10Datas, B>,
+pub fn get_uid(
+    identities_db: &BinDB<IdentitiesV10Datas>,
     pubkey: PubKey,
 ) -> Result<Option<String>, DALError> {
     Ok(identities_db.read(|db| {
@@ -78,8 +76,8 @@ pub fn get_uid<B: Backend + Debug>(
 }
 
 /// Get pubkey from uid
-pub fn get_pubkey_from_uid<B: Backend + Debug>(
-    identities_db: &BinDB<IdentitiesV10Datas, B>,
+pub fn get_pubkey_from_uid(
+    identities_db: &BinDB<IdentitiesV10Datas>,
     uid: &str,
 ) -> Result<Option<PubKey>, DALError> {
     Ok(identities_db.read(|db| {
@@ -94,8 +92,8 @@ pub fn get_pubkey_from_uid<B: Backend + Debug>(
 
 impl DALIdentity {
     /// Apply "exclude identity" event
-    pub fn exclude_identity<B: Backend + Debug>(
-        identities_db: &BinDB<IdentitiesV10Datas, B>,
+    pub fn exclude_identity(
+        identities_db: &BinDB<IdentitiesV10Datas>,
         pubkey: &PubKey,
         exclusion_blockstamp: &Blockstamp,
         revert: bool,
@@ -131,8 +129,8 @@ impl DALIdentity {
     }
 
     /// Get wot_id index
-    pub fn get_wotb_index<B: Backend + Debug>(
-        identities_db: &BinDB<IdentitiesV10Datas, B>,
+    pub fn get_wotb_index(
+        identities_db: &BinDB<IdentitiesV10Datas>,
     ) -> Result<HashMap<PubKey, NodeId>, DALError> {
         Ok(identities_db.read(|db| {
             let mut wotb_index: HashMap<PubKey, NodeId> = HashMap::new();
@@ -145,8 +143,8 @@ impl DALIdentity {
     }
 
     /// Apply "revoke identity" event
-    pub fn revoke_identity<B: Backend + Debug>(
-        identities_db: &BinDB<IdentitiesV10Datas, B>,
+    pub fn revoke_identity(
+        identities_db: &BinDB<IdentitiesV10Datas>,
         pubkey: &PubKey,
         renewal_blockstamp: &Blockstamp,
         explicit: bool,
@@ -193,11 +191,11 @@ impl DALIdentity {
     }
 
     /// Apply "renewal identity" event in databases
-    pub fn renewal_identity<B: Backend + Debug>(
+    pub fn renewal_identity(
         &mut self,
         currency_params: &CurrencyParameters,
-        identities_db: &BinDB<IdentitiesV10Datas, B>,
-        ms_db: &BinDB<MsExpirV10Datas, B>,
+        identities_db: &BinDB<IdentitiesV10Datas>,
+        ms_db: &BinDB<MsExpirV10Datas>,
         pubkey: &PubKey,
         idty_wot_id: NodeId,
         renewal_timestamp: u64,
@@ -259,10 +257,7 @@ impl DALIdentity {
     }
 
     /// Remove identity from databases
-    pub fn remove_identity<B: Backend + Debug>(
-        db: &BinDB<IdentitiesV10Datas, B>,
-        pubkey: PubKey,
-    ) -> Result<(), DALError> {
+    pub fn remove_identity(db: &BinDB<IdentitiesV10Datas>, pubkey: PubKey) -> Result<(), DALError> {
         db.write(|db| {
             db.remove(&pubkey);
         })?;
@@ -270,8 +265,8 @@ impl DALIdentity {
     }
 
     /// Get identity in databases
-    pub fn get_identity<B: Backend + Debug>(
-        db: &BinDB<IdentitiesV10Datas, B>,
+    pub fn get_identity(
+        db: &BinDB<IdentitiesV10Datas>,
         pubkey: &PubKey,
     ) -> Result<Option<DALIdentity>, DALError> {
         Ok(db.read(|db| {
diff --git a/dal/lib.rs b/dal/lib.rs
index 6eba641596e485ac02e499cb3a981f3bfd747abf..bd82d6b27ee3b10db4e5ee3e9c2694cca8e690d0 100644
--- a/dal/lib.rs
+++ b/dal/lib.rs
@@ -19,14 +19,8 @@
 #![cfg_attr(feature = "cargo-clippy", allow(implicit_hasher))]
 #![cfg_attr(feature = "exp", allow(warnings))]
 #![deny(
-    missing_docs,
-    missing_debug_implementations,
-    missing_copy_implementations,
-    trivial_casts,
-    trivial_numeric_casts,
-    unsafe_code,
-    unstable_features,
-    unused_import_braces,
+    missing_docs, missing_debug_implementations, missing_copy_implementations, trivial_casts,
+    trivial_numeric_casts, unsafe_code, unstable_features, unused_import_braces,
     unused_qualifications
 )]
 
@@ -84,7 +78,7 @@ use duniter_documents::blockchain::v10::documents::block::{BlockV10Parameters, C
 use duniter_documents::blockchain::v10::documents::transaction::*;
 use duniter_documents::{BlockHash, BlockId, Blockstamp, Hash, PreviousBlockstamp};
 use duniter_wotb::{NodeId, WebOfTrust};
-use rustbreak::backend::{Backend, FileBackend, MemoryBackend};
+use rustbreak::backend::{FileBackend, MemoryBackend};
 use rustbreak::error::{RustbreakError, RustbreakErrorKind};
 use rustbreak::{deser::Bincode, Database, FileDatabase, MemoryDatabase};
 use serde::de::DeserializeOwned;
@@ -93,6 +87,7 @@ use std::collections::{HashMap, HashSet};
 use std::default::Default;
 use std::fmt::Debug;
 use std::fs;
+use std::panic::UnwindSafe;
 use std::path::PathBuf;
 
 use block::DALBlock;
@@ -127,37 +122,109 @@ pub type UDsV10Datas = HashMap<PubKey, HashSet<BlockId>>;
 /// V10 Balances accounts
 pub type BalancesV10Datas = HashMap<UTXOConditionsGroup, (SourceAmount, HashSet<UTXOIndexV10>)>;
 
-/// Binary Database
-pub type BinDB<D, B> = Database<D, B, Bincode>;
-/// Binary File Database
-pub type BinFileDB<D> = FileDatabase<D, Bincode>;
-/// Binary Memory Database
-pub type BinMemDB<D> = MemoryDatabase<D, Bincode>;
+#[derive(Debug)]
+/// Database
+pub enum BinDB<D: Serialize + DeserializeOwned + Debug + Default + Clone + Send> {
+    /// File database
+    File(Database<D, FileBackend, Bincode>),
+    /// Memory database
+    Mem(Database<D, MemoryBackend, Bincode>),
+}
+
+impl<D: Serialize + DeserializeOwned + Debug + Default + Clone + Send> BinDB<D> {
+    /// Flush the data structure to the backend
+    pub fn save(&self) -> Result<(), RustbreakError> {
+        match *self {
+            BinDB::File(ref file_db) => file_db.save(),
+            BinDB::Mem(ref mem_db) => mem_db.save(),
+        }
+    }
+    /// Read lock the database and get write access to the Data container
+    /// This gives you a read-only lock on the database. You can have as many readers in parallel as you wish.
+    pub fn read<T, R>(&self, task: T) -> Result<R, RustbreakError>
+    where
+        T: FnOnce(&D) -> R,
+    {
+        match *self {
+            BinDB::File(ref file_db) => file_db.read(task),
+            BinDB::Mem(ref mem_db) => mem_db.read(task),
+        }
+    }
+    /// Write lock the database and get write access to the Data container
+    /// This gives you an exclusive lock on the memory object. Trying to open the database in writing will block if it is currently being written to.
+    pub fn write<T>(&self, task: T) -> Result<(), RustbreakError>
+    where
+        T: FnOnce(&mut D) -> (),
+    {
+        match *self {
+            BinDB::File(ref file_db) => file_db.write(task),
+            BinDB::Mem(ref mem_db) => mem_db.write(task),
+        }
+    }
+    /// Write lock the database and get write access to the Data container in a safe way (clone of the internal data is made).
+    pub fn write_safe<T>(&self, task: T) -> Result<(), RustbreakError>
+    where
+        T: FnOnce(&mut D) -> () + UnwindSafe,
+    {
+        match *self {
+            BinDB::File(ref file_db) => file_db.write_safe(task),
+            BinDB::Mem(ref mem_db) => mem_db.write_safe(task),
+        }
+    }
+    /// Load the Data from the backend
+    pub fn load(&self) -> Result<(), RustbreakError> {
+        match *self {
+            BinDB::File(ref file_db) => file_db.load(),
+            BinDB::Mem(ref mem_db) => mem_db.load(),
+        }
+    }
+}
 
 #[derive(Debug)]
 /// Set of databases storing block information
 pub struct BlocksV10DBs {
     /// Local blockchain database
-    pub blockchain_db: BinFileDB<LocalBlockchainV10Datas>,
+    pub blockchain_db: BinDB<LocalBlockchainV10Datas>,
     /// Forks meta datas
-    pub forks_db: BinFileDB<ForksV10Datas>,
+    pub forks_db: BinDB<ForksV10Datas>,
     /// Forks blocks
-    pub forks_blocks_db: BinFileDB<ForksBlocksV10Datas>,
+    pub forks_blocks_db: BinDB<ForksBlocksV10Datas>,
 }
 
 impl BlocksV10DBs {
     /// Open blocks databases from their respective files
-    pub fn open(db_path: &PathBuf, _memory_mode: bool) -> BlocksV10DBs {
-        BlocksV10DBs {
-            blockchain_db: open_db::<LocalBlockchainV10Datas>(&db_path, "blockchain.db")
-                .expect("Fail to open LocalBlockchainV10DB"),
-            forks_db: open_db::<ForksV10Datas>(&db_path, "forks.db")
-                .expect("Fail to open ForksV10DB"),
-            forks_blocks_db: open_db::<ForksBlocksV10Datas>(&db_path, "forks_blocks.db")
-                .expect("Fail to open ForksBlocksV10DB"),
+    pub fn open(db_path: Option<&PathBuf>) -> BlocksV10DBs {
+        if let Some(db_path) = db_path {
+            BlocksV10DBs {
+                blockchain_db: BinDB::File(
+                    open_db::<LocalBlockchainV10Datas>(&db_path, "blockchain.db")
+                        .expect("Fail to open LocalBlockchainV10DB"),
+                ),
+                forks_db: BinDB::File(
+                    open_db::<ForksV10Datas>(&db_path, "forks.db")
+                        .expect("Fail to open ForksV10DB"),
+                ),
+                forks_blocks_db: BinDB::File(
+                    open_db::<ForksBlocksV10Datas>(&db_path, "forks_blocks.db")
+                        .expect("Fail to open ForksBlocksV10DB"),
+                ),
+            }
+        } else {
+            BlocksV10DBs {
+                blockchain_db: BinDB::Mem(
+                    open_memory_db::<LocalBlockchainV10Datas>()
+                        .expect("Fail to open LocalBlockchainV10DB"),
+                ),
+                forks_db: BinDB::Mem(
+                    open_memory_db::<ForksV10Datas>().expect("Fail to open ForksV10DB"),
+                ),
+                forks_blocks_db: BinDB::Mem(
+                    open_memory_db::<ForksBlocksV10Datas>().expect("Fail to open ForksBlocksV10DB"),
+                ),
+            }
         }
     }
-    /// Open blocks databases from their respective files
+    /// Save blocks databases in their respective files
     pub fn save_dbs(&self) {
         self.blockchain_db
             .save()
@@ -175,23 +242,43 @@ impl BlocksV10DBs {
 /// Set of databases storing web of trust information
 pub struct WotsV10DBs {
     /// Store iedntities
-    pub identities_db: BinFileDB<IdentitiesV10Datas>,
+    pub identities_db: BinDB<IdentitiesV10Datas>,
     /// Store memberships created_block_id (Use only to detect expirations)
-    pub ms_db: BinFileDB<MsExpirV10Datas>,
+    pub ms_db: BinDB<MsExpirV10Datas>,
     /// Store certifications created_block_id (Use only to detect expirations)
-    pub certs_db: BinFileDB<CertsExpirV10Datas>,
+    pub certs_db: BinDB<CertsExpirV10Datas>,
 }
 
 impl WotsV10DBs {
     /// Open wot databases from their respective files
-    pub fn open(db_path: &PathBuf, _memory_mode: bool) -> WotsV10DBs {
-        WotsV10DBs {
-            identities_db: open_db::<IdentitiesV10Datas>(&db_path, "identities.db")
-                .expect("Fail to open IdentitiesV10DB"),
-            ms_db: open_db::<MsExpirV10Datas>(&db_path, "ms.db")
-                .expect("Fail to open MsExpirV10DB"),
-            certs_db: open_db::<CertsExpirV10Datas>(&db_path, "certs.db")
-                .expect("Fail to open CertsExpirV10DB"),
+    pub fn open(db_path: Option<&PathBuf>) -> WotsV10DBs {
+        if let Some(db_path) = db_path {
+            WotsV10DBs {
+                identities_db: BinDB::File(
+                    open_db::<IdentitiesV10Datas>(&db_path, "identities.db")
+                        .expect("Fail to open IdentitiesV10DB"),
+                ),
+                ms_db: BinDB::File(
+                    open_db::<MsExpirV10Datas>(&db_path, "ms.db")
+                        .expect("Fail to open MsExpirV10DB"),
+                ),
+                certs_db: BinDB::File(
+                    open_db::<CertsExpirV10Datas>(&db_path, "certs.db")
+                        .expect("Fail to open CertsExpirV10DB"),
+                ),
+            }
+        } else {
+            WotsV10DBs {
+                identities_db: BinDB::Mem(
+                    open_memory_db::<IdentitiesV10Datas>().expect("Fail to open IdentitiesV10DB"),
+                ),
+                ms_db: BinDB::Mem(
+                    open_memory_db::<MsExpirV10Datas>().expect("Fail to open MsExpirV10DB"),
+                ),
+                certs_db: BinDB::Mem(
+                    open_memory_db::<CertsExpirV10Datas>().expect("Fail to open CertsExpirV10DB"),
+                ),
+            }
         }
     }
     /// Save wot databases from their respective files
@@ -210,40 +297,50 @@ impl WotsV10DBs {
 
 #[derive(Debug)]
 /// Set of databases storing currency information
-pub struct CurrencyV10DBs<B: Backend + Debug> {
+pub struct CurrencyV10DBs {
     /// Store all UD sources
-    pub du_db: BinDB<UDsV10Datas, B>,
+    pub du_db: BinDB<UDsV10Datas>,
     /// Store all Transactions
-    pub tx_db: BinDB<TxV10Datas, B>,
+    pub tx_db: BinDB<TxV10Datas>,
     /// Store all UTXOs
-    pub utxos_db: BinDB<UTXOsV10Datas, B>,
+    pub utxos_db: BinDB<UTXOsV10Datas>,
     /// Store balances of all address (and theirs UTXOs indexs)
-    pub balances_db: BinDB<BalancesV10Datas, B>,
+    pub balances_db: BinDB<BalancesV10Datas>,
 }
 
-impl CurrencyV10DBs<MemoryBackend> {
-    /// Open currency databases in memory mode
-    pub fn open_memory_mode() -> CurrencyV10DBs<MemoryBackend> {
-        CurrencyV10DBs {
-            du_db: open_memory_db::<UDsV10Datas>().expect("Fail to open UDsV10DB"),
-            tx_db: open_memory_db::<TxV10Datas>().expect("Fail to open TxV10DB"),
-            utxos_db: open_memory_db::<UTXOsV10Datas>().expect("Fail to open UTXOsV10DB"),
-            balances_db: open_memory_db::<BalancesV10Datas>().expect("Fail to open BalancesV10DB"),
-        }
-    }
-}
-
-impl CurrencyV10DBs<FileBackend> {
+impl CurrencyV10DBs {
     /// Open currency databases from their respective files
-    pub fn open(db_path: &PathBuf) -> CurrencyV10DBs<FileBackend> {
-        CurrencyV10DBs {
-            du_db: open_db::<UDsV10Datas>(&db_path, "du.db").expect("Fail to open UDsV10DB"),
-            tx_db: open_db::<TxV10Datas>(&db_path, "tx.db")
-                .unwrap_or_else(|_| panic!("Fail to open TxV10DB : {:?} ", db_path.as_path())),
-            utxos_db: open_db::<UTXOsV10Datas>(&db_path, "sources.db")
-                .expect("Fail to open UTXOsV10DB"),
-            balances_db: open_db::<BalancesV10Datas>(&db_path, "balances.db")
-                .expect("Fail to open BalancesV10DB"),
+    pub fn open(db_path: Option<&PathBuf>) -> CurrencyV10DBs {
+        if let Some(db_path) = db_path {
+            CurrencyV10DBs {
+                du_db: BinDB::File(
+                    open_db::<UDsV10Datas>(&db_path, "du.db").expect("Fail to open UDsV10DB"),
+                ),
+                tx_db: BinDB::File(
+                    open_db::<TxV10Datas>(&db_path, "tx.db").unwrap_or_else(|_| {
+                        panic!("Fail to open TxV10DB : {:?} ", db_path.as_path())
+                    }),
+                ),
+                utxos_db: BinDB::File(
+                    open_db::<UTXOsV10Datas>(&db_path, "sources.db")
+                        .expect("Fail to open UTXOsV10DB"),
+                ),
+                balances_db: BinDB::File(
+                    open_db::<BalancesV10Datas>(&db_path, "balances.db")
+                        .expect("Fail to open BalancesV10DB"),
+                ),
+            }
+        } else {
+            CurrencyV10DBs {
+                du_db: BinDB::Mem(open_memory_db::<UDsV10Datas>().expect("Fail to open UDsV10DB")),
+                tx_db: BinDB::Mem(open_memory_db::<TxV10Datas>().expect("Fail to open TxV10DB")),
+                utxos_db: BinDB::Mem(
+                    open_memory_db::<UTXOsV10Datas>().expect("Fail to open UTXOsV10DB"),
+                ),
+                balances_db: BinDB::Mem(
+                    open_memory_db::<BalancesV10Datas>().expect("Fail to open BalancesV10DB"),
+                ),
+            }
         }
     }
     /// Save currency databases in their respective files
@@ -341,7 +438,7 @@ fn _use_json_macro() -> serde_json::Value {
 
 /// Open Rustbreak memory database
 pub fn open_memory_db<D: Serialize + DeserializeOwned + Debug + Default + Clone + Send>(
-) -> Result<BinMemDB<D>, DALError> {
+) -> Result<MemoryDatabase<D, Bincode>, DALError> {
     let backend = MemoryBackend::new();
     let db = MemoryDatabase::<D, Bincode>::from_parts(D::default(), backend, Bincode);
     Ok(db)
@@ -351,7 +448,7 @@ pub fn open_memory_db<D: Serialize + DeserializeOwned + Debug + Default + Clone
 pub fn open_db<D: Serialize + DeserializeOwned + Debug + Default + Clone + Send>(
     dbs_folder_path: &PathBuf,
     db_file_name: &str,
-) -> Result<BinFileDB<D>, DALError> {
+) -> Result<FileDatabase<D, Bincode>, DALError> {
     let mut db_path = dbs_folder_path.clone();
     db_path.push(db_file_name);
     let file_path = db_path.as_path();
@@ -373,8 +470,12 @@ pub fn open_db<D: Serialize + DeserializeOwned + Debug + Default + Clone + Send>
 }
 
 /// Open wot db (cf. duniter-wot crate)
-pub fn open_wot_db<W: WebOfTrust>(dbs_folder_path: &PathBuf) -> Result<BinFileDB<W>, DALError> {
-    open_db::<W>(dbs_folder_path, "wot.db")
+pub fn open_wot_db<W: WebOfTrust>(dbs_folder_path: Option<&PathBuf>) -> Result<BinDB<W>, DALError> {
+    if let Some(dbs_folder_path) = dbs_folder_path {
+        Ok(BinDB::File(open_db::<W>(dbs_folder_path, "wot.db")?))
+    } else {
+        Ok(BinDB::Mem(open_memory_db::<W>()?))
+    }
 }
 
 // Open wot file (cf. duniter-wot crate)
diff --git a/dal/writers/block.rs b/dal/writers/block.rs
index 5ad567c1be3922b0cf5aaa04d72f365ce1c302dd..d447ad41666b55d09ebb301e736b9c21a422b59a 100644
--- a/dal/writers/block.rs
+++ b/dal/writers/block.rs
@@ -18,13 +18,13 @@ use duniter_documents::blockchain::Document;
 use duniter_documents::{BlockHash, BlockId, PreviousBlockstamp};
 use std::collections::HashMap;
 use ForkId;
-use {BinFileDB, DALError, ForksBlocksV10Datas, ForksV10Datas, LocalBlockchainV10Datas};
+use {BinDB, DALError, ForksBlocksV10Datas, ForksV10Datas, LocalBlockchainV10Datas};
 
 /// Write DALBlock in databases
 pub fn write(
-    blockchain_db: &BinFileDB<LocalBlockchainV10Datas>,
-    forks_db: &BinFileDB<ForksV10Datas>,
-    forks_blocks_db: &BinFileDB<ForksBlocksV10Datas>,
+    blockchain_db: &BinDB<LocalBlockchainV10Datas>,
+    forks_db: &BinDB<ForksV10Datas>,
+    forks_blocks_db: &BinDB<ForksBlocksV10Datas>,
     dal_block: &DALBlock,
     from_to_fork_id: Option<ForkId>,
     sync: bool,
diff --git a/dal/writers/certification.rs b/dal/writers/certification.rs
index 2f8ebf5882fdefb77b36776118f1077d45e979a0..7ac57ac1629e482421a79568f1c4edbf734b4d33 100644
--- a/dal/writers/certification.rs
+++ b/dal/writers/certification.rs
@@ -21,13 +21,13 @@ use duniter_crypto::keys::*;
 use duniter_documents::blockchain::v10::documents::certification::CompactCertificationDocument;
 use duniter_documents::BlockId;
 use duniter_wotb::NodeId;
-use {BinFileDB, CertsExpirV10Datas, DALError, IdentitiesV10Datas};
+use {BinDB, CertsExpirV10Datas, DALError, IdentitiesV10Datas};
 
 /// Apply "certification" event in databases
 pub fn write_certification(
     currency_params: &CurrencyParameters,
-    identities_db: &BinFileDB<IdentitiesV10Datas>,
-    certs_db: &BinFileDB<CertsExpirV10Datas>,
+    identities_db: &BinDB<IdentitiesV10Datas>,
+    certs_db: &BinDB<CertsExpirV10Datas>,
     source_pubkey: PubKey,
     source: NodeId,
     target: NodeId,
@@ -59,8 +59,8 @@ pub fn write_certification(
 
 /// Revert writtent certification
 pub fn revert_write_cert(
-    identities_db: &BinFileDB<IdentitiesV10Datas>,
-    certs_db: &BinFileDB<CertsExpirV10Datas>,
+    identities_db: &BinDB<IdentitiesV10Datas>,
+    certs_db: &BinDB<CertsExpirV10Datas>,
     compact_doc: CompactCertificationDocument,
     source: NodeId,
     target: NodeId,
@@ -86,7 +86,7 @@ pub fn revert_write_cert(
 
 /// Revert "certification expiry" event in databases
 pub fn revert_expire_cert(
-    certs_db: &BinFileDB<CertsExpirV10Datas>,
+    certs_db: &BinDB<CertsExpirV10Datas>,
     source: NodeId,
     target: NodeId,
     created_block_id: BlockId,
@@ -102,7 +102,7 @@ pub fn revert_expire_cert(
 
 /// Apply "certification expiry" event in databases
 pub fn expire_certs(
-    certs_db: &BinFileDB<CertsExpirV10Datas>,
+    certs_db: &BinDB<CertsExpirV10Datas>,
     created_block_id: BlockId,
 ) -> Result<(), DALError> {
     // Remove CertsExpirV10Datas entries
diff --git a/dal/writers/dividend.rs b/dal/writers/dividend.rs
index a0add7d7417298b27345706c1866412c13ca9908..fb9899b231aa5492ac1344d7ca6a749794b0905e 100644
--- a/dal/writers/dividend.rs
+++ b/dal/writers/dividend.rs
@@ -16,16 +16,14 @@
 use duniter_crypto::keys::PubKey;
 use duniter_documents::blockchain::v10::documents::transaction::*;
 use duniter_documents::BlockId;
-use rustbreak::backend::Backend;
 use sources::SourceAmount;
 use std::collections::{HashMap, HashSet};
-use std::fmt::Debug;
 use *;
 
 /// Apply UD creation in databases
-pub fn create_du<B: Backend + Debug>(
-    du_db: &BinDB<UDsV10Datas, B>,
-    balances_db: &BinDB<BalancesV10Datas, B>,
+pub fn create_du(
+    du_db: &BinDB<UDsV10Datas>,
+    balances_db: &BinDB<BalancesV10Datas>,
     du_amount: &SourceAmount,
     du_block_id: BlockId,
     members: &[PubKey],
diff --git a/dal/writers/identity.rs b/dal/writers/identity.rs
index e22d3001d42ae4e77a702c3ed3180d9f2eb12c88..454f3d51b680ba2c8f1d2e519c4cc9a9d6ff9b2b 100644
--- a/dal/writers/identity.rs
+++ b/dal/writers/identity.rs
@@ -20,12 +20,12 @@ use duniter_documents::blockchain::Document;
 use duniter_documents::{BlockId, Blockstamp};
 use duniter_wotb::NodeId;
 use identity::{DALIdentity, DALIdentityState};
-use {BinFileDB, DALError, IdentitiesV10Datas, MsExpirV10Datas};
+use {BinDB, DALError, IdentitiesV10Datas, MsExpirV10Datas};
 
 /// Remove identity from databases
 pub fn revert_create_identity(
-    identities_db: &BinFileDB<IdentitiesV10Datas>,
-    ms_db: &BinFileDB<MsExpirV10Datas>,
+    identities_db: &BinDB<IdentitiesV10Datas>,
+    ms_db: &BinDB<MsExpirV10Datas>,
     pubkey: &PubKey,
 ) -> Result<(), DALError> {
     let dal_idty = identities_db.read(|db| {
@@ -52,8 +52,8 @@ pub fn revert_create_identity(
 /// Write identity in databases
 pub fn create_identity(
     currency_params: &CurrencyParameters,
-    identities_db: &BinFileDB<IdentitiesV10Datas>,
-    ms_db: &BinFileDB<MsExpirV10Datas>,
+    identities_db: &BinDB<IdentitiesV10Datas>,
+    ms_db: &BinDB<MsExpirV10Datas>,
     idty_doc: &IdentityDocument,
     ms_created_block_id: BlockId,
     wot_id: NodeId,
diff --git a/dal/writers/requests.rs b/dal/writers/requests.rs
index 7ec4413d9ff8a39ded40e9eb781cb6db81457132..80d0a3fe35519153651aa8b74829ae0ddb8426cb 100644
--- a/dal/writers/requests.rs
+++ b/dal/writers/requests.rs
@@ -24,9 +24,7 @@ use duniter_documents::blockchain::v10::documents::identity::IdentityDocument;
 use duniter_documents::Blockstamp;
 use duniter_wotb::NodeId;
 use identity::DALIdentity;
-use rustbreak::backend::Backend;
 use sources::SourceAmount;
-use std::fmt::Debug;
 use std::ops::Deref;
 use writers::transaction::DALTxV10;
 use *;
@@ -276,16 +274,16 @@ pub enum CurrencyDBsWriteQuery {
 
 impl CurrencyDBsWriteQuery {
     /// Apply CurrencyDBsWriteQuery
-    pub fn apply<B: Backend + Debug>(&self, databases: &CurrencyV10DBs<B>) -> Result<(), DALError> {
+    pub fn apply(&self, databases: &CurrencyV10DBs) -> Result<(), DALError> {
         match *self {
             CurrencyDBsWriteQuery::WriteTx(ref tx_doc) => {
-                super::transaction::apply_and_write_tx::<B>(&databases, tx_doc.deref())?;
+                super::transaction::apply_and_write_tx(&databases, tx_doc.deref())?;
             }
             CurrencyDBsWriteQuery::RevertTx(ref dal_tx) => {
-                super::transaction::revert_tx::<B>(&databases, dal_tx.deref())?;
+                super::transaction::revert_tx(&databases, dal_tx.deref())?;
             }
             CurrencyDBsWriteQuery::CreateUD(ref du_amount, ref block_id, ref members) => {
-                super::dividend::create_du::<B>(
+                super::dividend::create_du(
                     &databases.du_db,
                     &databases.balances_db,
                     du_amount,
@@ -295,7 +293,7 @@ impl CurrencyDBsWriteQuery {
                 )?;
             }
             CurrencyDBsWriteQuery::RevertUD(ref du_amount, ref block_id, ref members) => {
-                super::dividend::create_du::<B>(
+                super::dividend::create_du(
                     &databases.du_db,
                     &databases.balances_db,
                     du_amount,
diff --git a/dal/writers/transaction.rs b/dal/writers/transaction.rs
index a1ffc32dcf612709ce76665d3767d6f3f993d5e7..8d0e240d3b468f5517f11374bb03e3024027864b 100644
--- a/dal/writers/transaction.rs
+++ b/dal/writers/transaction.rs
@@ -14,9 +14,7 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use duniter_documents::blockchain::v10::documents::transaction::*;
-use rustbreak::backend::Backend;
 use sources::{SourceAmount, SourceIndexV10, UTXOIndexV10, UTXOV10};
-use std::fmt::Debug;
 use *;
 
 #[derive(Debug, Copy, Clone)]
@@ -44,10 +42,7 @@ pub struct DALTxV10 {
 }
 
 /// Apply transaction backwards
-pub fn revert_tx<B: Backend + Debug>(
-    dbs: &CurrencyV10DBs<B>,
-    dal_tx: &DALTxV10,
-) -> Result<(), DALError> {
+pub fn revert_tx(dbs: &CurrencyV10DBs, dal_tx: &DALTxV10) -> Result<(), DALError> {
     let mut tx_doc = dal_tx.tx_doc.clone();
     let tx_hash = tx_doc.get_hash();
     let sources_destroyed = &dal_tx.sources_destroyed;
@@ -242,8 +237,8 @@ pub fn revert_tx<B: Backend + Debug>(
 }
 
 /// Apply and write transaction in databases
-pub fn apply_and_write_tx<B: Backend + Debug>(
-    dbs: &CurrencyV10DBs<B>,
+pub fn apply_and_write_tx(
+    dbs: &CurrencyV10DBs,
     tx_doc: &TransactionDocument,
 ) -> Result<(), DALError> {
     let mut tx_doc = tx_doc.clone();
@@ -470,7 +465,7 @@ mod tests {
                 .unwrap(),
         );
         // Open currencys_db in memory mode
-        let currency_dbs = CurrencyV10DBs::open_memory_mode();
+        let currency_dbs = CurrencyV10DBs::open(None);
         // Create first g1 UD for cgeek and tortue
         writers::dividend::create_du(
             &currency_dbs.du_db,
diff --git a/documents/lib.rs b/documents/lib.rs
index 39f8166116c646e562312b2240d88e38df17e1a1..1ea9914223164135b15c3b245f0ad71d2135ff89 100644
--- a/documents/lib.rs
+++ b/documents/lib.rs
@@ -18,14 +18,8 @@
 #![cfg_attr(feature = "strict", deny(warnings))]
 #![cfg_attr(feature = "cargo-clippy", allow(unused_collect))]
 #![deny(
-    missing_docs,
-    missing_debug_implementations,
-    missing_copy_implementations,
-    trivial_casts,
-    trivial_numeric_casts,
-    unsafe_code,
-    unstable_features,
-    unused_import_braces,
+    missing_docs, missing_debug_implementations, missing_copy_implementations, trivial_casts,
+    trivial_numeric_casts, unsafe_code, unstable_features, unused_import_braces,
     unused_qualifications
 )]
 
diff --git a/message/lib.rs b/message/lib.rs
index d95c506b5ab2a7b38c1291c0104ad22c17d48ada..1b89f4dc38a45067b16333d1e5b4ace3e468a11f 100644
--- a/message/lib.rs
+++ b/message/lib.rs
@@ -18,14 +18,8 @@
 
 #![cfg_attr(feature = "strict", deny(warnings))]
 #![deny(
-    missing_docs,
-    missing_debug_implementations,
-    missing_copy_implementations,
-    trivial_casts,
-    trivial_numeric_casts,
-    unsafe_code,
-    unstable_features,
-    unused_import_braces,
+    missing_docs, missing_debug_implementations, missing_copy_implementations, trivial_casts,
+    trivial_numeric_casts, unsafe_code, unstable_features, unused_import_braces,
     unused_qualifications
 )]
 
diff --git a/module/lib.rs b/module/lib.rs
index a11db06413dd4726088e093f385be59ba634601e..4ee5ec846307429ce4a4a3f1ca6f24e11fc45f50 100644
--- a/module/lib.rs
+++ b/module/lib.rs
@@ -19,14 +19,8 @@
 #![cfg_attr(feature = "strict", deny(warnings))]
 #![cfg_attr(feature = "cargo-clippy", allow(implicit_hasher))]
 #![deny(
-    missing_docs,
-    missing_debug_implementations,
-    missing_copy_implementations,
-    trivial_casts,
-    trivial_numeric_casts,
-    unsafe_code,
-    unstable_features,
-    unused_import_braces,
+    missing_docs, missing_debug_implementations, missing_copy_implementations, trivial_casts,
+    trivial_numeric_casts, unsafe_code, unstable_features, unused_import_braces,
     unused_qualifications
 )]
 
diff --git a/network/lib.rs b/network/lib.rs
index 41c066dae134aed4aaf310ad84f83844bce09b75..466f4476365ee92bba234d180f80240d51359130 100644
--- a/network/lib.rs
+++ b/network/lib.rs
@@ -17,14 +17,8 @@
 
 #![cfg_attr(feature = "strict", deny(warnings))]
 #![deny(
-    missing_docs,
-    missing_debug_implementations,
-    missing_copy_implementations,
-    trivial_casts,
-    trivial_numeric_casts,
-    unsafe_code,
-    unstable_features,
-    unused_import_braces,
+    missing_docs, missing_debug_implementations, missing_copy_implementations, trivial_casts,
+    trivial_numeric_casts, unsafe_code, unstable_features, unused_import_braces,
     unused_qualifications
 )]
 
diff --git a/src/main.rs b/src/main.rs
index f275ed88608829d3a46d2b772e71e0df34f5ba37..eacbede7127d6d3001943d637eac47312c4f8c02 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -17,14 +17,8 @@
 
 #![cfg_attr(feature = "strict", deny(warnings))]
 #![deny(
-    missing_docs,
-    missing_debug_implementations,
-    missing_copy_implementations,
-    trivial_casts,
-    trivial_numeric_casts,
-    unsafe_code,
-    unstable_features,
-    unused_import_braces,
+    missing_docs, missing_debug_implementations, missing_copy_implementations, trivial_casts,
+    trivial_numeric_casts, unsafe_code, unstable_features, unused_import_braces,
     unused_qualifications
 )]
 
diff --git a/tui/lib.rs b/tui/lib.rs
index 2c00a948760bef9da8bf28b2868f163346a56ef2..29e0013dd2d717f5690cc2d760108e617d0e62b1 100644
--- a/tui/lib.rs
+++ b/tui/lib.rs
@@ -18,14 +18,8 @@
 
 #![cfg_attr(feature = "strict", deny(warnings))]
 #![deny(
-    missing_docs,
-    missing_debug_implementations,
-    missing_copy_implementations,
-    trivial_casts,
-    trivial_numeric_casts,
-    unsafe_code,
-    unstable_features,
-    unused_import_braces,
+    missing_docs, missing_debug_implementations, missing_copy_implementations, trivial_casts,
+    trivial_numeric_casts, unsafe_code, unstable_features, unused_import_braces,
     unused_qualifications
 )]
 
diff --git a/wotb/lib.rs b/wotb/lib.rs
index 3926037bfc22061f3f942d610f0fc797807c2337..a68352c5b6be9ee1fe94e6bcacead24f6872ae34 100644
--- a/wotb/lib.rs
+++ b/wotb/lib.rs
@@ -28,14 +28,8 @@
 
 #![cfg_attr(feature = "strict", deny(warnings))]
 #![deny(
-    missing_docs,
-    missing_debug_implementations,
-    missing_copy_implementations,
-    trivial_casts,
-    trivial_numeric_casts,
-    unsafe_code,
-    unstable_features,
-    unused_import_braces,
+    missing_docs, missing_debug_implementations, missing_copy_implementations, trivial_casts,
+    trivial_numeric_casts, unsafe_code, unstable_features, unused_import_braces,
     unused_qualifications
 )]
 
diff --git a/ws2p/lib.rs b/ws2p/lib.rs
index f659c1071061a5dba83da64070d2a712ce7f9a9b..87ccffe675b9d31326eb1fd753e4da216468676d 100644
--- a/ws2p/lib.rs
+++ b/ws2p/lib.rs
@@ -18,13 +18,8 @@
 #![cfg_attr(feature = "strict", deny(warnings))]
 #![cfg_attr(feature = "cargo-clippy", allow(cyclomatic_complexity))]
 #![deny(
-    missing_debug_implementations,
-    missing_copy_implementations,
-    trivial_casts,
-    unsafe_code,
-    unstable_features,
-    unused_import_braces,
-    unused_qualifications
+    missing_debug_implementations, missing_copy_implementations, trivial_casts, unsafe_code,
+    unstable_features, unused_import_braces, unused_qualifications
 )]
 #![recursion_limit = "256"]