Index: uspace/drv/ohci/root_hub.c
===================================================================
--- uspace/drv/ohci/root_hub.c	(revision 6c427cd8dee091ba129895e2db9e08f141ef32aa)
+++ uspace/drv/ohci/root_hub.c	(revision 74341edf0c5802ca49d9567bae226fe8d81a5c6a)
@@ -420,5 +420,7 @@
  * create answer to port status_request
  *
- * Copy content of corresponding port status register to answer buffer.
+ * Copy content of corresponding port status register to answer buffer. The
+ * format of the port status register and port status data is the same (
+ * see OHCI root hub and USB hub documentation).
  *
  * @param instance root hub instance
@@ -450,5 +452,7 @@
  * create answer to port status_request
  *
- * Copy content of hub status register to answer buffer.
+ * This copies flags in hub status register into the buffer. The format of the
+ * status register and status message is the same, according to USB hub
+ * specification and OHCI root hub specification.
  *
  * @param instance root hub instance
Index: uspace/drv/usbhub/usbhub.c
===================================================================
--- uspace/drv/usbhub/usbhub.c	(revision 6c427cd8dee091ba129895e2db9e08f141ef32aa)
+++ uspace/drv/usbhub/usbhub.c	(revision 74341edf0c5802ca49d9567bae226fe8d81a5c6a)
@@ -67,5 +67,5 @@
     usb_hub_status_t status);
 
-static int usb_process_hub_power_change(usb_hub_info_t * hub_info,
+static int usb_process_hub_local_power_change(usb_hub_info_t * hub_info,
     usb_hub_status_t status);
 
@@ -386,16 +386,28 @@
 	int opResult;
 	if (usb_hub_is_status(status,USB_HUB_FEATURE_HUB_OVER_CURRENT)){
-		opResult = usb_hub_clear_feature(hub_info->control_pipe,
-		    USB_HUB_FEATURE_HUB_LOCAL_POWER);
-		if (opResult != EOK) {
-			usb_log_error("cannot power off hub: %d\n",
-			    opResult);
+		//poweroff all ports
+		unsigned int port;
+		for(port = 1;port <= hub_info->port_count;++port){
+			opResult = usb_hub_clear_port_feature(
+			    hub_info->control_pipe,port,
+			    USB_HUB_FEATURE_PORT_POWER);
+			if (opResult != EOK) {
+				usb_log_warning(
+				    "cannot power off port %d;  %d\n",
+				    port, opResult);
+			}
 		}
 	} else {
-		opResult = usb_hub_set_feature(hub_info->control_pipe,
-		    USB_HUB_FEATURE_HUB_LOCAL_POWER);
-		if (opResult != EOK) {
-			usb_log_error("cannot power on hub: %d\n",
-			    opResult);
+		//power all ports
+		unsigned int port;
+		for(port = 1;port <= hub_info->port_count;++port){
+			opResult = usb_hub_set_port_feature(
+			    hub_info->control_pipe,port,
+			    USB_HUB_FEATURE_PORT_POWER);
+			if (opResult != EOK) {
+				usb_log_warning(
+				    "cannot power off port %d;  %d\n",
+				    port, opResult);
+			}
 		}
 	}
@@ -404,38 +416,14 @@
 
 /**
- * process hub power change
- *
- * If the power has been lost, reestablish it.
- * If it was reestablished, re-power all ports.
+ * process hub local power change
+ *
+ * This change is ignored.
  * @param hub_info hub instance
  * @param status hub status bitmask
  * @return error code
  */
-static int usb_process_hub_power_change(usb_hub_info_t * hub_info,
+static int usb_process_hub_local_power_change(usb_hub_info_t * hub_info,
     usb_hub_status_t status) {
 	int opResult = EOK;
-	if (!usb_hub_is_status(status,USB_HUB_FEATURE_HUB_LOCAL_POWER)) {
-		//restart power on hub
-		opResult = usb_hub_set_feature(hub_info->control_pipe,
-		    USB_HUB_FEATURE_HUB_LOCAL_POWER);
-		if (opResult != EOK) {
-			usb_log_error("cannot power on hub: %d\n",
-			    opResult);
-		}
-	} else {//power reestablished on hub- restart ports
-		size_t port;
-		for (port = 1; port <= hub_info->port_count; ++port) {
-			opResult = usb_hub_set_port_feature(
-			    hub_info->control_pipe,
-			    port, USB_HUB_FEATURE_PORT_POWER);
-			if (opResult != EOK) {
-				usb_log_error("Cannot power on port %zu: %s.\n",
-				    port, str_error(opResult));
-			}
-		}
-	}
-	if(opResult!=EOK){
-		return opResult;//no feature clearing
-	}
 	opResult = usb_hub_clear_feature(hub_info->control_pipe,
 	    USB_HUB_FEATURE_C_HUB_LOCAL_POWER);
@@ -487,5 +475,5 @@
 	if (
 	    usb_hub_is_status(status,16+USB_HUB_FEATURE_C_HUB_LOCAL_POWER)) {
-		usb_process_hub_power_change(hub_info, status);
+		usb_process_hub_local_power_change(hub_info, status);
 	}
 }
