diff --git a/Demos/OTG/TestApp/TestApp.c b/Demos/OTG/TestApp/TestApp.c
index 4dc9b44e30727f930222fb80db251ee5cc35c8e6..dc10aadfc1db7fe5899703baa387c9d4dbf89388 100644
--- a/Demos/OTG/TestApp/TestApp.c
+++ b/Demos/OTG/TestApp/TestApp.c
@@ -36,19 +36,30 @@
 
 #include "TestApp.h"
 
-/* Scheduler Task List */
-TASK_LIST
-{
-	{ .Task = TestApp_CheckJoystick, .TaskStatus = TASK_RUN  },
-	{ .Task = TestApp_CheckButton  , .TaskStatus = TASK_RUN  },
-	{ .Task = TestApp_CheckTemp    , .TaskStatus = TASK_RUN  },
-	{ .Task = USB_USBTask          , .TaskStatus = TASK_RUN  },
-};
-
 /** Main program entry point. This routine configures the hardware required by the application, then
  *  starts the scheduler to run the application tasks.
  */
 int main(void)
+{
+	SetupHardware();
+	
+	puts_P(PSTR(ESC_RESET ESC_BG_WHITE ESC_INVERSE_ON ESC_ERASE_DISPLAY
+	       "LUFA Demo running.\r\n" ESC_INVERSE_OFF));
+
+	for (;;)
+	{
+		CheckJoystick();
+		CheckButton();
+		CheckTemperature();
+
+		/* Clear output-compare flag (logic 1 clears the flag) */
+		TIFR0 |= (1 << OCF0A);
+		
+		USB_USBTask();
+	}
+}
+
+void SetupHardware(void)
 {
 	/* Disable watchdog if enabled by bootloader/fuses */
 	MCUSR &= ~(1 << WDRF);
@@ -65,41 +76,20 @@ int main(void)
 	LEDs_Init();
 	Buttons_Init();
 	
-	/* Millisecond timer initialization, with output compare interrupt enabled */
+	/* Millisecond timer initialization */
 	OCR0A  = 0x7D;
 	TCCR0A = (1 << WGM01);
 	TCCR0B = ((1 << CS01) | (1 << CS00));
-	TIMSK0 = (1 << OCIE0A);
-	
-	/* Turn on interrupts */
-	sei();
-
-    /* Start-up message via USART */
-	puts_P(PSTR(ESC_RESET ESC_BG_WHITE ESC_INVERSE_ON ESC_ERASE_DISPLAY
-	       "LUFA Demo running.\r\n" ESC_INVERSE_OFF));
-
-	/* Scheduling - routine never returns, so put this last in the main function */
-	Scheduler_Start();
-}
-
-/** ISR for the timer 0 compare vector. This ISR fires once each millisecond, and increments the
- *  scheduler tick counter.
- */
-ISR(TIMER0_COMPA_vect, ISR_BLOCK)
-{
-	/* Scheduler test - increment scheduler tick counter once each millisecond */
-	Scheduler_TickCounter++;
 }
 
 /** Task responsible for checking the joystick position, and displaying the joystick position onto the
  *  board LEDs.
  */
-TASK(TestApp_CheckJoystick)
+void CheckJoystick(void)
 {
 	uint8_t JoyStatus_LCL = Joystick_GetStatus();
-	uint8_t LEDMask       = 0;
+	uint8_t LEDMask       = LEDS_NO_LEDS;
 		
-	/* Test of the Joystick - change a mask in response to joystick */
 	if (JoyStatus_LCL & JOY_UP)
 	  LEDMask |= LEDS_LED1;
 		
@@ -115,78 +105,61 @@ TASK(TestApp_CheckJoystick)
 	if (JoyStatus_LCL & JOY_PRESS)
 	  LEDMask  = LEDS_ALL_LEDS;
 
-	/* Test of LEDs - light up in response to joystick */
 	LEDs_SetAllLEDs(LEDMask);
 }
 
 /** Task responsible for checking the current temperature via the temperature sensor mounted on the
  *  board, and displaying it through the serial USART.
  */
