diff --git a/Demos/Device/ClassDriver/CDCMouse/CDCMouse.c b/Demos/Device/ClassDriver/CDCMouse/CDCMouse.c
index e21e0bcb4e259ee913bbe7726493b3ad54fff3c9..3c7fe5b81b64ab46bb87c64eee05d148092d8780 100644
--- a/Demos/Device/ClassDriver/CDCMouse/CDCMouse.c
+++ b/Demos/Device/ClassDriver/CDCMouse/CDCMouse.c
@@ -198,7 +198,7 @@ void EVENT_USB_Device_StartOfFrame(void)
  *  \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent
  */
 bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
-                                         void* ReportData, uint16_t* ReportSize)
+                                         const uint8_t ReportType, void* ReportData, uint16_t* ReportSize)
 {
 	USB_MouseReport_Data_t* MouseReport = (USB_MouseReport_Data_t*)ReportData;
 		
diff --git a/Demos/Device/ClassDriver/CDCMouse/CDCMouse.h b/Demos/Device/ClassDriver/CDCMouse/CDCMouse.h
index 002fe3be99ce39e595e8319a36cec33eb7130103..bee1b0435066725d514f42f17cda2cdf452cd54d 100644
--- a/Demos/Device/ClassDriver/CDCMouse/CDCMouse.h
+++ b/Demos/Device/ClassDriver/CDCMouse/CDCMouse.h
@@ -76,7 +76,7 @@
 		void EVENT_USB_Device_StartOfFrame(void);
 
 		bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
-                                                 void* ReportData, uint16_t* ReportSize);
+                                                 const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);
 		void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
 		                                          const void* ReportData, const uint16_t ReportSize);
 #endif
diff --git a/Demos/Device/ClassDriver/GenericHID/GenericHID.c b/Demos/Device/ClassDriver/GenericHID/GenericHID.c
index 5e265805f65b85c6b1655504352f7be702d1bcdc..7ff886e73eba4e8d0ed3d931df4785479741bb41 100644
--- a/Demos/Device/ClassDriver/GenericHID/GenericHID.c
+++ b/Demos/Device/ClassDriver/GenericHID/GenericHID.c
@@ -142,7 +142,7 @@ void EVENT_USB_Device_StartOfFrame(void)
  *  \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent
  */
 bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
-                                         void* ReportData, uint16_t* ReportSize)
+                                         const uint8_t ReportType, void* ReportData, uint16_t* ReportSize)
 {
 	if (HIDReportEcho.ReportID)
 	  *ReportID = HIDReportEcho.ReportID;
diff --git a/Demos/Device/ClassDriver/GenericHID/GenericHID.h b/Demos/Device/ClassDriver/GenericHID/GenericHID.h
index 004daf54af20130af7c59d662801ad584ea368ac..4a13c426fee44a7d25b31567224c672e4531324a 100644
--- a/Demos/Device/ClassDriver/GenericHID/GenericHID.h
+++ b/Demos/Device/ClassDriver/GenericHID/GenericHID.h
@@ -72,7 +72,7 @@
 		void EVENT_USB_Device_StartOfFrame(void);
 
 		bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
-                                                 void* ReportData, uint16_t* ReportSize);
+                                                 const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);
 		void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
 		                                          const void* ReportData, const uint16_t ReportSize);
 		
diff --git a/Demos/Device/ClassDriver/Joystick/Joystick.c b/Demos/Device/ClassDriver/Joystick/Joystick.c
index 00bcb6fe421408d9ed9032b103e73274773f805f..987fe1055e39654edd4ace6b3b33b89b8f101dac 100644
--- a/Demos/Device/ClassDriver/Joystick/Joystick.c
+++ b/Demos/Device/ClassDriver/Joystick/Joystick.c
@@ -136,7 +136,7 @@ void EVENT_USB_Device_StartOfFrame(void)
  *  \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent
  */
 bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
