diff --git a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt
index b24b6f8f6ecc969f56c127adb7f627b52871067c..64522ecb05d93f2e0415aae83709baff6379294d 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt
@@ -7,6 +7,8 @@ import android.net.ConnectivityManager
 import android.os.Binder
 import de.kuschku.libquassel.protocol.*
 import de.kuschku.libquassel.session.*
+import de.kuschku.libquassel.util.compatibility.LoggingHandler
+import de.kuschku.libquassel.util.compatibility.LoggingHandler.Companion.log
 import de.kuschku.quasseldroid.BuildConfig
 import de.kuschku.quasseldroid.Keys
 import de.kuschku.quasseldroid.R
@@ -44,7 +46,7 @@ class QuasselService : DaggerLifecycleService(),
     if (this.connectionSettings.showNotification != connectionSettings.showNotification) {
       this.connectionSettings = connectionSettings
 
-      updateNotificationStatus()
+      updateNotificationStatus(this.progress)
     }
 
     val (accountId, reconnect) = this.sharedPreferences(Keys.Status.NAME, Context.MODE_PRIVATE) {
@@ -68,11 +70,11 @@ class QuasselService : DaggerLifecycleService(),
   private var notificationHandle: QuasseldroidNotificationManager.Handle? = null
   private var progress = Triple(ConnectionState.DISCONNECTED, 0, 0)
 
-  private fun updateNotificationStatus() {
+  private fun updateNotificationStatus(rawProgress: Triple<ConnectionState, Int, Int>) {
     if (connectionSettings.showNotification) {
       val notificationHandle = notificationManager.notificationBackground()
       this.notificationHandle = notificationHandle
-      updateNotification(notificationHandle)
+      updateNotification(notificationHandle, rawProgress)
       startForeground(notificationHandle.id, notificationHandle.builder.build())
     } else {
       this.notificationHandle = null
@@ -96,8 +98,10 @@ class QuasselService : DaggerLifecycleService(),
     }
   }
 
-  private fun updateNotification(handle: QuasseldroidNotificationManager.Handle) {
-    val (state, progress, max) = this.progress
+  private fun updateNotification(handle: QuasseldroidNotificationManager.Handle,
+                                 rawProgress: Triple<ConnectionState, Int, Int>) {
+    log(LoggingHandler.LogLevel.ERROR, "DEBUG", "progress: $rawProgress")
+    val (state, progress, max) = rawProgress
     when (state) {
       ConnectionState.DISCONNECTED -> {
         handle.builder.setContentTitle(getString(R.string.label_status_disconnected))
@@ -267,15 +271,17 @@ class QuasselService : DaggerLifecycleService(),
     )
 
     sessionManager.connectionProgress.toLiveData().observe(this, Observer {
+      log(LoggingHandler.LogLevel.ERROR, "DEBUG", "progress: $it")
       if (this.progress.first != it?.first && it?.first == ConnectionState.CONNECTED) {
         handlerService.backend {
           database.message().clearMessages()
         }
       }
-      this.progress = it ?: Triple(ConnectionState.DISCONNECTED, 0, 0)
+      val rawProgress = it ?: Triple(ConnectionState.DISCONNECTED, 0, 0)
+      this.progress = rawProgress
       val handle = this.notificationHandle
       if (handle != null) {
-        updateNotification(handle)
+        updateNotification(handle, rawProgress)
         notificationManager.notify(handle)
       }
     })
@@ -283,16 +289,15 @@ class QuasselService : DaggerLifecycleService(),
     Observable.combineLatest(
       sessionManager.state.filter { it == ConnectionState.DISCONNECTED || it == ConnectionState.CLOSED },
       connectivity,
-      BiFunction { a: ConnectionState, b: Unit -> a to b })
+      BiFunction { a: ConnectionState, _: Unit -> a })
       .distinctUntilChanged()
       .delay(200, TimeUnit.MILLISECONDS)
-      .throttleFirst(5, TimeUnit.SECONDS)
+      .throttleFirst(1, TimeUnit.SECONDS)
       .toLiveData()
       .observe(
         this, Observer {
-        sessionManager.ifDisconnected {
+        if (it == ConnectionState.DISCONNECTED || it == ConnectionState.CLOSED)
           sessionManager.reconnect(true)
-        }
       })
 
     sharedPreferences(Keys.Status.NAME, Context.MODE_PRIVATE) {
@@ -308,7 +313,7 @@ class QuasselService : DaggerLifecycleService(),
     notificationManager.init()
 
     update()
-    updateNotificationStatus()
+    updateNotificationStatus(this.progress)
   }
 
   override fun onDestroy() {
diff --git a/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt b/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt
index d46a638925b11cfaf954c5e899177c06b7a7e5d8..48518bd1eacf3e2f306ef0ff8205f5be23ae66b7 100644
--- a/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt
@@ -134,11 +134,7 @@ class SessionManager(offlineSession: ISession,
       val userData = lastUserData
 
       if (clientData != null && trustManager != null && address != null && userData != null) {
-        state.or(ConnectionState.DISCONNECTED).let {
-          if (it == ConnectionState.DISCONNECTED || it == ConnectionState.CLOSED || forceReconnect) {
-            connect(clientData, trustManager, address, userData, forceReconnect)
-          }
-        }
+        connect(clientData, trustManager, address, userData, forceReconnect)
       }
     }
   }