diff --git a/Bootloaders/CDC/BootloaderCDC.c b/Bootloaders/CDC/BootloaderCDC.c
index 83fd0ee924045b96c807038b687e4d2f48e670e6..9f7878617101ca6216a55d7cd957b76e3f039bc9 100644
--- a/Bootloaders/CDC/BootloaderCDC.c
+++ b/Bootloaders/CDC/BootloaderCDC.c
@@ -54,8 +54,8 @@ CDC_Line_Coding_t LineCoding = { .BaudRateBPS = 9600,
 uint32_t CurrAddress;
 
 /** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run
- *  via a soft reset. When cleared, the bootloader will abort, the USB interface will shut down and the application
- *  jumped to via an indirect jump to location 0x0000.
+ *  via a watchdog reset. When cleared the bootloader will exit, starting the watchdog and entering an infinite
+ *  loop until the AVR restarts and the application runs.
  */
 bool RunBootloader = true;
 
@@ -78,12 +78,13 @@ int main(void)
 		USB_USBTask();
 	}
 	
-	/* Reset all configured hardware to their default states for the user app */
-	ResetHardware();
+	/* Disconnect from the host - USB interface will be reset later along with the AVR */
+	USB_Detach();
 
-	/* Start the user application */
-	AppPtr_t AppStartPtr = (AppPtr_t)0x0000;
-	AppStartPtr();	
+	/* Enable the watchdog and force a timeout to reset the AVR */
+	wdt_enable(WDTO_250MS);
+
+	for (;;);
 }
 
 /** Configures all hardware required for the bootloader. */
@@ -104,20 +105,6 @@ void SetupHardware(void)
 	USB_Init();
 }
 
-/** Resets all configured hardware required for the bootloader back to their original states. */
-void ResetHardware(void)
-{
-	/* Shut down the USB subsystem */
-	USB_ShutDown();
-	
-	/* Relocate the interrupt vector table back to the application section */
-	MCUCR = (1 << IVCE);
-	MCUCR = 0;
-
-	/* Re-enable RWW section */
-	boot_rww_enable();
-}
-
 /** Event handler for the USB_ConfigurationChanged event. This configures the device's endpoints ready
  *  to relay data to and from the attached USB host.
  */
diff --git a/Bootloaders/CDC/BootloaderCDC.h b/Bootloaders/CDC/BootloaderCDC.h
index 22b57438dfec36779bc899cd0bcb71d7d6e10185..81422119f8b9ea9924dc315c0523dbad47bca1bd 100644
--- a/Bootloaders/CDC/BootloaderCDC.h
+++ b/Bootloaders/CDC/BootloaderCDC.h
@@ -117,7 +117,6 @@
 	/* Function Prototypes: */
 		void CDC_Task(void);
 		void SetupHardware(void);
-		void ResetHardware(void);
 
 		void EVENT_USB_Device_ConfigurationChanged(void);
 		void EVENT_USB_Device_UnhandledControlRequest(void);
diff --git a/Bootloaders/TeensyHID/Descriptors.h b/Bootloaders/TeensyHID/Descriptors.h
index 37a2b644e75afb4feaae5df9c4e5e1cbb6c59bff..f72dec2510c6af67cd14915e0bb638f1b1a602c9 100644
--- a/Bootloaders/TeensyHID/Descriptors.h
+++ b/Bootloaders/TeensyHID/Descriptors.h
@@ -93,7 +93,7 @@
 		/** Vendor usage page for the Teensy 2.0 board */
 		#define TEENSY_USAGEPAGE_20       0x1B
 		
-		/** Vendor usage page for the Teensy++ 1.0 board */
+		/** Vendor usage page for the Teensy++ 2.0 board */
 		#define TEENSY_USAGEPAGE_20PP     0x1C
 		
 		#if defined(USB_SERIES_2_AVR)
diff --git a/Bootloaders/TeensyHID/TeensyHID.c b/Bootloaders/TeensyHID/TeensyHID.c
index b93be6d18232eef25f7704ac42901530b08a565b..ff28927b4b93c93454f10d06f7b3317a00e934b9 100644
--- a/Bootloaders/TeensyHID/TeensyHID.c
+++ b/Bootloaders/TeensyHID/TeensyHID.c
@@ -105,18 +105,24 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
 			/* Wait until the command has been sent by the host */
 			while (!(Endpoint_IsOUTReceived()));
 		
-			/* Read in the write destination address */
-			uint16_t PageAddress = Endpoint_Read_Word_LE();
+			/* Read in the write destination index */
+			uint16_t PageIndex = Endpoint_Read_Word_LE();
 			
 			/* Check if the command is a program page command, or a start application command */
