diff --git a/Demos/Host/ClassDriver/CDCHost/CDCHost.c b/Demos/Host/ClassDriver/CDCHost/CDCHost.c
index 42fae013a3bbeb084f65798817a740829d31b430..4b08f7d57cd3fca1c53f4b40e8b98587f8221d76 100644
--- a/Demos/Host/ClassDriver/CDCHost/CDCHost.c
+++ b/Demos/Host/ClassDriver/CDCHost/CDCHost.c
@@ -111,6 +111,8 @@ int main(void)
 					/* Echo received bytes from the attached device through the USART */
 					while (CDC_Host_BytesReceived(&VirtualSerial_CDC_Interface))
 					  putchar(CDC_Host_ReceiveByte(&VirtualSerial_CDC_Interface));
+					  
+					CDC_Host_Flush(&VirtualSerial_CDC_Interface);  
 				}
 			
 				break;
diff --git a/LUFA/Drivers/USB/Class/Host/CDC.c b/LUFA/Drivers/USB/Class/Host/CDC.c
index 20fa65988d04eed14d22013275ae17a651ba1cda..ebd332c9709e4751296ff300ad39359696b4f534 100644
--- a/LUFA/Drivers/USB/Class/Host/CDC.c
+++ b/LUFA/Drivers/USB/Class/Host/CDC.c
@@ -374,6 +374,48 @@ uint8_t CDC_Host_ReceiveByte(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo)
 	return ReceivedByte;
 }
 
+uint8_t CDC_Host_Flush(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo)
+{
+	if ((USB_HostState != HOST_STATE_Configured) || !(CDCInterfaceInfo->State.IsActive))
+	  return PIPE_READYWAIT_DeviceDisconnected;
+	  
+	uint8_t ErrorCode;
+
+	if (CDCInterfaceInfo->State.BidirectionalDataEndpoints)
+	{
+		Pipe_SelectPipe(CDCInterfaceInfo->Config.DataINPipeNumber);
+		Pipe_SetPipeToken(PIPE_TOKEN_OUT);
+	}
+	else
+	{
+		Pipe_SelectPipe(CDCInterfaceInfo->Config.DataOUTPipeNumber);	
+	}
+	
+	Pipe_Unfreeze();
+	
+	if (!(Pipe_BytesInPipe()))
+	  return PIPE_READYWAIT_NoError;
+
+	bool BankFull = !(Pipe_IsReadWriteAllowed());
+
+	Pipe_ClearOUT();
+
+	if (BankFull)
+	{
+		if ((ErrorCode = Pipe_WaitUntilReady()) != PIPE_READYWAIT_NoError)
+		  return ErrorCode;
+
+		Pipe_ClearOUT();
+	}
+
+	Pipe_Freeze();
+
+	if (CDCInterfaceInfo->State.BidirectionalDataEndpoints)
+	  Pipe_SetPipeToken(PIPE_TOKEN_IN);
+	
+	return PIPE_READYWAIT_NoError;
+}
+
 void CDC_Host_CreateStream(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo, FILE* Stream)
 {
 	*Stream = (FILE)FDEV_SETUP_STREAM(CDC_Host_putchar, CDC_Host_getchar, _FDEV_SETUP_RW);
diff --git a/LUFA/Drivers/USB/Class/Host/CDC.h b/LUFA/Drivers/USB/Class/Host/CDC.h
index 03b31d0eddc1b2416f981b5ed227a1ae07949c20..1873f55999dac4cb808273ac5a50318c715c232b 100644
--- a/LUFA/Drivers/USB/Class/Host/CDC.h
+++ b/LUFA/Drivers/USB/Class/Host/CDC.h
@@ -214,6 +214,14 @@
 			 */
 			uint8_t CDC_Host_ReceiveByte(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
 			
+			/** Flushes any data waiting to be sent, ensuring that the send buffer is cleared.
+			 *
+			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class host configuration and state
+			 *
+			 *  \return A value from the \ref Pipe_WaitUntilReady_ErrorCodes_t enum
+			 */
+			uint8_t CDC_Host_Flush(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
+
 			/** Creates a standard characer stream for the given CDC Device instance so that it can be used with all the regular
 			 *  functions in the avr-libc <stdio.h> library that accept a FILE stream as a destination (e.g. fprintf). The created
 			 *  stream is bidirectional and can be used for both input and output functions.
diff --git a/LUFA/Drivers/USB/HighLevel/StdDescriptors.h b/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
index 19ca8aa69161789e33a2e1301fe372985ffce7bf..28629442421ab49d82e766dc89b1fff1d684fa5a 100644
--- a/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
+++ b/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
@@ -43,6 +43,7 @@
 	/* Includes: */
 		#include <avr/pgmspace.h>
 		#include <stdbool.h>
+		#include <stddef.h>
 
 		#include "../../../Common/Common.h"
 		#include "USBMode.h"
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index 4b37995aff9d8785b1a2ca1af16a7d50836f8b7a..05c74deca243d04ab69bbe71a6e40321c3019db9 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -12,9 +12,10 @@
   *  - Added activity LED indicators to the AVRISP project to indicate when the device is busy processing a command
   *  - The USB target family and allowable USB mode tokens are now public and documented (USB_CAN_BE_*, USB_SERIES_*_AVR)
   *  - Added new XPLAIN USB to Serial Bridge project (thanks to John Steggall)
-  *  - Added new RNDISHost Host LowLevel demo
+  *  - Added new RNDIS Ethernet Host LowLevel demo
   *  - Added new RNDIS Ethernet Host Class Driver
-  *  - Added new RNDISEthernet Host ClassDriver demo
+  *  - Added new RNDIS Ethernet Host ClassDriver demo
+  *  - Added CDC_Host_Flush() function to the CDC Host Class driver to flush sent data to the attached device
   *
   *  <b>Changed:</b>
   *  - Removed code in the Keyboard demos to send zeroed reports between two reports with differing numbers of keycodes
diff --git a/Projects/AVRISP/AVRISP.txt b/Projects/AVRISP/AVRISP.txt
index 249976350f2b916ca306b0ab6113235be356e45e..fcb0fdd3db2501fecff44d28f9006703eb4098fa 100644
--- a/Projects/AVRISP/AVRISP.txt
+++ b/Projects/AVRISP/AVRISP.txt
@@ -56,6 +56,7 @@
  *  Note that this design currently has several limitations:
  *    - Minimum target clock speed of 500KHz due to hardware SPI used
  *    - No reversed/shorted target connector detection and notification
+ *    - PDI programming is not supported for XMEGA targets
  *
  *  On AVR models with an ADC converter, ACC should be tied to 5V (e.g. VBUS) and the VTARGET_ADC_CHANNEL token should be
  *  set to an appropriate ADC channel number in the project makefile for VTARGET detection to operate correctly. On models