diff --git a/LUFA/Drivers/USB/HighLevel/DeviceStandardReq.c b/LUFA/Drivers/USB/HighLevel/DeviceStandardReq.c
index d13ac7439d736683dc19b6edccde7c7a1479fd6c..e15a48d50ca0b4f184edc23b642ca48af9dada24 100644
--- a/LUFA/Drivers/USB/HighLevel/DeviceStandardReq.c
+++ b/LUFA/Drivers/USB/HighLevel/DeviceStandardReq.c
@@ -126,27 +126,28 @@ static void USB_Device_SetAddress(void)
 {
 	uint8_t DeviceAddress = (USB_ControlRequest.wValue & 0x7F);
 
-	Endpoint_ClearSETUP();
-	
-	Endpoint_ClearStatusStage();
-	
-	while (!(Endpoint_IsINReady()))
+	ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
 	{
-		if (USB_DeviceState == DEVICE_STATE_Unattached)
-		  return;
-	}
+		Endpoint_ClearSETUP();
+		
+		Endpoint_ClearStatusStage();
+		
+		while (!(Endpoint_IsINReady()));
 
-	USB_DeviceState = (DeviceAddress) ? DEVICE_STATE_Addressed : DEVICE_STATE_Default;
+		USB_DeviceState = (DeviceAddress) ? DEVICE_STATE_Addressed : DEVICE_STATE_Default;
 
-	USB_Device_SetDeviceAddress(DeviceAddress);
+		USB_Device_SetDeviceAddress(DeviceAddress);
+	}
 }
 
 static void USB_Device_SetConfiguration(void)
 {
-#if defined(FIXED_NUM_CONFIGURATIONS)
+	#if defined(FIXED_NUM_CONFIGURATIONS)
 	if ((uint8_t)USB_ControlRequest.wValue > FIXED_NUM_CONFIGURATIONS)
 	  return;
-#else
+	#else
+	USB_Descriptor_Device_t* DevDescriptorPtr;
+
 	#if defined(USE_FLASH_DESCRIPTORS)
 		#define MemoryAddressSpace  MEMSPACE_FLASH
 	#elif defined(USE_EEPROM_DESCRIPTORS)
@@ -157,8 +158,6 @@ static void USB_Device_SetConfiguration(void)
 		uint8_t MemoryAddressSpace;
 	#endif
 	
-	USB_Descriptor_Device_t* DevDescriptorPtr;
-
 	if (CALLBACK_USB_GetDescriptor((DTYPE_Device << 8), 0, (void*)&DevDescriptorPtr
 	#if !defined(USE_FLASH_DESCRIPTORS) && !defined(USE_EEPROM_DESCRIPTORS) && !defined(USE_RAM_DESCRIPTORS)
 	                               , &MemoryAddressSpace
@@ -183,7 +182,7 @@ static void USB_Device_SetConfiguration(void)
 		if ((uint8_t)USB_ControlRequest.wValue > DevDescriptorPtr->NumberOfConfigurations)
 		  return;
 	}
-#endif
+	#endif
 	
 	Endpoint_ClearSETUP();
 
@@ -199,7 +198,7 @@ static void USB_Device_SetConfiguration(void)
 	EVENT_USB_Device_ConfigurationChanged();
 }
 
-void USB_Device_GetConfiguration(void)
+static void USB_Device_GetConfiguration(void)
 {
 	Endpoint_ClearSETUP();
 
@@ -259,7 +258,7 @@ static void USB_Device_GetDescriptor(void)
 	uint16_t    DescriptorSize;
 	
 	#if !defined(USE_FLASH_DESCRIPTORS) && !defined(USE_EEPROM_DESCRIPTORS) && !defined(USE_RAM_DESCRIPTORS)
-	uint8_t  DescriptorAddressSpace;
+	uint8_t DescriptorAddressSpace;
 	#endif
 	
 	#if !defined(NO_INTERNAL_SERIAL) && (USE_INTERNAL_SERIAL != NO_DESCRIPTOR)
@@ -306,20 +305,20 @@ static void USB_Device_GetStatus(void)
 
 	switch (USB_ControlRequest.bmRequestType)
 	{
-#if !defined(NO_DEVICE_SELF_POWER) || !defined(NO_DEVICE_REMOTE_WAKEUP)	
+		#if !defined(NO_DEVICE_SELF_POWER) || !defined(NO_DEVICE_REMOTE_WAKEUP)	
 		case (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE):
-	#if !defined(NO_DEVICE_SELF_POWER)
+			#if !defined(NO_DEVICE_SELF_POWER)
 			if (USB_CurrentlySelfPowered)
 			  CurrentStatus |= FEATURE_SELFPOWERED_ENABLED;
-	#endif
+			#endif
 
-	#if !defined(NO_DEVICE_REMOTE_WAKEUP)			
+			#if !defined(NO_DEVICE_REMOTE_WAKEUP)			
 			if (USB_RemoteWakeupEnabled)
 			  CurrentStatus |= FEATURE_REMOTE_WAKEUP_ENABLED;
-	#endif
+			#endif
 			break;
-#endif
-#if !defined(CONTROL_ONLY_DEVICE)
+		#endif
+		#if !defined(CONTROL_ONLY_DEVICE)
 		case (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_ENDPOINT):
 			Endpoint_SelectEndpoint((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK);
 
@@ -328,7 +327,7 @@ static void USB_Device_GetStatus(void)
 			Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);			  
 
 			break;
-#endif
+		#endif
 		default:
 			return;
 	}
@@ -345,7 +344,7 @@ static void USB_Device_ClearSetFeature(void)
 {
 	switch (USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_RECIPIENT)
 	{
-#if !defined(NO_DEVICE_REMOTE_WAKEUP)			
+		#if !defined(NO_DEVICE_REMOTE_WAKEUP)			
 		case REQREC_DEVICE:
 			if ((uint8_t)USB_ControlRequest.wValue == FEATURE_REMOTE_WAKEUP)
 			  USB_RemoteWakeupEnabled = (USB_ControlRequest.bRequest == REQ_SetFeature);
@@ -353,8 +352,8 @@ static void USB_Device_ClearSetFeature(void)
 			  return;
 			
 			break;			
-#endif
-#if !defined(CONTROL_ONLY_DEVICE)
+		#endif
+		#if !defined(CONTROL_ONLY_DEVICE)
 		case REQREC_ENDPOINT:
 			if ((uint8_t)USB_ControlRequest.wValue == FEATURE_ENDPOINT_HALT)
 			{
@@ -381,7 +380,7 @@ static void USB_Device_ClearSetFeature(void)
 			}
 			
 			break;
-#endif
+		#endif
 		default:
 			return;
 	}
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index e16a33de59b9d4b2a038b7464b0de682839664f1..faf007ad01e17e49dbcd16e2ced46544edf1b98c 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -71,6 +71,7 @@
   *  - Fixed broken FLASH/EEPROM programming in the AVRISP-MKII clone project when writing in non-paged mode and the polling byte cannot be used
   *  - Fixed SPI driver not explicitly setting /SS and MISO pins as inputs when SPI_Init() is called
   *  - Fixed ISR definition conflict in the XPLAIN bridge between the software UART and the AVRISP-MKII ISP modules
+  *  - Fixed random enumeration failure while in device mode due to interrupts causing the Set Address request to exceed maximum timings
   *
   *  \section Sec_ChangeLog100807 Version 100807
   *  <b>New:</b>