diff --git a/src/bluetooth/bluez/hcimanager.cpp b/src/bluetooth/bluez/hcimanager.cpp
index 449f0825bec1c5a0daa6d94997a7d68c01365b29..17d54a4b271c493f3a704b3bba59aa4626918129 100644
--- a/src/bluetooth/bluez/hcimanager.cpp
+++ b/src/bluetooth/bluez/hcimanager.cpp
@@ -150,6 +150,7 @@ bool HciManager::monitorEvent(HciManager::HciEvent event)
         return false;
 
     // this event is already enabled
+    // TODO runningEvents does not seem to be used
     if (runningEvents.contains(event))
         return true;
 
diff --git a/src/bluetooth/qlowenergycontroller_bluez.cpp b/src/bluetooth/qlowenergycontroller_bluez.cpp
index 4f8021e2566c19bc191a2821cf8f175a7a31a81a..5629966d1fca96edc0ee33efaf511f15aadfd3f1 100644
--- a/src/bluetooth/qlowenergycontroller_bluez.cpp
+++ b/src/bluetooth/qlowenergycontroller_bluez.cpp
@@ -271,6 +271,7 @@ void QLowEnergyControllerPrivate::disconnectFromDevice()
 {
     setState(QLowEnergyController::ClosingState);
     l2cpSocket->close();
+    resetController();
 }
 
 void QLowEnergyControllerPrivate::l2cpDisconnected()
@@ -306,9 +307,19 @@ void QLowEnergyControllerPrivate::l2cpErrorChanged(QBluetoothSocket::SocketError
     }
 
     invalidateServices();
+    resetController();
     setState(QLowEnergyController::UnconnectedState);
 }
 
+
+void QLowEnergyControllerPrivate::resetController()
+{
+    openRequests.clear();
+    requestPending = false;
+    encryptionChangePending = false;
+    securityLevelValue = -1;
+}
+
 void QLowEnergyControllerPrivate::l2cpReadyRead()
 {
     const QByteArray reply = l2cpSocket->readAll();
diff --git a/src/bluetooth/qlowenergycontroller_p.h b/src/bluetooth/qlowenergycontroller_p.h
index ee206035dbb527453bd49e1e6948c74b73fa44cc..db1b346ac5a0748f7f14e6de528307f44a1745d7 100644
--- a/src/bluetooth/qlowenergycontroller_p.h
+++ b/src/bluetooth/qlowenergycontroller_p.h
@@ -160,6 +160,8 @@ private:
                                      const QByteArray &newValue, quint16 offset);
     bool increaseEncryptLevelfRequired(quint8 errorCode);
 
+    void resetController();
+
 private slots:
     void l2cpConnected();
     void l2cpDisconnected();