diff --git a/Demos/Host/ClassDriver/CDCHost/CDCHost.c b/Demos/Host/ClassDriver/CDCHost/CDCHost.c
index b74c39418c2449144617e793dfa7262a8ffcb5ca..291e8359e39204b2c3ef5e633ed4e17f85f09e6c 100644
--- a/Demos/Host/ClassDriver/CDCHost/CDCHost.c
+++ b/Demos/Host/ClassDriver/CDCHost/CDCHost.c
@@ -77,17 +77,10 @@ int main(void)
 				uint16_t ConfigDescriptorSize;
 				uint8_t  ConfigDescriptorData[512];
 
-				if (USB_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, NULL) != HOST_SENDCONTROL_Successful)
+				if ((USB_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, NULL) != HOST_SENDCONTROL_Successful) ||
+				    (ConfigDescriptorSize > sizeof(ConfigDescriptorData)))
 				{
-					printf("Error Retrieving Device Descriptor.\r\n");
-					LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
-					USB_HostState = HOST_STATE_WaitForDeviceRemoval;
-					break;
-				}
-				
-				if (ConfigDescriptorSize > 512)
-				{
-					printf("Device Descriptor Too Large To Process.\r\n");
+					printf("Error Retrieving Configuration Descriptor.\r\n");
 					LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
 					USB_HostState = HOST_STATE_WaitForDeviceRemoval;
 					break;
diff --git a/Demos/Host/ClassDriver/MouseHost/MouseHost.c b/Demos/Host/ClassDriver/MouseHost/MouseHost.c
index c2850cfecfd88ec9a6eae6a7d4060d84aad9bcb3..6913ec3cba01c4e88c9f1bc740d940cde24ae231 100644
--- a/Demos/Host/ClassDriver/MouseHost/MouseHost.c
+++ b/Demos/Host/ClassDriver/MouseHost/MouseHost.c
@@ -79,22 +79,15 @@ int main(void)
 				uint16_t ConfigDescriptorSize;
 				uint8_t  ConfigDescriptorData[512];
 
-				if (USB_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, NULL) != HOST_SENDCONTROL_Successful)
+				if ((USB_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, NULL) != HOST_SENDCONTROL_Successful) ||
+				    (ConfigDescriptorSize > sizeof(ConfigDescriptorData)))
 				{
-					printf("Error Retrieving Device Descriptor.\r\n");
+					printf("Error Retrieving Configuration Descriptor.\r\n");
 					LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
 					USB_HostState = HOST_STATE_WaitForDeviceRemoval;
 					break;
 				}
 				
-				if (ConfigDescriptorSize > 512)
-				{
-					printf("Device Descriptor Too Large To Process.\r\n");
-					LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
-					USB_HostState = HOST_STATE_WaitForDeviceRemoval;
-					break;
-				}
-				  
 				USB_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData);
 
 				if (HID_Host_ConfigurePipes(&Mouse_HID_Interface,
diff --git a/LUFA/Drivers/USB/Class/Host/HID.h b/LUFA/Drivers/USB/Class/Host/HID.h
index 1959fd2657b8e478e7d188d5ed7c716781a8878e..344c06f06f546ebf92b8f767f2026de89d2970a9 100644
--- a/LUFA/Drivers/USB/Class/Host/HID.h
+++ b/LUFA/Drivers/USB/Class/Host/HID.h
@@ -66,8 +66,13 @@
 					uint8_t  DataINPipeNumber; /**< Pipe number of the HID interface's IN data pipe */
 					uint8_t  DataOUTPipeNumber; /**< Pipe number of the HID interface's OUT data pipe */
 					
-					bool     MatchInterfaceProtocol;
-					uint8_t  HIDInterfaceProtocol;
+					bool     MatchInterfaceProtocol; /**< Indicates whether the driver should match the device's
+					                                  *   HID interface protocol's value to the \ref HIDInterfaceProtocol
+					                                  *   suppled (otherwise just accept all HID class devices)
+					                                  */
+					uint8_t  HIDInterfaceProtocol; /**< HID interface protocol value to match against if the
+					                                *   \ref MatchInterfaceProtocol is set to true (ignored otherwise)
+					                                */
 				} Config; /**< Config data for the USB class interface within the device. All elements in this section
 				           *   <b>must</b> be set or the interface will fail to enumerate and operate correctly.
 				           */