Index: uspace/drv/ohci/iface.c
===================================================================
--- uspace/drv/ohci/iface.c	(revision 0aae4a6ad49fa1cc3a70d0e077f0ce0844f52df5)
+++ uspace/drv/ohci/iface.c	(revision 92d6868acefb75faf04356ff5afea6f519df39c9)
@@ -163,6 +163,5 @@
 	    usb_str_speed(speed), direction, size, max_packet_size, interval);
 	// TODO use real endpoint here!
-	return usb_endpoint_manager_register_ep(&hc->ep_manager,
-	    address, endpoint, direction, NULL, 0);
+	return usb_endpoint_manager_register_ep(&hc->ep_manager,NULL, 0);
 }
 /*----------------------------------------------------------------------------*/
Index: uspace/drv/uhci-hcd/iface.c
===================================================================
--- uspace/drv/uhci-hcd/iface.c	(revision 0aae4a6ad49fa1cc3a70d0e077f0ce0844f52df5)
+++ uspace/drv/uhci-hcd/iface.c	(revision 92d6868acefb75faf04356ff5afea6f519df39c9)
@@ -179,6 +179,5 @@
 	    usb_str_speed(speed), direction, size, max_packet_size, interval);
 
-	ret = usb_endpoint_manager_register_ep(&hc->ep_manager,
-	    address, endpoint, direction, ep, size);
+	ret = usb_endpoint_manager_register_ep(&hc->ep_manager, ep, size);
 	if (ret != EOK) {
 		endpoint_destroy(ep);
Index: uspace/lib/usb/include/usb/host/usb_endpoint_manager.h
===================================================================
--- uspace/lib/usb/include/usb/host/usb_endpoint_manager.h	(revision 0aae4a6ad49fa1cc3a70d0e077f0ce0844f52df5)
+++ uspace/lib/usb/include/usb/host/usb_endpoint_manager.h	(revision 92d6868acefb75faf04356ff5afea6f519df39c9)
@@ -64,5 +64,4 @@
 
 int usb_endpoint_manager_register_ep(usb_endpoint_manager_t *instance,
-    usb_address_t address, usb_endpoint_t endpoint, usb_direction_t direction,
     endpoint_t *ep, size_t data_size);
 
Index: uspace/lib/usb/src/host/usb_endpoint_manager.c
===================================================================
--- uspace/lib/usb/src/host/usb_endpoint_manager.c	(revision 0aae4a6ad49fa1cc3a70d0e077f0ce0844f52df5)
+++ uspace/lib/usb/src/host/usb_endpoint_manager.c	(revision 92d6868acefb75faf04356ff5afea6f519df39c9)
@@ -35,15 +35,6 @@
 #define BUCKET_COUNT 7
 
-typedef	struct {
-	usb_address_t address;
-	usb_endpoint_t endpoint;
-	usb_direction_t direction;
-} __attribute__((aligned (sizeof(unsigned long)))) id_t;
-#define MAX_KEYS (sizeof(id_t) / sizeof(unsigned long))
+#define MAX_KEYS (3)
 typedef struct {
-	union {
-		id_t id;
-		unsigned long key[MAX_KEYS];
-	};
 	link_t link;
 	size_t bw;
@@ -66,10 +57,19 @@
 	assert(item);
 	node_t *node = hash_table_get_instance(item, node_t, link);
-	hash_count_t i = 0;
-	for (; i < keys; ++i) {
-		if (key[i] != node->key[i])
-			return false;
-	}
-	return true;
+	assert(node);
+	assert(node->ep);
+	bool match = true;
+	switch (keys) {
+	case 3:
+		match = match && (key[2] == node->ep->direction);
+	case 2:
+		match = match && (key[1] == (unsigned long)node->ep->endpoint);
+	case 1:
+		match = match && (key[0] == (unsigned long)node->ep->address);
+		break;
+	default:
+		match = false;
+	}
+	return match;
 }
 /*----------------------------------------------------------------------------*/
@@ -142,5 +142,4 @@
 /*----------------------------------------------------------------------------*/
 int usb_endpoint_manager_register_ep(usb_endpoint_manager_t *instance,
-    usb_address_t address, usb_endpoint_t endpoint, usb_direction_t direction,
     endpoint_t *ep, size_t data_size)
 {
@@ -150,13 +149,10 @@
 	assert(instance);
 
-	id_t id = {
-		.address = address,
-		.endpoint = endpoint,
-		.direction = direction,
-	};
+	unsigned long key[MAX_KEYS] =
+	    {ep->address, ep->endpoint, ep->direction};
 	fibril_mutex_lock(&instance->guard);
 
 	link_t *item =
-	    hash_table_find(&instance->ep_table, (unsigned long*)&id);
+	    hash_table_find(&instance->ep_table, key);
 	if (item != NULL) {
 		fibril_mutex_unlock(&instance->guard);
@@ -175,11 +171,9 @@
 	}
 
-	node->id = id;
 	node->bw = bw;
 	node->ep = ep;
 	link_initialize(&node->link);
 
-	hash_table_insert(&instance->ep_table,
-	    (unsigned long*)&id, &node->link);
+	hash_table_insert(&instance->ep_table, key, &node->link);
 	instance->free_bw -= bw;
 	fibril_mutex_unlock(&instance->guard);
@@ -192,12 +186,8 @@
 {
 	assert(instance);
-	id_t id = {
-		.address = address,
-		.endpoint = endpoint,
-		.direction = direction,
-	};
+	unsigned long key[MAX_KEYS] = {address, endpoint, direction};
+
 	fibril_mutex_lock(&instance->guard);
-	link_t *item =
-	    hash_table_find(&instance->ep_table, (unsigned long*)&id);
+	link_t *item = hash_table_find(&instance->ep_table, key);
 	if (item == NULL) {
 		fibril_mutex_unlock(&instance->guard);
@@ -207,5 +197,5 @@
 	node_t *node = hash_table_get_instance(item, node_t, link);
 	instance->free_bw += node->bw;
-	hash_table_remove(&instance->ep_table, (unsigned long*)&id, MAX_KEYS);
+	hash_table_remove(&instance->ep_table, key, MAX_KEYS);
 
 	fibril_mutex_unlock(&instance->guard);
@@ -219,12 +209,8 @@
 {
 	assert(instance);
-	id_t id = {
-		.address = address,
-		.endpoint = endpoint,
-		.direction = direction,
-	};
+	unsigned long key[MAX_KEYS] = {address, endpoint, direction};
+
 	fibril_mutex_lock(&instance->guard);
-	link_t *item =
-	    hash_table_find(&instance->ep_table, (unsigned long*)&id);
+	link_t *item = hash_table_find(&instance->ep_table, key);
 	if (item == NULL) {
 		fibril_mutex_unlock(&instance->guard);
