diff --git a/Bootloaders/DFU/BootloaderDFU.c b/Bootloaders/DFU/BootloaderDFU.c
index 1850803d41d3cbdf82319d9d361e69ad9c5a2e32..6da741e39423b38ae60f413c068656ebb8993658 100644
--- a/Bootloaders/DFU/BootloaderDFU.c
+++ b/Bootloaders/DFU/BootloaderDFU.c
@@ -462,8 +462,10 @@ static void DiscardFillerBytes(uint8_t NumberOfBytes)
 			/* Wait until next data packet received */
 			while (!(Endpoint_IsOUTReceived()));
 		}
-
-		Endpoint_Discard_Byte();						
+		else
+		{
+			Endpoint_Discard_Byte();
+		}
 	}
 }
 
diff --git a/LUFA/ChangeLog.txt b/LUFA/ChangeLog.txt
index 7e37ac45bffb1de689392beb61a45565501b0715..0eea9c43c7bdb67d434505530efacad94236b098 100644
--- a/LUFA/ChangeLog.txt
+++ b/LUFA/ChangeLog.txt
@@ -5,13 +5,12 @@
  */
    
 ========== TODO: ===========
-	- Fix bootloaders - make compatible with smaller USB AVRS (USB_IsConnected)
 	- Document new device class drivers
-	- Made new host class drivers
+	- Make new host class drivers
 	- Document new host class drivers
 	- Convert Host mode demos to class drivers
-	- Convert Host mode demos to schedulerless
 	- Add standardized descriptor names to class driver structures, controlled by USE_NONSTANDARD_DESCRIPTOR_NAMES
+	- Add multiple-report HID demo to the library
 ============================
 
  /** \page Page_ChangeLog Project Changelog
diff --git a/LUFA/Drivers/USB/Class/Device/CDC.c b/LUFA/Drivers/USB/Class/Device/CDC.c
index dface2a6db50eb102f95934c3baedf531cbb9798..c551fb7695deb5b3298768c6e37264044aa4b6be 100644
--- a/LUFA/Drivers/USB/Class/Device/CDC.c
+++ b/LUFA/Drivers/USB/Class/Device/CDC.c
@@ -130,6 +130,9 @@ void USB_CDC_USBTask(USB_ClassInfo_CDC_t* CDCInterfaceInfo)
 
 void USB_CDC_SendString(USB_ClassInfo_CDC_t* CDCInterfaceInfo, char* Data, uint16_t Length)
 {
+	if (!(USB_IsConnected))
+	  return;
+
 	Endpoint_SelectEndpoint(CDCInterfaceInfo->DataINEndpointNumber);
 	Endpoint_Write_Stream_LE(Data, Length, NO_STREAM_CALLBACK);
 }
@@ -159,6 +162,9 @@ uint16_t USB_CDC_BytesReceived(USB_ClassInfo_CDC_t* CDCInterfaceInfo)
 
 uint8_t USB_CDC_ReceiveByte(USB_ClassInfo_CDC_t* CDCInterfaceInfo)
 {
+	if (!(USB_IsConnected))
+	  return 0;
+
 	Endpoint_SelectEndpoint(CDCInterfaceInfo->DataOUTEndpointNumber);
 	
 	uint8_t DataByte = Endpoint_Read_Byte();
@@ -171,6 +177,9 @@ uint8_t USB_CDC_ReceiveByte(USB_ClassInfo_CDC_t* CDCInterfaceInfo)
 
 void USB_CDC_SendSerialLineStateChange(USB_ClassInfo_CDC_t* CDCInterfaceInfo, uint16_t LineStateMask)
 {
+	if (!(USB_IsConnected))
+	  return;
+
 	Endpoint_SelectEndpoint(CDCInterfaceInfo->NotificationEndpointNumber);
 	
 	USB_Request_Header_t Notification = (USB_Request_Header_t)
diff --git a/LUFA/Drivers/USB/Class/Device/CDC.h b/LUFA/Drivers/USB/Class/Device/CDC.h
index ee9e3767dbc6e45843596db361e027d2a8b938f6..feb7ff24b559881779b2da62b5072b6d5a79459b 100644
--- a/LUFA/Drivers/USB/Class/Device/CDC.h
+++ b/LUFA/Drivers/USB/Class/Device/CDC.h
@@ -234,10 +234,48 @@
 		 */		
 		void EVENT_USB_CDC_ControLineStateChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
 
+		/** Sends a given string to the attached USB host, if connected. If a host is not connected when the function is called, the
+		 *  string is discarded.
+		 *
+		 *  \param CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
+		 *  \param Data  Pointer to the string to send to the host
+		 *  \param Length  Size in bytes of the string to send to the host
+		 */
 		void     USB_CDC_SendString(USB_ClassInfo_CDC_t* CDCInterfaceInfo, char* Data, uint16_t Length);
+		
+		/** Sends a given byte to the attached USB host, if connected. If a host is not connected when the function is called, the
+		 *  byte is discarded.
+		 *
+		 *  \param CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
+		 *  \param Data  Byte of data to send to the host
+		 */
 		void     USB_CDC_SendByte(USB_ClassInfo_CDC_t* CDCInterfaceInfo, uint8_t Data);
+		
+		/** Determines the number of bytes received by the CDC interface from the host, waiting to be read.
+		 *
+		 *  \param CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
+		 *
+		 *  \return Total number of buffered bytes received from the host
+		 */
 		uint16_t USB_CDC_BytesReceived(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
+		
+		/** Reads a byte of data from the host. If no data is waiting to be read of if a USB host is not connected, the function
+		 *  returns 0. The USB_CDC_BytesReceived() function should be queried before data is recieved to ensure that no data
+		 *  underflow occurs.
+		 *
+		 *  \param CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
+		 *
+		 *  \return Next received byte from the host, or 0 if no data received
+		 */
 		uint8_t  USB_CDC_ReceiveByte(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
+		
+		/** Sends a Serial Control Line State Change notification to the host. This should be called when the virtual serial control
+		 *  lines (DCD, DSR, etc.) have changed states, or to give BREAK notfications to the host. Line states persist until they are
+		 *  cleared via a second notification.
+		 *
+		 *  \param CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
+		 *  \param LineStateMask  Mask of CDC_CONTROL_LINE_IN_* masks giving the current control line states
+		 */
 		void     USB_CDC_SendSerialLineStateChange(USB_ClassInfo_CDC_t* CDCInterfaceInfo, uint16_t LineStateMask);
 
 	/* Disable C linkage for C++ Compilers: */
diff --git a/LUFA/Drivers/USB/Class/Device/HID.h b/LUFA/Drivers/USB/Class/Device/HID.h
index f863f811d59197eb8e10a424b031abfc313e1c93..e812a39c70ec4ae9ce848574eaba54135a77730e 100644
--- a/LUFA/Drivers/USB/Class/Device/HID.h
+++ b/LUFA/Drivers/USB/Class/Device/HID.h
@@ -115,7 +115,7 @@
 			uint8_t  ReportINEndpointNumber; /**< Endpoint number of the HID interface's IN report endpoint */
 			uint16_t ReportINEndpointSize; /**< Size in bytes of the HID interface's IN report endpoint */
 			
-			uint8_t  ReportINBufferSize;
+			uint8_t  ReportINBufferSize; /**< Size of the largest possible report to send to the host, for buffer allocation purposes */
 
 			bool     UsingReportProtocol; /**< Indicates if the HID interface is set to Boot or Report protocol mode */
 			uint16_t IdleCount; /**< Report idle period, in ms, set by the host */