Index: uspace/lib/usb/src/hub.c
===================================================================
--- uspace/lib/usb/src/hub.c	(revision d41f301f6c871977921c8cddf96bc736791586d9)
+++ uspace/lib/usb/src/hub.c	(revision a4e18e1e33397c8ddac49bbb77b9cac96670e076)
@@ -142,4 +142,23 @@
 	    DEV_IFACE_ID(USBHC_DEV_IFACE),
 	    IPC_M_USBHC_RELEASE_ADDRESS, address);
+}
+
+static void unregister_control_endpoint_on_default_address(
+    usb_hc_connection_t *connection)
+{
+	usb_device_connection_t dev_conn;
+	int rc = usb_device_connection_initialize_on_default_address(&dev_conn,
+	    connection);
+	if (rc != EOK) {
+		return;
+	}
+
+	usb_pipe_t ctrl_pipe;
+	rc = usb_pipe_initialize_default_control(&ctrl_pipe, &dev_conn);
+	if (rc != EOK) {
+		return;
+	}
+
+	usb_pipe_unregister(&ctrl_pipe, connection);
 }
 
@@ -235,4 +254,13 @@
 		goto leave_release_default_address;
 	}
+
+	/* Before sending any traffic, we need to register this
+	 * endpoint.
+	 */
+	rc = usb_pipe_register(&ctrl_pipe, 0, connection);
+	if (rc != EOK) {
+		rc = EREFUSED;
+		goto leave_release_default_address;
+	}
 	rc = usb_pipe_probe_default_control(&ctrl_pipe);
 	if (rc != EOK) {
@@ -244,5 +272,5 @@
 	if (rc != EOK) {
 		rc = ENOTCONN;
-		goto leave_release_default_address;
+		goto leave_unregister_endpoint;
 	}
 
@@ -256,7 +284,22 @@
 
 	/*
+	 * Register the control endpoint for the new device.
+	 */
+	rc = usb_pipe_register(&ctrl_pipe, 0, connection);
+	if (rc != EOK) {
+		rc = EREFUSED;
+		goto leave_unregister_endpoint;
+	}
+
+	/*
+	 * Release the original endpoint.
+	 */
+	unregister_control_endpoint_on_default_address(connection);
+
+	/*
 	 * Once the address is changed, we can return the default address.
 	 */
 	usb_hc_release_default_address(connection);
+
 
 	/*
@@ -273,4 +316,6 @@
 	}
 
+
+
 	/*
 	 * And now inform the host controller about the handle.
@@ -308,4 +353,7 @@
 	usb_pipe_end_session(&ctrl_pipe);
 
+leave_unregister_endpoint:
+	usb_pipe_unregister(&ctrl_pipe, connection);
+
 leave_release_default_address:
 	usb_hc_release_default_address(connection);
