diff --git a/Demos/Device/ClassDriver/Keyboard/Keyboard.c b/Demos/Device/ClassDriver/Keyboard/Keyboard.c
index 4b295a2a876bfb5e8d84acbef905d86032fd8de9..7e583486805dfe8c00d3c3f69b1d0d7ba822fa57 100644
--- a/Demos/Device/ClassDriver/Keyboard/Keyboard.c
+++ b/Demos/Device/ClassDriver/Keyboard/Keyboard.c
@@ -147,6 +147,8 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 
 	uint8_t UsedKeyCodes = 0;
 	
+	KeyboardReport->Modifier = HID_KEYBOARD_MODIFER_LEFTSHIFT;
+	
 	if (JoyStatus_LCL & JOY_UP)
 	  KeyboardReport->KeyCode[UsedKeyCodes++] = 0x04; // A
 	else if (JoyStatus_LCL & JOY_DOWN)
diff --git a/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c b/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c
index dcdf88682bb81554a69a326d07b132723deb89d0..8e91d122939aebed3d03df015494f1c7657a4781 100644
--- a/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c
+++ b/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c
@@ -180,6 +180,8 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 		if (!(ButtonStatus_LCL & BUTTONS_BUTTON1))
 		  return 0;
 		
+		KeyboardReport->Modifier = HID_KEYBOARD_MODIFER_LEFTSHIFT;
+
 		if (JoyStatus_LCL & JOY_UP)
 		  KeyboardReport->KeyCode[0] = 0x04; // A
 		else if (JoyStatus_LCL & JOY_DOWN)
diff --git a/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c b/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c
index 683ab66f7c6a6b54c55137b2ffca33e6cdd8393c..0f0d62469052de18ff170c88344e8fff567e4799 100644
--- a/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c
+++ b/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c
@@ -192,6 +192,8 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 	uint8_t JoyStatus_LCL    = Joystick_GetStatus();
 	uint8_t ButtonStatus_LCL = Buttons_GetStatus();
 
+	KeyboardReport->Modifier = HID_KEYBOARD_MODIFER_LEFTSHIFT;
+
 	if (JoyStatus_LCL & JOY_UP)
 	  KeyboardReport->KeyCode[0] = 0x04; // A
 	else if (JoyStatus_LCL & JOY_DOWN)
diff --git a/Demos/Device/LowLevel/Keyboard/Keyboard.c b/Demos/Device/LowLevel/Keyboard/Keyboard.c
index 28a3d407b1cc011fd8c418e09be40e3651ca7704..1d8b8ff54a2d3aa82f1ec589749e98e1b38795f0 100644
--- a/Demos/Device/LowLevel/Keyboard/Keyboard.c
+++ b/Demos/Device/LowLevel/Keyboard/Keyboard.c
@@ -266,6 +266,9 @@ void CreateKeyboardReport(USB_KeyboardReport_Data_t* ReportData)
 	/* Clear the report contents */
 	memset(ReportData, 0, sizeof(USB_KeyboardReport_Data_t));
 	
+	/* Make sent key uppercase by indicating that the left shift key is pressed */
+	ReportData->Modifier = KEYBOARD_MODIFER_LEFTSHIFT;
+	
 	if (JoyStatus_LCL & JOY_UP)
 	  ReportData->KeyCode[UsedKeyCodes++] = 0x04; // A
 	else if (JoyStatus_LCL & JOY_DOWN)
diff --git a/Demos/Device/LowLevel/Keyboard/Keyboard.h b/Demos/Device/LowLevel/Keyboard/Keyboard.h
index 0613a66623ee2829fab74c3768ce75d5df023aa5..6b29be8c1cc877710adc0ce80d1ab3059ddbab73 100644
--- a/Demos/Device/LowLevel/Keyboard/Keyboard.h
+++ b/Demos/Device/LowLevel/Keyboard/Keyboard.h
@@ -54,37 +54,61 @@
 
 	/* Macros: */
 		/** Idle period indicating that reports should be sent only when the inputs have changed */
-		#define HID_IDLE_CHANGESONLY      0
+		#define HID_IDLE_CHANGESONLY        0
 
 		/** HID Class specific request to get the next HID report from the device. */
-		#define REQ_GetReport             0x01
+		#define REQ_GetReport               0x01
 
 		/** HID Class specific request to get the idle timeout period of the device. */
-		#define REQ_GetIdle               0x02
+		#define REQ_GetIdle                 0x02
 
 		/** HID Class specific request to send the next HID report to the device. */
-		#define REQ_SetReport             0x09
+		#define REQ_SetReport               0x09
 
 		/** HID Class specific request to set the idle timeout period of the device. */
