diff --git a/lib/core/conf/src/lib.rs b/lib/core/conf/src/lib.rs
index 851a69b88a68cccc55ff0f819b746afc322ee735..c60668367f79b56b592ba78ce9f4d28a73b7b331 100644
--- a/lib/core/conf/src/lib.rs
+++ b/lib/core/conf/src/lib.rs
@@ -38,7 +38,9 @@ pub mod keys;
 use dubp_documents::CurrencyName;
 use dup_crypto::keys::*;
 use durs_common_tools::fatal_error;
-use durs_module::{DursConfTrait, ModuleName, RequiredKeys, RequiredKeysContent};
+use durs_module::{
+    DursConfTrait, DursGlobalConfTrait, ModuleName, RequiredKeys, RequiredKeysContent,
+};
 use rand::Rng;
 use serde::ser::{Serialize, SerializeStruct, Serializer};
 use std::collections::HashSet;
@@ -217,6 +219,23 @@ pub enum DuRsGlobalConf {
     V2(DuRsConfV2),
 }
 
+impl DursGlobalConfTrait for DuRsGlobalConf {
+    /// Get currency
+    fn currency(&self) -> CurrencyName {
+        match *self {
+            DuRsGlobalConf::V1(ref conf_v1) => conf_v1.currency.clone(),
+            DuRsGlobalConf::V2(ref conf_v2) => conf_v2.currency.clone(),
+        }
+    }
+    /// Get node id
+    fn my_node_id(&self) -> u32 {
+        match *self {
+            DuRsGlobalConf::V1(ref conf_v1) => conf_v1.my_node_id,
+            DuRsGlobalConf::V2(ref conf_v2) => conf_v2.my_node_id,
+        }
+    }
+}
+
 impl Default for DuRsConf {
     #[inline]
     fn default() -> Self {
@@ -258,14 +277,6 @@ impl DursConfTrait for DuRsConf {
             DuRsConf::V2 { .. } => 2,
         }
     }
-    fn currency(&self) -> CurrencyName {
-        match *self {
-            DuRsConf::V1(ref conf_v1) => conf_v1.currency.clone(),
-            DuRsConf::V2 {
-                ref global_conf, ..
-            } => global_conf.currency.clone(),
-        }
-    }
     fn set_currency(&mut self, new_currency: CurrencyName) {
         match *self {
             DuRsConf::V1(ref mut conf_v1) => conf_v1.currency = new_currency,
@@ -275,14 +286,6 @@ impl DursConfTrait for DuRsConf {
             } => global_conf.currency = new_currency,
         }
     }
-    fn my_node_id(&self) -> u32 {
-        match *self {
-            DuRsConf::V1(ref conf_v1) => conf_v1.my_node_id,
-            DuRsConf::V2 {
-                ref global_conf, ..
-            } => global_conf.my_node_id,
-        }
-    }
     fn disable(&mut self, module: ModuleName) {
         match *self {
             DuRsConf::V1(ref mut conf_v1) => {
diff --git a/lib/core/core/src/lib.rs b/lib/core/core/src/lib.rs
index 8bbd0af748d52145afe506778b0f488e3faa1cdc..240f9ef7aa40b574d95956e3ea6396dcbe72c261 100644
--- a/lib/core/core/src/lib.rs
+++ b/lib/core/core/src/lib.rs
@@ -497,9 +497,9 @@ pub fn get_module_conf<M: DursModule<DuRsConf, DursMsg>>(
     if let Some(module_conf_json) = module_conf_json {
         let module_user_conf: M::ModuleUserConf =
             serde_json::from_str(module_conf_json.to_string().as_str())?;
-        M::generate_module_conf(global_conf, module_user_conf)
+        M::generate_module_conf(global_conf, Some(module_user_conf))
     } else {
-        Ok(M::ModuleConf::default())
+        M::generate_module_conf(global_conf, None)
     }
 }
 
diff --git a/lib/core/module/src/lib.rs b/lib/core/module/src/lib.rs
index 05cb334f4f8d498d8880ed093e920e5c1aafbc1c..8db64900bb52b48294cf3fabcddf19397e4762e6 100644
--- a/lib/core/module/src/lib.rs
+++ b/lib/core/module/src/lib.rs
@@ -100,15 +100,27 @@ impl ToString for ModuleReqFullId {
     }
 }
 
+/// Durs global configuration trait
+pub trait DursGlobalConfTrait:
+    Clone + Debug + PartialEq + Serialize + DeserializeOwned + Send + ToOwned
+{
+    /// Get currency
+    fn currency(&self) -> CurrencyName;
+    /// Get node id
+    fn my_node_id(&self) -> u32;
+}
+
 /// Durs configuration trait
 pub trait DursConfTrait:
     Clone + Debug + Default + PartialEq + Serialize + DeserializeOwned + Send + ToOwned
 {
     /// Durs configuration without modules configuration
-    type GlobalConf: Clone + Debug + PartialEq + Serialize + DeserializeOwned + Send + ToOwned;
+    type GlobalConf: DursGlobalConfTrait;
 
     /// Get currency
-    fn currency(&self) -> CurrencyName;
+    fn currency(&self) -> CurrencyName {
+        self.get_global_conf().currency()
+    }
     /// Disable a module
     fn disable(&mut self, module: ModuleName);
     /// Get disabled modules
@@ -122,7 +134,9 @@ pub trait DursConfTrait:
     /// Get modules conf
     fn modules(&self) -> serde_json::Value;
     /// Get node id
-    fn my_node_id(&self) -> u32;
+    fn my_node_id(&self) -> u32 {
+        self.get_global_conf().my_node_id()
+    }
     /// Set currency
     fn set_currency(&mut self, new_currency: CurrencyName);
     /// Change module conf
@@ -389,7 +403,7 @@ pub trait DursModule<DC: DursConfTrait, M: ModuleMessage> {
     /// Generate module configuration
     fn generate_module_conf(
         global_conf: &DC::GlobalConf,
-        module_user_conf: Self::ModuleUserConf,
+        module_user_conf: Option<Self::ModuleUserConf>,
     ) -> Result<Self::ModuleConf, ModuleConfError>;
     /// Define if module have a cli subcommand
     fn have_subcommand() -> bool {
diff --git a/lib/modules/skeleton/lib.rs b/lib/modules/skeleton/lib.rs
index c668973767c5c410a4d9160fc0d96ca2710c113d..89cbd042480aa78b72cb578835e876aa5e8bac91 100644
--- a/lib/modules/skeleton/lib.rs
+++ b/lib/modules/skeleton/lib.rs
@@ -131,12 +131,14 @@ impl DursModule<DuRsConf, DursMsg> for SkeletonModule {
     }
     fn generate_module_conf(
         _global_conf: &<DuRsConf as DursConfTrait>::GlobalConf,
-        module_user_conf: Self::ModuleUserConf,
+        module_user_conf: Option<Self::ModuleUserConf>,
     ) -> Result<Self::ModuleConf, ModuleConfError> {
         let mut conf = SkeletonConf::default();
 
-        if let Some(test_fake_conf_field) = module_user_conf.test_fake_conf_field {
-            conf.test_fake_conf_field = test_fake_conf_field;
+        if let Some(module_user_conf) = module_user_conf {
+            if let Some(test_fake_conf_field) = module_user_conf.test_fake_conf_field {
+                conf.test_fake_conf_field = test_fake_conf_field;
+            }
         }
 
         Ok(conf)
diff --git a/lib/modules/tui/lib.rs b/lib/modules/tui/lib.rs
index 620ed14ca4b6c32b1e67b15ef35a70936fa77827..88a1a462727ff8c0979e0c40b02a03e124d670e1 100644
--- a/lib/modules/tui/lib.rs
+++ b/lib/modules/tui/lib.rs
@@ -389,7 +389,7 @@ impl DursModule<DuRsConf, DursMsg> for TuiModule {
     }
     fn generate_module_conf(
         _global_conf: &<DuRsConf as DursConfTrait>::GlobalConf,
-        _module_user_conf: Self::ModuleUserConf,
+        _module_user_conf: Option<Self::ModuleUserConf>,
     ) -> Result<Self::ModuleConf, ModuleConfError> {
         Ok(TuiConf {})
     }
diff --git a/lib/modules/ws2p-v1-legacy/src/lib.rs b/lib/modules/ws2p-v1-legacy/src/lib.rs
index c1fb22f1258465df8ec19a1a4f367cd6e2cd4543..1fa790d5e154af287a5a7902b5c30ba5eb2819f1 100644
--- a/lib/modules/ws2p-v1-legacy/src/lib.rs
+++ b/lib/modules/ws2p-v1-legacy/src/lib.rs
@@ -56,7 +56,7 @@ use crate::ws2p_db::DbEndpoint;
 use crate::ws_connections::messages::WS2PConnectionMessage;
 use crate::ws_connections::states::WS2PConnectionState;
 use crate::ws_connections::*;
-use dubp_documents::Blockstamp;
+use dubp_documents::{Blockstamp, CurrencyName};
 use duniter_network::cli::sync::SyncOpt;
 use duniter_network::documents::*;
 use duniter_network::events::*;
@@ -344,16 +344,29 @@ impl DursModule<DuRsConf, DursMsg> for WS2PModule {
         true
     }
     fn generate_module_conf(
-        _global_conf: &<DuRsConf as DursConfTrait>::GlobalConf,
-        module_user_conf: Self::ModuleUserConf,
+        global_conf: &<DuRsConf as DursConfTrait>::GlobalConf,
+        module_user_conf: Option<Self::ModuleUserConf>,
     ) -> Result<Self::ModuleConf, ModuleConfError> {
         let mut conf = WS2PConf::default();
 
-        if let Some(outcoming_quota) = module_user_conf.outcoming_quota {
-            conf.outcoming_quota = outcoming_quota;
+        if global_conf.currency() == CurrencyName("g1-test".to_owned()) {
+            conf.sync_endpoints = vec![unwrap!(EndpointV1::parse_from_raw(
+                "WS2P 3eaab4c7 ts.gt.librelois.fr 443 /ws2p",
+                PubKey::Ed25519(unwrap!(ed25519::PublicKey::from_base58(
+                    "CrznBiyq8G4RVUprH9jHmAw1n1iuzw8y9FdJbrESnaX7",
+                )),),
+                0,
+                0,
+            ))];
         }
-        if let Some(sync_endpoints) = module_user_conf.sync_endpoints {
-            conf.sync_endpoints = sync_endpoints;
+
+        if let Some(module_user_conf) = module_user_conf {
+            if let Some(outcoming_quota) = module_user_conf.outcoming_quota {
+                conf.outcoming_quota = outcoming_quota;
+            }
+            if let Some(sync_endpoints) = module_user_conf.sync_endpoints {
+                conf.sync_endpoints = sync_endpoints;
+            }
         }
 
         Ok(conf)
diff --git a/lib/modules/ws2p/ws2p/src/lib.rs b/lib/modules/ws2p/ws2p/src/lib.rs
index a9e1eedd0b86e3982e519ee1676f6d91fb10e4a3..131bc11c5a927f1c54a60d09f4e2dbc41d6a0f7f 100644
--- a/lib/modules/ws2p/ws2p/src/lib.rs
+++ b/lib/modules/ws2p/ws2p/src/lib.rs
@@ -159,15 +159,17 @@ impl DursModule<DuRsConf, DursMsg> for WS2Pv2Module {
     }
     fn generate_module_conf(
         _global_conf: &<DuRsConf as DursConfTrait>::GlobalConf,
-        module_user_conf: Self::ModuleUserConf,
+        module_user_conf: Option<Self::ModuleUserConf>,
     ) -> Result<Self::ModuleConf, ModuleConfError> {
         let mut conf = WS2PConf::default();
 
-        if let Some(outcoming_quota) = module_user_conf.outcoming_quota {
-            conf.outcoming_quota = outcoming_quota;
-        }
-        if let Some(sync_endpoints) = module_user_conf.sync_endpoints {
-            conf.sync_endpoints = sync_endpoints;
+        if let Some(module_user_conf) = module_user_conf {
+            if let Some(outcoming_quota) = module_user_conf.outcoming_quota {
+                conf.outcoming_quota = outcoming_quota;
+            }
+            if let Some(sync_endpoints) = module_user_conf.sync_endpoints {
+                conf.sync_endpoints = sync_endpoints;
+            }
         }
 
         Ok(conf)