-                                         void* ReportData, uint16_t* ReportSize)
+                                         const uint8_t ReportType, void* ReportData, uint16_t* ReportSize)
 {
 	USB_JoystickReport_Data_t* JoystickReport = (USB_JoystickReport_Data_t*)ReportData;
 	
diff --git a/Demos/Device/ClassDriver/Joystick/Joystick.h b/Demos/Device/ClassDriver/Joystick/Joystick.h
index d25ccc139f3cd6b50d1311b957645341ed0e47a9..c87c1c6edaf2278269fdc59cf5df89c91e33e004 100644
--- a/Demos/Device/ClassDriver/Joystick/Joystick.h
+++ b/Demos/Device/ClassDriver/Joystick/Joystick.h
@@ -85,7 +85,7 @@
 		void EVENT_USB_Device_StartOfFrame(void);
 
 		bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
-                                                 void* ReportData, uint16_t* ReportSize);
+                                                 const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);
 		void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
 		                                          const void* ReportData, const uint16_t ReportSize);
 
diff --git a/Demos/Device/ClassDriver/Keyboard/Keyboard.c b/Demos/Device/ClassDriver/Keyboard/Keyboard.c
index 002d24ac967a4ace6811d7a3e29a003a05fb66ad..5ba15cdd9a21a1c82f055ecc70e900f132e54bdb 100644
--- a/Demos/Device/ClassDriver/Keyboard/Keyboard.c
+++ b/Demos/Device/ClassDriver/Keyboard/Keyboard.c
@@ -137,7 +137,7 @@ void EVENT_USB_Device_StartOfFrame(void)
  *  \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent
  */
 bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
-                                         void* ReportData, uint16_t* ReportSize)
+                                         const uint8_t ReportType, void* ReportData, uint16_t* ReportSize)
 {
 	USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;
 	
diff --git a/Demos/Device/ClassDriver/Keyboard/Keyboard.h b/Demos/Device/ClassDriver/Keyboard/Keyboard.h
index c6310cf9c880acc102c0b1d98874d6f3d7b9652c..098501c664759483136a5bd5d8e0487b5de8f9bd 100644
--- a/Demos/Device/ClassDriver/Keyboard/Keyboard.h
+++ b/Demos/Device/ClassDriver/Keyboard/Keyboard.h
@@ -77,7 +77,7 @@
 		void EVENT_USB_Device_StartOfFrame(void);
 
 		bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
-                                                 void* ReportData, uint16_t* ReportSize);
+                                                 const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);
 		void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
 		                                          const void* ReportData, const uint16_t ReportSize);
 
diff --git a/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c b/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c
index caa33f9075836191c6ee13d260119300716b5372..8db72833926aef491ae8823ec091016d23132024 100644
--- a/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c
+++ b/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c
@@ -165,7 +165,7 @@ void EVENT_USB_Device_StartOfFrame(void)
  *  \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent
  */
 bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
-                                         void* ReportData, uint16_t* ReportSize)
+                                         const uint8_t ReportType, void* ReportData, uint16_t* ReportSize)
 {
 	uint8_t JoyStatus_LCL    = Joystick_GetStatus();
 	uint8_t ButtonStatus_LCL = Buttons_GetStatus();
diff --git a/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.h b/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.h
index a9368a4dec9243a9a9090ae880abec997d261130..8c73521b4a6f6d0019cad592709178b0dc0dbb98 100644
--- a/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.h
+++ b/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.h
@@ -71,7 +71,7 @@
 		void EVENT_USB_Device_StartOfFrame(void);
 
 		bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
-                                                 void* ReportData, uint16_t* ReportSize);
+                                                 const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);
 		void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
 		                                          const void* ReportData, const uint16_t ReportSize);
 		
diff --git a/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c b/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c
index 4e68f5c974bb5ea473c8d890fcd4cede97dbb51e..3d734e0e4c3ee87eba72be6ed0f2db956b23bd53 100644
--- a/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c
+++ b/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c
@@ -187,7 +187,7 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK)
  *  \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent
  */
 bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
