Index: uspace/drv/usbkbd/usbkbd.ma
===================================================================
--- uspace/drv/usbkbd/usbkbd.ma	(revision fb1dca0930a73f4ed462f3fc2f864c913f7ad942)
+++ uspace/drv/usbkbd/usbkbd.ma	(revision ba7f6717aa5c46dc46b07495cac2ae3d548369d6)
@@ -1,1 +1,2 @@
 10 usb&class=hid
+10 usb&hid
Index: uspace/lib/usb/src/hcdhubd.c
===================================================================
--- uspace/lib/usb/src/hcdhubd.c	(revision fb1dca0930a73f4ed462f3fc2f864c913f7ad942)
+++ uspace/lib/usb/src/hcdhubd.c	(revision ba7f6717aa5c46dc46b07495cac2ae3d548369d6)
@@ -40,4 +40,5 @@
 #include <bool.h>
 #include <errno.h>
+#include <str_error.h>
 #include <usb/classes/hub.h>
 
@@ -150,8 +151,9 @@
 	match_id->id = child_info->match_id;
 	match_id->score = 10;
-	printf("adding child device with match \"%s\"\n", match_id->id);
 	add_match_id(&child->match_ids, match_id);
 
 	rc = child_device_register(child, child_info->parent);
+	printf("%s: adding child device with match \"%s\" (%s)\n",
+	    hc_driver->name, match_id->id, str_error(rc));
 	if (rc != EOK) {
 		goto failure;
Index: uspace/lib/usb/src/hcdrv.c
===================================================================
--- uspace/lib/usb/src/hcdrv.c	(revision fb1dca0930a73f4ed462f3fc2f864c913f7ad942)
+++ uspace/lib/usb/src/hcdrv.c	(revision ba7f6717aa5c46dc46b07495cac2ae3d548369d6)
@@ -78,43 +78,16 @@
 	list_append(&hc_dev->link, &hc_list);
 
-	//add keyboard
-	/// @TODO this is not correct code
-
 	/*
-	 * Announce presence of child device.
+	 * FIXME: the following is a workaround to force loading of USB
+	 * keyboard driver.
+	 * Will be removed as soon as the hub driver is completed and
+	 * can detect connected devices.
 	 */
-	device_t *kbd = NULL;
-	match_id_t *match_id = NULL;
-
-	kbd = create_device();
-	if (kbd == NULL) {
-		printf("ERROR: enomem\n");
-	}
-	kbd->name = USB_KBD_DEVICE_NAME;
-
-	match_id = create_match_id();
-	if (match_id == NULL) {
-		printf("ERROR: enomem\n");
+	printf("%s: trying to add USB HID child device...\n", hc_driver->name);
+	rc = usb_hc_add_child_device(dev, USB_KBD_DEVICE_NAME, "usb&hid");
+	if (rc != EOK) {
+		printf("%s: adding USB HID child failed...\n", hc_driver->name);
 	}
 
-	char *id;
-	rc = asprintf(&id, USB_KBD_DEVICE_NAME);
-	if (rc <= 0) {
-		printf("ERROR: enomem\n");
-		return rc;
-	}
-
-	match_id->id = id;
-	match_id->score = 30;
-
-	add_match_id(&kbd->match_ids, match_id);
-
-	rc = child_device_register(kbd, dev);
-	if (rc != EOK) {
-		printf("ERROR: cannot register kbd\n");
-		return rc;
-	}
-
-	printf("%s: registered root hub\n", dev->name);
 	return EOK;
 }
