diff --git a/src/bluetooth/qbluetoothdevicediscoveryagent_bluez.cpp b/src/bluetooth/qbluetoothdevicediscoveryagent_bluez.cpp
index a7def3d0..12fa3a60 100644
--- a/src/bluetooth/qbluetoothdevicediscoveryagent_bluez.cpp
+++ b/src/bluetooth/qbluetoothdevicediscoveryagent_bluez.cpp
@@ -101,7 +101,7 @@ QBluetoothDeviceDiscoveryAgentPrivate::~QBluetoothDeviceDiscoveryAgentPrivate()
     delete adapterBluez5;
 }
 
-//TODO: Qt6 remove the pendingCancel/pendingStart logic as it is cumbersome.
+//TODO: Qt 6 remove the pendingCancel/pendingStart logic as it is cumbersome.
 //      It is a behavior change across all platforms and was initially done
 //      for Bluez. The behavior should be similar to QBluetoothServiceDiscoveryAgent
 //      PendingCancel creates issues whereby the agent is still shutting down
@@ -113,7 +113,7 @@ bool QBluetoothDeviceDiscoveryAgentPrivate::isActive() const
     if (pendingStart)
         return true;
     if (pendingCancel)
-        return false; //TODO Qt6: remove pending[Cancel|Start] logic (see comment above)
+        return false; //TODO Qt 6: remove pending[Cancel|Start] logic (see comment above)
 
     return (adapter || adapterBluez5);
 }
diff --git a/src/bluetooth/qbluetoothdeviceinfo.h b/src/bluetooth/qbluetoothdeviceinfo.h
index 11cb2bea..32747145 100644
--- a/src/bluetooth/qbluetoothdeviceinfo.h
+++ b/src/bluetooth/qbluetoothdeviceinfo.h
@@ -228,7 +228,7 @@ public:
     ~QBluetoothDeviceInfo();
 
     bool isValid() const;
-    bool isCached() const;
+    bool isCached() const; // Qt 6 remove -> no need anymore
 
     void setCached(bool cached);
 
diff --git a/src/bluetooth/qbluetoothsocket.h b/src/bluetooth/qbluetoothsocket.h
index d2535544..698ca6bf 100644
--- a/src/bluetooth/qbluetoothsocket.h
+++ b/src/bluetooth/qbluetoothsocket.h
@@ -167,8 +167,8 @@ Q_SIGNALS:
     void stateChanged(QBluetoothSocket::SocketState state);
 
 protected:
-    virtual qint64 readData(char *data, qint64 maxSize);
-    virtual qint64 writeData(const char *data, qint64 maxSize);
+    virtual qint64 readData(char *data, qint64 maxSize); //OVERRIDE
+    virtual qint64 writeData(const char *data, qint64 maxSize); //OVERRIDE
 
     void setSocketState(SocketState state);
     void setSocketError(SocketError error);
diff --git a/src/bluetooth/qlowenergycharacteristic.h b/src/bluetooth/qlowenergycharacteristic.h
index 9b27d621..27f9909a 100644
--- a/src/bluetooth/qlowenergycharacteristic.h
+++ b/src/bluetooth/qlowenergycharacteristic.h
@@ -83,7 +83,7 @@ public:
     QByteArray value() const;
 
     QLowEnergyCharacteristic::PropertyTypes properties() const;
-    QLowEnergyHandle handle() const;
+    QLowEnergyHandle handle() const; // Qt 6 remove
 
     QLowEnergyDescriptor descriptor(const QBluetoothUuid &uuid) const;
     QList<QLowEnergyDescriptor> descriptors() const;
@@ -91,7 +91,7 @@ public:
     bool isValid() const;
 
 protected:
-    QLowEnergyHandle attributeHandle() const;
+    QLowEnergyHandle attributeHandle() const; //Qt 6 remove
 
     QSharedPointer<QLowEnergyServicePrivate> d_ptr;
 
diff --git a/src/bluetooth/qlowenergycontroller.h b/src/bluetooth/qlowenergycontroller.h
index 9fe46fe5..7b2514cd 100644
--- a/src/bluetooth/qlowenergycontroller.h
+++ b/src/bluetooth/qlowenergycontroller.h
@@ -74,8 +74,8 @@ public:
         UnconnectedState = 0,
         ConnectingState,
         ConnectedState,
-        DiscoveringState,
-        DiscoveredState,
+        DiscoveringState, //-> Qt 6 drop back to ConnectedState when discovery finished
+        //DiscoveredState, -> Qt 6 makes no sense for partially discovered controllers
         ClosingState,
         AdvertisingState,
     };
@@ -114,17 +114,22 @@ public:
 
     ControllerState state() const;
 
-    // TODO Qt6 remove this property. It is not longer needed when using Bluez DBus backend
+    // TODO Qt 6 remove this property. It is not longer needed when using Bluez DBus backend
     RemoteAddressType remoteAddressType() const;
     void setRemoteAddressType(RemoteAddressType type);
 
     void connectToDevice();
     void disconnectFromDevice();
 
