diff --git a/src/bluetooth/qlowenergycontroller_winrt.cpp b/src/bluetooth/qlowenergycontroller_winrt.cpp
index d6fc49527060c82ca2ad713d2c8060ecc0d39c59..8d3d85d8a43069d16ee9504bfff720d435feedc5 100644
--- a/src/bluetooth/qlowenergycontroller_winrt.cpp
+++ b/src/bluetooth/qlowenergycontroller_winrt.cpp
@@ -338,6 +338,7 @@ void QLowEnergyControllerPrivate::connectToDevice()
                 emit q->connected();
             } else if (state == QLowEnergyController::ConnectedState
                        && status == BluetoothConnectionStatus::BluetoothConnectionStatus_Disconnected) {
+                setError(QLowEnergyController::RemoteHostClosedError);
                 setState(QLowEnergyController::UnconnectedState);
                 emit q->disconnected();
             }
@@ -419,6 +420,10 @@ void QLowEnergyControllerPrivate::disconnectFromDevice()
     Q_Q(QLowEnergyController);
     setState(QLowEnergyController::UnconnectedState);
     emit q->disconnected();
+    if (mDevice && mStatusChangedToken.value) {
+        mDevice->remove_ConnectionStatusChanged(mStatusChangedToken);
+        mStatusChangedToken.value = 0;
+    }
 }
 
 ComPtr<IGattDeviceService> QLowEnergyControllerPrivate::getNativeService(const QBluetoothUuid &serviceUuid)