-TASK(TestApp_CheckTemp)
+void CheckTemperature(void)
 {
-	static SchedulerDelayCounter_t DelayCounter = 10000; // Force immediate run on start-up
+	static uint16_t MSElapsed = 0;
+
+	if (TIFR0 & (1 << OCF0A))
+	  MSElapsed++;
 
 	/* Task runs every 10000 ticks, 10 seconds for this demo */
-	if (Scheduler_HasDelayElapsed(10000, &DelayCounter))
+	if (MSElapsed == 1000)
 	{
 		printf_P(PSTR("Current temperature: %d Degrees Celcius\r\n\r\n"),
 		         (int8_t)Temperature_GetTemperature());
 
-		/* Reset the delay counter, ready to count another 10000 tick interval */
-		Scheduler_ResetDelay(&DelayCounter);
+		MSElapsed = 0;
 	}	
 }
 
 /** Task responsible for checking the board's first button' position, and start-stopping other tasks and the USB
  *  interface in response to user joystick movements.
  */
-TASK(TestApp_CheckButton)
+void CheckButton(void)
 {
-	static SchedulerDelayCounter_t DelayCounter = 0;
-	static bool                    IsPressed;
-	static bool                    BlockingJoystickTask;
+	static uint16_t DebounceMSElapsed = 0;
+	static bool     IsPressed;
 	
-	/* Check if board button pressed (start USB) */
+	if (TIFR0 & (1 << OCF0A))
+	  DebounceMSElapsed++;
+
 	if (Buttons_GetStatus() & BUTTONS_BUTTON1)
 	{
-		/* Debounce - check 100 ticks later to see if button is still being pressed */
-		if ((IsPressed == false) && (Scheduler_HasDelayElapsed(100, &DelayCounter)))
+		if (!(IsPressed) && (DebounceMSElapsed == 100))
 		{
-			/* Set flag, indicating that current pressed state has been handled */
 			IsPressed = true;
-			
-			/* First start of the USB interface permanently blocks the joystick task */
-			if (BlockingJoystickTask == false)
-			{
-				Scheduler_SetTaskMode(TestApp_CheckJoystick, TASK_STOP);
-				BlockingJoystickTask = true;
-			}
 
-			/* Toggle USB interface */
 			if (USB_IsInitialized == true)
 			{
 				USB_ShutDown();
-
-				LEDs_SetAllLEDs(LEDS_LED1);
 				puts_P(PSTR(ESC_BG_WHITE "USB Power Off.\r\n"));
-				
-				Scheduler_SetTaskMode(TestApp_CheckTemp, TASK_RUN);
 			}
 			else
 			{
-				Scheduler_SetTaskMode(TestApp_CheckTemp, TASK_STOP);
-
-				LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED3);
-				puts_P(PSTR(ESC_BG_YELLOW "USB Power On.\r\n"));
-				
+				puts_P(PSTR(ESC_BG_YELLOW "USB Power On.\r\n"));				
 				USB_Init(USB_MODE_UID, USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL);
 			}
 		}
 	}
     else
     {
-		/* Board button not pressed - reset debounce interval counter and press handled flag */
-		Scheduler_ResetDelay(&DelayCounter);
+		DebounceMSElapsed = 0;
 		IsPressed = false;
 	}
 }
diff --git a/Demos/OTG/TestApp/TestApp.h b/Demos/OTG/TestApp/TestApp.h
index 7ae5663d91e7980e9d82fc7ba69edc0fcdf632bd..832b5f9777b7a128d550630c664fff97530cd032 100644
--- a/Demos/OTG/TestApp/TestApp.h
+++ b/Demos/OTG/TestApp/TestApp.h
@@ -42,20 +42,21 @@
 		#include <avr/wdt.h>
 		#include <avr/power.h>
 
