Index: uspace/drv/usbhid/kbddev.c
===================================================================
--- uspace/drv/usbhid/kbddev.c	(revision b01995bc1785fe762503d71e2ecf19c3d7630acb)
+++ uspace/drv/usbhid/kbddev.c	(revision 62f42128db41689201e2d22635ff36cbfb822e94)
@@ -987,7 +987,14 @@
 /*----------------------------------------------------------------------------*/
 
-int usbhid_kbd_is_usable(const usbhid_kbd_t *kbd_dev)
+int usbhid_kbd_is_initialized(const usbhid_kbd_t *kbd_dev)
 {
 	return (kbd_dev->initialized == USBHID_KBD_STATUS_INITIALIZED);
+}
+
+/*----------------------------------------------------------------------------*/
+
+int usbhid_kbd_is_ready_to_destroy(const usbhid_kbd_t *kbd_dev)
+{
+	return (kbd_dev->initialized == USBHID_KBD_STATUS_TO_DESTROY);
 }
 
Index: uspace/drv/usbhid/kbddev.h
===================================================================
--- uspace/drv/usbhid/kbddev.h	(revision b01995bc1785fe762503d71e2ecf19c3d7630acb)
+++ uspace/drv/usbhid/kbddev.h	(revision 62f42128db41689201e2d22635ff36cbfb822e94)
@@ -114,5 +114,7 @@
 int usbhid_kbd_try_add_device(ddf_dev_t *dev);
 
-int usbhid_kbd_is_usable(const usbhid_kbd_t *kbd_dev);
+int usbhid_kbd_is_initialized(const usbhid_kbd_t *kbd_dev);
+
+int usbhid_kbd_is_ready_to_destroy(const usbhid_kbd_t *kbd_dev);
 
 void usbhid_kbd_free(usbhid_kbd_t **kbd_dev);
Index: uspace/drv/usbhid/kbdrepeat.c
===================================================================
--- uspace/drv/usbhid/kbdrepeat.c	(revision b01995bc1785fe762503d71e2ecf19c3d7630acb)
+++ uspace/drv/usbhid/kbdrepeat.c	(revision 62f42128db41689201e2d22635ff36cbfb822e94)
@@ -78,7 +78,9 @@
 	while (true) {
 		// check if the kbd structure is usable
-		if (!usbhid_kbd_is_usable(kbd)) {
-			usbhid_kbd_free(&kbd);
-			assert(kbd == NULL);
+		if (!usbhid_kbd_is_initialized(kbd)) {
+			if (usbhid_kbd_is_ready_to_destroy(kbd)) {
+				usbhid_kbd_free(&kbd);
+				assert(kbd == NULL);
+			}
 			return;
 		}
