diff --git a/LUFA/ManPages/FutureChanges.txt b/LUFA/ManPages/FutureChanges.txt
index 9facda2a80a741e0bb55281caf8f672560696321..8d394435a324f9c6fde0c6c4701776a2f2a7ed27 100644
--- a/LUFA/ManPages/FutureChanges.txt
+++ b/LUFA/ManPages/FutureChanges.txt
@@ -24,9 +24,9 @@
   *  - Remake AVRStudio project files
   *  - Add detailed overviews of how each demo works
   *  - Master LUFA include file rather than per-module includes
-  *  - Add multiple-report HID demo to the library
+  *  - Add multiple-report HID device demo to the library
   *  - Add dual role Mouse Host/Keyboard Device demo to the library
-  *  - Add Mouse/CDC dual class demo to the library
+  *  - Add Mouse/CDC dual class device demo to the library
   *  - Change makefiles to allow for absolute LUFA location to be used
   *  - Port LUFA to other architectures
   *      -# AVR32 UC3B series microcontrollers
diff --git a/Projects/MissileLauncher/ConfigDescriptor.c b/Projects/MissileLauncher/ConfigDescriptor.c
index 405daa4fe0760c8ef147b095673758620c691640..0a50beb573a91963fae951773bb0cc9a34d00e87 100644
--- a/Projects/MissileLauncher/ConfigDescriptor.c
+++ b/Projects/MissileLauncher/ConfigDescriptor.c
@@ -47,31 +47,26 @@
  */
 uint8_t ProcessConfigurationDescriptor(void)
 {
-	uint8_t* ConfigDescriptorData;
-	uint16_t ConfigDescriptorSize;
-	
+	uint8_t  ConfigDescriptorData[512];
+	uint8_t* CurrConfigLocation = ConfigDescriptorData;
+	uint16_t CurrConfigBytesRem;
 	uint8_t  FoundEndpoints = 0;
-	
-	/* Get Configuration Descriptor size from the device */
-	if (USB_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, NULL) != HOST_SENDCONTROL_Successful)
-	  return ControlError;
-	
-	/* Ensure that the Configuration Descriptor isn't too large */
-	if (ConfigDescriptorSize > MAX_CONFIG_DESCRIPTOR_SIZE)
-	  return DescriptorTooLarge;
-	  
-	/* Allocate enough memory for the entire config descriptor */
-	ConfigDescriptorData = alloca(ConfigDescriptorSize);
 
 	/* Retrieve the entire configuration descriptor into the allocated buffer */
-	USB_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData);
-	
-	/* Validate returned data - ensure first entry is a configuration header descriptor */
-	if (DESCRIPTOR_TYPE(ConfigDescriptorData) != DTYPE_Configuration)
-	  return InvalidConfigDataReturned;
+	switch (USB_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData)))
+	{
+		case HOST_GETCONFIG_Successful:
+			break;
+		case HOST_GETCONFIG_InvalidData:
+			return InvalidConfigDataReturned;
+		case HOST_GETCONFIG_BuffOverflow:
+			return DescriptorTooLarge;
+		default:
+			return ControlError;
+	}
 	
 	/* Get the HID interface from the configuration descriptor */
-	if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
+	if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation,
 	                              DComp_NextHIDInterface) != DESCRIPTOR_SEARCH_COMP_Found)
 	{
 		/* Descriptor not found, error out */
@@ -81,7 +76,7 @@ uint8_t ProcessConfigurationDescriptor(void)
 	while (FoundEndpoints != ((1 << HID_DATA_IN_PIPE) | (1 << HID_DATA_OUT_PIPE)))
 	{
 		/* Get the next HID interface's data endpoint descriptor */
-		if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
+		if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation,
 		                              DComp_NextInterfaceHIDDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
 		{
 			/* Not all HID devices have an OUT endpoint - if we've reached the end of the HID descriptor