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 e615f8ac7ed7048666647d390927a7367440d995..bf557b57d9cfa2982521249acfb0eca543124018 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt
@@ -291,7 +291,15 @@ class QuasselService : DaggerLifecycleService(),
       service?.apply {
         disconnect()
         sessionManager.connect(
-          clientData, trustManager, hostnameVerifier, address, user to pass, requireSsl, reconnect
+          SessionManager.ConnectionInfo(
+            clientData = clientData,
+            trustManager = trustManager,
+            hostnameVerifier = hostnameVerifier,
+            address = address,
+            userData = Pair(user, pass),
+            requireSsl = requireSsl,
+            shouldReconnect = reconnect
+          )
         )
       }
     }
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 c300b207f627738384ec2249fb6889e3c89ba960..27a4c6415a84135b099a5ea5edb009e3d60e24b8 100644
--- a/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt
@@ -56,12 +56,17 @@ class SessionManager(
 
   fun close() = session.or(lastSession).close()
 
-  private var lastClientData: ClientData? = null
-  private var lastTrustManager: X509TrustManager? = null
-  private var lastHostnameVerifier: HostnameVerifier? = null
-  private var lastAddress: SocketAddress? = null
-  private var lastUserData: Pair<String, String>? = null
-  private var lastShouldReconnect = false
+  data class ConnectionInfo(
+    val clientData: ClientData,
+    val trustManager: X509TrustManager,
+    val hostnameVerifier: HostnameVerifier,
+    val address: SocketAddress,
+    val userData: Pair<String, String>,
+    val requireSsl: Boolean,
+    val shouldReconnect: Boolean
+  )
+
+  private var lastConnectionInfo: ConnectionInfo? = null
 
   private var inProgressSession = BehaviorSubject.createDefault(ISession.NULL)
   private var lastSession: ISession = offlineSession
@@ -111,31 +116,20 @@ class SessionManager(
   }
 
   fun connect(
-    clientData: ClientData,
-    trustManager: X509TrustManager,
-    hostnameVerifier: HostnameVerifier,
-    address: SocketAddress,
-    userData: Pair<String, String>,
-    requireSsl: Boolean,
-    shouldReconnect: Boolean = false
+    connectionInfo: ConnectionInfo
   ) {
     log(DEBUG, "SessionManager", "Connecting")
     inProgressSession.value.close()
-    lastClientData = clientData
-    lastTrustManager = trustManager
-    lastHostnameVerifier = hostnameVerifier
-    lastAddress = address
-    lastUserData = userData
-    lastShouldReconnect = shouldReconnect
+    lastConnectionInfo = connectionInfo
     hasErrored = false
     inProgressSession.onNext(
       Session(
-        address,
-        userData,
-        requireSsl,
-        trustManager,
-        hostnameVerifier,
-        clientData,
+        connectionInfo.address,
+        connectionInfo.userData,
+        connectionInfo.requireSsl,
+        connectionInfo.trustManager,
+        connectionInfo.hostnameVerifier,
+        connectionInfo.clientData,
         handlerService,
         heartBeatFactory,
         disconnectFromCore,
@@ -173,15 +167,11 @@ class SessionManager(
   }
 
   fun reconnect(forceReconnect: Boolean = false) {
-    if (lastShouldReconnect || forceReconnect) {
-      val clientData = lastClientData
-      val trustManager = lastTrustManager
-      val hostnameVerifier = lastHostnameVerifier
-      val address = lastAddress
-      val userData = lastUserData
-
-      if (clientData != null && trustManager != null && hostnameVerifier != null && address != null && userData != null) {
-        connect(clientData, trustManager, hostnameVerifier, address, userData, forceReconnect)
+    if (lastConnectionInfo?.shouldReconnect == true || forceReconnect) {
+      val connectionInfo = lastConnectionInfo
+
+      if (connectionInfo != null) {
+        connect(connectionInfo)
       } else {
         log(INFO, "SessionManager", "Reconnect failed: not enough data available")
       }