Index: uspace/lib/usb/include/usb/host/device_keeper.h
===================================================================
--- uspace/lib/usb/include/usb/host/device_keeper.h	(revision 5876d36dd0e9c757ce7fe9ac68bc8c368d9d6e68)
+++ uspace/lib/usb/include/usb/host/device_keeper.h	(revision fb8927d7e12bfafe2cd8b4ef6d343bffe2f5bf54)
@@ -40,4 +40,6 @@
 #ifndef LIBUSB_HOST_DEVICE_KEEPER_H
 #define LIBUSB_HOST_DEVICE_KEEPER_H
+
+#include <adt/list.h>
 #include <devman.h>
 #include <fibril_synch.h>
@@ -51,4 +53,5 @@
 	usb_speed_t speed;
 	bool occupied;
+	link_t endpoints;
 	uint16_t control_used;
 	uint16_t toggle_status[2];
@@ -68,6 +71,9 @@
 void usb_device_keeper_init(usb_device_keeper_t *instance);
 
-void usb_device_keeper_reserve_default_address(usb_device_keeper_t *instance,
-    usb_speed_t speed);
+void usb_device_keeper_add_ep(
+    usb_device_keeper_t *instance, usb_address_t address, link_t *ep);
+
+void usb_device_keeper_reserve_default_address(
+    usb_device_keeper_t *instance, usb_speed_t speed);
 
 void usb_device_keeper_release_default_address(usb_device_keeper_t *instance);
Index: uspace/lib/usb/src/host/device_keeper.c
===================================================================
--- uspace/lib/usb/src/host/device_keeper.c	(revision 5876d36dd0e9c757ce7fe9ac68bc8c368d9d6e68)
+++ uspace/lib/usb/src/host/device_keeper.c	(revision fb8927d7e12bfafe2cd8b4ef6d343bffe2f5bf54)
@@ -58,6 +58,10 @@
 		instance->devices[i].toggle_status[0] = 0;
 		instance->devices[i].toggle_status[1] = 0;
-	}
-}
+		list_initialize(&instance->devices[i].endpoints);
+	}
+}
+/*----------------------------------------------------------------------------*/
+void usb_device_keeper_add_ep(
+    usb_device_keeper_t *instance, usb_address_t address, link_t *ep);
 /*----------------------------------------------------------------------------*/
 /** Attempt to obtain address 0, blocks.
@@ -66,6 +70,6 @@
  * @param[in] speed Speed of the device requesting default address.
  */
-void usb_device_keeper_reserve_default_address(usb_device_keeper_t *instance,
-    usb_speed_t speed)
+void usb_device_keeper_reserve_default_address(
+    usb_device_keeper_t *instance, usb_speed_t speed)
 {
 	assert(instance);
@@ -101,6 +105,6 @@
  * Really ugly one.
  */
-void usb_device_keeper_reset_if_need(usb_device_keeper_t *instance,
-    usb_target_t target, const uint8_t *data)
+void usb_device_keeper_reset_if_need(
+    usb_device_keeper_t *instance, usb_target_t target, const uint8_t *data)
 {
 	assert(instance);
@@ -208,6 +212,6 @@
  * @return Free address, or error code.
  */
-usb_address_t device_keeper_get_free_address(usb_device_keeper_t *instance,
-    usb_speed_t speed)
+usb_address_t device_keeper_get_free_address(
+    usb_device_keeper_t *instance, usb_speed_t speed)
 {
 	assert(instance);
@@ -259,6 +263,6 @@
  * @param[in] address Device address
  */
-void usb_device_keeper_release(usb_device_keeper_t *instance,
-    usb_address_t address)
+void usb_device_keeper_release(
+    usb_device_keeper_t *instance, usb_address_t address)
 {
 	assert(instance);
@@ -278,6 +282,6 @@
  * @return USB Address, or error code.
  */
-usb_address_t usb_device_keeper_find(usb_device_keeper_t *instance,
-    devman_handle_t handle)
+usb_address_t usb_device_keeper_find(
+    usb_device_keeper_t *instance, devman_handle_t handle)
 {
 	assert(instance);
@@ -301,6 +305,6 @@
  * @return USB speed.
  */
-usb_speed_t usb_device_keeper_get_speed(usb_device_keeper_t *instance,
-    usb_address_t address)
+usb_speed_t usb_device_keeper_get_speed(
+    usb_device_keeper_t *instance, usb_address_t address)
 {
 	assert(instance);
@@ -310,6 +314,6 @@
 }
 /*----------------------------------------------------------------------------*/
-void usb_device_keeper_use_control(usb_device_keeper_t *instance,
-    usb_target_t target)
+void usb_device_keeper_use_control(
+    usb_device_keeper_t *instance, usb_target_t target)
 {
 	assert(instance);
@@ -323,6 +327,6 @@
 }
 /*----------------------------------------------------------------------------*/
-void usb_device_keeper_release_control(usb_device_keeper_t *instance,
-    usb_target_t target)
+void usb_device_keeper_release_control(
+    usb_device_keeper_t *instance, usb_target_t target)
 {
 	assert(instance);
