diff --git a/LUFA/Drivers/USB/Class/Device/CDC.c b/LUFA/Drivers/USB/Class/Device/CDC.c
index 39154608e46f7b200959970a2f539ccf8477dbf3..bf852c7755193162998d8709358412eca379e54c 100644
--- a/LUFA/Drivers/USB/Class/Device/CDC.c
+++ b/LUFA/Drivers/USB/Class/Device/CDC.c
@@ -64,21 +64,24 @@ void CDC_Device_ProcessControlRequest(USB_ClassInfo_CDC_Device_t* const CDCInter
 			if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
 			{
 				Endpoint_ClearSETUP();
+
 				Endpoint_Read_Control_Stream_LE(&CDCInterfaceInfo->State.LineEncoding, sizeof(CDCInterfaceInfo->State.LineEncoding));
-				EVENT_CDC_Device_LineEncodingChanged(CDCInterfaceInfo);
 				Endpoint_ClearIN();
+
+				EVENT_CDC_Device_LineEncodingChanged(CDCInterfaceInfo);
 			}
 	
 			break;
 		case REQ_SetControlLineState:
 			if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
 			{				
-				Endpoint_ClearSETUP();
-				
+				Endpoint_ClearSETUP();				
+
 				CDCInterfaceInfo->State.ControlLineStates.HostToDevice = USB_ControlRequest.wValue;
-				EVENT_CDC_Device_ControLineStateChanged(CDCInterfaceInfo);
 
 				Endpoint_ClearStatusStage();
+
+				EVENT_CDC_Device_ControLineStateChanged(CDCInterfaceInfo);
 			}
 	
 			break;
@@ -86,10 +89,9 @@ void CDC_Device_ProcessControlRequest(USB_ClassInfo_CDC_Device_t* const CDCInter
 			if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
 			{				
 				Endpoint_ClearSETUP();
-				
-				EVENT_CDC_Device_BreakSent(CDCInterfaceInfo, (uint8_t)USB_ControlRequest.wValue);
-
 				Endpoint_ClearStatusStage();
+
+				EVENT_CDC_Device_BreakSent(CDCInterfaceInfo, (uint8_t)USB_ControlRequest.wValue);
 			}
 
 			break;
diff --git a/LUFA/Drivers/USB/Class/Device/RNDIS.c b/LUFA/Drivers/USB/Class/Device/RNDIS.c
index ff790b771fd8bfa7ab6641b5dda647c00669a007..da1e4507c2a44d24328b6a0d914b3230925982ab 100644
--- a/LUFA/Drivers/USB/Class/Device/RNDIS.c
+++ b/LUFA/Drivers/USB/Class/Device/RNDIS.c
@@ -83,8 +83,9 @@ void RNDIS_Device_ProcessControlRequest(USB_ClassInfo_RNDIS_Device_t* const RNDI
 				Endpoint_ClearSETUP();
 
 				Endpoint_Read_Control_Stream_LE(RNDISInterfaceInfo->State.RNDISMessageBuffer, USB_ControlRequest.wLength);
-				RNDIS_Device_ProcessRNDISControlMessage(RNDISInterfaceInfo);
 				Endpoint_ClearIN();
+
+				RNDIS_Device_ProcessRNDISControlMessage(RNDISInterfaceInfo);
 			}
 			
 			break;
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index f37117a98bb344596e37a196165af437cce7afbe..8fc07116a9fb3b3998096836e395fdd7bd5060de 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -20,6 +20,8 @@
   *    SCSI_Codes.h file as these values are part of the MassStorage Class Driver
   *  - Added compile time error to the AVRISP-MKII project when built for the U4 chips, as the default VTARGET detection ADC channel
   *    does not exist on these chips (thanks to Marco)
+  *  - Moved calls to Device mode Class Driver events to after the request has been acknowledged, so that long event handlers do
+  *    do skew the timing of the control requests
   *
   *  <b>Fixed:</b>
   *  - Fixed USB_GetHIDReportItemInfo() function modifying the given report item's data when the report item does not exist
@@ -28,6 +30,8 @@
   *    missed SCSI sense values when the host retrieves the sense key (thanks to Martin Degelsegger)
   *  - Fixed critical pipe/endpoint memory allocation issue where the bank memory address space could be silently overlapped
   *    in the USB controller if the endpoints or pipes were allocated in anything other than ascending order (thanks to Martin Degelsegger)
+  *  - Fixed USBtoSerial and Benito project SetLineEncoding calls failing if the USART is busy, due to the RX ISR delaying the control
+  *    request handler
   *
   *  \section Sec_ChangeLog100807 Version 100807
   *  <b>New:</b>
diff --git a/Projects/Benito/makefile b/Projects/Benito/makefile
index d8babd86b7dd0d75f1e1f00d0a6aa1111fafd8a2..23b9ed1705ec6368d9095ca9e6516adbc6f3a1a8 100644
--- a/Projects/Benito/makefile
+++ b/Projects/Benito/makefile
@@ -121,6 +121,7 @@ LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=8
 LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1
 LUFA_OPTS += -D USE_FLASH_DESCRIPTORS
 LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
+LUFA_OPTS += -D INTERRUPT_CONTROL_ENDPOINT
 
 LUFA_OPTS += -D AVR_RESET_LINE_PORT="PORTD"
 LUFA_OPTS += -D AVR_RESET_LINE_DDR="DDRD"
diff --git a/Projects/USBtoSerial/USBtoSerial.c b/Projects/USBtoSerial/USBtoSerial.c
index b50537e72997f95d3f5f13ae86bde5fda5dab0f4..845c2a51c8ffc8f351ce0ced4f2d09e6272b51a5 100644
--- a/Projects/USBtoSerial/USBtoSerial.c
+++ b/Projects/USBtoSerial/USBtoSerial.c
@@ -207,6 +207,6 @@ void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCI
 	
 	/* Reconfigure the USART in double speed mode for a wider baud rate range at the expense of accuracy */
 	UCSR1C = ConfigMask;
-	UCSR1A = (1 << U2X1);	
+	UCSR1A = (1 << U2X1);
 	UCSR1B = ((1 << RXCIE1) | (1 << TXEN1) | (1 << RXEN1));
 }
diff --git a/Projects/USBtoSerial/makefile b/Projects/USBtoSerial/makefile
index a87f303206a291748117250827ab39401a5dab22..b77b6b6549d632bccbd28f7d5da163453c314c44 100644
--- a/Projects/USBtoSerial/makefile
+++ b/Projects/USBtoSerial/makefile
@@ -121,6 +121,7 @@ LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=8
 LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1
 LUFA_OPTS += -D USE_FLASH_DESCRIPTORS
 LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
+LUFA_OPTS += -D INTERRUPT_CONTROL_ENDPOINT
 
 
 # Create the LUFA source path variables by including the LUFA root makefile