diff --git a/Demos/Device/ClassDriver/GenericHID/Descriptors.c b/Demos/Device/ClassDriver/GenericHID/Descriptors.c
index 0ce3c560eafe181ade7176d59f9ba49602eec9cf..abc360bf6ac1574dfcd934f56b20e111b5e24f70 100644
--- a/Demos/Device/ClassDriver/GenericHID/Descriptors.c
+++ b/Demos/Device/ClassDriver/GenericHID/Descriptors.c
@@ -51,8 +51,8 @@ USB_Descriptor_HIDReport_Datatype_t PROGMEM GenericReport[] =
 	0x09, 0x02,           /*   Usage (Vendor Defined)                        */
 	0x75, 0x08,           /*   Report Size (8)                               */
 	0x95, GENERIC_REPORT_SIZE, /*   Report Count (GENERIC_REPORT_SIZE)       */
-	0x15, 0x00,           /*   Logical Minimum (0)                           */
-	0x25, 0xff,           /*   Logical Maximum (255)                         */
+	0x15, 0x80,           /*   Logical Minimum (-128)                        */
+	0x25, 0x7F,           /*   Logical Maximum (127)                         */
 	0x81, 0x02,           /*   Input (Data, Variable, Absolute)              */
 	0x09, 0x03,           /*   Usage (Vendor Defined)                        */
 	0x75, 0x08,           /*   Report Size (8)                               */
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index cbe4c59ea22dc29f303a099e63cba13910b242a7..c2b7d5edbf2d7166ab9e0a76053989dec2f70543 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -60,6 +60,7 @@
   *  - Fixed USB Pad regulator not being disabled on some AVR models when the USB_OPT_REG_DISABLED option is used
   *  - Fixed Host mode to Device mode UID change not causing a USB Disconnect event when a device was connected
   *  - Fixed Mouse/Keyboard demos not performing the correct arithmetic on the Idle period at the right times (thanks to Brian Dickman)
+  *  - Fixed GenericHID failing HID class tests due to incorrect Logical Minimum and Logical Maximum values (thanks to S�ren Greiner)
   *
   *
   *  \section Sec_ChangeLog090605 Version 090605
diff --git a/Projects/Magstripe/Descriptors.c b/Projects/Magstripe/Descriptors.c
index de704ae15edaf5a26a9f351cd2c1e4facc9fde8e..68c98ed34b147256532fa957c387803b5b7a8774 100644
--- a/Projects/Magstripe/Descriptors.c
+++ b/Projects/Magstripe/Descriptors.c
@@ -154,7 +154,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 			.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | KEYBOARD_EPNUM),
 			.Attributes             = EP_TYPE_INTERRUPT,
 			.EndpointSize           = KEYBOARD_EPSIZE,
-			.PollingIntervalMS      = 0x04
+			.PollingIntervalMS      = 0x01
 		},
 };
 
diff --git a/Projects/Magstripe/Magstripe.c b/Projects/Magstripe/Magstripe.c
index 95c81f34294526bc00e9006d741a67eb8819bf9d..1151735bd1a107a5fa56dac50f40759c1bc7b970 100644
--- a/Projects/Magstripe/Magstripe.c
+++ b/Projects/Magstripe/Magstripe.c
@@ -130,6 +130,7 @@ void ReadMagstripeData(void)
 			bool ClockPinLevel     = ((Magstripe_LCL & TrackInfo[Track].ClockMask) != 0);
 			bool ClockLevelChanged = (((Magstripe_LCL ^ Magstripe_Prev) & TrackInfo[Track].ClockMask) != 0);
 		
+			/* Sample on rising clock edges */
 			if (ClockPinLevel && ClockLevelChanged)
 			  BitBuffer_StoreNextBit(&TrackDataBuffers[Track], DataPinLevel);
 		}
@@ -171,15 +172,15 @@ uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const H
 	static bool IsKeyReleaseReport;
 	static bool IsNewlineReport;
 
-	BitBuffer_t*               Buffer         = NULL;
 	USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;
+	BitBuffer_t*               Buffer         = NULL;
 	
-	/* Key reports must be interleaved with 0 Key Code reports to release the keys, or repeated keys will be ignored */
+	/* Key reports must be interleaved with key release reports, or repeated keys will be ignored */
 	IsKeyReleaseReport = !IsKeyReleaseReport;	
 
 	if (IsKeyReleaseReport)
 	{
-		KeyboardReport->KeyCode = 0;
+		KeyboardReport->KeyCode = KEY_NONE;
 	}
 	else if (IsNewlineReport)
 	{
@@ -188,6 +189,7 @@ uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const H
 	}
 	else
 	{
+		/* Read out tracks in ascending order - when each track buffer is empty, progress to next buffer */
 		if (TrackDataBuffers[0].Elements)
 		  Buffer = &TrackDataBuffers[0];
 		else if (TrackDataBuffers[1].Elements)
@@ -199,7 +201,7 @@ uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const H
 
 		KeyboardReport->KeyCode = BitBuffer_GetNextBit(Buffer) ? KEY_1 : KEY_0;
 		
-		/* If buffer now empty, next report must be a newline to seperate track data */
+		/* If current track buffer now empty, next report must be a newline to seperate track data */
 		if (!(Buffer->Elements))
 		  IsNewlineReport = true;
 	}
diff --git a/Projects/Magstripe/Magstripe.h b/Projects/Magstripe/Magstripe.h
index 1009e32e83798a1b40983e9e2ddf11b0b6e5a344..93e593e7c4d21c1e3ccaad3a773dfb40c005d485 100644
--- a/Projects/Magstripe/Magstripe.h
+++ b/Projects/Magstripe/Magstripe.h
@@ -51,6 +51,9 @@
 		#include <LUFA/Drivers/USB/Class/HID.h>
 
 	/* Macros: */
+		/** HID keyboard keycode to indicate that no is currently pressed. */
+		#define KEY_NONE           0
+	
 		/** HID keyboard keycode to indicate that the "1" key is currently pressed. */
 		#define KEY_1              30
 
diff --git a/Projects/MissileLauncher/MissileLauncher.c b/Projects/MissileLauncher/MissileLauncher.c
index 046c132f062241d0c0140539a61c12ced9203001..88902cf2e7f9cfa94daed74405f05351dea77278 100644
--- a/Projects/MissileLauncher/MissileLauncher.c
+++ b/Projects/MissileLauncher/MissileLauncher.c
@@ -137,8 +137,9 @@ void SetupHardware(void)
 void Read_Joystick_Status(void)
 {
 	uint8_t JoyStatus_LCL = Joystick_GetStatus();
+	uint8_t Buttons_LCL   = Buttons_GetStatus();
 
-	if (BUTTONS_BUTTON1 && Buttons_GetStatus())
+	if (Buttons_LCL & BUTTONS_BUTTON1)
 	  Send_Command(CMD_FIRE);
 	else if (JoyStatus_LCL & JOY_UP)
 	  Send_Command(CMD_UP);
@@ -285,7 +286,7 @@ void WriteNextReport(uint8_t* ReportOUTData, uint16_t ReportLength)
 		/* Class specific request to send a HID report to the device */
 		USB_ControlRequest = (USB_Request_Header_t)
 			{
-				.bmRequestType = 0x21,
+				.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),
 				.bRequest      = 0x09,
 				.wValue        = 0x02,
 				.wIndex        = 0x01,