Index: uspace/drv/bus/usb/ehci/ehci_rh.c
===================================================================
--- uspace/drv/bus/usb/ehci/ehci_rh.c	(revision b300d2b8e7f88ba124a090065b5fd3fa47a84b81)
+++ uspace/drv/bus/usb/ehci/ehci_rh.c	(revision 95d5dca71e430f7fef179a3a26aec6e0a1692788)
@@ -114,4 +114,9 @@
 	}
 
+	for (unsigned i = 0; i < EHCI_MAX_PORTS; ++i) {
+		instance->reset_flag[i] = false;
+		instance->resume_flag[i] = false;
+	}
+
 	ehci_rh_hub_desc_init(instance, EHCI_RD(caps->hcsparams));
 	instance->unfinished_interrupt_transfer = NULL;
@@ -269,6 +274,11 @@
 	    (reg & USB_PORTSC_PORT_OWNER_FLAG) ? (1 << 10) : 0 |
 	    (reg & USB_PORTSC_PORT_TEST_MASK) ? (1 << 11) : 0 |
-	    (reg & USB_PORTSC_INDICATOR_MASK) ? (1 << 12) : 0)
-	;
+	    (reg & USB_PORTSC_INDICATOR_MASK) ? (1 << 12) : 0 |
+	    (reg & USB_PORTSC_CONNECT_CH_FLAG) ? (1 << 16) : 0 |
+	    (reg & USB_PORTSC_EN_CHANGE_FLAG) ? (1 << 17) : 0 |
+	    hub->resume_flag[port] ? (1 << 18) : 0 |
+	    (reg & USB_PORTSC_OC_CHANGE_FLAG) ? (1 << 19) : 0 |
+	    hub->reset_flag[port] ? (1 << 20): 0
+	);
 	//TODO: use hub status flags here
 	memcpy(data, &status, sizeof(status));
@@ -317,4 +327,5 @@
 		EHCI_CLR(hub->registers->portsc[port],
 		    USB_PORTSC_RESUME_FLAG);
+		hub->resume_flag[port] = true;
 		return EOK;
 
@@ -332,6 +343,8 @@
 		return EOK;
 	case USB_HUB_FEATURE_C_PORT_SUSPEND:      /*18*/
+		hub->resume_flag[port] = false;
+		return EOK;
 	case USB_HUB_FEATURE_C_PORT_RESET:        /*20*/
-		//TODO these are not represented in hw, think of something
+		hub->reset_flag[port] = false;
 		return EOK;
 
@@ -378,7 +391,10 @@
 		 * after reset it's a full speed device */
 		if (!(EHCI_RD(hub->registers->portsc[port]) &
-		    USB_PORTSC_ENABLED_FLAG))
+		    USB_PORTSC_ENABLED_FLAG)) {
 			EHCI_CLR(hub->registers->portsc[port],
 			    USB_PORTSC_PORT_OWNER_FLAG);
+		} else {
+			hub->reset_flag[port] = true;
+		}
 
 		return EOK;
Index: uspace/drv/bus/usb/ehci/ehci_rh.h
===================================================================
--- uspace/drv/bus/usb/ehci/ehci_rh.h	(revision b300d2b8e7f88ba124a090065b5fd3fa47a84b81)
+++ uspace/drv/bus/usb/ehci/ehci_rh.h	(revision 95d5dca71e430f7fef179a3a26aec6e0a1692788)
@@ -63,4 +63,6 @@
 	/** interrupt transfer waiting for an actual interrupt to occur */
 	usb_transfer_batch_t *unfinished_interrupt_transfer;
+	bool reset_flag[EHCI_MAX_PORTS];
+	bool resume_flag[EHCI_MAX_PORTS];
 } ehci_rh_t;
 
