Index: uspace/drv/bus/usb/xhci/bus.c
===================================================================
--- uspace/drv/bus/usb/xhci/bus.c	(revision 17c5e62d0dbb1b04123131491f4743240d75deb7)
+++ uspace/drv/bus/usb/xhci/bus.c	(revision 0eadfd1e27518dc073e37ac4e81a1ba5a5e0929f)
@@ -93,15 +93,10 @@
 	xhci_endpoint_t *ep0 = xhci_endpoint_get(ep0_base);
 
-	if ((err = xhci_endpoint_alloc_transfer_ds(ep0)))
-		goto err_added;
-
 	/* Address device */
 	if ((err = hc_address_device(bus->hc, dev, ep0)))
-		goto err_prepared;
-
-	return EOK;
-
-err_prepared:
-	xhci_endpoint_free_transfer_ds(ep0);
+		goto err_added;
+
+	return EOK;
+
 err_added:
 	/* Bus reference */
@@ -354,5 +349,4 @@
 			continue;
 
-		xhci_endpoint_free_transfer_ds(xhci_endpoint_get(endpoints[i]));
 		/* Bus reference */
 		endpoint_del_ref(endpoints[i]);
@@ -411,7 +405,4 @@
 	xhci_device_t *dev = xhci_device_get(ep_base->device);
 
-	if ((err = xhci_endpoint_alloc_transfer_ds(ep)))
-		return err;
-
 	usb_log_info("Endpoint " XHCI_EP_FMT " registered to XHCI bus.", XHCI_EP_ARGS(*ep));
 
@@ -420,11 +411,7 @@
 
 	if ((err = hc_add_endpoint(bus->hc, dev->slot_id, xhci_endpoint_index(ep), &ep_ctx)))
-		goto err_prepared;
-
-	return EOK;
-
-err_prepared:
-	xhci_endpoint_free_transfer_ds(ep);
-	return err;
+		return err;
+
+	return EOK;
 }
 
@@ -454,7 +441,4 @@
 	}
 
-	/* Tear down TRB ring / PSA. */
-	xhci_endpoint_free_transfer_ds(ep);
-
 	return EOK;
 }
Index: uspace/drv/bus/usb/xhci/endpoint.c
===================================================================
--- uspace/drv/bus/usb/xhci/endpoint.c	(revision 17c5e62d0dbb1b04123131491f4743240d75deb7)
+++ uspace/drv/bus/usb/xhci/endpoint.c	(revision 0eadfd1e27518dc073e37ac4e81a1ba5a5e0929f)
@@ -45,4 +45,7 @@
 #include "endpoint.h"
 
+static int alloc_transfer_ds(xhci_endpoint_t *);
+static void free_transfer_ds(xhci_endpoint_t *);
+
 /**
  * Initialize new XHCI endpoint.
@@ -55,4 +58,5 @@
 int xhci_endpoint_init(xhci_endpoint_t *xhci_ep, device_t *dev, const usb_endpoint_descriptors_t *desc)
 {
+	int rc;
 	assert(xhci_ep);
 
@@ -103,5 +107,11 @@
 	}
 
+	if ((rc = alloc_transfer_ds(xhci_ep)))
+		goto err;
+
 	return EOK;
+
+err:
+	return rc;
 }
 
@@ -113,4 +123,6 @@
 {
 	assert(xhci_ep);
+
+	free_transfer_ds(xhci_ep);
 
 	// TODO: Something missed?
@@ -291,5 +303,5 @@
  * @return Error code.
  */
-int xhci_endpoint_alloc_transfer_ds(xhci_endpoint_t *xhci_ep)
+static int alloc_transfer_ds(xhci_endpoint_t *xhci_ep)
 {
 	/* Can't use XHCI_EP_FMT because the endpoint may not have device. */
@@ -316,5 +328,5 @@
  * @param[in] xhci_ep XHCI endpoint to free data structures for.
  */
-void xhci_endpoint_free_transfer_ds(xhci_endpoint_t *xhci_ep)
+static void free_transfer_ds(xhci_endpoint_t *xhci_ep)
 {
 	if (endpoint_using_streams(xhci_ep)) {
Index: uspace/drv/bus/usb/xhci/endpoint.h
===================================================================
--- uspace/drv/bus/usb/xhci/endpoint.h	(revision 17c5e62d0dbb1b04123131491f4743240d75deb7)
+++ uspace/drv/bus/usb/xhci/endpoint.h	(revision 0eadfd1e27518dc073e37ac4e81a1ba5a5e0929f)
@@ -150,6 +150,4 @@
 int xhci_endpoint_init(xhci_endpoint_t *, device_t *, const usb_endpoint_descriptors_t *);
 void xhci_endpoint_fini(xhci_endpoint_t *);
-int xhci_endpoint_alloc_transfer_ds(xhci_endpoint_t *);
-void xhci_endpoint_free_transfer_ds(xhci_endpoint_t *);
 
 int xhci_endpoint_request_streams(xhci_hc_t *, xhci_device_t *, xhci_endpoint_t *, unsigned);
