Index: uspace/lib/usbhost/src/bus.c
===================================================================
--- uspace/lib/usbhost/src/bus.c	(revision db51a6a671d00feb477a7c35b072e80c77fe4a6f)
+++ uspace/lib/usbhost/src/bus.c	(revision 7278cbc90a2d93600a02b53f8b6fdbeeba7ca711)
@@ -208,4 +208,5 @@
 
 	const bus_ops_t *ops = BUS_OPS_LOOKUP(dev->bus->ops, device_gone);
+	const bus_ops_t *ep_ops = BUS_OPS_LOOKUP(dev->bus->ops, endpoint_unregister);
 	assert(ops);
 
@@ -240,8 +241,14 @@
 
 	/* Tell the HC to release its resources. */
-	ops->device_gone(dev);
-
-	/* Release the EP0 bus reference */
-	endpoint_del_ref(dev->endpoints[0]);
+	if (ops)
+		ops->device_gone(dev);
+
+	/* Check whether the driver didn't forgot EP0 */
+	if (dev->endpoints[0]) {
+		if (ep_ops)
+			ep_ops->endpoint_unregister(dev->endpoints[0]);
+		/* Release the EP0 bus reference */
+		endpoint_del_ref(dev->endpoints[0]);
+	}
 
 	/* Destroy the function, freeing also the device, unlocking mutex. */
Index: uspace/lib/usbhost/src/usb2_bus.c
===================================================================
--- uspace/lib/usbhost/src/usb2_bus.c	(revision db51a6a671d00feb477a7c35b072e80c77fe4a6f)
+++ uspace/lib/usbhost/src/usb2_bus.c	(revision 7278cbc90a2d93600a02b53f8b6fdbeeba7ca711)
@@ -209,9 +209,4 @@
 }
 
-static void usb2_bus_device_gone(device_t *dev)
-{
-	// TODO: Implement me!
-}
-
 /**
  * Register an endpoint to the bus. Reserves bandwidth.
@@ -245,5 +240,4 @@
 const bus_ops_t usb2_bus_ops = {
 	.device_enumerate = usb2_bus_device_enumerate,
-	.device_gone = usb2_bus_device_gone,
 	.endpoint_register = usb2_bus_register_ep,
 	.endpoint_unregister = usb2_bus_unregister_ep,