-    void discoverServices();
-    QList<QBluetoothUuid> services() const;
+    // Qt 6 empty list is considered as full discovery
+    void discoverServices(const QVector<QBluetoothUuid> &servicesFilter = {});
+
+    QList<QBluetoothUuid> services() const; // only returns the discovered services and may grow with subsequent discoveries
     QLowEnergyService *createServiceObject(const QBluetoothUuid &service, QObject *parent = nullptr);
 
+    //Qt 6 in case of support for 2nd service with same uuid -> neds testing on all platforms
+    QLowEnergyService *createServiceObject(const QBluetoothUuid &service, int index, QObject *parent = nullptr);
+
     void startAdvertising(const QLowEnergyAdvertisingParameters &parameters,
                           const QLowEnergyAdvertisingData &advertisingData,
                           const QLowEnergyAdvertisingData &scanResponseData = QLowEnergyAdvertisingData());
diff --git a/src/bluetooth/qlowenergydescriptor.h b/src/bluetooth/qlowenergydescriptor.h
index 62ca5fd3..12b75bc7 100644
--- a/src/bluetooth/qlowenergydescriptor.h
+++ b/src/bluetooth/qlowenergydescriptor.h
@@ -67,13 +67,13 @@ public:
     QByteArray value() const;
 
     QBluetoothUuid uuid() const;
-    QLowEnergyHandle handle() const;
+    QLowEnergyHandle handle() const; //Qt 6 remove
     QString name() const;
 
     QBluetoothUuid::DescriptorType type() const;
 
 protected:
-    QLowEnergyHandle characteristicHandle() const;
+    QLowEnergyHandle characteristicHandle() const; //Qt 6 remove
     QSharedPointer<QLowEnergyServicePrivate> d_ptr;
 
     friend class QLowEnergyCharacteristic;
diff --git a/src/bluetooth/qlowenergyservice.h b/src/bluetooth/qlowenergyservice.h
index 9de65a84..0703e385 100644
--- a/src/bluetooth/qlowenergyservice.h
+++ b/src/bluetooth/qlowenergyservice.h
@@ -58,7 +58,7 @@ public:
     Q_ENUM(ServiceType)
     Q_DECLARE_FLAGS(ServiceTypes, ServiceType)
 
-    enum ServiceError {
+    enum ServiceError { //Qt 6 review, can potentially be more descriptive e.g. QTBUG-74753
         NoError = 0,
         OperationError,
         CharacteristicWriteError,
@@ -71,10 +71,11 @@ public:
 
     enum ServiceState {
         InvalidService = 0,
-        DiscoveryRequired,  // we know start/end handle but nothing more
+        ServiceReady,
+        //DiscoveryRequired,  // we know start/end handle but nothing more
         //TODO Rename DiscoveringServices -> DiscoveringDetails or DiscoveringService
         DiscoveringServices,// discoverDetails() called and running
-        ServiceDiscovered,  // all details have been synchronized
+        //ServiceDiscovered,  // all details have been synchronized
         LocalService,
     };
     Q_ENUM(ServiceState)
@@ -93,12 +94,12 @@ public:
     QLowEnergyService::ServiceTypes type() const;
     QLowEnergyService::ServiceState state() const;
 
-    QLowEnergyCharacteristic characteristic(const QBluetoothUuid &uuid) const;
-    QList<QLowEnergyCharacteristic> characteristics() const;
+    QLowEnergyCharacteristic characteristic(const QBluetoothUuid &uuid) const; // agreed to only return first instance
+    QList<QLowEnergyCharacteristic> characteristics() const; // multiple instances per uuid possible
     QBluetoothUuid serviceUuid() const;
     QString serviceName() const;
 
-    void discoverDetails();
+    void discoverDetails(const QVector<QBluetoothUuid> &charUuids);
 
     ServiceError error() const;
 
diff --git a/src/imports/bluetooth/qdeclarativebluetoothdiscoverymodel.cpp b/src/imports/bluetooth/qdeclarativebluetoothdiscoverymodel.cpp
index 6213355e..5c12fe0f 100644
--- a/src/imports/bluetooth/qdeclarativebluetoothdiscoverymodel.cpp
+++ b/src/imports/bluetooth/qdeclarativebluetoothdiscoverymodel.cpp
@@ -384,7 +384,7 @@ void QDeclarativeBluetoothDiscoveryModel::finishedDiscovery()
     default: // all other
         qCDebug(QT_BT_QML) << "Discovery finished" << sender()->objectName();
 
-        //TODO Qt6 This hack below is once again due to the pendingCancel logic
+        //TODO Qt 6 This hack below is once again due to the pendingCancel logic
         //         because QBluetoothDeviceDiscoveryAgent::isActive() is not reliable.
         //         In toggleStartStop() we need to know whether the stop() is delayed or immediate.
         //         isActive() cannot be used. Hence we have to wait for the canceled() signal.
@@ -534,7 +534,7 @@ bool QDeclarativeBluetoothDiscoveryModel::toggleStartStop(Action action)
         if (d->m_currentState == DeviceDiscoveryAction) {
             d->m_deviceAgent->stop();
 
-            // TODO Qt6 Crude hack below
+            // TODO Qt 6 Crude hack below
             // cannot use isActive() below due to pendingCancel logic
             // we always wait for canceled() signal coming through or check
             // for directly invoked cancel() response caused by stop() above
