diff --git a/LUFA/Drivers/USB/Class/Common/HIDParser.c b/LUFA/Drivers/USB/Class/Common/HIDParser.c
index bd0937ba8c62c56f2d49ee44d1fffc981b542534..b601d8638a79302f9fefd236a0efbe37a859723f 100644
--- a/LUFA/Drivers/USB/Class/Common/HIDParser.c
+++ b/LUFA/Drivers/USB/Class/Common/HIDParser.c
@@ -258,16 +258,14 @@ uint8_t USB_ProcessHIDReport(const uint8_t* ReportData,
 					if (ParserData->LargestReportSizeBits < NewReportItem.BitOffset)
 					  ParserData->LargestReportSizeBits = NewReportItem.BitOffset;
 
-					if (!(ReportItemData & HID_IOF_CONSTANT) && CALLBACK_HIDParser_FilterHIDReportItem(&NewReportItem))
-					{
-						if (ParserData->TotalReportItems == HID_MAX_REPORTITEMS)
-						  return HID_PARSE_InsufficientReportItems;
+					if (ParserData->TotalReportItems == HID_MAX_REPORTITEMS)
+					  return HID_PARSE_InsufficientReportItems;
 
-						memcpy(&ParserData->ReportItems[ParserData->TotalReportItems],
-						       &NewReportItem, sizeof(HID_ReportItem_t));
+					memcpy(&ParserData->ReportItems[ParserData->TotalReportItems],
+					       &NewReportItem, sizeof(HID_ReportItem_t));
 
-						ParserData->TotalReportItems++;
-					}
+					if (!(ReportItemData & HID_IOF_CONSTANT) && CALLBACK_HIDParser_FilterHIDReportItem(&NewReportItem))
+					  ParserData->TotalReportItems++;
 				}
 
 				break;
@@ -291,7 +289,7 @@ bool USB_GetHIDReportItemInfo(const uint8_t* ReportData,
                               HID_ReportItem_t* const ReportItem)
 {
 	if (ReportItem == NULL)
-		return false;
+	  return false;
 
 	uint16_t DataBitsRem  = ReportItem->Attributes.BitSize;
 	uint16_t CurrentBit   = ReportItem->BitOffset;
@@ -324,7 +322,7 @@ void USB_SetHIDReportItemInfo(uint8_t* ReportData,
                               HID_ReportItem_t* const ReportItem)
 {
 	if (ReportItem == NULL)
-		return;
+	  return;
 
 	uint16_t DataBitsRem  = ReportItem->Attributes.BitSize;
 	uint16_t CurrentBit   = ReportItem->BitOffset;
diff --git a/LUFA/Drivers/USB/Class/Common/HIDParser.h b/LUFA/Drivers/USB/Class/Common/HIDParser.h
index 7b9dd9dbab5568d7250ecf5af6d4167665265a46..e49121332923b0e349aeb343221177a87fedc8fd 100644
--- a/LUFA/Drivers/USB/Class/Common/HIDParser.h
+++ b/LUFA/Drivers/USB/Class/Common/HIDParser.h
@@ -295,7 +295,7 @@
 			 *  \returns Boolean \c true if the item to retrieve was located in the given report, \c false otherwise.
 			 */
 			bool USB_GetHIDReportItemInfo(const uint8_t* ReportData,
-			                              HID_ReportItem_t* const ReportItem) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
+			                              HID_ReportItem_t* const ReportItem) ATTR_NON_NULL_PTR_ARG(1);
 
 			/** Retrieves the given report item's value out of the \c Value member of the report item's
 			 *  \ref HID_ReportItem_t structure and places it into the correct position in the HID report
@@ -311,7 +311,7 @@
 			 *  \param[in]  ReportItem  Pointer to the report item of interest in a \ref HID_ReportInfo_t ReportItem array.
 			 */
 			void USB_SetHIDReportItemInfo(uint8_t* ReportData,
-			                              HID_ReportItem_t* const ReportItem) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
+			                              HID_ReportItem_t* const ReportItem) ATTR_NON_NULL_PTR_ARG(1);
 
 			/** Retrieves the size of a given HID report in bytes from its Report ID.
 			 *
@@ -331,6 +331,10 @@
 			 *  \ref HID_ReportInfo_t structure. This can be used to filter only those items the application will be using, so that
 			 *  no RAM is wasted storing the attributes for report items which will never be referenced by the application.
 			 *
+			 *  Report item pointers passed to this callback function may be cached by the user application for later use
+			 *  when processing report items. This provides faster report processing in the user application than would
+			 *  a search of the entire parsed report item table for each received or sent report.
+			 *
 			 *  \param[in] CurrentItem  Pointer to the current report item for user checking.
 			 *
 			 *  \return Boolean \c true if the item should be stored into the \ref HID_ReportInfo_t structure, \c false if
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index b5993fd7710733ff21f1402ac10f36cbc61096b0..ae9976c832da96b00d43695a9168a8bd321d008b 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -80,6 +80,9 @@
   *   - Fixed USB_USBTask not being called internally in stream transfers between packets when Partial Stream Transfers are used
   *   - Fixed swapped TWI_ADDRESS_READ and TWI_ADDRESS_WRITE values
   *   - Fixed TWI_ReadPacket() not releasing the TWI bus on read completion
+  *   - Fixed optimization error in the HID Parser item value USB_SetHIDReportItemInfo() and USB_GetHIDReportItemInfo() routines if the report item was
+  *     \c NULL (which should be allowable according to the API)
+  *   - Fixed HID Parser CALLBACK_HIDParser_FilterHIDReportItem() callback function not being passed a cacheable report item pointer
   *  - Library Applications:
   *   - Fixed incorrect signature in the CDC and DFU class bootloaders for the ATMEGA8U2
   *   - Fixed KeyboardHost and KeyboardHostWithParser demos displaying incorrect values when numerical keys were pressed
diff --git a/LUFA/ManPages/FutureChanges.txt b/LUFA/ManPages/FutureChanges.txt
index 701938baff0f8382b905b06fa27b0001455beba6..b3527b071d322760bfe5c10ca9eaa66446f8e5f8 100644
--- a/LUFA/ManPages/FutureChanges.txt
+++ b/LUFA/ManPages/FutureChanges.txt
@@ -27,6 +27,8 @@
   *      -# Add additional standard request helper functions to host mode
   *      -# Add Dataflash_SendCommand()
   *      -# Make HOST_DEVICE_SETTLE_DELAY_MS a global variable that can be changed
+  *      -# Add MANDATORY_EVENT_FUNCTIONS compile time option
+  *      -# Add watchdog support to the library and apps/bootloaders
   *  - Documentation/Support
   *      -# Add detailed overviews of how each demo works
   *      -# Add board overviews