diff --git a/Cargo.lock b/Cargo.lock
index 2f206036e2066e05a2217c791c792e9d48063fd9..eca11a63ad1ef13f9383bc42f8bceac36e0f7bfa 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -220,6 +220,7 @@ dependencies = [
  "duniter-network 0.1.0-a0.1",
  "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log-panics 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "regex 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -512,6 +513,14 @@ dependencies = [
  "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
+[[package]]
+name = "log-panics"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "log 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "matches"
 version = "0.1.6"
@@ -1145,6 +1154,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 "checksum libz-sys 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)" = "87f737ad6cc6fd6eefe3d9dc5412f1573865bded441300904d2f42269e140f16"
 "checksum linked-hash-map 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "70fb39025bc7cdd76305867c4eccf2f2dcf6e9a57f5b21a93e1c2d86cd03ec9e"
 "checksum log 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6fddaa003a65722a7fb9e26b0ce95921fe4ba590542ced664d8ce2fa26f9f3ac"
+"checksum log-panics 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ae0136257df209261daa18d6c16394757c63e032e27aafd8b07788b051082bef"
 "checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376"
 "checksum memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "796fba70e76612589ed2ce7f45282f5af869e0fdd7cc6199fa1aa1f1d591ba9d"
 "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3"
diff --git a/blockchain/lib.rs b/blockchain/lib.rs
index 7cbacc05b6a5e1fbaa6b2ab8838d8982df7c94de..af5544074fbaa34a2d9fe106b084221c87bf59f8 100644
--- a/blockchain/lib.rs
+++ b/blockchain/lib.rs
@@ -807,14 +807,7 @@ impl BlockchainModule {
                     current_blockstamp
                 );
             }
-            // Apply wot events
-            /*BlockchainModule::apply_wot_events(
-                &wot_events,
-                &wot_path,
-                &current_blockstamp,
-                &mut wot,
-                &mut wotb_index,
-            );*/        }
+        }
     }
 }
 
diff --git a/conf/lib.rs b/conf/lib.rs
index 41a5c169134f6f30143f6174b2da63b4159bc7e8..a19b649fd7c9d212ca00f57e64a83be67d94899d 100644
--- a/conf/lib.rs
+++ b/conf/lib.rs
@@ -337,28 +337,6 @@ pub fn load_conf_at_path(profile: &str, profile_path: &PathBuf) -> (DuRsConf, Du
             let mut contents = String::new();
             if f.read_to_string(&mut contents).is_ok() {
                 conf = serde_json::from_str(&contents).expect("Conf: Fail to parse conf file !");
-                /*let json_conf: serde_json::Value =
-                    serde_json::from_str(&contents).expect("Conf: Fail to parse conf file !");
-                if let Some(currency) = json_conf.get("currency") {
-                    conf.currency = Currency::Str(
-                        currency
-                            .as_str()
-                            .expect("Conf: fail to parse currency field !")
-                            .to_string(),
-                    );
-                };
-                if let Some(node_id) = json_conf.get("node_id") {
-                    conf.my_node_id =
-                        u32::from_str_radix(
-                            node_id
-                                .as_str()
-                                .expect("Conf : fail to parse node_id field !"),
-                            16,
-                        ).expect("Fail to load conf: node_id must be an hexadecimal number !");
-                };
-                if let Some(modules_conf) = json_conf.get("modules") {
-                    conf.modules = modules_conf.clone();
-                };*/
             }
         } else {
             panic!("Fail to open conf file !");
@@ -400,22 +378,6 @@ pub fn write_conf_file<DC: DuniterConf>(profile: &str, conf: &DC) -> Result<(),
             .as_bytes(),
     )?;
     f.sync_all()?;
-    /*match *conf {
-        DuRsConf::V1(ref conf_v1) => {
-            let mut f = try!(File::create(conf_path.as_path()));
-            try!(
-                f.write_all(
-                    serde_json::to_string_pretty(conf_v1)
-                        .expect("Fatal error : fail to write default conf file !")
-                        .as_bytes()
-                )
-            );
-            try!(f.sync_all());
-        }
-        _ => {
-            panic!("Fatal error : Conf version is not supported !");
-        }
-    }*/
     Ok(())
 }
 
diff --git a/core/Cargo.toml b/core/Cargo.toml
index 6d04e23d8443ca8b8ce8133cc15506db32d677b6..087eb9f519631780a180b9afc45c1872abefb8db 100644
--- a/core/Cargo.toml
+++ b/core/Cargo.toml
@@ -18,6 +18,7 @@ duniter-module = { path = "../module" }
 duniter-network = { path = "../network" }
 lazy_static = "1.0.*"
 log = "0.4.*"
+log-panics = "2.0.*"
 rand = "0.4.*"
 regex = "1.0.*"
 rust-crypto = "0.2.*"
