diff --git a/Bootloaders/TeensyHID/TeensyHID.c b/Bootloaders/TeensyHID/TeensyHID.c
index 4b9224abc3f4f7b62db82d35cc9268a4fcd80ada..84ec7aac7236d2a263a2cc3195d641b8186cc995 100644
--- a/Bootloaders/TeensyHID/TeensyHID.c
+++ b/Bootloaders/TeensyHID/TeensyHID.c
@@ -51,9 +51,9 @@ int main(void)
 	
 	while (RunBootloader)
 	  USB_USBTask();
-
-	/* Wait 100ms to give the host time to register the disconnection */
-	_delay_ms(100);
+	
+	/* Turn off the USB interface, disconnect from the host */
+	USB_ShutDown();
 
 	/* Enable the watchdog and force a timeout to reset the AVR */
 	wdt_enable(WDTO_250MS);
diff --git a/Demos/Host/ClassDriver/MassStorageHost/makefile b/Demos/Host/ClassDriver/MassStorageHost/makefile
index 24d9ee0b0eacd7fe1d2ab44ab5cc75b7c8f6cea8..88d5cf27d6f641d1fe364cbfcb0b8739fe41f3e4 100644
--- a/Demos/Host/ClassDriver/MassStorageHost/makefile
+++ b/Demos/Host/ClassDriver/MassStorageHost/makefile
@@ -118,6 +118,7 @@ LUFA_PATH = ../../../..
 # LUFA library compile-time options
 LUFA_OPTS  = -D USB_HOST_ONLY
 LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
+LUFA_OPTS += -D USB_STREAM_TIMEOUT_MS=5000
 
 
 # List C source files here. (C dependencies are automatically generated.)
diff --git a/Demos/Host/LowLevel/MassStorageHost/makefile b/Demos/Host/LowLevel/MassStorageHost/makefile
index 43309a3d4d07a1fa3d2779fc0d50705df7849fe0..756763249f5b0548ad3f0feb05be5e72f01ead17 100644
--- a/Demos/Host/LowLevel/MassStorageHost/makefile
+++ b/Demos/Host/LowLevel/MassStorageHost/makefile
@@ -119,7 +119,7 @@ LUFA_PATH = ../../../..
 LUFA_OPTS  = -D NO_STREAM_CALLBACKS
 LUFA_OPTS += -D USB_HOST_ONLY
 LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
-LUFA_OPTS += -D USB_STREAM_TIMEOUT_MS=2000
+LUFA_OPTS += -D USB_STREAM_TIMEOUT_MS=5000
 
 
 # List C source files here. (C dependencies are automatically generated.)
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index e68bf89e407e534c419e197d2d7431c9eba2c3de..1fdd966260e59eb58a5aec3be3d76894abe3e045 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -11,7 +11,8 @@
   *  <b>New:</b>
   *  - Added activity LED indicators to the AVRISP project to indicate when the device is busy processing a command
   *  - The USB target family and allowable USB mode tokens are now public and documented (USB_CAN_BE_*, USB_SERIES_*_AVR)
-  *  - Added new XPLAIN USB to Serial Bridge project (thanks to John Steggall for initial proof-of-concept)
+  *  - Added new XPLAIN USB to Serial Bridge project (thanks to John Steggall for initial proof-of-concept, David Prentice
+  *    and Peter Danneger for revised software USART code)
   *  - Added new RNDIS Ethernet Host LowLevel demo
   *  - Added new RNDIS Ethernet Host Class Driver
   *  - Added new RNDIS Ethernet Host ClassDriver demo
diff --git a/Projects/AVRISP/Lib/PDIProtocol.c b/Projects/AVRISP/Lib/PDIProtocol.c
index 93634a0224a9581fcc6f36da6f3c1d3ef05d3867..d98c51c435774c7947cd6fc4fb06b81d073ad24b 100644
--- a/Projects/AVRISP/Lib/PDIProtocol.c
+++ b/Projects/AVRISP/Lib/PDIProtocol.c
@@ -109,7 +109,10 @@ static void PDIProtocol_EnterXPROGMode(void)
 	
 	/* Must hold DATA line high for at least 90nS to enable PDI interface */
 	PDIDATA_LINE_PORT |= PDIDATA_LINE_MASK;
-	_delay_us(1);
+	asm volatile ("NOP"::);
+	#if (F_CPU > 8000000)
+	asm volatile ("NOP"::);
+	#endif
 	
 	/* Toggle CLOCK line 16 times within 100uS of the original 90nS timeout to keep PDI interface enabled */
 	for (uint8_t i = 0; i < 16; i++)