if (status)
                return;
 
-       clear_bit(HCI_INQUIRY, &hdev->flags);
+       if (test_bit(HCI_MGMT, &hdev->flags) &&
+                               test_and_clear_bit(HCI_INQUIRY, &hdev->flags))
+               mgmt_discovering(hdev->id, 0);
 
        hci_req_complete(hdev, HCI_OP_INQUIRY_CANCEL, status);
 
        if (status)
                return;
 
-       clear_bit(HCI_INQUIRY, &hdev->flags);
+       if (test_bit(HCI_MGMT, &hdev->flags) &&
+                               test_and_clear_bit(HCI_INQUIRY, &hdev->flags))
+               mgmt_discovering(hdev->id, 0);
 
        hci_conn_check_pending(hdev);
 }
 
        if (status) {
                hci_req_complete(hdev, HCI_OP_INQUIRY, status);
-
                hci_conn_check_pending(hdev);
-       } else
-               set_bit(HCI_INQUIRY, &hdev->flags);
+               return;
+       }
+
+       if (test_bit(HCI_MGMT, &hdev->flags) &&
+                                       !test_and_set_bit(HCI_INQUIRY,
+                                                       &hdev->flags))
+               mgmt_discovering(hdev->id, 1);
 }
 
 static inline void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
 
        BT_DBG("%s status %d", hdev->name, status);
 
-       clear_bit(HCI_INQUIRY, &hdev->flags);
+       if (test_bit(HCI_MGMT, &hdev->flags) &&
+                               test_and_clear_bit(HCI_INQUIRY, &hdev->flags))
+               mgmt_discovering(hdev->id, 0);
 
        hci_req_complete(hdev, HCI_OP_INQUIRY, status);
 
 
        hci_dev_lock(hdev);
 
+       if (!test_and_set_bit(HCI_INQUIRY, &hdev->flags)) {
+
+               if (test_bit(HCI_MGMT, &hdev->flags))
+                       mgmt_discovering(hdev->id, 1);
+       }
+
        for (; num_rsp; num_rsp--, info++) {
                bacpy(&data.bdaddr, &info->bdaddr);
                data.pscan_rep_mode     = info->pscan_rep_mode;
 
        hci_dev_lock(hdev);
 
+       if (!test_and_set_bit(HCI_INQUIRY, &hdev->flags)) {
+
+               if (test_bit(HCI_MGMT, &hdev->flags))
+                       mgmt_discovering(hdev->id, 1);
+       }
+
        if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
                struct inquiry_info_with_rssi_and_pscan_mode *info;
                info = (void *) (skb->data + 1);
        if (!num_rsp)
                return;
 
+       if (!test_and_set_bit(HCI_INQUIRY, &hdev->flags)) {
+
+               if (test_bit(HCI_MGMT, &hdev->flags))
+                       mgmt_discovering(hdev->id, 1);
+       }
+
        hci_dev_lock(hdev);
 
        for (; num_rsp; num_rsp--, info++) {