diff --git a/core/lib.rs b/core/lib.rs
index 23c96924e9b29ae7fd0d69e5306300e473a3554b..6eb52d9e4df0211f271bf09255e829af1d6eb176 100644
--- a/core/lib.rs
+++ b/core/lib.rs
@@ -34,6 +34,7 @@ extern crate duniter_crypto;
 extern crate duniter_message;
 extern crate duniter_module;
 extern crate duniter_network;
+extern crate log_panics;
 extern crate serde_json;
 extern crate simplelog;
 extern crate sqlite;
@@ -121,6 +122,9 @@ impl DuniterCore<DuRsConf> {
         // Init logger
         init_logger(profile.as_str(), soft_name, &cli_args);
 
+        // Print panic! in logs
+        log_panics::init();
+
         // Load global conf
         let (conf, keypairs) = duniter_conf::load_conf(profile.as_str());
         info!("Success to load global conf.");
diff --git a/documents/lib.rs b/documents/lib.rs
index 4d006cb654eeb7ff909a09f3cd88c318d01bc6bc..1ea9914223164135b15c3b245f0ad71d2135ff89 100644
--- a/documents/lib.rs
+++ b/documents/lib.rs
@@ -194,82 +194,6 @@ impl Default for Blockstamp {
     }
 }
 
-/*impl Serialize for Blockstamp {
-    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
-    where
-        S: Serializer,
-    {
-        serializer.serialize_str(&format!("{}-{}", self.id, self.hash))
-    }
-}*/
-
-/*impl<'de> Deserialize<'de> for Blockstamp {
-    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
-    where
-        D: Deserializer<'de>,
-    {
-        #[derive(Deserialize)]
-        #[serde(field_identifier, rename_all = "lowercase")]
-        enum Field {
-            Id,
-            Hash,
-        }
-
-        struct BlockstampVisitor;
-
-        impl<'de> Visitor<'de> for BlockstampVisitor {
-            type Value = Blockstamp;
-
-            fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
-                formatter.write_str("struct Blockstamp")
-            }
-
-            fn visit_seq<V>(self, mut seq: V) -> Result<Blockstamp, V::Error>
-            where
-                V: SeqAccess<'de>,
-            {
-                let id = seq
-                    .next_element()?
-                    .ok_or_else(|| de::Error::invalid_length(0, &self))?;
-                let hash = seq
-                    .next_element()?
-                    .ok_or_else(|| de::Error::invalid_length(1, &self))?;
-                Ok(Blockstamp { id, hash })
-            }
-
-            fn visit_map<V>(self, mut map: V) -> Result<Blockstamp, V::Error>
-            where
-                V: MapAccess<'de>,
-            {
-                let mut id = None;
-                let mut hash = None;
-                while let Some(key) = map.next_key()? {
-                    match key {
-                        Field::Id => {
-                            if id.is_some() {
-                                return Err(de::Error::duplicate_field("id"));
-                            }
-                            id = Some(map.next_value()?);
-                        }
-                        Field::Hash => {
-                            if hash.is_some() {
-                                return Err(de::Error::duplicate_field("hash"));
-                            }
-                            hash = Some(map.next_value()?);
-                        }
-                    }
-                }
-                let id = id.ok_or_else(|| de::Error::missing_field("id"))?;
-                let hash = hash.ok_or_else(|| de::Error::missing_field("hash"))?;
-                Ok(Blockstamp { id, hash })
-            }
-        }
-
-        const FIELDS: &'static [&'static str] = &["id", "hash"];
-        deserializer.deserialize_struct("Blockstamp", FIELDS, BlockstampVisitor)
-    }
-}*/
-
 impl PartialOrd for Blockstamp {
     fn partial_cmp(&self, other: &Blockstamp) -> Option<Ordering> {
         Some(self.cmp(other))
diff --git a/module/lib.rs b/module/lib.rs
index a24fa718f76d46a14462a492ca177938fbabca54..3c5636c9a0f8b517ccf264dc1bbb69f1d5bf5387 100644
--- a/module/lib.rs
+++ b/module/lib.rs
@@ -64,19 +64,6 @@ impl ToString for ModuleId {
     }
 }
 
-/*impl Serialize for ModuleId {
-    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
-    where
-        S: Serializer,
-    {
-        let module_id_string = match *self {
-            ModuleId::Str(module_id_str) => String::from(module_id_str),
-            ModuleId::Bin(_) => panic!("ModuleId binary format is not implemented !"),
-        };
-        serializer.serialize_str(module_id_string.as_str())
-    }
-}*/
-
 #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
 /// Identifier of an inter-module request
 pub struct ModuleReqId(pub u32);
@@ -101,15 +88,6 @@ impl ToString for ModuleReqFullId {
     }
 }
 
