Index: uspace/lib/usbdev/src/request.c
===================================================================
--- uspace/lib/usbdev/src/request.c	(revision 4c037938329a3c1834ce99508e2ef8ca9d929fb7)
+++ uspace/lib/usbdev/src/request.c	(revision b5c92d7d57016ed7f4aba8557f717a096f15cbc3)
@@ -843,6 +843,8 @@
 		return EINVAL;
 	}
-	return usb_request_clear_endpoint_halt(ctrl_pipe,
-	    target_pipe->desc.endpoint_no);
+
+	uint16_t index = target_pipe->desc.endpoint_no;
+	index |= (target_pipe->desc.direction == USB_DIRECTION_IN) << 7;
+	return usb_request_clear_endpoint_halt(ctrl_pipe, index);
 }
 
Index: uspace/lib/usbhost/src/utility.c
===================================================================
--- uspace/lib/usbhost/src/utility.c	(revision 4c037938329a3c1834ce99508e2ef8ca9d929fb7)
+++ uspace/lib/usbhost/src/utility.c	(revision b5c92d7d57016ed7f4aba8557f717a096f15cbc3)
@@ -233,10 +233,15 @@
 		if ((request->request_type == 0x2) &&
 		    (request->value == USB_FEATURE_ENDPOINT_HALT)) {
-			const unsigned index = uint16_usb2host(request->index);
-			const unsigned ep_num = index & 0xf;
+			const uint16_t index = uint16_usb2host(request->index);
+			const usb_endpoint_t ep_num = index & 0xf;
 			const usb_direction_t dir = (index >> 7) ? USB_DIRECTION_IN : USB_DIRECTION_OUT;
 
 			endpoint_t *ep = bus_find_endpoint(dev, ep_num, dir);
-			reset_cb(ep);
+			if (ep) {
+				reset_cb(ep);
+				endpoint_del_ref(ep);
+			} else {
+				usb_log_warning("Device(%u): Resetting unregistered endpoint %u %s.", dev->address, ep_num, usb_str_direction(dir));
+			}
 		}
 		break;
