Index: uspace/lib/usbdev/src/devdrv.c
===================================================================
--- uspace/lib/usbdev/src/devdrv.c	(revision 4501e2073927a0d64db8a85ca96715739a19d518)
+++ uspace/lib/usbdev/src/devdrv.c	(revision 844f4ef32bfb17441c9c3cf5627af5ce1f3d3e01)
@@ -151,4 +151,5 @@
 		return rc;
 	}
+	gen_dev->driver_data = dev;
 
 	return driver->ops->device_add(dev);
@@ -161,6 +162,6 @@
 	if (driver->ops->device_rem == NULL)
 		return ENOTSUP;
-
-	return ENOTSUP;
+	/* Just tell the driver to stop whatever it is doing, keep structures */
+	return driver->ops->device_rem(gen_dev->driver_data);
 }
 /*----------------------------------------------------------------------------*/
@@ -169,7 +170,11 @@
 	assert(driver);
 	assert(driver->ops);
-	assert(driver->ops->device_gone);
-
-	return ENOTSUP;
+	if (driver->ops->device_gone == NULL)
+		return ENOTSUP;
+	const int ret = driver->ops->device_gone(gen_dev->driver_data);
+	if (ret == EOK)
+		usb_device_destroy(gen_dev->driver_data);
+
+	return ret;
 }
 /*----------------------------------------------------------------------------*/
