diff --git a/Demos/Device/ClassDriver/MIDI/MIDI.c b/Demos/Device/ClassDriver/MIDI/MIDI.c
index 8881d1dc7f16e87d5841f87481f50259ce375b5f..bb4eaf2df1118eaab7489f39e1afed2f43ede276 100644
--- a/Demos/Device/ClassDriver/MIDI/MIDI.c
+++ b/Demos/Device/ClassDriver/MIDI/MIDI.c
@@ -63,6 +63,9 @@ int main(void)
 	for (;;)
 	{
 		CheckJoystickMovement();
+		
+		USB_MIDI_EventPacket_t DummyMIDIEvent;
+		USB_MIDI_ReceiveEventPacket(&Keyboard_MIDI_Interface, &DummyMIDIEvent);
 	
 		USB_MIDI_USBTask(&Keyboard_MIDI_Interface);
 		USB_USBTask();
diff --git a/Demos/Device/LowLevel/CDC/CDC.h b/Demos/Device/LowLevel/CDC/CDC.h
index 821ba8f960d6adad39c3a455c2e9e34114eebbd4..a8f7199abee45579f820cea31d6fb4bad4c86464 100644
--- a/Demos/Device/LowLevel/CDC/CDC.h
+++ b/Demos/Device/LowLevel/CDC/CDC.h
@@ -180,6 +180,4 @@
 		void EVENT_USB_ConfigurationChanged(void);
 		void EVENT_USB_UnhandledControlPacket(void);
 
-		void UpdateStatus(uint8_t CurrentStatus);
-
 #endif
diff --git a/Demos/Device/LowLevel/GenericHID/GenericHID.h b/Demos/Device/LowLevel/GenericHID/GenericHID.h
index e48bf1df33117da20c4eab8cc19a8cf36460f045..fbd0a7f8d09b7f3f0d219cae5341fef58e1d7538 100644
--- a/Demos/Device/LowLevel/GenericHID/GenericHID.h
+++ b/Demos/Device/LowLevel/GenericHID/GenericHID.h
@@ -68,15 +68,6 @@
 
 		/** 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)
-		
-	/* Enums: */
-		/** Enum for the possible status codes for passing to the UpdateStatus() function. */
-		enum GenericHID_StatusCodes_t
-		{
-			Status_USBNotReady    = 0, /**< USB is not ready (disconnected from a USB host) */
-			Status_USBEnumerating = 1, /**< USB interface is enumerating */
-			Status_USBReady       = 2, /**< USB interface is connected and ready */
-		};
 
 	/* Function Prototypes: */
 		void SetupHardware(void);
diff --git a/Demos/Device/LowLevel/MIDI/MIDI.c b/Demos/Device/LowLevel/MIDI/MIDI.c
index 856f7dbe9488210f41158ffee491dae2a13235e9..c74d8d5341b45f6e90e248767076a500c86ac30f 100644
--- a/Demos/Device/LowLevel/MIDI/MIDI.c
+++ b/Demos/Device/LowLevel/MIDI/MIDI.c
@@ -122,6 +122,9 @@ void MIDI_Task(void)
 	/* Check if endpoint is ready to be written to */
 	if (Endpoint_IsINReady())
 	{
+		uint8_t MIDICommand = 0;
+		uint8_t MIDIPitch;
+	
 		/* Get current joystick mask, XOR with previous to detect joystick changes */
 		uint8_t JoystickStatus  = Joystick_GetStatus();
 		uint8_t JoystickChanges = (JoystickStatus ^ PrevJoystickStatus);
@@ -130,20 +133,55 @@ void MIDI_Task(void)
 		uint8_t Channel = ((Buttons_GetStatus() & BUTTONS_BUTTON1) ? MIDI_CHANNEL(10) : MIDI_CHANNEL(1));
 
 		if (JoystickChanges & JOY_LEFT)
-		  SendMIDINoteChange(0x3C, (JoystickStatus & JOY_LEFT), 0, Channel);
+		{
+			MIDICommand = ((JoystickStatus & JOY_LEFT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);
+			MIDIPitch   = 0x3C;
+		}
 
 		if (JoystickChanges & JOY_UP)
-		  SendMIDINoteChange(0x3D, (JoystickStatus & JOY_UP), 0, Channel);
+		{
+			MIDICommand = ((JoystickStatus & JOY_UP)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);
+			MIDIPitch   = 0x3D;
+		}
 
 		if (JoystickChanges & JOY_RIGHT)
-		  SendMIDINoteChange(0x3E, (JoystickStatus & JOY_RIGHT), 0, Channel);
-
+		{
+			MIDICommand = ((JoystickStatus & JOY_RIGHT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);
+			MIDIPitch   = 0x3E;
+		}
+		
 		if (JoystickChanges & JOY_DOWN)
-		  SendMIDINoteChange(0x3F, (JoystickStatus & JOY_DOWN), 0, Channel);
+		{
+			MIDICommand = ((JoystickStatus & JOY_DOWN)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);
+			MIDIPitch   = 0x3F;
+		}
 
 		if (JoystickChanges & JOY_PRESS)
-		  SendMIDINoteChange(0x3B, (JoystickStatus & JOY_PRESS), 0, Channel);
-
+		{
+			MIDICommand = ((JoystickStatus & JOY_PRESS)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);
+			MIDIPitch   = 0x3B;
+		}
+
+		/* Check if a MIDI command is to be sent */
+		if (MIDICommand)
+		{
+			USB_MIDI_EventPacket_t MIDIEvent = (USB_MIDI_EventPacket_t)
+				{
+					.CableNumber = 0,
+					.Command     = MIDICommand,
+					
+					.Data1       = (MIDICommand << 4) | Channel,
+					.Data2       = MIDIPitch,
+					.Data3       = MIDI_STANDARD_VELOCITY,			
+				};
+				
+			/* Write the MIDI event packet to the endpoint */
+			Endpoint_Write_Stream_LE(&MIDIEvent, sizeof(MIDIEvent));
+		
+			/* Send the data in the endpoint to the host */
+			Endpoint_ClearIN();
+		}
+		
 		/* Save previous joystick value for next joystick change detection */
 		PrevJoystickStatus = JoystickStatus;
 	}
@@ -155,31 +193,3 @@ void MIDI_Task(void)
 	if (Endpoint_IsOUTReceived())
 	  Endpoint_ClearOUT();
 }
-
-/** Sends a MIDI note change event (note on or off) to the MIDI output jack, on the given virtual cable ID and channel.
- *
- *  \param Pitch    Pitch of the note to turn on or off
- *  \param OnOff    Set to true if the note is on (being held down), or false otherwise
- *  \param CableID  ID of the virtual cable to send the note change to
- *  \param Channel  MIDI channel number to send the note change event to
- */
-void SendMIDINoteChange(const uint8_t Pitch, const bool OnOff, const uint8_t CableID, const uint8_t Channel)
-{
-	/* If endpoint ready for more data, abort */
-	if (!(Endpoint_IsReadWriteAllowed()))
-	  return;
-
-	/* Check if the message should be a Note On or Note Off command */
-	uint8_t Command = ((OnOff)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);
-
-	/* Write the Packet Header to the endpoint */
-	Endpoint_Write_Byte((CableID << 4) | (Command >> 4));
-
-	/* Write the Note On/Off command with the specified channel, pitch and velocity */
-	Endpoint_Write_Byte(Command | Channel);
-	Endpoint_Write_Byte(Pitch);
-	Endpoint_Write_Byte(MIDI_STANDARD_VELOCITY);
-	
-	/* Send the data in the endpoint to the host */
-	Endpoint_ClearIN();
-}
diff --git a/Demos/Device/LowLevel/MIDI/MIDI.h b/Demos/Device/LowLevel/MIDI/MIDI.h
index 0e8dde8b276822701762296ec2143042f596805a..1558501a7ca6e4aa11c1a76c75ce5cef5a299aff 100644
--- a/Demos/Device/LowLevel/MIDI/MIDI.h
+++ b/Demos/Device/LowLevel/MIDI/MIDI.h
@@ -52,10 +52,10 @@
 
    /* Macros: */
 		/** MIDI command for a note on (activation) event */
-		#define MIDI_COMMAND_NOTE_ON         0x90
+		#define MIDI_COMMAND_NOTE_ON         0x09
 
 		/** MIDI command for a note off (deactivation) event */
-		#define MIDI_COMMAND_NOTE_OFF        0x80
+		#define MIDI_COMMAND_NOTE_OFF        0x08
 
 		/** Standard key press velocity value used for all note events, as no pressure sensor is mounted */
 		#define MIDI_STANDARD_VELOCITY       64
@@ -78,6 +78,18 @@
 
 		/** 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)
+
+	/* Type Defines: */
+		/** Type define for a USB MIDI event packet, used to encapsulate sent and received MIDI messages from a USB MIDI interface. */
+		typedef struct
+		{
+			unsigned char Command     : 4; /**< MIDI command being sent or received in the event packet */
+			unsigned char CableNumber : 4; /**< Virtual cable number of the event being sent or received in the given MIDI interface */
+			
+			uint8_t Data1; /**< First byte of data in the MIDI event */
+			uint8_t Data2; /**< Second byte of data in the MIDI event */
+			uint8_t Data3; /**< Third byte of data in the MIDI event */		
+		} USB_MIDI_EventPacket_t;
 		
    /* Function Prototypes: */
 		void SetupHardware(void);
@@ -86,9 +98,5 @@
 		void EVENT_USB_Connect(void);
 		void EVENT_USB_Disconnect(void);
 		void EVENT_USB_ConfigurationChanged(void);
-
-		void SendMIDINoteChange(const uint8_t Pitch, const bool OnOff,
-		                        const uint8_t CableID, const uint8_t Channel);		
-		void UpdateStatus(uint8_t CurrentStatus);
 		
 #endif
diff --git a/Demos/Device/LowLevel/Mouse/Mouse.h b/Demos/Device/LowLevel/Mouse/Mouse.h
index b9460b34764de03f1dcd726a20d19264a98e4579..8ff8b8fc341a34ed1e946d07795c8a50b4ed6f80 100644
--- a/Demos/Device/LowLevel/Mouse/Mouse.h
+++ b/Demos/Device/LowLevel/Mouse/Mouse.h
@@ -107,6 +107,5 @@
 		void EVENT_USB_UnhandledControlPacket(void);
 
 		void CreateMouseReport(USB_MouseReport_Data_t* ReportData);
-		void UpdateStatus(uint8_t CurrentStatus);
 
 #endif
diff --git a/Demos/Device/LowLevel/USBtoSerial/USBtoSerial.h b/Demos/Device/LowLevel/USBtoSerial/USBtoSerial.h
index 1a4a1cb67ba1c0d98943064d4c8ffc776f887c34..51c47c94329b6769c6f53f283084c7d9e6ae5c66 100644
--- a/Demos/Device/LowLevel/USBtoSerial/USBtoSerial.h
+++ b/Demos/Device/LowLevel/USBtoSerial/USBtoSerial.h
@@ -172,14 +172,6 @@
 			Parity_Mark         = 3, /**< Mark parity bit mode on each frame */
 			Parity_Space        = 4, /**< Space parity bit mode on each frame */
 		};
-
-		/** Enum for the possible status codes for passing to the UpdateStatus() function. */
-		enum USBtoSerial_StatusCodes_t
-		{
-			Status_USBNotReady    = 0, /**< USB is not ready (disconnected from a USB host) */
-			Status_USBEnumerating = 1, /**< USB interface is enumerating */
-			Status_USBReady       = 2, /**< USB interface is connected and ready */
-		};
 		
 	/* Function Prototypes: */
 		void SetupHardware(void);
diff --git a/Demos/Host/Incomplete/BluetoothHost/BluetoothHost.h b/Demos/Host/Incomplete/BluetoothHost/BluetoothHost.h
index e78e392b746cff0b488d81f0081efa413c7db634..890b3f155ce992a7986a6d73d02c0e0767268c17 100644
--- a/Demos/Host/Incomplete/BluetoothHost/BluetoothHost.h
+++ b/Demos/Host/Incomplete/BluetoothHost/BluetoothHost.h
@@ -68,19 +68,6 @@
 
 	/* Task Definitions: */
 		void Bluetooth_Management_Task(void);
-
-	/* Enums: */
-		/** Enum for the possible status codes for passing to the UpdateStatus() function. */
-		enum MouseHostViaInt_StatusCodes_t
-		{
-			Status_USBNotReady        = 0, /**< USB is not ready (disconnected from a USB device) */
-			Status_USBEnumerating     = 1, /**< USB interface is enumerating */
-			Status_USBReady           = 2, /**< USB interface is connected and ready */
-			Status_EnumerationError   = 3, /**< Software error while enumerating the attached USB device */
-			Status_HardwareError      = 4, /**< Hardware error while enumerating the attached USB device */
-			Status_BluetoothConnected = 5, /**< Bluetooth stack connected to device and idle */
-			Status_BluetoothBusy      = 6, /**< Bluetooth stack busy */ 
-		};
 		
 	/* Event Handlers: */
 		void EVENT_USB_DeviceAttached(void);