return err;
 }
 
+static void fast_connectable_complete(struct hci_dev *hdev, u8 status)
+{
+       struct pending_cmd *cmd;
+
+       BT_DBG("status 0x%02x", status);
+
+       hci_dev_lock(hdev);
+
+       cmd = mgmt_pending_find(MGMT_OP_SET_FAST_CONNECTABLE, hdev);
+       if (!cmd)
+               goto unlock;
+
+       if (status) {
+               cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
+                          mgmt_status(status));
+       } else {
+               send_settings_rsp(cmd->sk, MGMT_OP_SET_FAST_CONNECTABLE, hdev);
+               new_settings(hdev, cmd->sk);
+       }
+
+       mgmt_pending_remove(cmd);
+
+unlock:
+       hci_dev_unlock(hdev);
+}
+
 static int set_fast_connectable(struct sock *sk, struct hci_dev *hdev,
                                void *data, u16 len)
 {
        struct mgmt_mode *cp = data;
        struct hci_cp_write_page_scan_activity acp;
+       struct pending_cmd *cmd;
+       struct hci_request req;
        u8 type;
        int err;
 
        /* default 11.25 msec page scan window */
        acp.window = __constant_cpu_to_le16(0x0012);
 
-       err = hci_send_cmd(hdev, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY, sizeof(acp),
-                          &acp);
-       if (err < 0) {
-               err = cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
-                                MGMT_STATUS_FAILED);
-               goto done;
+       cmd = mgmt_pending_add(sk, MGMT_OP_SET_FAST_CONNECTABLE, hdev,
+                              data, len);
+       if (!cmd) {
+               err = -ENOMEM;
+               goto unlock;
        }
 
-       err = hci_send_cmd(hdev, HCI_OP_WRITE_PAGE_SCAN_TYPE, 1, &type);
+       hci_req_init(&req, hdev);
+
+       hci_req_add(&req, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY, sizeof(acp), &acp);
+       hci_req_add(&req, HCI_OP_WRITE_PAGE_SCAN_TYPE, 1, &type);
+
+       err = hci_req_run(&req, fast_connectable_complete);
        if (err < 0) {
                err = cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
                                 MGMT_STATUS_FAILED);
-               goto done;
+               mgmt_pending_remove(cmd);
        }
 
-       err = cmd_complete(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE, 0,
-                          NULL, 0);
-done:
+unlock:
        hci_dev_unlock(hdev);
+
        return err;
 }