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 4a41bfaefc724c74fcacae4076fd0cddf5a9d106..7a96a7c50d81ecfe786f47ea4d291113e668965a 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt
@@ -276,8 +276,10 @@ class QuasselService : DaggerLifecycleService(),
       .throttleFirst(1, TimeUnit.SECONDS)
       .toLiveData()
       .observe(this, Observer {
-        if (wasEverConnected && !sessionManager.hasErrored)
-          sessionManager.reconnect(true)
+        handlerService.backend {
+          if (wasEverConnected && !sessionManager.hasErrored)
+            sessionManager.reconnect(true)
+        }
       })
 
     sessionManager.state
@@ -287,11 +289,13 @@ class QuasselService : DaggerLifecycleService(),
       .toLiveData()
       .observe(
         this, Observer {
-        if (it == ConnectionState.DISCONNECTED || it == ConnectionState.CLOSED) {
-          if (wasEverConnected && !sessionManager.hasErrored)
-            sessionManager.reconnect()
-        } else {
-          wasEverConnected = true
+        handlerService.backend {
+          if (it == ConnectionState.DISCONNECTED || it == ConnectionState.CLOSED) {
+            if (wasEverConnected && !sessionManager.hasErrored)
+              sessionManager.reconnect()
+          } else {
+            wasEverConnected = true
+          }
         }
       })
 
diff --git a/lib/src/main/java/de/kuschku/libquassel/connection/CoreConnection.kt b/lib/src/main/java/de/kuschku/libquassel/connection/CoreConnection.kt
index 83755afa7e31a13f6a32b9b966bc3b6e1c7a0881..e8b28e00ad16557eced31c366c4aa3596ac3ff4f 100644
--- a/lib/src/main/java/de/kuschku/libquassel/connection/CoreConnection.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/connection/CoreConnection.kt
@@ -127,10 +127,11 @@ class CoreConnection(
   override fun close() {
     try {
       setState(ConnectionState.CLOSED)
+      channel?.flush()
+      channel?.close()
       interrupt()
     } catch (e: Throwable) {
-      log(WARN,
-          TAG, "Error encountered while closing connection", e)
+      log(WARN, TAG, "Error encountered while closing connection", e)
     }
   }
 
@@ -200,14 +201,13 @@ class CoreConnection(
           }
         }
       }
+      channel?.close()
     } catch (e: QuasselSecurityException) {
       close()
       securityExceptionCallback(e)
     } catch (e: Throwable) {
-      log(WARN,
-          TAG, "Error encountered in connection", e)
-      log(WARN,
-          TAG, "Last sent message: ${MessageRunnable.lastSent.get()}")
+      log(WARN, TAG, "Error encountered in connection", e)
+      log(WARN, TAG, "Last sent message: ${MessageRunnable.lastSent.get()}")
       close()
     }
   }
diff --git a/lib/src/main/java/de/kuschku/libquassel/util/nio/WrappedChannel.kt b/lib/src/main/java/de/kuschku/libquassel/util/nio/WrappedChannel.kt
index 79f2c76b6a666fcfe7ed12c6d145e583fc42faf9..a7bd8957d20f209bcb1704479c547fb192f368a1 100644
--- a/lib/src/main/java/de/kuschku/libquassel/util/nio/WrappedChannel.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/util/nio/WrappedChannel.kt
@@ -186,6 +186,7 @@ class WrappedChannel(
     rawIn = null
     rawOut?.close()
     rawOut = null
+    socket.close()
   }
 
   /**