-		#define REQ_SetIdle               0x0A
+		#define REQ_SetIdle                 0x0A
 
 		/** HID Class specific request to get the current HID protocol in use, either report or boot. */
-		#define REQ_GetProtocol           0x03
+		#define REQ_GetProtocol             0x03
 
 		/** HID Class specific request to set the current HID protocol in use, either report or boot. */
-		#define REQ_SetProtocol           0x0B
+		#define REQ_SetProtocol             0x0B
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's left control key is currently pressed. */
+		#define KEYBOARD_MODIFER_LEFTCTRL   (1 << 0)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's left shift key is currently pressed. */
+		#define KEYBOARD_MODIFER_LEFTSHIFT  (1 << 1)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's left alt key is currently pressed. */
+		#define KEYBOARD_MODIFER_LEFTALT    (1 << 2)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's left GUI key is currently pressed. */
+		#define KEYBOARD_MODIFER_LEFTGUI    (1 << 3)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's right control key is currently pressed. */
+		#define KEYBOARD_MODIFER_RIGHTCTRL  (1 << 4)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's right shift key is currently pressed. */
+		#define KEYBOARD_MODIFER_RIGHTSHIFT (1 << 5)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's right alt key is currently pressed. */
+		#define KEYBOARD_MODIFER_RIGHTALT   (1 << 6)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's right GUI key is currently pressed. */
+		#define KEYBOARD_MODIFER_RIGHTGUI   (1 << 7)
 
 		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
-		#define LEDMASK_USB_NOTREADY      LEDS_LED1
+		#define LEDMASK_USB_NOTREADY        LEDS_LED1
 
 		/** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */
-		#define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)
+		#define LEDMASK_USB_ENUMERATING     (LEDS_LED2 | LEDS_LED3)
 
 		/** LED mask for the library LED driver, to indicate that the USB interface is ready. */
-		#define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)
+		#define LEDMASK_USB_READY           (LEDS_LED2 | LEDS_LED4)
 
 		/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
