Index: uspace/drv/bus/usb/xhci/bus.c
===================================================================
--- uspace/drv/bus/usb/xhci/bus.c	(revision 67d58e877f1299875198c7b32fc7504f218d55b0)
+++ uspace/drv/bus/usb/xhci/bus.c	(revision deb2e558ccc886ffade58c2d64c4943b78c3e855)
@@ -217,5 +217,5 @@
 	usb_log_debug2("Device " XHCI_DEV_FMT " going offline.", XHCI_DEV_ARGS(*xhci_dev));
 	fibril_mutex_lock(&dev->guard);
-	xhci_dev->online = false;
+	dev->online = false;
 	fibril_mutex_unlock(&dev->guard);
 
@@ -304,5 +304,5 @@
 	usb_log_debug2("Device " XHCI_DEV_FMT " going online.", XHCI_DEV_ARGS(*dev));
 	fibril_mutex_lock(&dev_base->guard);
-	dev->online = true;
+	dev_base->online = true;
 	fibril_mutex_unlock(&dev_base->guard);
 
@@ -332,5 +332,5 @@
 	usb_log_debug2("Device " XHCI_DEV_FMT " going offline.", XHCI_DEV_ARGS(*dev));
 	fibril_mutex_lock(&dev_base->guard);
-	dev->online = false;
+	dev_base->online = false;
 	fibril_mutex_unlock(&dev_base->guard);
 
Index: uspace/drv/bus/usb/xhci/endpoint.c
===================================================================
--- uspace/drv/bus/usb/xhci/endpoint.c	(revision 67d58e877f1299875198c7b32fc7504f218d55b0)
+++ uspace/drv/bus/usb/xhci/endpoint.c	(revision deb2e558ccc886ffade58c2d64c4943b78c3e855)
@@ -463,5 +463,5 @@
 
 	/* Offline devices don't create new endpoints other than EP0. */
-	if (!dev->online && ep->base.endpoint > 0) {
+	if (!dev->base.online && ep->base.endpoint > 0) {
 		return EAGAIN;
 	}
Index: uspace/drv/bus/usb/xhci/endpoint.h
===================================================================
--- uspace/drv/bus/usb/xhci/endpoint.h	(revision 67d58e877f1299875198c7b32fc7504f218d55b0)
+++ uspace/drv/bus/usb/xhci/endpoint.h	(revision deb2e558ccc886ffade58c2d64c4943b78c3e855)
@@ -141,7 +141,4 @@
 	/** Flag indicating whether the device is USB3 (it's USB2 otherwise). */
 	bool usb3;
-
-	/** True if the device can add new endpoints and schedule transfers. */
-	volatile bool online;
 } xhci_device_t;
 
Index: uspace/drv/bus/usb/xhci/hc.c
===================================================================
--- uspace/drv/bus/usb/xhci/hc.c	(revision 67d58e877f1299875198c7b32fc7504f218d55b0)
+++ uspace/drv/bus/usb/xhci/hc.c	(revision deb2e558ccc886ffade58c2d64c4943b78c3e855)
@@ -706,5 +706,5 @@
 	/* From now on, the device is officially online, yay! */
 	fibril_mutex_lock(&dev->base.guard);
-	dev->online = true;
+	dev->base.online = true;
 	fibril_mutex_unlock(&dev->base.guard);
 
Index: uspace/drv/bus/usb/xhci/transfers.c
===================================================================
--- uspace/drv/bus/usb/xhci/transfers.c	(revision 67d58e877f1299875198c7b32fc7504f218d55b0)
+++ uspace/drv/bus/usb/xhci/transfers.c	(revision deb2e558ccc886ffade58c2d64c4943b78c3e855)
@@ -261,5 +261,5 @@
 	size_t tdpc = len / 1024 + ((len % 1024) ? 1 : 0);
 	size_t tbc = tdpc / (ep->max_burst + 1);
-	if(!tdpc % (ep->max_burst + 1)) --tbc;
+	if (!tdpc % (ep->max_burst + 1)) --tbc;
 	size_t bsp = tdpc % (ep->max_burst + 1);
 	size_t tlbpc = (bsp ? bsp - 1 : ep->max_burst);
@@ -520,9 +520,4 @@
 	xhci_device_t *xhci_dev = xhci_ep_to_dev(xhci_ep);
 
-	/* Offline devices don't schedule transfers other than on EP0. */
-	if (!xhci_dev->online && ep->endpoint > 0) {
-		return EAGAIN;
-	}
-
 	// FIXME: find a better way to check if the ring is not initialized
 	if (!xhci_ep->ring.segment_count) {
@@ -533,5 +528,5 @@
 
 	// Isochronous transfer needs to be handled differently
-	if(batch->ep->transfer_type == USB_TRANSFER_ISOCHRONOUS) {
+	if (batch->ep->transfer_type == USB_TRANSFER_ISOCHRONOUS) {
 		return schedule_isochronous(hc, transfer, xhci_ep, xhci_dev);
 	}
