Index: uspace/drv/bus/usb/ohci/hc.c
===================================================================
--- uspace/drv/bus/usb/ohci/hc.c	(revision d394f1b8dd1a2388176091c3a5ad3d0d48560da2)
+++ uspace/drv/bus/usb/ohci/hc.c	(revision 5ec492b5ce50112859610ca80c6802ecfc1b5885)
@@ -139,7 +139,11 @@
 	    &instance->generic.dev_manager, hub_address, hub_fun->handle);
 
-#define CHECK_RET_RETURN(ret, message...) \
+#define CHECK_RET_UNREG_RETURN(ret, message...) \
 if (ret != EOK) { \
 	usb_log_error(message); \
+	usb_endpoint_manager_unregister_ep( \
+	    &instance->generic.ep_manager, hub_address, 0, USB_DIRECTION_BOTH);\
+	usb_device_keeper_release( \
+	    &instance->generic.dev_manager, hub_address); \
 	return ret; \
 } else (void)0
@@ -147,14 +151,14 @@
 	    &instance->generic.ep_manager, hub_address, 0, USB_DIRECTION_BOTH,
 	    USB_TRANSFER_CONTROL, USB_SPEED_FULL, 64, 0);
-	CHECK_RET_RETURN(ret,
+	CHECK_RET_UNREG_RETURN(ret,
 	    "Failed to register root hub control endpoint: %s.\n",
 	    str_error(ret));
 
 	ret = ddf_fun_add_match_id(hub_fun, "usb&class=hub", 100);
-	CHECK_RET_RETURN(ret,
+	CHECK_RET_UNREG_RETURN(ret,
 	    "Failed to add root hub match-id: %s.\n", str_error(ret));
 
 	ret = ddf_fun_bind(hub_fun);
-	CHECK_RET_RETURN(ret,
+	CHECK_RET_UNREG_RETURN(ret,
 	    "Failed to bind root hub function: %s.\n", str_error(ret));
 
Index: uspace/drv/bus/usb/ohci/ohci.c
===================================================================
--- uspace/drv/bus/usb/ohci/ohci.c	(revision d394f1b8dd1a2388176091c3a5ad3d0d48560da2)
+++ uspace/drv/bus/usb/ohci/ohci.c	(revision 5ec492b5ce50112859610ca80c6802ecfc1b5885)
@@ -231,6 +231,6 @@
 #define CHECK_RET_FINI_RETURN(ret, message...) \
 if (ret != EOK) { \
+	hc_fini(&instance->hc); \
 	unregister_interrupt_handler(device, irq); \
-	hc_fini(&instance->hc); \
 	CHECK_RET_DEST_FREE_RETURN(ret, message); \
 } else (void)0
@@ -245,6 +245,8 @@
 	    "Failed to add OHCI to HC class: %s.\n", str_error(ret));
 
-	hc_register_hub(&instance->hc, instance->rh_fun);
-	return EOK;
+	ret = hc_register_hub(&instance->hc, instance->rh_fun);
+	CHECK_RET_FINI_RETURN(ret,
+	    "Failed to register OHCI root hub: %s.\n", str_error(ret));
+	return ret;
 
 #undef CHECK_RET_FINI_RETURN