-		#include <LUFA/Version.h>                               // Library Version Information
-		#include <LUFA/Drivers/USB/USB.h>                       // USB Functionality
-		#include <LUFA/Scheduler/Scheduler.h>                   // Simple scheduler for task management
-		#include <LUFA/Drivers/Misc/TerminalCodes.h>            // ANSI Terminal Escape Codes
-		#include <LUFA/Drivers/Peripheral/ADC.h>                // ADC driver
-		#include <LUFA/Drivers/Peripheral/SerialStream.h>       // USART Stream driver
-		#include <LUFA/Drivers/Board/Joystick.h>                // Joystick driver
-		#include <LUFA/Drivers/Board/LEDs.h>                    // LED driver
-		#include <LUFA/Drivers/Board/Buttons.h>                 // Board Buttons driver
-		#include <LUFA/Drivers/Board/Temperature.h>             // Temperature sensor driver
+		#include <LUFA/Version.h>
+		#include <LUFA/Drivers/USB/USB.h>
+		#include <LUFA/Drivers/Misc/TerminalCodes.h>
+		#include <LUFA/Drivers/Peripheral/ADC.h>
+		#include <LUFA/Drivers/Peripheral/SerialStream.h>
+		#include <LUFA/Drivers/Board/Joystick.h>
+		#include <LUFA/Drivers/Board/LEDs.h>
+		#include <LUFA/Drivers/Board/Buttons.h>
+		#include <LUFA/Drivers/Board/Temperature.h>
 		
-	/* Task Definitions: */
-		TASK(TestApp_CheckJoystick);
-		TASK(TestApp_CheckButton);
-		TASK(TestApp_CheckTemp);
+	/* Function Prototypes: */
+		void SetupHardware(void);
+		
+		void CheckJoystick(void);
+		void CheckButton(void);
+		void CheckTemperature(void);
 
 #endif
diff --git a/Demos/OTG/TestApp/TestApp.txt b/Demos/OTG/TestApp/TestApp.txt
index a0f1488ec46448b1134c18139e3617806cdbd1ac..540a59ce1e60a482d4997c0041f4bd9888713b3a 100644
--- a/Demos/OTG/TestApp/TestApp.txt
+++ b/Demos/OTG/TestApp/TestApp.txt
@@ -42,19 +42,13 @@
  *  Pressing the HWB will initiate the USB subsystem, enumerating
  *  the device (which has <b>no actual functionality beyond
  *  enumeration as a device or as a host in this demo</b>, and serves
- *  only to demonstrate the USB portion of the library). It will
- *  also suspend the joystick and temperature monitoring tasks.
+ *  only to demonstrate the USB portion of the library).
  * 
- *  Pressing the HWB a second time will turn off the USB system
- *  and resume the temperature printing task (but not the joystick
- *  monitoring task).
+ *  Pressing the HWB a second time will turn off the USB system.
  *
  *  When activated, the USB events will be printed through the
  *  serial USART.
  *
- *  When the USB subsystem is activated, the board LEDs will show
- *  the current USB status.
- *
  *  \section SSec_Options Project Options
  *
  *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.
diff --git a/Demos/OTG/TestApp/TestEvents.c b/Demos/OTG/TestApp/TestEvents.c
index ea7fa4b55f2d37f27ac86205b696133df0864b45..9b091472ff886a0648cd975f9d800b6425369049 100644
--- a/Demos/OTG/TestApp/TestEvents.c
+++ b/Demos/OTG/TestApp/TestEvents.c
@@ -79,9 +79,6 @@ void EVENT_USB_VBUSDisconnect(void)
 void EVENT_USB_Connect(void)
 {
 	puts_P(PSTR(EVENT_PREFIX "USB  +\r\n"));
-	LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED3 | LEDS_LED4);
-	
-	Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);
 }
 
 /**
@@ -90,24 +87,19 @@ void EVENT_USB_Connect(void)
  */
 void EVENT_USB_Disconnect(void)
 {
-	Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);
-
 	puts_P(PSTR(EVENT_PREFIX "USB  -\r\n"));