-                                         void* ReportData, uint16_t* ReportSize)
+                                         const uint8_t ReportType, void* ReportData, uint16_t* ReportSize)
 {
 	USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;
 	
diff --git a/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.h b/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.h
index 3ca03f10501bd16e3478ca19ef1d734ea0ce86c9..c82fb783635987fcaf4d3294f42eb77c31fc9ab5 100644
--- a/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.h
+++ b/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.h
@@ -91,7 +91,7 @@
 		bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* MSInterfaceInfo);
 
 		bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
-                                                 void* ReportData, uint16_t* ReportSize);
+                                                 const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);
 		void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
 		                                          const void* ReportData, const uint16_t ReportSize);
 
diff --git a/Demos/Device/ClassDriver/Mouse/Mouse.c b/Demos/Device/ClassDriver/Mouse/Mouse.c
index c29cc15efd49fac6cf978b91a4790c3150aeaa46..36ef71bf9870526927a2bb6d71bdf1af3a364b09 100644
--- a/Demos/Device/ClassDriver/Mouse/Mouse.c
+++ b/Demos/Device/ClassDriver/Mouse/Mouse.c
@@ -136,7 +136,7 @@ void EVENT_USB_Device_StartOfFrame(void)
  *  \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent
  */
 bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
-                                         void* ReportData, uint16_t* ReportSize)
+                                         const uint8_t ReportType, void* ReportData, uint16_t* ReportSize)
 {
 	USB_MouseReport_Data_t* MouseReport = (USB_MouseReport_Data_t*)ReportData;
 		
diff --git a/Demos/Device/ClassDriver/Mouse/Mouse.h b/Demos/Device/ClassDriver/Mouse/Mouse.h
index 635736d0f43ee6fdd9d0e01615d511aaaa790370..6ab919f25a7e9c95849663ba0e789785407ba0af 100644
--- a/Demos/Device/ClassDriver/Mouse/Mouse.h
+++ b/Demos/Device/ClassDriver/Mouse/Mouse.h
@@ -76,7 +76,7 @@
 		void EVENT_USB_Device_StartOfFrame(void);
 
 		bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
-                                                 void* ReportData, uint16_t* ReportSize);
+                                                 const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);
 		void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
 		                                          const void* ReportData, const uint16_t ReportSize);
 
diff --git a/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c b/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c
index 47a191350c84370c85da0697cdf3520f7db27106..532b1a1a2e7fa5a8ada1e239ab4c731c9aea6a5f 100644
--- a/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c
+++ b/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c
@@ -104,7 +104,7 @@ void EVENT_USB_Device_StartOfFrame(void)
  *  \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent
  */
 bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
-                                         void* ReportData, uint16_t* ReportSize)
+                                         const uint8_t ReportType, void* ReportData, uint16_t* ReportSize)
 {
 	USB_MouseReport_Data_t* MouseReport = (USB_MouseReport_Data_t*)ReportData;
 		
diff --git a/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.h b/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.h
index 5fc2d84e978fab1ef058299b043378d1ef3d3afc..37026df97ad6d6bc0ccbf1b1b73a0c0718fd6023 100644
--- a/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.h
+++ b/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.h
@@ -43,6 +43,11 @@
 		extern USB_ClassInfo_HID_Device_t Mouse_HID_Device_Interface;
 		
 	/* Function Prototypes: */
+		bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
+                                                 const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);
+		void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
+		                                          const void* ReportData, const uint16_t ReportSize);
+
 		void EVENT_USB_Device_Connect(void);
 		void EVENT_USB_Device_Disconnect(void);
 		void EVENT_USB_Device_ConfigurationChanged(void);
