diff --git a/LUFA/Drivers/USB/Class/Device/HID.c b/LUFA/Drivers/USB/Class/Device/HID.c
index 4c13436e073b72f4acf92b32b60be8a3a86c7afa..bfe97ffbb6161d92f54574496023c4d0cfd490f6 100644
--- a/LUFA/Drivers/USB/Class/Device/HID.c
+++ b/LUFA/Drivers/USB/Class/Device/HID.c
@@ -150,8 +150,6 @@ bool HID_Device_ConfigureEndpoints(USB_ClassInfo_HID_Device_t* const HIDInterfac
 		
 void HID_Device_USBTask(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)
 {
-	static uint8_t PreviousReportINData[HID_MAX_REPORT_SIZE];
-
 	if (USB_DeviceState != DEVICE_STATE_Configured)
 	  return;
 
@@ -167,10 +165,10 @@ void HID_Device_USBTask(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)
 
 		ReportINSize  = CALLBACK_HID_Device_CreateHIDReport(HIDInterfaceInfo, &ReportID, ReportINData);
 
-		bool StatesChanged     = (memcmp(ReportINData, PreviousReportINData, ReportINSize) != 0);
+		bool StatesChanged     = (memcmp(ReportINData, HIDInterfaceInfo->State.PreviousReportINData, ReportINSize) != 0);
 		bool IdlePeriodElapsed = (HIDInterfaceInfo->State.IdleCount && !(HIDInterfaceInfo->State.IdleMSRemaining));
 		
-		memcpy(PreviousReportINData, ReportINData, ReportINSize);
+		memcpy(HIDInterfaceInfo->State.PreviousReportINData, ReportINData, ReportINSize);
 
 		if (ReportINSize && (StatesChanged || IdlePeriodElapsed))
 		{
diff --git a/LUFA/Drivers/USB/Class/Device/HID.h b/LUFA/Drivers/USB/Class/Device/HID.h
index 61f43a141f80631082c93fc06e8ba98de8f2cf2c..ae68134fe3d40facafbfb957e78929ae0b8fc4a1 100644
--- a/LUFA/Drivers/USB/Class/Device/HID.h
+++ b/LUFA/Drivers/USB/Class/Device/HID.h
@@ -88,7 +88,9 @@
 					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 */
 					uint16_t IdleMSRemaining; /**< Total number of mS remaining before the idle period elapsed - this should be
-											   *   decremented by the user application if non-zero each millisecond */			
+											   *   decremented by the user application if non-zero each millisecond */	
+
+					uint8_t PreviousReportINData[HID_MAX_REPORT_SIZE]; /**< Previously generated report from the HID interface */
 				} State; /**< State data for the USB class interface within the device. All elements in this section
 				          *   are reset to their defaults when the interface is enumerated.
 				          */