-		#define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)
+		#define LEDMASK_USB_ERROR           (LEDS_LED1 | LEDS_LED3)
 
 	/* Type Defines: */
 		/** Type define for the keyboard HID report structure, for creating and sending HID reports to the host PC.
diff --git a/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c b/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c
index 0247971dcd91eb288778afe10a4a7439875550c0..d6c9b4d114008dc7073c24cc9555ce7c62350f84 100644
--- a/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c
+++ b/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c
@@ -221,6 +221,9 @@ void Keyboard_HID_Task(void)
 	/* Check if board button is not pressed, if so mouse mode enabled */
 	if (!(Buttons_GetStatus() & BUTTONS_BUTTON1))
 	{
+		/* Make sent key uppercase by indicating that the left shift key is pressed */
+		KeyboardReportData.Modifier = KEYBOARD_MODIFER_LEFTSHIFT;
+
 		if (JoyStatus_LCL & JOY_UP)
 		  KeyboardReportData.KeyCode[0] = 0x04; // A
 		else if (JoyStatus_LCL & JOY_DOWN)
diff --git a/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.h b/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.h
index ac9e855bef435aa26d29139f28b40d72312641b7..ff2831408e4b507d17614c34ba76b4c46ee13c6f 100644
--- a/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.h
+++ b/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.h
@@ -49,28 +49,52 @@
 		
 	/* Macros: */
 		/** HID Class specific request to get the next HID report from the device. */
-		#define REQ_GetReport             0x01
+		#define REQ_GetReport               0x01
 
 		/** HID Class specific request to send the next HID report to the device. */
-		#define REQ_SetReport             0x09
+		#define REQ_SetReport               0x09
 
 		/** HID Class specific request to get the current HID protocol in use, either report or boot. */
-		#define REQ_GetProtocol           0x03
+		#define REQ_GetProtocol             0x03
 
 		/** HID Class specific request to set the current HID protocol in use, either report or boot. */
-		#define REQ_SetProtocol           0x0B
+		#define REQ_SetProtocol             0x0B
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's left control key is currently pressed. */
+		#define KEYBOARD_MODIFER_LEFTCTRL   (1 << 0)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's left shift key is currently pressed. */
+		#define KEYBOARD_MODIFER_LEFTSHIFT  (1 << 1)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's left alt key is currently pressed. */
+		#define KEYBOARD_MODIFER_LEFTALT    (1 << 2)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's left GUI key is currently pressed. */
+		#define KEYBOARD_MODIFER_LEFTGUI    (1 << 3)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's right control key is currently pressed. */
+		#define KEYBOARD_MODIFER_RIGHTCTRL  (1 << 4)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's right shift key is currently pressed. */
+		#define KEYBOARD_MODIFER_RIGHTSHIFT (1 << 5)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's right alt key is currently pressed. */
+		#define KEYBOARD_MODIFER_RIGHTALT   (1 << 6)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's right GUI key is currently pressed. */
+		#define KEYBOARD_MODIFER_RIGHTGUI   (1 << 7)
 
 		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
-		#define LEDMASK_USB_NOTREADY      LEDS_LED1
+		#define LEDMASK_USB_NOTREADY        LEDS_LED1
 
 		/** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */
-		#define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)
+		#define LEDMASK_USB_ENUMERATING     (LEDS_LED2 | LEDS_LED3)
 
 		/** LED mask for the library LED driver, to indicate that the USB interface is ready. */
-		#define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)
+		#define LEDMASK_USB_READY           (LEDS_LED2 | LEDS_LED4)
 
 		/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
-		#define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)
+		#define LEDMASK_USB_ERROR           (LEDS_LED1 | LEDS_LED3)
 		
 	/* Type Defines: */
 		/** Type define for the keyboard HID report structure, for creating and sending HID reports to the host PC.
diff --git a/Demos/Device/LowLevel/MassStorage/Lib/SCSI.h b/Demos/Device/LowLevel/MassStorage/Lib/SCSI.h
index f983d2cf8c8a8a4268c0d72d699d3f0b62bb799d..a9b5248e46fabbcc7ab33a6bd031750d17b5c4ad 100644
--- a/Demos/Device/LowLevel/MassStorage/Lib/SCSI.h
+++ b/Demos/Device/LowLevel/MassStorage/Lib/SCSI.h
@@ -86,7 +86,7 @@
 			unsigned char _RESERVED1          : 7;
 			unsigned char Removable           : 1;
 			
-			uint8_t      Version;
+			uint8_t       Version;
 			
 			unsigned char ResponseDataFormat  : 4;
 			unsigned char _RESERVED2          : 1;
@@ -94,8 +94,8 @@
 			unsigned char TrmTsk              : 1;
 			unsigned char AERC                : 1;
 
-			uint8_t      AdditionalLength;
-			uint8_t      _RESERVED3[2];
+			uint8_t       AdditionalLength;
+			uint8_t       _RESERVED3[2];
 
 			unsigned char SoftReset           : 1;
 			unsigned char CmdQue              : 1;
@@ -106,9 +106,9 @@
 			unsigned char WideBus32Bit        : 1;
 			unsigned char RelAddr             : 1;
 			
-			uint8_t      VendorID[8];
-			uint8_t      ProductID[16];
-			uint8_t      RevisionID[4];
+			uint8_t       VendorID[8];
+			uint8_t       ProductID[16];
+			uint8_t       RevisionID[4];
 		} SCSI_Inquiry_Response_t;
 		
 		/** Type define for a SCSI sense structure to a SCSI REQUEST SENSE command. For details of the
@@ -126,13 +126,13 @@
 			unsigned char EOM                 : 1;
 			unsigned char FileMark            : 1;
 			
-			uint8_t      Information[4];
-			uint8_t      AdditionalLength;
-			uint8_t      CmdSpecificInformation[4];
-			uint8_t      AdditionalSenseCode;
-			uint8_t      AdditionalSenseQualifier;
-			uint8_t      FieldReplaceableUnitCode;
-			uint8_t      SenseKeySpecific[3];
+			uint8_t       Information[4];
+			uint8_t       AdditionalLength;
+			uint8_t       CmdSpecificInformation[4];
+			uint8_t       AdditionalSenseCode;
+			uint8_t       AdditionalSenseQualifier;
+			uint8_t       FieldReplaceableUnitCode;
+			uint8_t       SenseKeySpecific[3];
 		} SCSI_Request_Sense_Response_t;
 		
 	/* Function Prototypes: */
diff --git a/LUFA/Drivers/USB/Class/Common/HID.h b/LUFA/Drivers/USB/Class/Common/HID.h
index b6af8af302d92239311aa2097eabc8e2b94a4175..6f2d7c2226ff10515f2916020f5273fd743cc022 100644
--- a/LUFA/Drivers/USB/Class/Common/HID.h
+++ b/LUFA/Drivers/USB/Class/Common/HID.h
@@ -48,43 +48,67 @@
 
 	/* Macros: */
 		/** HID Class Specific Request to get the current HID report from the device. */
-		#define REQ_GetReport                0x01
+		#define REQ_GetReport                   0x01
 
 		/** HID Class Specific Request to get the current device idle count. */
-		#define REQ_GetIdle                  0x02
+		#define REQ_GetIdle                     0x02
 
 		/** HID Class Specific Request to set the current HID report to the device. */
-		#define REQ_SetReport                0x09
+		#define REQ_SetReport                   0x09
 
 		/** HID Class Specific Request to set the device's idle count. */
-		#define REQ_SetIdle                  0x0A
+		#define REQ_SetIdle                     0x0A
 
 		/** HID Class Specific Request to get the current HID report protocol mode. */
-		#define REQ_GetProtocol              0x03
+		#define REQ_GetProtocol                 0x03
 
 		/** HID Class Specific Request to set the current HID report protocol mode. */
-		#define REQ_SetProtocol              0x0B
+		#define REQ_SetProtocol                 0x0B
 
 		/** Descriptor header type value, to indicate a HID class HID descriptor. */
-		#define DTYPE_HID                    0x21
+		#define DTYPE_HID                       0x21
 		
 		/** Descriptor header type value, to indicate a HID class HID report descriptor. */
-		#define DTYPE_Report                 0x22
+		#define DTYPE_Report                    0x22
 		
 		/** Constant for the protocol value of a HID interface descriptor, indicating that the interface does not support
 		 *  any HID class boot protocol (see HID Class Specification).
 		 */
-		#define HID_NON_BOOT_PROTOCOL        0x00
+		#define HID_NON_BOOT_PROTOCOL           0x00
 
 		/** Constant for the protocol value of a HID interface descriptor, indicating that the interface supports the
 		 *  HID class Keyboard boot protocol (see HID Class Specification).
 		 */
-		#define HID_BOOT_KEYBOARD_PROTOCOL   0x01
+		#define HID_BOOT_KEYBOARD_PROTOCOL      0x01
 
 		/** Constant for the protocol value of a HID interface descriptor, indicating that the interface supports the
 		 *  HID class Mouse boot protocol (see HID Class Specification).
 		 */
-		#define HID_BOOT_MOUSE_PROTOCOL      0x02
+		#define HID_BOOT_MOUSE_PROTOCOL         0x02
+		
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's left control key is currently pressed. */
+		#define HID_KEYBOARD_MODIFER_LEFTCTRL   (1 << 0)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's left shift key is currently pressed. */
+		#define HID_KEYBOARD_MODIFER_LEFTSHIFT  (1 << 1)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's left alt key is currently pressed. */
+		#define HID_KEYBOARD_MODIFER_LEFTALT    (1 << 2)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's left GUI key is currently pressed. */
+		#define HID_KEYBOARD_MODIFER_LEFTGUI    (1 << 3)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's right control key is currently pressed. */
+		#define HID_KEYBOARD_MODIFER_RIGHTCTRL  (1 << 4)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's right shift key is currently pressed. */
+		#define HID_KEYBOARD_MODIFER_RIGHTSHIFT (1 << 5)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's right alt key is currently pressed. */
+		#define HID_KEYBOARD_MODIFER_RIGHTALT   (1 << 6)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's right GUI key is currently pressed. */
+		#define HID_KEYBOARD_MODIFER_RIGHTGUI   (1 << 7)
 
 	/* Type Defines: */
 		/** Enum for the different types of HID reports. */
@@ -122,7 +146,9 @@
 		/** Type define for a standard Boot Protocol Keyboard report */
 		typedef struct
 		{
-			uint8_t Modifier; /**< Keyboard modifier byte, indicating pressed modifier keys (such as Shift, Control, etc.) */
+			uint8_t Modifier; /**< Keyboard modifier byte, indicating pressed modifier keys (a combination of
+			                   *   HID_KEYBOARD_MODIFER_* masks)
+			                   */
 			uint8_t Reserved; /**< Reserved for OEM use, always set to 0 */
 			uint8_t KeyCode[6]; /**< Key codes of the currently pressed keys */
 		} USB_KeyboardReport_Data_t;
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index aaeaebd864e6e496598e044a1a90bbcc827d8410..e9469ff099826d38eaaf64a589b511e1d28dee90 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -23,6 +23,7 @@
   *  - New Webserver project, a RNDIS host USB webserver using the open source uIP TCP/IP network stack and FatFS library
   *  - New BOARD value option BOARD_NONE (equivelent to not specifying BOARD) which will remove all board hardware drivers which
   *    do not adversely affect the code operation (currently only the LEDs driver)
+  *  - Added keyboard modifier masks (HID_KEYBOARD_MODIFER_*) to the HID class driver and Keyboard demos
   *
   *  <b>Changed:</b>
   *  - Slowed down software USART carried PDI programming in the AVRISP project to prevent transmission errors