Index: uspace/drv/bus/usb/ohci/hc.c
===================================================================
--- uspace/drv/bus/usb/ohci/hc.c	(revision 726555872772a00f6886dddce7eea7232189c06e)
+++ uspace/drv/bus/usb/ohci/hc.c	(revision 48ae3ef60beee610cc95a4e34ea78d76a44715e0)
@@ -142,6 +142,7 @@
 if (ret != EOK) { \
 	usb_log_error(message); \
-	usb_endpoint_manager_unregister_ep( \
-	    &instance->generic.ep_manager, hub_address, 0, USB_DIRECTION_BOTH);\
+	usb_endpoint_manager_remove_ep( \
+	    &instance->generic.ep_manager, hub_address, 0, USB_DIRECTION_BOTH, \
+	    NULL, NULL);\
 	usb_device_manager_release( \
 	    &instance->generic.dev_manager, hub_address); \
@@ -150,5 +151,5 @@
 	int ret = usb_endpoint_manager_add_ep(
 	    &instance->generic.ep_manager, hub_address, 0, USB_DIRECTION_BOTH,
-	    USB_TRANSFER_CONTROL, USB_SPEED_FULL, 64, 0);
+	    USB_TRANSFER_CONTROL, USB_SPEED_FULL, 64, 0, NULL, NULL);
 	CHECK_RET_UNREG_RETURN(ret,
 	    "Failed to register root hub control endpoint: %s.\n",
@@ -197,4 +198,5 @@
 	instance->generic.schedule = hc_schedule;
 	instance->generic.ep_add_hook = ohci_endpoint_init;
+	instance->generic.ep_remove_hook = ohci_endpoint_fini;
 
 	ret = hc_init_memory(instance);
Index: uspace/drv/bus/usb/ohci/ohci_endpoint.c
===================================================================
--- uspace/drv/bus/usb/ohci/ohci_endpoint.c	(revision 726555872772a00f6886dddce7eea7232189c06e)
+++ uspace/drv/bus/usb/ohci/ohci_endpoint.c	(revision 48ae3ef60beee610cc95a4e34ea78d76a44715e0)
@@ -62,19 +62,4 @@
 }
 /*----------------------------------------------------------------------------*/
-/** Disposes hcd endpoint structure
- *
- * @param[in] hcd_ep endpoint structure
- */
-static void ohci_endpoint_fini(endpoint_t *ep)
-{
-	ohci_endpoint_t *instance = ep->hc_data.data;
-	hc_dequeue_endpoint(instance->hcd->private_data, ep);
-	if (instance) {
-		free32(instance->ed);
-		free32(instance->td);
-		free(instance);
-	}
-}
-/*----------------------------------------------------------------------------*/
 /** Creates new hcd endpoint representation.
  *
@@ -104,9 +89,27 @@
 	ed_init(ohci_ep->ed, ep, ohci_ep->td);
 	endpoint_set_hc_data(
-	    ep, ohci_ep, ohci_endpoint_fini, ohci_ep_toggle_get, ohci_ep_toggle_set);
+	    ep, ohci_ep, ohci_ep_toggle_get, ohci_ep_toggle_set);
 	ohci_ep->hcd = hcd;
 	hc_enqueue_endpoint(hcd->private_data, ep);
 	return EOK;
 }
+/*----------------------------------------------------------------------------*/
+/** Disposes hcd endpoint structure
+ *
+ * @param[in] hcd_ep endpoint structure
+ */
+void ohci_endpoint_fini(hcd_t *hcd, endpoint_t *ep)
+{
+	assert(hcd);
+	assert(ep);
+	ohci_endpoint_t *instance = ohci_endpoint_get(ep);
+	hc_dequeue_endpoint(hcd->private_data, ep);
+	if (instance) {
+		free32(instance->ed);
+		free32(instance->td);
+		free(instance);
+	}
+	endpoint_clear_hc_data(ep);
+}
 /**
  * @}
Index: uspace/drv/bus/usb/ohci/ohci_endpoint.h
===================================================================
--- uspace/drv/bus/usb/ohci/ohci_endpoint.h	(revision 726555872772a00f6886dddce7eea7232189c06e)
+++ uspace/drv/bus/usb/ohci/ohci_endpoint.h	(revision 48ae3ef60beee610cc95a4e34ea78d76a44715e0)
@@ -56,4 +56,5 @@
 
 int ohci_endpoint_init(hcd_t *hcd, endpoint_t *ep);
+void ohci_endpoint_fini(hcd_t *hcd, endpoint_t *ep);
 
 /** Get and convert assigned ohci_endpoint_t structure
Index: uspace/drv/bus/usb/vhc/connhost.c
===================================================================
--- uspace/drv/bus/usb/vhc/connhost.c	(revision 726555872772a00f6886dddce7eea7232189c06e)
+++ uspace/drv/bus/usb/vhc/connhost.c	(revision 48ae3ef60beee610cc95a4e34ea78d76a44715e0)
@@ -140,20 +140,10 @@
     size_t max_packet_size, unsigned int interval)
 {
-	/* TODO: Use usb_endpoint_manager_add_ep */
-	VHC_DATA(vhc, fun);
-
-	endpoint_t *ep = endpoint_create(
-	    address, endpoint, direction, transfer_type, USB_SPEED_FULL, 1, 0);
-	if (ep == NULL) {
-		return ENOMEM;
-	}
-
-	int rc = usb_endpoint_manager_register_ep(&vhc->ep_manager, ep, 1);
-	if (rc != EOK) {
-		endpoint_destroy(ep);
-		return rc;
-	}
-
-	return EOK;
+	VHC_DATA(vhc, fun);
+
+	return usb_endpoint_manager_add_ep(&vhc->ep_manager,
+	    address, endpoint, direction, transfer_type, USB_SPEED_FULL, 1, 0,
+	    NULL, NULL);
+
 }
 
@@ -171,6 +161,6 @@
 	VHC_DATA(vhc, fun);
 
-	int rc = usb_endpoint_manager_unregister_ep(&vhc->ep_manager,
-	    address, endpoint, direction);
+	int rc = usb_endpoint_manager_remove_ep(&vhc->ep_manager,
+	    address, endpoint, direction, NULL, NULL);
 
 	return rc;
@@ -413,5 +403,5 @@
 	VHC_DATA(vhc, fun);
 
-	endpoint_t *ep = usb_endpoint_manager_get_ep(&vhc->ep_manager,
+	endpoint_t *ep = usb_endpoint_manager_find_ep(&vhc->ep_manager,
 	    target.address, target.endpoint, USB_DIRECTION_IN);
 	if (ep == NULL) {
@@ -455,5 +445,5 @@
 	VHC_DATA(vhc, fun);
 
-	endpoint_t *ep = usb_endpoint_manager_get_ep(&vhc->ep_manager,
+	endpoint_t *ep = usb_endpoint_manager_find_ep(&vhc->ep_manager,
 	    target.address, target.endpoint, USB_DIRECTION_OUT);
 	if (ep == NULL) {
