diff --git a/LUFA/Drivers/USB/LowLevel/USBInterrupt.c b/LUFA/Drivers/USB/LowLevel/USBInterrupt.c
index 43df5f61a10a0a193394283eadeadb85fc473575..1c6d6caa79e6765854ea3748d78afbfe84aa25ef 100644
--- a/LUFA/Drivers/USB/LowLevel/USBInterrupt.c
+++ b/LUFA/Drivers/USB/LowLevel/USBInterrupt.c
@@ -237,10 +237,13 @@ ISR(USB_COM_vect, ISR_BLOCK)
 
 	Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
 	USB_INT_Disable(USB_INT_RXSTPI);
-	sei();
 
-	USB_USBTask();
+	NONATOMIC_BLOCK(NONATOMIC_FORCEOFF)
+	{
+		USB_Device_ProcessControlRequest();
+	}
 
+	Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
 	USB_INT_Enable(USB_INT_RXSTPI);
 	Endpoint_SelectEndpoint(PrevSelectedEndpoint);
 }
diff --git a/LUFA/Drivers/USB/LowLevel/USBInterrupt.h b/LUFA/Drivers/USB/LowLevel/USBInterrupt.h
index a191a2994c3883e440c60e3ff031005398183456..6f8bf7cea6a1256f740f4b0fbc93578f0391ea8c 100644
--- a/LUFA/Drivers/USB/LowLevel/USBInterrupt.h
+++ b/LUFA/Drivers/USB/LowLevel/USBInterrupt.h
@@ -44,6 +44,7 @@
 	/* Includes: */
 		#include <avr/io.h>
 		#include <avr/interrupt.h>
+		#include <util/atomic.h>
 		#include <stdbool.h>
 		
 		#include "../../../Common/Common.h"
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index 16925c00b6b70bcbb2541c253588e6f38a39cfa4..09a168dc128feabc445d2644f2286cff143a912d 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -15,6 +15,8 @@
   *    LIBUSB_DRIVER_COMPAT, as it applies to all software on all platforms using the libUSB driver
   *
   *  <b>Fixed:</b>
+  *  - Fixed possible device lockup when INTERRUPT_CONTROL_ENDPOINT is enabled and the control endpoint is not properly
+  *    selected when the ISR completes
   *
   *  \section Sec_ChangeLog100512 Version 100512
   *