diff --git a/examples/bluetooth/scanner/scanner.qml b/examples/bluetooth/scanner/scanner.qml
index 67aaecf0c6a40208c14684c0c78abf5b9185850d..543e19dedc46df7f4057d51f7bf05fd35694bccc 100644
--- a/examples/bluetooth/scanner/scanner.qml
+++ b/examples/bluetooth/scanner/scanner.qml
@@ -60,6 +60,8 @@ Item {
                     console.log("Error: Bluetooth device not turned on"); break;
                 case BluetoothDiscoveryModel.InputOutputError:
                     console.log("Error: Bluetooth I/O Error"); break;
+                case BluetoothDiscoveryModel.InvalidBluetoothAdapterError:
+                    console.log("Error: Invalid Bluetooth Adapter Error"); break;
                 case BluetoothDiscoveryModel.NoError:
                     break;
                 default:
diff --git a/src/bluetooth/qbluetoothservicediscoveryagent.cpp b/src/bluetooth/qbluetoothservicediscoveryagent.cpp
index c800dc6d351f6f6a2d3a6e69438ee84a45f013d0..ef28ef8252daa32290274c6b9b3d68f27c7bbfed 100644
--- a/src/bluetooth/qbluetoothservicediscoveryagent.cpp
+++ b/src/bluetooth/qbluetoothservicediscoveryagent.cpp
@@ -91,7 +91,8 @@ QT_BEGIN_NAMESPACE
     \value PoweredOffError  The Bluetooth adaptor is powered off, power it on before doing discovery.
     \value InputOutputError    Writing or reading from the device resulted in an error.
     \value InvalidBluetoothAdapterError The passed local adapter address does not match the physical
-                                        adapter address of any local Bluetooth device.
+                                        adapter address of any local Bluetooth device. This value
+                                        was introduced by Qt 5.3.
     \value UnknownError     An unknown error has occurred.
 */
 
diff --git a/src/bluetooth/qbluetoothservicediscoveryagent_android.cpp b/src/bluetooth/qbluetoothservicediscoveryagent_android.cpp
index 01993f2549af1333fec4ff27fc7ce7ad61e14ee5..e10d2ffe4a2dcc6bd36b259c78f1fc06abad8a76 100644
--- a/src/bluetooth/qbluetoothservicediscoveryagent_android.cpp
+++ b/src/bluetooth/qbluetoothservicediscoveryagent_android.cpp
@@ -48,19 +48,20 @@ QT_BEGIN_NAMESPACE
 Q_DECLARE_LOGGING_CATEGORY(QT_BT_ANDROID)
 
 QBluetoothServiceDiscoveryAgentPrivate::QBluetoothServiceDiscoveryAgentPrivate(
-        const QBluetoothAddress &deviceAdapter)
+        const QBluetoothAddress &/*deviceAdapter*/)
     : error(QBluetoothServiceDiscoveryAgent::NoError),
       state(Inactive), deviceDiscoveryAgent(0),
       mode(QBluetoothServiceDiscoveryAgent::MinimalDiscovery),
       singleDevice(false), receiver(0), localDeviceReceiver(0)
 {
     QList<QBluetoothHostInfo> devices = QBluetoothLocalDevice::allDevices();
-    Q_ASSERT(devices.count() == 1); //Android only supports one device at the moment
+    Q_ASSERT(devices.count() <= 1); //Android only supports one device at the moment
 
-    if (deviceAdapter.isNull() && devices.count() > 0 )
-        m_deviceAdapterAddress = devices.at(0).address();
-    else
-        m_deviceAdapterAddress = deviceAdapter;
+    if (devices.isEmpty()) {
+        error = QBluetoothServiceDiscoveryAgent::InvalidBluetoothAdapterError;
+        errorString = QBluetoothServiceDiscoveryAgent::tr("Invalid Bluetooth adapter address");
+        return;
+    }
 
     if (QtAndroidPrivate::androidSdkVersion() < 15)
         qCWarning(QT_BT_ANDROID)
@@ -69,13 +70,10 @@ QBluetoothServiceDiscoveryAgentPrivate::QBluetoothServiceDiscoveryAgentPrivate(
             << "Service discovery will return empty list.";
 
 
-        /*  We assume that the current local adapter has been passed.
-            Android only supports one adapter at the moment. If m_deviceAdapterAddress
-            doesn't match the local adapter then we won't get to this point since
-            we have an InvalidBluetoothAdapter error.
-
-            The logic below must change once there is more than one adapter.
-        */
+    /*
+      We assume that the current local adapter has been passed.
+      The logic below must change once there is more than one adapter.
+    */
 
     btAdapter = QAndroidJniObject::callStaticObjectMethod("android/bluetooth/BluetoothAdapter",
                                                            "getDefaultAdapter",
diff --git a/src/imports/bluetooth/plugins.qmltypes b/src/imports/bluetooth/plugins.qmltypes
index f7d0d08d30a4fe3b8ec606b9995cc2c39be267ba..cf2146e2e0611f9d6cb0d67ff4fc27e8063c292a 100644
--- a/src/imports/bluetooth/plugins.qmltypes
+++ b/src/imports/bluetooth/plugins.qmltypes
@@ -30,7 +30,8 @@ Module {
                 "NoError": 0,
                 "InputOutputError": 1,
                 "PoweredOffError": 2,
-                "UnknownError": 3
+                "UnknownError": 3,
+                "InvalidBluetoothAdapterError": 4
             }
         }
         Property { name: "error"; type: "Error"; isReadonly: true }
diff --git a/src/imports/bluetooth/qdeclarativebluetoothdiscoverymodel.cpp b/src/imports/bluetooth/qdeclarativebluetoothdiscoverymodel.cpp
index 20f47f6508f42303bf516234a77f1c97c84027ac..01a53bfa38628b41f5c4def2926ab519653885e6 100644
--- a/src/imports/bluetooth/qdeclarativebluetoothdiscoverymodel.cpp
+++ b/src/imports/bluetooth/qdeclarativebluetoothdiscoverymodel.cpp
@@ -151,7 +151,19 @@ void QDeclarativeBluetoothDiscoveryModel::componentComplete()
 
 void QDeclarativeBluetoothDiscoveryModel::errorDiscovery(QBluetoothServiceDiscoveryAgent::Error error)
 {
-    d->m_error = static_cast<QDeclarativeBluetoothDiscoveryModel::Error>(error);
+    switch (error) {
+    case QBluetoothServiceDiscoveryAgent::InvalidBluetoothAdapterError:
+        d->m_error = QDeclarativeBluetoothDiscoveryModel::InvalidBluetoothAdapterError; break;
+    case QBluetoothServiceDiscoveryAgent::NoError:
+        d->m_error = QDeclarativeBluetoothDiscoveryModel::NoError; break;
+    case QBluetoothServiceDiscoveryAgent::InputOutputError:
+        d->m_error = QDeclarativeBluetoothDiscoveryModel::InputOutputError; break;
+    case QBluetoothServiceDiscoveryAgent::PoweredOffError:
+        d->m_error = QDeclarativeBluetoothDiscoveryModel::PoweredOffError; break;
+    case QBluetoothServiceDiscoveryAgent::UnknownError:
+        d->m_error = QDeclarativeBluetoothDiscoveryModel::UnknownError; break;
+    }
+
     emit errorChanged();
 }
 
@@ -187,6 +199,12 @@ void QDeclarativeBluetoothDiscoveryModel::clearModel()
          \li An IO failure occurred during device discovery
     \row \li \c BluetoothDiscoveryModel.PoweredOffError
          \li The bluetooth device is not powered on.
+    \row \li \c BluetoothDiscoveryModel.InvalidBluetoothAdapterError
+         \li There is no default Bluetooth device to perform the
+             service discovery. The model always uses the local default adapter.
+             Specifying a default adapter is not possible. If that's required,
+             \l QBluetoothServiceDiscoveryAgent should be directly used. This
+             value was introduced by Qt 5.4.
     \row \li \c BluetoothDiscoveryModel.UnknownError
          \li An unknown error occurred.
     \endtable
@@ -407,6 +425,13 @@ void QDeclarativeBluetoothDiscoveryModel::setRunning(bool running)
                 //qDebug() << "Minimal Discovery";
                 d->m_serviceAgent->start(QBluetoothServiceDiscoveryAgent::MinimalDiscovery);
             }
+
+            // we could not start service discovery
+            if (!d->m_serviceAgent->isActive()) {
+                d->m_running = false;
+                errorDiscovery(d->m_serviceAgent->error());
+                return;
+            }
         }
     }
 
diff --git a/src/imports/bluetooth/qdeclarativebluetoothdiscoverymodel_p.h b/src/imports/bluetooth/qdeclarativebluetoothdiscoverymodel_p.h
index 279fb06329091e457ef51a9805531bec4ae51b1f..1834ce36f3f4ea43d354780294ac7e934a52fb98 100644
--- a/src/imports/bluetooth/qdeclarativebluetoothdiscoverymodel_p.h
+++ b/src/imports/bluetooth/qdeclarativebluetoothdiscoverymodel_p.h
@@ -94,7 +94,8 @@ public:
         NoError,
         InputOutputError,
         PoweredOffError,
-        UnknownError
+        UnknownError,
+        InvalidBluetoothAdapterError
     };
 
     Error error() const;