Index: uspace/drv/usbhub/main.c
===================================================================
--- uspace/drv/usbhub/main.c	(revision 1e32a63ee7521e8888774112ab783b2922419b6d)
+++ uspace/drv/usbhub/main.c	(revision f9a0cef9619789e459d38a07cfe12cb7a66919b7)
@@ -50,5 +50,5 @@
 	while(true){
 		usb_hub_check_hub_changes();
-		async_usleep(100 * 1000);
+		async_usleep(1000 * 1000);
 	}
 	return 0;
Index: uspace/drv/usbhub/usbhub_private.h
===================================================================
--- uspace/drv/usbhub/usbhub_private.h	(revision 1e32a63ee7521e8888774112ab783b2922419b6d)
+++ uspace/drv/usbhub/usbhub_private.h	(revision f9a0cef9619789e459d38a07cfe12cb7a66919b7)
@@ -182,4 +182,22 @@
 }
 
+static inline int usb_hub_clear_port_feature(int hc, usb_address_t address,
+    int port_index,
+    usb_hub_class_feature_t feature) {
+	usb_target_t target = {
+		.address = address,
+		.endpoint = 0
+	};
+	usb_device_request_setup_packet_t clear_request = {
+		.request_type = USB_HUB_REQ_TYPE_CLEAR_PORT_FEATURE,
+		.request = USB_DEVREQ_CLEAR_FEATURE,
+		.length = 0,
+		.index = port_index
+	};
+	clear_request.value = feature;
+	return usb_drv_psync_control_write(hc, target, &clear_request,
+	    sizeof(clear_request), NULL, 0);
+}
+
 
 
Index: uspace/drv/usbhub/utils.c
===================================================================
--- uspace/drv/usbhub/utils.c	(revision 1e32a63ee7521e8888774112ab783b2922419b6d)
+++ uspace/drv/usbhub/utils.c	(revision f9a0cef9619789e459d38a07cfe12cb7a66919b7)
@@ -508,4 +508,9 @@
 	int opResult;
 	printf("[usb_hub] finalizing add device\n");
+	opResult = usb_hub_clear_port_feature(hc, target.address,
+	    port, USB_HUB_FEATURE_C_PORT_RESET);
+	if (opResult != EOK) {
+		goto release;
+	}
 
 	/* Request address at from host controller. */
@@ -625,4 +630,7 @@
 	//something connected/disconnected
 	if (usb_port_connect_change(&status)) {
+		opResult = usb_hub_clear_port_feature(hc, target.address,
+		    port, USB_HUB_FEATURE_C_PORT_CONNECTION);
+		// TODO: check opResult
 		if (usb_port_dev_connected(&status)) {
 			printf("[usb_hub] some connection changed\n");
Index: uspace/drv/usbkbd/main.c
===================================================================
--- uspace/drv/usbkbd/main.c	(revision 1e32a63ee7521e8888774112ab783b2922419b6d)
+++ uspace/drv/usbkbd/main.c	(revision f9a0cef9619789e459d38a07cfe12cb7a66919b7)
@@ -208,5 +208,5 @@
 
 	while (true) {
-		async_usleep(10 * 1000);
+		async_usleep(1000 * 1000);
 		rc = usb_drv_async_interrupt_in(kbd_dev->device->parent_phone,
 		    poll_target, buffer, BUFFER_SIZE, &actual_size, &handle);
