diff --git a/src/main.rs b/src/main.rs
index 50e11adf5847ba06fa38afa2a8d593ce28a75705..31dba7264a6b06a847649af82bce9afa8841f2af 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -4,15 +4,23 @@ mod config;
 use crate::config::Config;
 
 use matrix_sdk::{
+    deserialized_responses::EncryptionInfo,
+    room::Room,
     ruma::{
-        events::{room::message::MessageEventContent, SyncMessageEvent},
+        events::{
+            macros::EventContent, push_rules::PushRulesEvent, room::message::MessageEventContent,
+            room::topic::TopicEventContent, AnyRoomEvent, AnySyncRoomEvent, StateEvent,
+            SyncMessageEvent,
+        },
         UserId,
     },
     Client, Result, SyncSettings,
 };
 
-use std::path::Path;
+use matrix_sdk::ruma::{events::SyncStateEvent, Int, MilliSecondsSinceUnixEpoch};
+
 use std::convert::TryFrom;
+use std::path::Path;
 use std::{env, process::exit};
 
 #[tokio::main]
@@ -51,12 +59,13 @@ async fn main() -> Result<()> {
     }
 
     let config_file = env::args().last().unwrap();
-
+    println!("Using config file: {}", config_file);
     return match config::from_file(&config_file) {
         Ok(config) => {
             let alice = UserId::try_from(config.user_name)?;
             let client = Client::new(config.homeserver_url)?;
 
+            // Login
             client
                 .login(
                     alice.localpart(),
@@ -65,14 +74,32 @@ async fn main() -> Result<()> {
                     Some(config.display_name.as_str()),
                 )
                 .await?;
+            println!("Logged as: {}", alice);
 
+            // Don't respond to old messages
+            // client.sync_once(SyncSettings::default()).await?;
+
+            // https://docs.rs/ruma/0.4.0/ruma/events/enum.AnySyncMessageEvent.html
+            client
+                .register_event_handler(
+                    |ev: SyncMessageEvent<MessageEventContent>,
+                     room: Room,
+                     encryption_info: Option<EncryptionInfo>| async move {
+                        println!("---\nROOM: {:?}\nENC: {:?}\nSME: {:?}", room, encryption_info, ev);
+                    },
+                )
+                .await;
             client
-                .register_event_handler(|ev: SyncMessageEvent<MessageEventContent>| async move {
-                    println!("Received a message {:?}", ev);
+                .register_event_handler(|ev: SyncStateEvent<TopicEventContent>| async move {
+                    // You can omit any or all arguments after the first.
                 })
                 .await;
 
-            client.sync(SyncSettings::default()).await; // Should never return
+            // Because we sync once already we must pass the previous sync token
+            // let settings = SyncSettings::default().token(client.sync_token().await.unwrap());
+            println!("Entering sync loop");
+            // client.sync(settings).await;
+            client.sync(SyncSettings::default()).await;
             Ok(())
         }
         Err(e) => panic!(