diff --git a/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c b/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c
index d31f94db011fdac6b4867ef7ccf7a5fc99d338fe..e41b7090bdcc6c6ef5952da23f357d103f9f2333 100644
--- a/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c
+++ b/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c
@@ -180,21 +180,8 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
 					  return;
 				}
 
-				/* Read in the LED report from the host */
-				uint8_t LEDStatus = Endpoint_Read_Byte();
-				uint8_t LEDMask   = LEDS_LED2;
-				
-				if (LEDStatus & KEYBOARD_LED_NUMLOCK)
-				  LEDMask |= LEDS_LED1;
-				
-				if (LEDStatus & KEYBOARD_LED_CAPSLOCK)
-				  LEDMask |= LEDS_LED3;
-
-				if (LEDStatus & KEYBOARD_LED_SCROLLLOCK)
-				  LEDMask |= LEDS_LED4;
-
-				/* Set the status LEDs to the current HID LED status */
-				LEDs_SetAllLEDs(LEDMask);
+				/* Read in and process the LED report from the host */
+				Keyboard_ProcessLEDReport(Endpoint_Read_Byte());
 
 				/* Clear the endpoint data */
 				Endpoint_ClearOUT();
@@ -206,6 +193,28 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
 	}
 }
 
+/** Processes a given Keyboard LED report from the host, and sets the board LEDs to match. Since the Keyboard
+ *  LED report can be sent through either the control endpoint (via a HID SetReport request) or the HID OUT
+ *  endpoint, the processing code is placed here to avoid duplicating it and potentially having different
+ *  behaviour depending on the method used to sent it.
+ */
+void Keyboard_ProcessLEDReport(const uint8_t LEDStatus)
+{
+	uint8_t LEDMask = LEDS_LED2;
+	
+	if (LEDStatus & KEYBOARD_LED_NUMLOCK)
+	  LEDMask |= LEDS_LED1;
+	
+	if (LEDStatus & KEYBOARD_LED_CAPSLOCK)
+	  LEDMask |= LEDS_LED3;
+
+	if (LEDStatus & KEYBOARD_LED_SCROLLLOCK)
+	  LEDMask |= LEDS_LED4;
+
+	/* Set the status LEDs to the current Keyboard LED status */
+	LEDs_SetAllLEDs(LEDMask);
+}
+
 /** Keyboard task. This generates the next keyboard HID report for the host, and transmits it via the
  *  keyboard IN endpoint when the host is ready for more data. Additionally, it processes host LED status
  *  reports sent to the device via the keyboard OUT reporting endpoint.
@@ -260,21 +269,8 @@ void Keyboard_HID_Task(void)
 	/* Check if Keyboard LED Endpoint Ready for Read/Write */
 	if (Endpoint_IsReadWriteAllowed())
 	{		
-		/* Read in the LED report from the host */
-		uint8_t LEDStatus = Endpoint_Read_Byte();
-		uint8_t LEDMask   = LEDS_LED2;
-		
-		if (LEDStatus & KEYBOARD_LED_NUMLOCK)
-		  LEDMask |= LEDS_LED1;
-		
-		if (LEDStatus & KEYBOARD_LED_CAPSLOCK)
-		  LEDMask |= LEDS_LED3;
-
-		if (LEDStatus & KEYBOARD_LED_SCROLLLOCK)
-		  LEDMask |= LEDS_LED4;
-
-		/* Set the status LEDs to the current Keyboard LED status */
-		LEDs_SetAllLEDs(LEDMask);
+		/* Read in and process the LED report from the host */
+		Keyboard_ProcessLEDReport(Endpoint_Read_Byte());
 
 		/* Handshake the OUT Endpoint - clear endpoint and ready for next report */
 		Endpoint_ClearOUT();
diff --git a/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.h b/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.h
index e5337f2ef483c15fdc2fc2908dc49b26ae0fce37..7fcec978ba3014adab6b06b2eb4a3e389e1b3f06 100644
--- a/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.h
+++ b/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.h
@@ -131,6 +131,7 @@
 			
 	/* Function Prototypes: */
 		void SetupHardware(void);
+		void Keyboard_ProcessLEDReport(const uint8_t LEDStatus);
 		void Keyboard_HID_Task(void);
 		void Mouse_HID_Task(void);