-	LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED3 | LEDS_LED3);
 }
 
 /** Event handler for the USB_Suspend event. When fired, the event is logged to the USART. */
 void EVENT_USB_Suspend(void)
 {
 	puts_P(PSTR(EVENT_PREFIX ESC_BG_YELLOW "USB Sleep\r\n"));
-	LEDs_SetAllLEDs(LEDS_ALL_LEDS);
 }
 
 /** Event handler for the USB_WakeUp event. When fired, the event is logged to the USART. */
 void EVENT_USB_WakeUp(void)
 {
 	puts_P(PSTR(EVENT_PREFIX ESC_BG_GREEN "USB Wakeup\r\n"));
-	LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED4);
 }
 
 /** Event handler for the USB_Reset event. When fired, the event is logged to the USART. */
@@ -129,8 +121,6 @@ void EVENT_USB_UIDChange(void)
 	  ModeStrPtr = PSTR("DEVICE");
 	else
 	  ModeStrPtr = PSTR("N/A");
-	
-	LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED3);
 
 	printf_P(PSTR(" -- New Mode %S\r\n"), ModeStrPtr);
 }
@@ -192,16 +182,12 @@ void EVENT_USB_UnhandledControlPacket(void)
 void EVENT_USB_ConfigurationChanged(void)
 {
 	puts_P(PSTR(EVENT_PREFIX "Configuration Number Changed\r\n"));
-
-	LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED4);
 }
 
 /** Event handler for the USB_DeviceAttached event. When fired, the event is logged to the USART. */
 void EVENT_USB_DeviceAttached(void)
 {
 	puts_P(PSTR(EVENT_PREFIX ESC_BG_GREEN "Device +\r\n"));
-
-	Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);
 }
 
 /** Event handler for the USB_DeviceUnattached event. When fired, the event is logged to the USART. */
diff --git a/Demos/OTG/TestApp/TestEvents.h b/Demos/OTG/TestApp/TestEvents.h
index 3642428f5c832df5c455305b3ef5b9b62a865a78..b82936fb47512cdd6534473246f781263ca1a189 100644
--- a/Demos/OTG/TestApp/TestEvents.h
+++ b/Demos/OTG/TestApp/TestEvents.h
@@ -39,12 +39,11 @@
 	/* Includes: */
 		#include <avr/io.h>
 
-		#include <LUFA/Common/Common.h>                          // Commonly used macros
-		#include <LUFA/Drivers/USB/USB.h>                        // USB Functionality
-		#include <LUFA/Drivers/Board/LEDs.h>                     // LED driver
-		#include <LUFA/Drivers/Peripheral/SerialStream.h>        // USART Stream driver
-		#include <LUFA/Drivers/Misc/TerminalCodes.h>             // ANSI Terminal Escape Codes
-		#include <LUFA/Scheduler/Scheduler.h>                    // Simple scheduler for task management
+		#include <LUFA/Common/Common.h>
+		#include <LUFA/Drivers/USB/USB.h>
+		#include <LUFA/Drivers/Board/LEDs.h>
+		#include <LUFA/Drivers/Peripheral/SerialStream.h>
+		#include <LUFA/Drivers/Misc/TerminalCodes.h>
 
 	/* Macros: */
 		/** Prefix sent through the USART when an even fires before the actual event message. */
diff --git a/Demos/OTG/TestApp/makefile b/Demos/OTG/TestApp/makefile
index a8bf4ac4244caa7f75645aa9ead7d1fb93ea0a1d..55b98815aa003678661262492b494f255508e008 100644
--- a/Demos/OTG/TestApp/makefile
+++ b/Demos/OTG/TestApp/makefile
@@ -126,7 +126,6 @@ LUFA_PATH = ../../..
 SRC = $(TARGET).c                                                 \
 	  TestEvents.c                                                \
 	  Descriptors.c                                               \
