Index: uspace/drv/bus/usb/usbhid/main.c
===================================================================
--- uspace/drv/bus/usb/usbhid/main.c	(revision 98604cc36ff3d82e72090720b0e4eb520678a96b)
+++ uspace/drv/bus/usb/usbhid/main.c	(revision 68dbe3e0c9fcbe5acd289a9b5f4b31ab29a0b672)
@@ -126,5 +126,4 @@
 	   hid_dev);
 
-
 	if (rc != EOK) {
 		usb_log_error("Failed to start polling fibril for `%s'.\n",
@@ -133,4 +132,5 @@
 		return rc;
 	}
+	hid_dev->running = true;
 	dev->driver_data = hid_dev;
 
@@ -195,4 +195,14 @@
 {
 	usb_hid_dev_t *hid_dev = dev->driver_data;
+	unsigned tries = 10;
+	while (hid_dev->running) {
+		async_usleep(100000);
+		if (!tries--) {
+			usb_log_error("Can't remove hub, still running.\n");
+			return EINPROGRESS;
+		}
+	}
+
+	assert(!hid_dev->running);
 	usb_hid_destroy(hid_dev);
 	return EOK;
Index: uspace/drv/bus/usb/usbhid/usbhid.c
===================================================================
--- uspace/drv/bus/usb/usbhid/usbhid.c	(revision 98604cc36ff3d82e72090720b0e4eb520678a96b)
+++ uspace/drv/bus/usb/usbhid/usbhid.c	(revision 68dbe3e0c9fcbe5acd289a9b5f4b31ab29a0b672)
@@ -630,4 +630,5 @@
 	}
 
+	hid_dev->running = false;
 //	usb_hid_destroy(hid_dev);
 }
Index: uspace/drv/bus/usb/usbhid/usbhid.h
===================================================================
--- uspace/drv/bus/usb/usbhid/usbhid.h	(revision 98604cc36ff3d82e72090720b0e4eb520678a96b)
+++ uspace/drv/bus/usb/usbhid/usbhid.h	(revision 68dbe3e0c9fcbe5acd289a9b5f4b31ab29a0b672)
@@ -129,4 +129,5 @@
 
 	int report_nr;
+	bool running;
 };
 
