diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a04eb0e66f205def6556571b18eaf85f9a6e1d33..5c20baabeb80b06a88e1db840f0f182d56c89bfd 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -69,7 +69,7 @@ fmt:
   <<: *rust_nightly_env
   stage: fmt
   before_script:
-    - cargo install --force rustfmt-nightly
+    - rustup component add rustfmt-preview --toolchain nightly
   script:
     - cargo fmt -- --check
   allow_failure: true
diff --git a/Cargo.lock b/Cargo.lock
index eca11a63ad1ef13f9383bc42f8bceac36e0f7bfa..9d5feab3c0c49df44bdc1e7d604f4be71e507561 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -166,6 +166,15 @@ dependencies = [
  "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
+[[package]]
+name = "dirs"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "dtoa"
 version = "0.4.2"
@@ -175,6 +184,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 name = "duniter-blockchain"
 version = "0.1.0-a0.1"
 dependencies = [
+ "dirs 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "duniter-conf 0.1.0-a0.1",
  "duniter-crypto 0.2.0-a0.1",
  "duniter-dal 0.1.0-a0.1",
@@ -199,6 +209,7 @@ dependencies = [
 name = "duniter-conf"
 version = "0.1.0-a0.1"
 dependencies = [
+ "dirs 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "duniter-crypto 0.2.0-a0.1",
  "duniter-module 0.1.0-a0.1",
  "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -212,6 +223,7 @@ name = "duniter-core"
 version = "0.1.0-a0.1"
 dependencies = [
  "clap 2.31.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "dirs 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "duniter-blockchain 0.1.0-a0.1",
  "duniter-conf 0.1.0-a0.1",
  "duniter-crypto 0.2.0-a0.1",
@@ -1134,6 +1146,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 "checksum crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f739f8c5363aca78cfb059edf753d8f0d36908c348f3d8d1503f03d8b75d9cf3"
 "checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150"
 "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9"
+"checksum dirs 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "37a76dd8b997af7107d0bb69d43903cf37153a18266f8b3fdb9911f28efb5444"
 "checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab"
 "checksum either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3be565ca5c557d7f59e7cfcf1844f9e3033650c929c6566f511e8005f205c1d0"
 "checksum failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "934799b6c1de475a012a02dab0ace1ace43789ee4b99bcfbf1a2e3e8ced5de82"
diff --git a/blockchain/Cargo.toml b/blockchain/Cargo.toml
index dd30659f14e06409c5d9c924e5e5261617c24661..44ba92d6d331c74c010fbdc6c94ce9b457cc6f78 100644
--- a/blockchain/Cargo.toml
+++ b/blockchain/Cargo.toml
@@ -9,6 +9,7 @@ license = "AGPL-3.0"
 path = "lib.rs"
 
 [dependencies]
+dirs = "1.0.2"
 duniter-conf = { path = "../conf" }
 duniter-crypto = { path = "../crypto" }
 duniter-dal = { path = "../dal" }
diff --git a/blockchain/lib.rs b/blockchain/lib.rs
index af5544074fbaa34a2d9fe106b084221c87bf59f8..40d256276c6decefe5a6839f39192d95fdfceb64 100644
--- a/blockchain/lib.rs
+++ b/blockchain/lib.rs
@@ -16,16 +16,26 @@
 //! 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
 )]
 
 #[macro_use]
 extern crate log;
 
+extern crate dirs;
 extern crate duniter_conf;
 extern crate duniter_crypto;
 extern crate duniter_dal;
@@ -47,7 +57,6 @@ mod sync;
 mod ts_parsers;
 
 use std::collections::HashMap;
-use std::env;
 use std::fmt::Debug;
 use std::ops::Deref;
 use std::path::PathBuf;
@@ -204,11 +213,11 @@ impl BlockchainModule {
         verif_inner_hash: bool,
     ) {
         // get db_ts_path
-        let mut db_ts_path = match env::home_dir() {
+        let mut db_ts_path = match dirs::config_dir() {
             Some(path) => path,
-            None => panic!("Impossible to get your home dir!"),
+            None => panic!("Impossible to get user config directory !"),
         };
-        db_ts_path.push(".config/duniter/");
+        db_ts_path.push("duniter/");
         db_ts_path.push(ts_profile);
         db_ts_path.push("duniter.db");
         if !db_ts_path.as_path().exists() {
diff --git a/conf/Cargo.toml b/conf/Cargo.toml
index f5482419e05aa1d4356cfea52f9d4754611ccbbc..12e9ed3462894553001895bd11fcf65c8023d663 100644
--- a/conf/Cargo.toml
+++ b/conf/Cargo.toml
@@ -13,6 +13,7 @@ rand = "0.4.*"
 serde = "1.0.*"
 serde_derive = "1.0.*"
 serde_json = "1.0.*"
+dirs = "1.0.2"
 duniter-crypto = { path = "../crypto" }
 duniter-module = { path = "../module" }
 
diff --git a/conf/lib.rs b/conf/lib.rs
index eed6f9218623e2a0600a39a3f98783b226925637..7ebf86f278e7d2eb19d43fd89d21dc18b257d291 100644
--- a/conf/lib.rs
+++ b/conf/lib.rs
@@ -18,8 +18,14 @@
 
 #![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
 )]
 
@@ -28,6 +34,7 @@ extern crate serde_derive;
 #[macro_use]
 extern crate serde_json;
 
+extern crate dirs;
 extern crate duniter_crypto;
 extern crate duniter_module;
 extern crate rand;
@@ -37,7 +44,6 @@ use duniter_module::{Currency, DuniterConf, ModuleId, RequiredKeys, RequiredKeys
 use rand::Rng;
 use serde::ser::{Serialize, SerializeStruct, Serializer};
 use std::collections::HashSet;
-use std::env;
 use std::fs;
 use std::fs::File;
 use std::io::prelude::*;
@@ -271,14 +277,10 @@ pub fn datas_path(profile: &str, currency: &Currency) -> PathBuf {
 /// Returns the path to the folder containing the user data of the running profile
 pub fn get_profile_path(profile: &str) -> PathBuf {
     // Define and create datas directory if not exist
-    let mut profile_path = match env::home_dir() {
+    let mut profile_path = match dirs::config_dir() {
         Some(path) => path,
-        None => panic!("Impossible to get your home dir !"),
+        None => panic!("Impossible to get user config directory !"),
     };
-    profile_path.push(".config/");
-    if !profile_path.as_path().exists() {
-        fs::create_dir(profile_path.as_path()).expect("Impossible to create ~/.config dir !");
-    }
     profile_path.push(USER_DATAS_FOLDER);
     if !profile_path.as_path().exists() {
         fs::create_dir(profile_path.as_path()).unwrap_or_else(|_| {
@@ -425,11 +427,10 @@ pub fn get_blockchain_db_path(profile: &str, currency: &Currency) -> PathBuf {
 
 /// Returns the path to the binary file containing the state of the web of trust
 pub fn get_wot_path(profile: String, currency: &Currency) -> PathBuf {
-    let mut wot_path = match env::home_dir() {
+    let mut wot_path = match dirs::config_dir() {
         Some(path) => path,
         None => panic!("Impossible to get your home dir!"),
     };
-    wot_path.push(".config/");
     wot_path.push(USER_DATAS_FOLDER);
     wot_path.push(profile);
     wot_path.push(currency.to_string());
diff --git a/core/Cargo.toml b/core/Cargo.toml
index 087eb9f519631780a180b9afc45c1872abefb8db..550ca8c00b9b808ddf00f82942006c66f00aa3c9 100644
--- a/core/Cargo.toml
+++ b/core/Cargo.toml
@@ -10,6 +10,7 @@ path = "lib.rs"
 
 [dependencies]
 clap = {version = "2.31.2", features = ["yaml"]}
+dirs = "1.0.2"
 duniter-blockchain = { path = "../blockchain" }
 duniter-conf = { path = "../conf" }
 duniter-crypto = { path = "../crypto" }
diff --git a/core/lib.rs b/core/lib.rs
index 91f98d8ae8a363bc226f9af9a80c0965b0f7d713..c4e2d0911c24e24f0b46692118efa8f61baecec2 100644
--- a/core/lib.rs
+++ b/core/lib.rs
@@ -18,8 +18,14 @@
 #![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
 )]
 
@@ -29,6 +35,7 @@ extern crate clap;
 #[macro_use]
 extern crate log;
 
+extern crate dirs;
 extern crate duniter_blockchain;
 extern crate duniter_conf;
 extern crate duniter_crypto;
@@ -52,7 +59,6 @@ use duniter_network::{NetworkModule, SyncEndpoint};
 use log::Level;
 use simplelog::*;
 use std::collections::HashSet;
-use std::env;
 use std::fs;
 use std::fs::{File, OpenOptions};
 use std::sync::mpsc;
@@ -277,9 +283,9 @@ impl DuniterCore<DuRsConf> {
             }
             None
         } else if let Some(matches) = cli_args.subcommand_matches("reset") {
-            let mut profile_path = match env::home_dir() {
+            let mut profile_path = match dirs::config_dir() {
                 Some(path) => path,
-                None => panic!("Impossible to get your home dir !"),
+                None => panic!("Impossible to get user config directory !"),
             };
             profile_path.push(".config");
             profile_path.push(duniter_conf::get_user_datas_folder());
@@ -679,9 +685,9 @@ pub fn dbex<DC: DuniterConf>(profile: &str, conf: &DC, csv: bool, query: &DBExQu
 /// Initialize logger
 pub fn init_logger(profile: &str, soft_name: &'static str, cli_args: &ArgMatches) {
     // Get datas folder path
-    let mut log_file_path = match env::home_dir() {
+    let mut log_file_path = match dirs::config_dir() {
         Some(path) => path,
-        None => panic!("Fatal error : Impossible to get your home dir!"),
+        None => panic!("Fatal error : Impossible to get user config directory"),
     };
     log_file_path.push(".config");
     if !log_file_path.as_path().exists() {
diff --git a/crypto/lib.rs b/crypto/lib.rs
index 5f43cce266558af94012e3305a84eed8dc2eb16d..c05b5fc79217ec29b634dc90fa6a851124c2d55a 100644
--- a/crypto/lib.rs
+++ b/crypto/lib.rs
@@ -17,8 +17,14 @@
 
 #![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/dal_requests.rs b/dal/dal_requests.rs
index 366a5cb570da1c818ff3ef8648c3d52f6a6f78a5..8f9e76c6fb28fddc3bd20f7fe17a3ad0a4df4283 100644
--- a/dal/dal_requests.rs
+++ b/dal/dal_requests.rs
@@ -80,7 +80,7 @@ pub enum DALResPendings {
     /// All pending identities without their pending certifications
     AllPendingIdentitiesWithoutCerts(HashMap<Hash, PendingIdtyDatas>),
     /// All pending datas for given pubkey
-    PendingWotDatasForPubkey(PendingIdtyDatas),
+    PendingWotDatasForPubkey(Box<PendingIdtyDatas>),
 }
 
 #[derive(Debug, Clone)]
@@ -102,5 +102,5 @@ pub enum DALResponse {
     /// Response to a DALReqBlockchain request
     Blockchain(Box<DALResBlockchain>),
     /// Response to a DALReqPendings request
-    Pendings(ModuleReqFullId, DALResPendings),
+    Pendings(ModuleReqFullId, Box<DALResPendings>),
 }
diff --git a/dal/lib.rs b/dal/lib.rs
index b43899a7ea47df048a07c61eb9cb1c6e0f131cd4..6eba641596e485ac02e499cb3a981f3bfd747abf 100644
--- a/dal/lib.rs
+++ b/dal/lib.rs
@@ -19,8 +19,15 @@
 #![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
 )]
 
 #[macro_use]
diff --git a/dal/tools.rs b/dal/tools.rs
index bc65497aeb210ae1cfda804fa03433ce1658309e..15cad56eb218305c1c486a3fe19a201bf8a2db6f 100644
--- a/dal/tools.rs
+++ b/dal/tools.rs
@@ -52,24 +52,22 @@ pub fn get_sentry_requirement(members_count: usize, step_max: u32) -> u32 {
                 9
             } else if members_count < 100_001 {
                 10
-            } else if members_count < 100_001 {
-                11
             } else if members_count < 161_052 {
-                12
+                11
             } else if members_count < 248_833 {
-                13
+                12
             } else if members_count < 371_294 {
-                14
+                13
             } else if members_count < 537_825 {
-                15
+                14
             } else if members_count < 759_376 {
-                16
+                15
             } else if members_count < 1_048_577 {
-                17
+                16
             } else if members_count < 1_419_858 {
-                18
+                17
             } else if members_count < 1_889_569 {
-                19
+                18
             } else {
                 panic!(
                     "get_sentry_requirement not define for members_count greater than 1_889_569 !"
diff --git a/documents/lib.rs b/documents/lib.rs
index 1ea9914223164135b15c3b245f0ad71d2135ff89..39f8166116c646e562312b2240d88e38df17e1a1 100644
--- a/documents/lib.rs
+++ b/documents/lib.rs
@@ -18,8 +18,14 @@
 #![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 1b89f4dc38a45067b16333d1e5b4ace3e468a11f..d95c506b5ab2a7b38c1291c0104ad22c17d48ada 100644
--- a/message/lib.rs
+++ b/message/lib.rs
@@ -18,8 +18,14 @@
 
 #![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 bd332484d3c2d6d6b519449ee321aa8358a935c1..a11db06413dd4726088e093f385be59ba634601e 100644
--- a/module/lib.rs
+++ b/module/lib.rs
@@ -17,9 +17,16 @@
 //! as well as the DuniterModule trait that all modules must implement.
 
 #![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 466f4476365ee92bba234d180f80240d51359130..41c066dae134aed4aaf310ad84f83844bce09b75 100644
--- a/network/lib.rs
+++ b/network/lib.rs
@@ -17,8 +17,14 @@
 
 #![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 eacbede7127d6d3001943d637eac47312c4f8c02..f275ed88608829d3a46d2b772e71e0df34f5ba37 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -17,8 +17,14 @@
 
 #![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 29e0013dd2d717f5690cc2d760108e617d0e62b1..2c00a948760bef9da8bf28b2868f163346a56ef2 100644
--- a/tui/lib.rs
+++ b/tui/lib.rs
@@ -18,8 +18,14 @@
 
 #![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 a68352c5b6be9ee1fe94e6bcacead24f6872ae34..3926037bfc22061f3f942d610f0fc797807c2337 100644
--- a/wotb/lib.rs
+++ b/wotb/lib.rs
@@ -28,8 +28,14 @@
 
 #![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 87ccffe675b9d31326eb1fd753e4da216468676d..f659c1071061a5dba83da64070d2a712ce7f9a9b 100644
--- a/ws2p/lib.rs
+++ b/ws2p/lib.rs
@@ -18,8 +18,13 @@
 #![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"]