-/*impl Serialize for ModuleReqFullId {
-    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
-    where
-        S: Serializer,
-    {
-        serializer.serialize_str(&format!("{}-{}",  self.0.to_string(), (self.1).0))
-    }
-}*/
-
 /// Duniter configuration
 pub trait DuniterConf: Clone + Debug + Default + PartialEq + Serialize + DeserializeOwned {
     /// Get conf version profile
diff --git a/tui/lib.rs b/tui/lib.rs
index 3c3c763e2098f2e5b7d16c7e7af2c007c7b29fba..29e0013dd2d717f5690cc2d760108e617d0e62b1 100644
--- a/tui/lib.rs
+++ b/tui/lib.rs
@@ -322,9 +322,6 @@ impl TuiModuleDatas {
             "{:02}:{:02}:{:02}",
             runtime_hours, runtime_mins, runtime_secs
         );
-        /*DateTime::<Utc>::from_utc(NaiveDateTime::from_timestamp(runtime_in_secs, 0), Utc)
-                .format("%H:%M:%S")
-                .to_string();*/
         write!(
             stdout,
             "{}{}{}runtime : {}",
diff --git a/ws2p/datas.rs b/ws2p/datas.rs
index 26a7855e67d71606e27026b387496edd4e6ab63a..0177cf120786960addd972c5046ac558de09ce39 100644
--- a/ws2p/datas.rs
+++ b/ws2p/datas.rs
@@ -58,68 +58,6 @@ impl WS2PModuleDatas {
         }
         Ok(conn)
     }
-    /*pub fn parse_ws2p_conf(
-        duniter_conf: &DuRsConf,
-        ws2p_json_conf: &serde_json::Value,
-    ) -> WS2PConf {
-        let mut sync_endpoints = Vec::new();
-        match ws2p_json_conf.get("sync_peers") {
-            Some(peers) => {
-                let array_peers = peers.as_array().expect("Conf: Fail to parse conf file !");
-                for peer in array_peers {
-                    let pubkey = match peer.get("pubkey") {
-                        Some(pubkey) => PubKey::Ed25519(
-                            ed25519::PublicKey::from_base58(
-                                pubkey
-                                    .as_str()
-                                    .expect("WS2PConf Error : fail to parse sync endpoint pubkey"),
-                            ).expect("WS2PConf Error : fail to parse sync endpoint pubkey"),
-                        ),
-                        None => panic!(
-                            "Fail to load ws2p conf : \
-                             WrongFormat : not found pubkey field !"
-                        ),
-                    };
-                    match peer.get("ws2p_endpoints") {
-                        Some(endpoints) => {
-                            let array_endpoints = endpoints
-                                .as_array()
-                                .expect("Conf: Fail to parse conf file !");
-                            for endpoint in array_endpoints {
-                                sync_endpoints.push(
-                                    NetworkEndpoint::parse_from_raw(
-                                        endpoint.as_str().expect("WS2P: Fail to get ep.as_str() !"),
-                                        pubkey,
-                                        0,
-                                        0,
-                                    ).unwrap_or_else(|| {
-                                        panic!(
-                                            "WS2PConf Error : fail to parse sync Endpoint = {:?}",
-                                            endpoint
-                                                .as_str()
-                                                .expect("WS2P: Fail to get ep.as_str() !")
-                                        )
-                                    }),
-                                );
-                            }
-                        }
-                        None => panic!(
-                            "Fail to load conf : \
-                             WrongFormat : not found ws2p_endpoints field !"
-                        ),
-                    };
-                }
-            }
-            None => panic!(
-                "Configuration Error : \
-                 You must declare at least one node on which to synchronize !"
-            ),
-        };
-        WS2PConf {
-            outcoming_quota: *WS2P_DEFAULT_OUTCOMING_QUOTA,
-            sync_endpoints,
-        }
-    }*/
     pub fn send_dal_request(&self, req: &DALRequest) {
         for follower in &self.followers {
             if follower
@@ -275,15 +213,10 @@ impl WS2PModuleDatas {
                     .1 = WS2PConnectionState::Close
             }
         }
-        let _result = self
-            .websockets
-            .get(&ws2p_full_id)
-            .expect("Try to close an unexistant websocket !")
-            .0
-            .close(ws::CloseCode::Normal);
-        self.websockets
-            .remove(ws2p_full_id)
-            .unwrap_or_else(|| panic!("Fatal error : no websocket for {} !", ws2p_full_id));
+        if let Some(websocket) = self.websockets.get(&ws2p_full_id) {
+            let _result = websocket.0.close(ws::CloseCode::Normal);
+        }
+        let _result = self.websockets.remove(ws2p_full_id);
     }
     pub fn ws2p_conn_message_pretreatment(&mut self, message: WS2PConnectionMessage) -> WS2PSignal {
         let ws2p_full_id = message.0;
diff --git a/ws2p/lib.rs b/ws2p/lib.rs
index a959e8501f890ff630f85adb8e6944d94d528b75..87ccffe675b9d31326eb1fd753e4da216468676d 100644
--- a/ws2p/lib.rs
+++ b/ws2p/lib.rs
@@ -201,17 +201,6 @@ impl DuniterModule<DuRsConf, DuniterMessage> for WS2PModule {
     fn ask_required_keys() -> RequiredKeys {
         RequiredKeys::NetworkKeyPair()
     }
-    /*fn default_conf() -> serde_json::Value {
-        json!({
-            "sync_peers": [{
-                "pubkey": "D9D2zaJoWYWveii1JRYLVK3J4Z7ZH3QczoKrnQeiM6mx",
-                "ws2p_endpoints": ["WS2P c1c39a0a i3.ifee.fr 80 /ws2p"]
-            },{
-                "pubkey": "7v2J4badvfWQ6qwRdCwhhJfAsmKwoxRUNpJHiJHj7zef",
-                "ws2p_endpoints": ["WS2P b48824f0 g1.monnaielibreoccitanie.org 80 /ws2p"]
-            }]
-        })
-    }*/
     fn start(
         soft_meta_datas: &SoftwareMetaDatas<DuRsConf>,
         keys: RequiredKeysContent,
@@ -219,7 +208,10 @@ impl DuniterModule<DuRsConf, DuniterMessage> for WS2PModule {
         rooter_sender: mpsc::Sender<RooterThreadMessage<DuniterMessage>>,
         load_conf_only: bool,
     ) -> Result<(), ModuleInitError> {
+        // Get start time
         let start_time = SystemTime::now();
+
+        // Define WS2PModuleDatas
         let mut ws2p_module = WS2PModuleDatas {
             followers: Vec::new(),
             key_pair: None,
@@ -739,65 +731,11 @@ impl DuniterModule<DuRsConf, DuniterMessage> for WS2PModule {
             {
                 last_ws2p_connections_print = SystemTime::now();
                 let mut connected_nodes = Vec::new();
-                let mut denial_nodes = Vec::new();
-                let mut disconnected_nodes = Vec::new();
-                let mut unreachable_nodes = Vec::new();
-                let mut ws_error_nodes = Vec::new();
                 for (k, (_ep, state)) in ws2p_module.ws2p_endpoints.clone() {
-                    match state {
-                        WS2PConnectionState::NeverTry => {
-                            //writeln!("Never try : {}", k);
-                        }
-                        WS2PConnectionState::TryToOpenWS => {}//writeln!("TryToOpenWS : {}", k),
-                        WS2PConnectionState::WSError => {
-                            ws_error_nodes.push(k);
-                        }
-                        WS2PConnectionState::TryToSendConnectMess => {
-                            //writeln!("TryToSendConnectMess : {}", k)
-                        }
-                        WS2PConnectionState::Unreachable => {
-                            unreachable_nodes.push(k);
-                        }
-                        WS2PConnectionState::WaitingConnectMess => {
-                            //writeln!("WaitingConnectMess : {}", k)
-                        }
-                        WS2PConnectionState::NoResponse => {}//writeln!("NoResponse : {}", k),
-                        WS2PConnectionState::AckMessOk
-                        | WS2PConnectionState::ConnectMessOk
-                        | WS2PConnectionState::OkMessOkWaitingAckMess => {
-                            //writeln!("Ongoing negotiations : {}", k)
-                        }
-                        WS2PConnectionState::Denial => {
-                            denial_nodes.push(k);
-                        }
-                        WS2PConnectionState::Established => {
-                            connected_nodes.push(k);
-                        }
-                        WS2PConnectionState::Close => {
-                            disconnected_nodes.push(k);
-                        }
+                    if let WS2PConnectionState::Established = state {
+                        connected_nodes.push(k);
                     }
                 }
-                /*writeln!(
-                                    "Connected with {} nodes. (Denial : {}, Disconnected : {}, Unreachable: {}, WSError : {})",
-                                    connected_nodes.len(),
-                                    denial_nodes.len(),
-                                    disconnected_nodes.len(),
-                                    unreachable_nodes.len(),
-                                    ws_error_nodes.len()
-                                );*/
-                for _node in connected_nodes.clone() {
-                    //writeln!("Connection established : {}", node);
-                }
-                for _node in denial_nodes {
-                    //writeln!("Denial : {}", node);
-                }
-                for _node in disconnected_nodes {
-                    //writeln!("Disconnected : {}", node);
-                }
-                for _node in unreachable_nodes {
-                    //writeln!("Unreachable : {}", node);
-                }
                 // Print network consensus
                 match ws2p_module.get_network_consensus() {
                     Ok(consensus_blockstamp) => {