-			if (PageAddress == TEENSY_STARTAPPLICATION)
+			if (PageIndex == TEENSY_STARTAPPLICATION)
 			{
 				RunBootloader = false;
 			}
 			else
 			{
+				#if (SPM_PAGESIZE == 128)
+				uint16_t PageByteAddress = PageIndex;
+				#else
+				uint32_t PageByteAddress = ((uint32_t)PageIndex << 8);
+				#endif
+			
 				/* Erase the given FLASH page, ready to be programmed */
-				boot_page_erase(PageAddress);
+				boot_page_erase(PageByteAddress);
 				boot_spm_busy_wait();
 				
 				/* Write each of the FLASH page's bytes in sequence */
@@ -134,15 +140,12 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
 					}
 
 					/* Write the next data word to the FLASH page */
-					boot_page_fill(PageAddress + PageByte, Endpoint_Read_Word_LE());
+					boot_page_fill(PageByteAddress + PageByte, Endpoint_Read_Word_LE());
 				}
 
 				/* Write the filled FLASH page to memory */
-				boot_page_write(PageAddress);
+				boot_page_write(PageByteAddress);
 				boot_spm_busy_wait();
-
-				/* Re-enable RWW section */
-				boot_rww_enable();
 			}
 
 			Endpoint_ClearOUT();
diff --git a/Bootloaders/TeensyHID/TeensyHID.txt b/Bootloaders/TeensyHID/TeensyHID.txt
index 9dac8f5d06e1681041f3fcd3b429b70664142614..1034c1c4912fc5a98d40956b05492f3b21ec780d 100644
--- a/Bootloaders/TeensyHID/TeensyHID.txt
+++ b/Bootloaders/TeensyHID/TeensyHID.txt
@@ -13,7 +13,7 @@
  *  - AT90USB162 (Teensy 1.0)
  *  - AT90USB646 (Teensy++ 1.0)
  *  - ATMEGA32U4 (Teensy 2.0)
- *  - AT90USB1287 (Teensy++ 2.0)
+ *  - AT90USB1286 (Teensy++ 2.0)
  *
  *  \section SSec_Info USB Information:
  *
@@ -51,7 +51,9 @@
  *  
  * Out of the box this bootloader builds for the ATMEGA32U4, and will fit into 2-4KB of bootloader space. For other
  * devices, the makefile will need to be updated to reflect the altered MCU model and bootloader start address. When
- * calculating the bootloader start address, use (TARGET_FLASH_SIZE_BYTES - 4096).
+ * calculating the bootloader start address, use (TARGET_FLASH_SIZE_BYTES - 4096) for targets where the bootloader
+ * compiles larger than 2KB, or (TARGET_FLASH_SIZE_BYTES - 2048) for smaller targets where the bootloader compiles
+ * under 2KB.
  *
  * This spoofs (with permission) the official Teensy bootloader's VID and PID, so that the software remains
  * compatible with no changes.
diff --git a/Bootloaders/TeensyHID/makefile b/Bootloaders/TeensyHID/makefile
index 404b55f9c8a8f0f732c907b13917415ec2fb908a..9a9f5ff0dfc279ae2fcf7eb34d3fbc0c3a96a560 100644
--- a/Bootloaders/TeensyHID/makefile
+++ b/Bootloaders/TeensyHID/makefile
@@ -68,7 +68,7 @@ BOARD  =
 #     does not *change* the processor frequency - it should merely be updated to
 #     reflect the processor speed set externally so that the code can use accurate
 #     software delays.
-F_CPU = 16000000
+F_CPU = 8000000
 
 
 # Input clock frequency.
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index 18bfe0c5ffbfedd89cb63437764f9e2631398388..4a1dba0eedc0a847cd81b27dd3684e52f6f24b14 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -36,6 +36,8 @@
   *    selected (thanks to Steffan Woltjer)
   *  - Removed software PDI and TPI emulation from the AVRISP-MKII clone project as it was very buggy and slow - PDI and TPI must
   *    now be implemented via seperate programming headers
+  *  - The CDC class bootloader now uses a watchdog reset rather than a soft-reset when exited to ensure that all hardware is
+  *    properly reset to their defaults
   *
   *  <b>Fixed:</b>
   *  - Fixed software PDI/TPI programming mode in the AVRISP project not correctly toggling just the clock pin
@@ -63,6 +65,7 @@
   *    HID_HOST_BOOT_PROTOCOL_ONLY compile time option is set
   *  - Fixed INTERRUPT_CONTROL_ENDPOINT compile time option preventing other interrupts from occuring while the control endpoint
   *    request is being processed, causing possible lockups if a USB interrupt occurs during a transfer
+  *  - Fixed TeensyHID bootloader not working on some USB AVR models with the official TeensyLoader GUI application
   *
   *  \section Sec_ChangeLog100219 Version 100219
   *