diff --git a/src/device.c b/src/device.c
index 9ca457e..82b66e6 100644
--- a/src/device.c
+++ b/src/device.c
if (dev->pending == NULL)
return;
- if (!dev->connected && err == -EHOSTDOWN)
- goto done;
+ if (!dev->connected) {
+ switch (-err) {
+ case EHOSTDOWN: /* page timeout */
+ case EHOSTUNREACH: /* adapter not powered */
+ case ECONNABORTED: /* adapter powered down */
+ goto done;
+ }
+ }
+
pending = dev->pending->data;
l = find_service_with_profile(dev->pending, profile);
if (dev->pending || dev->connect || dev->browse)
return btd_error_in_progress(msg);
+ if (!btd_adapter_get_powered(dev->adapter))
+ return btd_error_not_ready(msg);
+
device_set_temporary(dev, FALSE);
if (!dev->svc_resolved)