Index: uspace/lib/usbhost/include/usb/host/bus.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/bus.h	(revision 66c16b0b91ccd0f52f7d1b325bf288e2c5885aed)
+++ uspace/lib/usbhost/include/usb/host/bus.h	(revision deb2e558ccc886ffade58c2d64c4943b78c3e855)
@@ -79,4 +79,7 @@
 	/* Managing bus */
 	bus_t *bus;
+
+	/** True if the device can add new endpoints and schedule transfers. */
+	volatile bool online;
 
 	/* This structure is meant to be extended by overriding. */
Index: uspace/lib/usbhost/src/endpoint.c
===================================================================
--- uspace/lib/usbhost/src/endpoint.c	(revision 66c16b0b91ccd0f52f7d1b325bf288e2c5885aed)
+++ uspace/lib/usbhost/src/endpoint.c	(revision deb2e558ccc886ffade58c2d64c4943b78c3e855)
@@ -214,4 +214,9 @@
 	}
 
+	/* Offline devices don't schedule transfers other than on EP0. */
+	if (!ep->device->online && ep->endpoint > 0) {
+		return EAGAIN;
+	}
+
 	const size_t bw = endpoint_count_bw(ep, size);
 	/* Check if we have enough bandwidth reserved */
Index: uspace/lib/usbhost/src/usb2_bus.c
===================================================================
--- uspace/lib/usbhost/src/usb2_bus.c	(revision 66c16b0b91ccd0f52f7d1b325bf288e2c5885aed)
+++ uspace/lib/usbhost/src/usb2_bus.c	(revision deb2e558ccc886ffade58c2d64c4943b78c3e855)
@@ -271,4 +271,9 @@
 	}
 
+	/* From now on, the device is officially online, yay! */
+	fibril_mutex_lock(&dev->guard);
+	dev->online = true;
+	fibril_mutex_unlock(&dev->guard);
+
 	return EOK;
 
