Index: uspace/drv/bus/usb/ehci/ehci_bus.c
===================================================================
--- uspace/drv/bus/usb/ehci/ehci_bus.c	(revision 7bdfcafff9179baac2e93f968175c2ddef52424a)
+++ uspace/drv/bus/usb/ehci/ehci_bus.c	(revision f3ae58b5c7e604cb94bfc012cca168ac37d183c4)
@@ -63,4 +63,10 @@
 }
 
+static void ehci_device_gone(device_t *dev)
+{
+	ehci_bus_t *bus = (ehci_bus_t *) dev->bus;
+	usb2_bus_device_gone(&bus->helper, dev);
+}
+
 /** Creates new hcd endpoint representation.
  */
@@ -163,4 +169,5 @@
 
 	.device_enumerate = ehci_device_enumerate,
+	.device_gone = ehci_device_gone,
 
 	.endpoint_destroy = ehci_endpoint_destroy,
Index: uspace/drv/bus/usb/ohci/ohci_bus.c
===================================================================
--- uspace/drv/bus/usb/ohci/ohci_bus.c	(revision 7bdfcafff9179baac2e93f968175c2ddef52424a)
+++ uspace/drv/bus/usb/ohci/ohci_bus.c	(revision f3ae58b5c7e604cb94bfc012cca168ac37d183c4)
@@ -63,4 +63,10 @@
 }
 
+static void ohci_device_gone(device_t *dev)
+{
+	ohci_bus_t *bus = (ohci_bus_t *) dev->bus;
+	usb2_bus_device_gone(&bus->helper, dev);
+}
+
 /** Creates new hcd endpoint representation.
  */
@@ -172,4 +178,5 @@
 
 	.device_enumerate = ohci_device_enumerate,
+	.device_gone = ohci_device_gone,
 
 	.endpoint_destroy = ohci_endpoint_destroy,
Index: uspace/drv/bus/usb/uhci/hc.c
===================================================================
--- uspace/drv/bus/usb/uhci/hc.c	(revision 7bdfcafff9179baac2e93f968175c2ddef52424a)
+++ uspace/drv/bus/usb/uhci/hc.c	(revision f3ae58b5c7e604cb94bfc012cca168ac37d183c4)
@@ -412,4 +412,10 @@
 }
 
+static void device_gone(device_t *dev)
+{
+	hc_t * const hc = bus_to_hc(dev->bus);
+	usb2_bus_device_gone(&hc->bus_helper, dev);
+}
+
 static int hc_status(bus_t *, uint32_t *);
 static int hc_schedule(usb_transfer_batch_t *);
@@ -420,4 +426,5 @@
 
 	.device_enumerate = device_enumerate,
+	.device_gone = device_gone,
 
 	.endpoint_create = endpoint_create,
Index: uspace/lib/usbhost/include/usb/host/usb2_bus.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/usb2_bus.h	(revision 7bdfcafff9179baac2e93f968175c2ddef52424a)
+++ uspace/lib/usbhost/include/usb/host/usb2_bus.h	(revision f3ae58b5c7e604cb94bfc012cca168ac37d183c4)
@@ -64,4 +64,6 @@
 
 extern int usb2_bus_device_enumerate(usb2_bus_helper_t *, device_t *);
+extern void usb2_bus_device_gone(usb2_bus_helper_t *, device_t *);
+
 extern int usb2_bus_endpoint_register(usb2_bus_helper_t *, endpoint_t *);
 extern void usb2_bus_endpoint_unregister(usb2_bus_helper_t *, endpoint_t *);
Index: uspace/lib/usbhost/src/usb2_bus.c
===================================================================
--- uspace/lib/usbhost/src/usb2_bus.c	(revision 7bdfcafff9179baac2e93f968175c2ddef52424a)
+++ uspace/lib/usbhost/src/usb2_bus.c	(revision f3ae58b5c7e604cb94bfc012cca168ac37d183c4)
@@ -203,4 +203,9 @@
 }
 
+void usb2_bus_device_gone(usb2_bus_helper_t *helper, device_t *dev)
+{
+	release_address(helper, dev->address);
+}
+
 /**
  * Register an endpoint to the bus. Reserves bandwidth.
