diff --git a/src/bluetooth/qlowenergycontroller_android.cpp b/src/bluetooth/qlowenergycontroller_android.cpp
index fd4ea753c048b4bab5685f4ac18ded7e7a065e83..cb08b6f97518ce42d36201ae4e22b1ce4d76e2fd 100644
--- a/src/bluetooth/qlowenergycontroller_android.cpp
+++ b/src/bluetooth/qlowenergycontroller_android.cpp
@@ -326,6 +326,14 @@ void QLowEnergyControllerPrivate::connectionUpdated(
     if (newState == QLowEnergyController::UnconnectedState
             && !(oldState == QLowEnergyController::UnconnectedState
                 || oldState == QLowEnergyController::ConnectingState)) {
+
+        // Invalidate the services if the disconnect came from the remote end.
+        // Qtherwise we disconnected via QLowEnergyController::disconnectDevice() which
+        // triggered invalidation already
+        if (!serviceList.isEmpty()) {
+            Q_ASSERT(oldState != QLowEnergyController::ClosingState);
+            invalidateServices();
+        }
         emit q->disconnected();
     } else if (newState == QLowEnergyController::ConnectedState
                && oldState != QLowEnergyController::ConnectedState ) {