diff --git a/Bootloaders/TeensyHID/TeensyHID.c b/Bootloaders/TeensyHID/TeensyHID.c
index eed709783deec6d63abd6e0f9230ae316a4e7083..67dded545749bbb19f36d5f15abdf2b0ccb5e66d 100644
--- a/Bootloaders/TeensyHID/TeensyHID.c
+++ b/Bootloaders/TeensyHID/TeensyHID.c
@@ -54,9 +54,6 @@ int main(void)
 	
 	while (RunBootloader)
 	  USB_USBTask();
-	
-	/* Reset all configured hardware to their default states for the user app */
-	ResetHardware();
 
 	/* Wait 100ms to give the host time to register the disconnection */
 	_delay_ms(100);
@@ -85,13 +82,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();
-}
-
 /** 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/TeensyHID/TeensyHID.h b/Bootloaders/TeensyHID/TeensyHID.h
index b7d4d6bac4b77a72bb217b454d124cd40f822ff4..484fb6b3ac027be5df92bf9e0bce3ee854c791e7 100644
--- a/Bootloaders/TeensyHID/TeensyHID.h
+++ b/Bootloaders/TeensyHID/TeensyHID.h
@@ -63,7 +63,6 @@
 		
 	/* Function Prototypes: */
 		void SetupHardware(void);
-		void ResetHardware(void);
 
 		void EVENT_USB_ConfigurationChanged(void);
 		void EVENT_USB_UnhandledControlPacket(void);
diff --git a/LUFA/Drivers/USB/LowLevel/LowLevel.c b/LUFA/Drivers/USB/LowLevel/LowLevel.c
index cd7fa891d0cef7e2690278499fd76d6ad0f03a9a..41d9e10ccad472bcb9ad11d30b115287c3c80b84 100644
--- a/LUFA/Drivers/USB/LowLevel/LowLevel.c
+++ b/LUFA/Drivers/USB/LowLevel/LowLevel.c
@@ -54,8 +54,6 @@ void USB_Init(
                #endif
                )
 {
-	USB_ShutDown();
-
 	#if defined(USB_CAN_BE_BOTH)
 	USB_CurrentMode = Mode;
 	#endif
@@ -120,29 +118,9 @@ void USB_ShutDown(void)
 	  EVENT_USB_Disconnect();
 	#endif
 
+	USB_ResetInterface();
 	USB_Detach();
-
-	USB_INT_DisableAllInterrupts();
-	USB_INT_ClearAllInterrupts();
-
-	USB_IsInitialized = false;
-
-	#if defined(USB_CAN_BE_HOST)
-	USB_HostState = HOST_STATE_Unattached;
-	#endif
-
-	#if defined(USB_CAN_BE_DEVICE)
-	USB_DeviceState = DEVICE_STATE_Unattached;
-	USB_ConfigurationNumber  = 0;
-	USB_RemoteWakeupEnabled  = false;
-	USB_CurrentlySelfPowered = false;
-	#endif
-
-	#if defined(CAN_BE_BOTH)
-	USB_CurrentMode = USB_MODE_NONE;
-	#endif
-
-	USB_Interface_Disable();
+	USB_Controller_Disable();
 	USB_PLL_Off();
 	
 	#if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
@@ -152,6 +130,12 @@ void USB_ShutDown(void)
 	#if defined(USB_CAN_BE_BOTH)
 	UHWCON &= ~(1 << UIDE);
 	#endif
+
+	USB_IsInitialized = false;
+
+	#if defined(CAN_BE_BOTH)
+	USB_CurrentMode = USB_MODE_NONE;
+	#endif
 }
 
 void USB_ResetInterface(void)
@@ -180,7 +164,7 @@ void USB_ResetInterface(void)
 		while (!(USB_PLL_IsReady()));
 	}
 	
-	USB_Interface_Reset();
+	USB_Controller_Reset();
 	
 	#if defined(USB_CAN_BE_BOTH)
 	if (UHWCON & (1 << UIDE))
diff --git a/LUFA/Drivers/USB/LowLevel/LowLevel.h b/LUFA/Drivers/USB/LowLevel/LowLevel.h
index df1fa0bcc3f7b1be66dc46d0af8b9ed6043f4c0f..ca2fc7b157fac70f9978fd266310ec1c8abf71c1 100644
--- a/LUFA/Drivers/USB/LowLevel/LowLevel.h
+++ b/LUFA/Drivers/USB/LowLevel/LowLevel.h
@@ -334,9 +334,9 @@
 			#define USB_CLK_Freeze()           MACROS{ USBCON  |=  (1 << FRZCLK);               }MACROE
 			#define USB_CLK_Unfreeze()         MACROS{ USBCON  &= ~(1 << FRZCLK);               }MACROE
 
-			#define USB_Interface_Enable()     MACROS{ USBCON  |=  (1 << USBE);                 }MACROE
-			#define USB_Interface_Disable()    MACROS{ USBCON  &= ~(1 << USBE);                 }MACROE
-			#define USB_Interface_Reset()      MACROS{ uint8_t Temp = USBCON; USBCON = (Temp & ~(1 << USBE)); \
+			#define USB_Controller_Enable()    MACROS{ USBCON  |=  (1 << USBE);                 }MACROE
+			#define USB_Controller_Disable()   MACROS{ USBCON  &= ~(1 << USBE);                 }MACROE
+			#define USB_Controller_Reset()     MACROS{ uint8_t Temp = USBCON; USBCON = (Temp & ~(1 << USBE)); \
 			                                           USBCON = (Temp | (1 << USBE));           }MACROE
 	
 		/* Inline Functions: */