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 afac73faee45b57b2795a2b14cf822fad46f5e33..f342635c8b1b92cff050872f2524f86833ed9120 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt
@@ -338,15 +338,13 @@ class QuasselService : DaggerLifecycleService(),
       }
     })
 
-    var wasEverConnected = false
     connectivity
       .delay(200, TimeUnit.MILLISECONDS)
       .throttleFirst(1, TimeUnit.SECONDS)
       .toLiveData()
       .observe(this, Observer {
         handlerService.backend {
-          if (wasEverConnected && !sessionManager.hasErrored)
-            sessionManager.reconnect(true)
+          sessionManager.autoReconnect(true)
         }
       })
 
@@ -358,12 +356,7 @@ class QuasselService : DaggerLifecycleService(),
       .observe(
         this, Observer {
         handlerService.backend {
-          if (it == ConnectionState.DISCONNECTED || it == ConnectionState.CLOSED) {
-            if (wasEverConnected && !sessionManager.hasErrored)
-              sessionManager.reconnect()
-          } else {
-            wasEverConnected = true
-          }
+          sessionManager.autoReconnect()
         }
       })
 
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 83d3188ceac60b6ded1786af6edd996d60bec6b4..ea5edf2917433b0cef84ed45d25f55a01bea23a8 100644
--- a/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt
@@ -98,9 +98,17 @@ class SessionManager(
     Invokers
   }
 
+  fun ifClosed(closure: (ISession) -> Unit) {
+    state.or(ConnectionState.DISCONNECTED).let {
+      if (it == ConnectionState.CLOSED) {
+        closure(inProgressSession.value)
+      }
+    }
+  }
+
   fun ifDisconnected(closure: (ISession) -> Unit) {
     state.or(ConnectionState.DISCONNECTED).let {
-      if (it == ConnectionState.DISCONNECTED || it == ConnectionState.CLOSED) {
+      if (it == ConnectionState.CLOSED || it == ConnectionState.DISCONNECTED) {
         closure(inProgressSession.value)
       }
     }
@@ -138,6 +146,14 @@ class SessionManager(
     )
   }
 
+  fun autoReconnect(forceReconnect: Boolean = false) {
+    if (!hasErrored) {
+      ifClosed {
+        reconnect(forceReconnect)
+      }
+    }
+  }
+
   fun reconnect(forceReconnect: Boolean = false) {
     if (lastShouldReconnect || forceReconnect) {
       val clientData = lastClientData