diff --git a/Demos/DualRole/ClassDriver/MouseHostDevice/HostFunctions.c b/Demos/DualRole/ClassDriver/MouseHostDevice/HostFunctions.c
index a503f1c7c103ffa9855c99c8f958fef1651e689f..eb0252ac7757d4d713a7d4335c210acf9acceaa4 100644
--- a/Demos/DualRole/ClassDriver/MouseHostDevice/HostFunctions.c
+++ b/Demos/DualRole/ClassDriver/MouseHostDevice/HostFunctions.c
@@ -50,7 +50,7 @@ USB_ClassInfo_HID_Host_t Mouse_HID_Host_Interface =
 				.HIDInterfaceProtocol   = HID_BOOT_MOUSE_PROTOCOL,
 			},
 	};
-	
+
 
 /** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and
  *  starts the library USB task to begin the enumeration and USB management process.
diff --git a/LUFA/Drivers/USB/Class/Device/HID.c b/LUFA/Drivers/USB/Class/Device/HID.c
index a9f1c9c817cb7d6b8518fbda56a70a75b3eb07f6..94cbf5d3f93533cf166f7d5e5bc3c638b8b3ce9c 100644
--- a/LUFA/Drivers/USB/Class/Device/HID.c
+++ b/LUFA/Drivers/USB/Class/Device/HID.c
@@ -50,10 +50,11 @@ void HID_Device_ProcessControlRequest(USB_ClassInfo_HID_Device_t* const HIDInter
 
 				uint16_t ReportINSize = 0;
 				uint8_t  ReportID     = (USB_ControlRequest.wValue & 0xFF);
+				uint8_t  ReportType   = (USB_ControlRequest.wValue >> 8) - 1;
 
 				memset(HIDInterfaceInfo->Config.PrevReportINBuffer, 0, HIDInterfaceInfo->Config.PrevReportINBufferSize);
 				
-				CALLBACK_HID_Device_CreateHIDReport(HIDInterfaceInfo, &ReportID,
+				CALLBACK_HID_Device_CreateHIDReport(HIDInterfaceInfo, &ReportID, ReportType,
 				                                    HIDInterfaceInfo->Config.PrevReportINBuffer, &ReportINSize);
 
 				Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
@@ -158,7 +159,8 @@ void HID_Device_USBTask(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)
 
 		memset(ReportINData, 0, sizeof(ReportINData));
 
-		bool ForceSend         = CALLBACK_HID_Device_CreateHIDReport(HIDInterfaceInfo, &ReportID, ReportINData, &ReportINSize);
+		bool ForceSend         = CALLBACK_HID_Device_CreateHIDReport(HIDInterfaceInfo, &ReportID, REPORT_ITEM_TYPE_In,
+		                                                             ReportINData, &ReportINSize);
 		bool StatesChanged     = false;
 		bool IdlePeriodElapsed = (HIDInterfaceInfo->State.IdleCount && !(HIDInterfaceInfo->State.IdleMSRemaining));
 		
diff --git a/LUFA/Drivers/USB/Class/Device/HID.h b/LUFA/Drivers/USB/Class/Device/HID.h
index 25348f6406cc74667ed8070d5bf32b9eba680cdd..d51327c39c91df68382d3bd1935fd3d3cc296c7b 100644
--- a/LUFA/Drivers/USB/Class/Device/HID.h
+++ b/LUFA/Drivers/USB/Class/Device/HID.h
@@ -147,15 +147,16 @@
 			 *  \param[in,out] ReportID  If preset to a non-zero value, this is the report ID being requested by the host. If zero, this should
 			 *                 be set to the report ID of the generated HID input report (if any). If multiple reports are not sent via the
 			 *                 given HID interface, this parameter should be ignored.
-			 *  \param[out] ReportData  Pointer to a buffer where the generated HID report should be stored.
+			 *  \param[in] ReportType  Type of HID report to generate, either \ref REPORT_ITEM_TYPE_In or \ref REPORT_ITEM_TYPE_Feature
+			 *  \param[out] ReportData  Pointer to a buffer where the generated HID report should be stored
 			 *  \param[out] ReportSize  Number of bytes in the generated input report, or zero if no report is to be sent
 			 *
 			 *  \return Boolean true to force the sending of the report even if it is identical to the previous report and still within
 			 *          the idle period (useful for devices which report relative movement), false otherwise
 			 */
 			bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
