diff --git a/Demos/Device/LowLevel/CDC/CDC.c b/Demos/Device/LowLevel/CDC/CDC.c
index 8a992c7670dc5587483d2a7007e01493c4fb292b..73b486ccd61a7a41f6b0b8a57b8dda447b261506 100644
--- a/Demos/Device/LowLevel/CDC/CDC.c
+++ b/Demos/Device/LowLevel/CDC/CDC.c
@@ -49,6 +49,12 @@ CDC_Line_Coding_t LineCoding = { .BaudRateBPS = 9600,
                                  .CharFormat  = OneStopBit,
                                  .ParityType  = Parity_None,
                                  .DataBits    = 8            };
+							
+/** Indicates if the host has set the device line encoding. Until the line encoding is set by the host, the device should
+ *  not attempt to send any bytes.
+ */	 
+bool LineEncodingSet = false;
+
 
 #if 0
 /* NOTE: Here you can set up a standard stream using the created virtual serial port, so that the standard stream functions in
@@ -59,6 +65,9 @@ static int CDC_putchar(char c, FILE *stream)
 {	  
 	Endpoint_SelectEndpoint(CDC_TX_EPNUM);
 
+	if (!(LineEncodingSet))
+	  return -1;
+	
 	while (!(Endpoint_IsReadWriteAllowed()))
 	{
 		if (USB_DeviceState != DEVICE_STATE_Configured)
@@ -74,7 +83,10 @@ static int CDC_putchar(char c, FILE *stream)
 static int CDC_getchar(FILE *stream)
 {
 	int c;
-	  
+
+	if (!(LineEncodingSet))
+	  return -1;
+
 	Endpoint_SelectEndpoint(CDC_RX_EPNUM);
 	
 	for (;;)
@@ -216,6 +228,9 @@ void EVENT_USB_UnhandledControlPacket(void)
 
 				/* Read the line coding data in from the host into the global struct */
 				Endpoint_Read_Control_Stream_LE(LineCodingData, sizeof(CDC_Line_Coding_t));
+				
+				/* Indicate that the line encoding has been set, and the device may now send data */
+				LineEncodingSet = true;
 
 				/* Finalize the stream transfer to clear the last packet from the host */
 				Endpoint_ClearIN();
@@ -299,7 +314,7 @@ void CDC_Task(void)
 	{
 		ActionSent = false;
 	}
-	else if (ActionSent == false)
+	else if ((ActionSent == false) && LineEncodingSet)
 	{
 		ActionSent = true;
 
diff --git a/LUFA/Drivers/USB/Class/Device/CDC.c b/LUFA/Drivers/USB/Class/Device/CDC.c
index 0359afe4d28ddcdf5f9194da14a7ea6b48c49447..9ed20e4846684e9d4e73b44bfa3c0d5e0e63d29e 100644
--- a/LUFA/Drivers/USB/Class/Device/CDC.c
+++ b/LUFA/Drivers/USB/Class/Device/CDC.c
@@ -139,16 +139,16 @@ void CDC_Device_USBTask(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo)
 
 void CDC_Device_SendString(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, char* const Data, const uint16_t Length)
 {
-	if (USB_DeviceState != DEVICE_STATE_Configured)
+	if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS))
 	  return;
-
+	
 	Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpointNumber);
 	Endpoint_Write_Stream_LE(Data, Length, NO_STREAM_CALLBACK);
 }
 
 void CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, const uint8_t Data)
 {
-	if (USB_DeviceState != DEVICE_STATE_Configured)
+	if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS))
 	  return;
 
 	Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpointNumber);
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index ec2236a2c5a5a44f114bd57654ccbd05c38c90f4..cdd2333d235b1222ed44659bcbb64b0e4d3e6062 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -58,6 +58,8 @@
   *    internal control
   *  - Interrupts are no longer disabled during the processing of Control Requests on the default endpoint while in device mode
   *  - AudioOutput demos now always output to board LEDs, regardless of output mode (removed AUDIO_OUT_LEDS project option)
+  *  - Removed SINGLE_DEVICE_CONFIGURATION compile time option in favour of the new FIXED_NUM_CONFIGURATIONS option so that the exact number
+  *    of device configurations can be defined statically
   *
   *  <b>Fixed:</b>
   *  - Changed bootloaders to use FLASHEND rather than the existence of RAMPZ to determine if far FLASH pointers are needed to fix