-	  $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
 	  $(LUFA_PATH)/LUFA/Drivers/Board/Temperature.c               \
 	  $(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c         \
 	  $(LUFA_PATH)/LUFA/Drivers/Peripheral/Serial.c               \
diff --git a/LUFA/Drivers/USB/Class/Device/Audio.h b/LUFA/Drivers/USB/Class/Device/Audio.h
index cbb6d791bbb0ce8ba238a83c5dbee324310a681d..230da4d9ef1feabf91140329eef62638c46adf3d 100644
--- a/LUFA/Drivers/USB/Class/Device/Audio.h
+++ b/LUFA/Drivers/USB/Class/Device/Audio.h
@@ -389,21 +389,21 @@
 		 *
 		 *  \return Boolean true if the endpoints were sucessfully configured, false otherwise
 		 */
-		bool     USB_Audio_ConfigureEndpoints(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
+		bool USB_Audio_ConfigureEndpoints(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
 
 		/** Processes incomming control requests from the host, that are directed to the given Audio class interface. This should be
 		 *  linked to the library \ref EVENT_USB_UnhandledControlPacket() event.
 		 *
 		 *  \param AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state.
 		 */
-		void     USB_Audio_ProcessControlPacket(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
+		void USB_Audio_ProcessControlPacket(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
 
 		/** General management task for a given Audio class interface, required for the correct operation of the interface. This should
 		 *  be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().
 		 *
 		 *  \param AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state.
 		 */
-		void     USB_Audio_USBTask(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
+		void USB_Audio_USBTask(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
 		
 		/** Reads the next 8-bit audio sample from the current audio interface.
 		 *
@@ -412,7 +412,7 @@
 		 *
 		 *  \return  Signed 8-bit audio sample from the audio interface
 		 */
-		int8_t   USB_Audio_ReadSample8(void);
+		int8_t USB_Audio_ReadSample8(void);
 
 		/** Reads the next 16-bit audio sample from the current audio interface.
 		 *
@@ -421,7 +421,7 @@
 		 *
 		 *  \return  Signed 16-bit audio sample from the audio interface
 		 */
-		int16_t  USB_Audio_ReadSample16(void);
+		int16_t USB_Audio_ReadSample16(void);
 
 		/** Reads the next 24-bit audio sample from the current audio interface.
 		 *
@@ -430,7 +430,7 @@
 		 *
 		 *  \return  Signed 24-bit audio sample from the audio interface
 		 */
-		int32_t  USB_Audio_ReadSample24(void);
+		int32_t USB_Audio_ReadSample24(void);
 
 		/** Writes the next 8-bit audio sample to the current audio interface.
 		 *
@@ -439,7 +439,7 @@
 		 *
 		 *  \param Sample  Signed 8-bit audio sample
 		 */
-		void     USB_Audio_WriteSample8(int8_t Sample);
+		void USB_Audio_WriteSample8(int8_t Sample);
 
 		/** Writes the next 16-bit audio sample to the current audio interface.
 		 *
@@ -448,7 +448,7 @@
 		 *
 		 *  \param Sample  Signed 16-bit audio sample
 		 */
-		void     USB_Audio_WriteSample16(int16_t Sample);
+		void USB_Audio_WriteSample16(int16_t Sample);
 
 		/** Writes the next 24-bit audio sample to the current audio interface.
 		 *
@@ -457,7 +457,7 @@
 		 *
 		 *  \param Sample  Signed 24-bit audio sample
 		 */
-		void     USB_Audio_WriteSample24(int32_t Sample);
+		void USB_Audio_WriteSample24(int32_t Sample);
 
 		/** Determines if the given audio interface is ready for a sample to be read from it.
 		 *
@@ -465,7 +465,7 @@
 		 *
 		 *  \return Boolean true if the given Audio interface has a sample to be read, false otherwise
 		 */
-		bool     USB_Audio_IsSampleReceived(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
+		bool USB_Audio_IsSampleReceived(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
 
 		/** Determines if the given audio interface is ready to accept the next sample to be written to it.
 		 *
@@ -473,7 +473,7 @@
 		 *
 		 *  \return Boolean true if the given Audio interface is ready to accept the next sample, false otherwise
 		 */
-		bool     USB_Audio_IsReadyForNextSample(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
+		bool USB_Audio_IsReadyForNextSample(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
 
 	/* Disable C linkage for C++ Compilers: */
 		#if defined(__cplusplus)
diff --git a/LUFA/Drivers/USB/Class/Device/CDC.c b/LUFA/Drivers/USB/Class/Device/CDC.c
index dcb58dc40fc96e6fcfc2bffa7d90bfda78f4309c..d27b0d2edcdda0aca050dcdd6cbfe7ea8d7425e1 100644
--- a/LUFA/Drivers/USB/Class/Device/CDC.c
+++ b/LUFA/Drivers/USB/Class/Device/CDC.c
@@ -73,7 +73,7 @@ void USB_CDC_ProcessControlPacket(USB_ClassInfo_CDC_t* CDCInterfaceInfo)
 				
 				CDCInterfaceInfo->ControlLineState = USB_ControlRequest.wValue;
 				
-				EVENT_USB_CDC_ControLineStateChanged();
+				EVENT_USB_CDC_ControLineStateChanged(CDCInterfaceInfo);
 
 				while (!(Endpoint_IsINReady()));
 				Endpoint_ClearIN();
diff --git a/LUFA/Drivers/USB/Class/Device/CDC.h b/LUFA/Drivers/USB/Class/Device/CDC.h
index ae069fafaa1427fdb7bc51bbc0bf1b1dda0adeb4..3e67b1b6b63dca6e6b749f726ea8cc8282337971 100644
--- a/LUFA/Drivers/USB/Class/Device/CDC.h
+++ b/LUFA/Drivers/USB/Class/Device/CDC.h
@@ -167,7 +167,7 @@
 			uint8_t  NotificationEndpointNumber; /**< Endpoint number of the CDC interface's IN notification endpoint, if used */
 			uint16_t NotificationEndpointSize;  /**< Size in bytes of the CDC interface's IN notification endpoint, if used */
 
-			uint8_t  ControlLineState;
+			uint8_t  ControlLineState; /**< Current control line state, as set by the host */
 
 			struct
 			{
@@ -187,15 +187,36 @@
 			void USB_CDC_Event_Stub(void);
 			void EVENT_USB_CDC_LineEncodingChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo)
 												   ATTR_WEAK ATTR_ALIAS(USB_CDC_Event_Stub);
-			void EVENT_USB_CDC_ControLineStateChanged(void) ATTR_WEAK ATTR_ALIAS(USB_CDC_Event_Stub);; 
+			void EVENT_USB_CDC_ControLineStateChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo)
+			                                          ATTR_WEAK ATTR_ALIAS(USB_CDC_Event_Stub);
 		#endif
 	
-		bool     USB_CDC_ConfigureEndpoints(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
-		void     USB_CDC_ProcessControlPacket(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
-		void     USB_CDC_USBTask(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
+		/** Configures the endpoints of a given CDC interface, ready for use. This should be linked to the library
+		 *  \ref EVENT_USB_ConfigurationChanged() event so that the endpoints are configured when the configuration containing the
+		 *  given CDC interface is selected.
+		 *
+		 *  \param CDCInterfaceInfo  Pointer to a structure containing an CDC Class configuration and state.
+		 *
+		 *  \return Boolean true if the endpoints were sucessfully configured, false otherwise
+		 */
+		bool USB_CDC_ConfigureEndpoints(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
+
+		/** Processes incomming control requests from the host, that are directed to the given CDC class interface. This should be
+		 *  linked to the library \ref EVENT_USB_UnhandledControlPacket() event.
+		 *
+		 *  \param CDCInterfaceInfo  Pointer to a structure containing an CDC Class configuration and state.
+		 */
+		void USB_CDC_ProcessControlPacket(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
+
+		/** General management task for a given CDC class interface, required for the correct operation of the interface. This should
+		 *  be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().
+		 *
+		 *  \param CDCInterfaceInfo  Pointer to a structure containing an CDC Class configuration and state.
+		 */
+		void USB_CDC_USBTask(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
 
 		void     EVENT_USB_CDC_LineEncodingChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
-		void     EVENT_USB_CDC_ControLineStateChanged(void);
+		void     EVENT_USB_CDC_ControLineStateChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
 
 		void     USB_CDC_SendString(USB_ClassInfo_CDC_t* CDCInterfaceInfo, char* Data, uint16_t Length);
 		void     USB_CDC_SendByte(USB_ClassInfo_CDC_t* CDCInterfaceInfo, uint8_t Data);