-                                                     void* ReportData, uint16_t* ReportSize) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2)
-			                                         ATTR_NON_NULL_PTR_ARG(3) ATTR_NON_NULL_PTR_ARG(4);
+                                                     const uint8_t ReportType, void* ReportData, uint16_t* ReportSize) ATTR_NON_NULL_PTR_ARG(1)
+			                                         ATTR_NON_NULL_PTR_ARG(2) ATTR_NON_NULL_PTR_ARG(4) ATTR_NON_NULL_PTR_ARG(5);
 			
 			/** HID class driver callback for the user processing of a received HID OUT report. This callback may fire in response to
 			 *  either HID class control requests from the host, or by the normal HID endpoint polling procedure. Inside this callback
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index a69eb9a1d9448a99c3b5c91a78dd7c413aba40b7..0aa3dafaad3703500f74f168dcea06b182f1478c 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -18,6 +18,8 @@
   *  - The SCSI_Request_Sense_Response_t and SCSI_Inquiry_Response_t type defines are now part of the Mass Storage Class
   *    driver common defines, rather than being defined in the Host mode Class driver section only
   *  - The USB_MODE_HOST token is now defined even when host mode is not available
+  *  - The CALLBACK_HID_Device_CreateHIDReport() HID Device Class driver callback now has a new ReportType parameter to
+  *    indicate the report type to generate
   *
   *  <b>Fixed:</b>
   *  - Added missing CDC_Host_CreateBlockingStream() function code to the CDC Host Class driver
diff --git a/LUFA/ManPages/MigrationInformation.txt b/LUFA/ManPages/MigrationInformation.txt
index 89bba9697d9614b085cd100fd144a94958d073ac..aad002ddeb070e93ee3870177dea13f7523c71f6 100644
--- a/LUFA/ManPages/MigrationInformation.txt
+++ b/LUFA/ManPages/MigrationInformation.txt
@@ -12,7 +12,9 @@
  *
  * \section Sec_MigrationXXXXXX Migrating from 091122 to XXXXXX
  *  
- *  <b>There is no migration information for this version.</b>
+ *  <b>Device Mode</b>
+ *    - The CALLBACK_HID_Device_CreateHIDReport() HID Device Class driver callback now has a new ReportType parameter to
+ *      indicate the report type to generate. Existing applications may simply add and ignore this additional parameter.
  *
  * \section Sec_Migration091122 Migrating from 090924 to 091122
  *  
diff --git a/Projects/Magstripe/Magstripe.c b/Projects/Magstripe/Magstripe.c
index 69f17c7593ddf529267a3ebd2f06a9abfcd2b7c8..b30590f6583e2ad3ea885956dd1d7fdd4fa03464 100644
--- a/Projects/Magstripe/Magstripe.c
+++ b/Projects/Magstripe/Magstripe.c
@@ -169,7 +169,7 @@ void EVENT_USB_Device_StartOfFrame(void)
  *  \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent
  */
 bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
-                                         void* ReportData, uint16_t* ReportSize)
+                                         const uint8_t ReportType, void* ReportData, uint16_t* ReportSize)
 {
 	USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;
 
diff --git a/Projects/Magstripe/Magstripe.h b/Projects/Magstripe/Magstripe.h
index 36e4d7091a0f45c84b9a91fc8ec90b1bffa35a75..cd1fd9c30ae7aab42b2ef9db8c6d1e0189989c81 100644
--- a/Projects/Magstripe/Magstripe.h
+++ b/Projects/Magstripe/Magstripe.h
@@ -75,7 +75,7 @@
 		void EVENT_USB_Device_StartOfFrame(void);
 
 		bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
-                                                 void* ReportData, uint16_t* ReportSize);
+                                                 const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);
 		void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
 		                                          const void* ReportData, const uint16_t ReportSize);