if (hdev->notify)
                hdev->notify(hdev, HCI_NOTIFY_CONN_ADD);
 
-       hci_conn_add_sysfs(conn);
-
        tasklet_enable(&hdev->tx_task);
 
        return conn;
        }
 
        tasklet_disable(&hdev->tx_task);
+
        hci_conn_hash_del(hdev, conn);
        if (hdev->notify)
                hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
+
        tasklet_enable(&hdev->tx_task);
+
        skb_queue_purge(&conn->data_q);
-       hci_conn_del_sysfs(conn);
 
        return 0;
 }
 
                c->state = BT_CLOSED;
 
+               hci_conn_del_sysfs(c);
+
                hci_proto_disconn_ind(c, 0x16);
                hci_conn_del(c);
        }
 
                } else
                        conn->state = BT_CONNECTED;
 
+               hci_conn_add_sysfs(conn);
+
                if (test_bit(HCI_AUTH, &hdev->flags))
                        conn->link_mode |= HCI_LM_AUTH;
 
        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
        if (conn) {
                conn->state = BT_CLOSED;
+
+               hci_conn_del_sysfs(conn);
+
                hci_proto_disconn_ind(conn, ev->reason);
                hci_conn_del(conn);
        }
        if (!ev->status) {
                conn->handle = __le16_to_cpu(ev->handle);
                conn->state  = BT_CONNECTED;
+
+               hci_conn_add_sysfs(conn);
        } else
                conn->state = BT_CLOSED;
 
 
 void hci_conn_add_sysfs(struct hci_conn *conn)
 {
        struct hci_dev *hdev = conn->hdev;
-       bdaddr_t *ba = &conn->dst;
 
        BT_DBG("conn %p", conn);
 
 
        conn->dev.release = bt_release;
 
-       snprintf(conn->dev.bus_id, BUS_ID_SIZE,
-                       "%s%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X",
-                       conn->type == ACL_LINK ? "acl" : "sco",
-                       ba->b[5], ba->b[4], ba->b[3],
-                       ba->b[2], ba->b[1], ba->b[0]);
+       snprintf(conn->dev.bus_id, BUS_ID_SIZE, "%s:%d",
+                                       hdev->name, conn->handle);
 
        dev_set_drvdata(&conn->dev, conn);