diff --git a/mgb.yml b/mgb.yml
index 49a475cbf06ed23616be361d33fc8f6a4eb10ebc..05480b93ea991dbc5df8f98e8dbaf5c1a5ea402d 100644
--- a/mgb.yml
+++ b/mgb.yml
@@ -1,4 +1,8 @@
 [user]
-id=@some_id:matrix.org
+id=@some_id\:matrix.org
 password=no-password
 display_name=MGB-Hitagi
+
+[handler]
+state_member=true
+room_message=true
diff --git a/src/config.rs b/src/config.rs
index 520e633f3e8f164348695e0fa5872ffb621226e4..fcdef0ed81dedd6246a876ad129f9837c6f9d7d7 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -2,7 +2,7 @@
 
 use ini::{Error::Io as IniErrIo, Error::Parse as IniErrParse, Ini};
 use log::{error, info, warn, LevelFilter};
-use std::{env, path::Path, process::abort};
+use std::{env, path::Path, process::abort, str::FromStr};
 use url::Url;
 
 pub struct Config {
@@ -10,6 +10,9 @@ pub struct Config {
     pub homeserver_url: Url,   // The url of the home server, like https://matrix.iiens.net
     pub user_name: String,     // The true user name
     pub user_password: String, // The true user name
+
+    pub handle_state_member: bool, // Install handler for state memver changes
+    pub handle_room_message: bool, // Install handler for room messages
 }
 
 pub fn setup_logging() {
@@ -36,6 +39,12 @@ pub fn from_file(file_name: &String) -> Result<Config, String> {
         Err(IniErrParse(e)) => Err(e.to_string()),
         Ok(conf) => {
             let hs_url_str = conf.get_from_or(Some("user"), "homeserver", "https://matrix.org");
+            let handle_room_message_str = conf
+                .get_from_or(Some("handler"), "room_message", "true")
+                .to_string();
+            let handle_state_member_str = conf
+                .get_from_or(Some("handler"), "state_member", "true")
+                .to_string();
             return match Url::parse(hs_url_str) {
                 Err(e) => Err(e.to_string()),
                 Ok(hs_url) => Ok(Config {
@@ -49,6 +58,10 @@ pub fn from_file(file_name: &String) -> Result<Config, String> {
                         .get_from_or(Some("user"), "display_name", "MGB-Hitagi")
                         .to_string(),
                     homeserver_url: hs_url,
+                    handle_room_message: <bool as FromStr>::from_str(&handle_room_message_str)
+                        .unwrap_or(false),
+                    handle_state_member: <bool as FromStr>::from_str(&handle_state_member_str)
+                        .unwrap_or(false),
                 }),
             };
         }
@@ -61,6 +74,9 @@ pub fn write_default(file_name: &String) -> Result<(), String> {
         .set("id", "@some_id:matrix.org")
         .set("password", "no-password")
         .set("display_name", "MGB-Hitagi");
+    conf.with_section(Some("handler"))
+        .set("state_member", "true")
+        .set("room_message", "true");
     match conf.write_to_file_policy(file_name, ini::EscapePolicy::Everything) {
         Ok(()) => {
             info!("Default config file written to {}", file_name);
diff --git a/src/matrix.rs b/src/matrix.rs
index f0b31ce99f98257fc19291f1e2415d46aa7804b9..bd364e70bbe43c0fcf65adb3ea5272fd3db25198 100644
--- a/src/matrix.rs
+++ b/src/matrix.rs
@@ -1,5 +1,5 @@
 use crate::config::Config;
-use futures::{join, future::join_all};
+use futures::future::join_all;
 use log::{error, info, warn};
 use matrix_sdk::{
     deserialized_responses::EncryptionInfo,
@@ -144,9 +144,19 @@ pub async fn connect_and_handle(config: Config) -> Result<()> {
     client.sync_once(SyncSettings::default()).await?;
 
     startup_and_log_rooms(&client).await;
-    let register_handle_state = client.register_event_handler(on_state_member);
-    let register_handle_message = client.register_event_handler(on_room_message);
-    join!(register_handle_message, register_handle_state);
+    if config.handle_state_member {
+        info!("Handle state member events");
+        client.register_event_handler(on_state_member).await;
+    } else {
+        warn!("Ignore state member events");
+    }
+
+    if config.handle_room_message {
+        info!("Handle room message events");
+        client.register_event_handler(on_room_message).await;
+    } else {
+        error!("Ignore room message events! The bot won't answer to any message");
+    }
 
     info!("Entering sync loop");
     let token = client.sync_token().await.unwrap();