diff --git a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c
index 129fca5f1d7ce684672b48e747619534478f24df..bbcd2fd7ca0d0f2c145f123e54fd348ba2f49381 100644
--- a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c
+++ b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c
@@ -108,19 +108,19 @@ void ProcessNextSample(void)
 
 #if defined(AUDIO_OUT_MONO)
 		/* Load the sample into the PWM timer channel */
-		OCRxA = ((uint8_t)MixedSample_8Bit ^ (1 << 7));
+		OCR3A = ((uint8_t)MixedSample_8Bit ^ (1 << 7));
 #elif defined(AUDIO_OUT_STEREO)
 		/* Load the dual 8-bit samples into the PWM timer channels */
-		OCRxA = ((uint8_t)LeftSample_8Bit  ^ (1 << 7));
-		OCRxB = ((uint8_t)RightSample_8Bit ^ (1 << 7));
+		OCR3A = ((uint8_t)LeftSample_8Bit  ^ (1 << 7));
+		OCR3B = ((uint8_t)RightSample_8Bit ^ (1 << 7));
 #elif defined(AUDIO_OUT_PORTC)
+		/* Load the 8-bit mixed sample into PORTC */
 		PORTC = MixedSample_8Bit;
 #else
 		uint8_t LEDMask = LEDS_NO_LEDS;
 
 		/* Make mixed sample value positive (absolute) */
-		if (MixedSample_8Bit < 0)
-		  MixedSample_8Bit = -MixedSample_8Bit;
+		MixedSample_8Bit = abs(MixedSample_8Bit);
 
 		if (MixedSample_8Bit > ((128 / 8) * 1))
 		  LEDMask |= LEDS_LED1;
@@ -162,9 +162,9 @@ void EVENT_USB_Connect(void)
 
 #if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))
 	/* PWM speaker timer initialization */
-	TCCRxA  = ((1 << WGMx0) | (1 << COMxA1) | (1 << COMxA0)
-	        | (1 << COMxB1) | (1 << COMxB0)); // Set on match, clear on TOP
-	TCCRxB  = ((1 << WGMx2) | (1 << CSx0));  // Fast 8-Bit PWM, Fcpu speed
+	TCCR3A  = ((1 << WGM30) | (1 << COM3A1) | (1 << COM3A0)
+	        | (1 << COM3B1) | (1 << COM3B0)); // Set on match, clear on TOP
+	TCCR3B  = ((1 << WGM32) | (1 << CS30));  // Fast 8-Bit PWM, Fcpu speed
 #endif
 }
 
@@ -178,7 +178,7 @@ void EVENT_USB_Disconnect(void)
 
 #if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))
 	/* Stop the PWM generation timer */
-	TCCRxB = 0;
+	TCCR3B = 0;
 #endif
 
 #if defined(AUDIO_OUT_MONO)
diff --git a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.h b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.h
index ecc4e6fae4dde9dd54b331a3ce8cba3f5be6048b..ea897c9547df76ba4a843dee844747e83f5f1878 100644
--- a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.h
+++ b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.h
@@ -50,54 +50,7 @@
 		#include <LUFA/Drivers/USB/USB.h>
 		#include <LUFA/Drivers/USB/Class/Audio.h>
 	
-	/* Macros: */
-		#if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))
-			#define TCCRxA          TCCR3A
-			#define TCCRxB          TCCR3B
-			#define OCRxA           OCR3A
-			#define OCRxB           OCR3B
-			#define WGMx0           WGM30
-			#define WGMx2           WGM32
-			#define COMxA1          COM3A1
-			#define COMxA0          COM3A0
-			#define COMxB1          COM3B1
-			#define COMxB0          COM3B0
-			#define CSx0            CS30
-		#else
-			/** Timer count register used for left channel PWM audio output (or mixed output in mono output mode) */
-			#define TCCRxA          TCCR1A
-
-			/** Timer count register used for right channel PWM audio output */
-			#define TCCRxB          TCCR1B
-
-			/** Timer compare register used for left channel PWM audio output (or mixed output in mono output mode) */
-			#define OCRxA           OCR1A
-
-			/** Timer compare register used for right channel PWM audio output */
-			#define OCRxB           OCR1B
-
-			/** Timer control register mask used to select PWM mode */
-			#define WGMx0           WGM10
-
-			/** Timer control register mask used to select PWM mode */
-			#define WGMx2           WGM12
-
-			/** Timer control register mask used to set, clear or toggle channel output pin on match */
-			#define COMxA1          COM1A1
-
-			/** Timer control register mask used to set, clear or toggle channel output pin on match */
-			#define COMxA0          COM1A0
-
-			/** Timer control register mask used to set, clear or toggle channel output pin on match */
-			#define COMxB1          COM1B1
-
-			/** Timer control register mask used to set, clear or toggle channel output pin on match */
-			#define COMxB0          COM1B0
-
-			/** Timer control register mask used to start the timer at Fcpu clock rate */
-			#define CSx0            CS10
-		#endif
-		
+	/* Macros: */		
 		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
 		#define LEDMASK_USB_NOTREADY      LEDS_LED1
 
diff --git a/Demos/Device/LowLevel/AudioInput/AudioInput.h b/Demos/Device/LowLevel/AudioInput/AudioInput.h
index 082b0555bdc91131eb441d4c30ff81e1ff35bd94..591d3f355d97dc2d7eaa696ec7d1bbc76244dd4f 100644
--- a/Demos/Device/LowLevel/AudioInput/AudioInput.h
+++ b/Demos/Device/LowLevel/AudioInput/AudioInput.h
@@ -50,13 +50,13 @@
 
 	/* Macros: */
 		/** ADC channel number for the microphone input. */
-		#define MIC_IN_ADC_CHANNEL               2
+		#define MIC_IN_ADC_CHANNEL        2
 		
 		/** Maximum ADC sample value for the microphone input. */
-		#define SAMPLE_MAX_RANGE                 0xFFFF
+		#define SAMPLE_MAX_RANGE          0xFFFF
 
 		/** Maximum ADC range for the microphone input. */
-		#define ADC_MAX_RANGE                    0x3FF
+		#define ADC_MAX_RANGE             0x3FF
 
 		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
 		#define LEDMASK_USB_NOTREADY      LEDS_LED1
diff --git a/Demos/Device/LowLevel/AudioOutput/AudioOutput.c b/Demos/Device/LowLevel/AudioOutput/AudioOutput.c
index 89c4446bcc839f1ce08ab20fe2b9792763ef14b3..9b2bb399156f400bc0b663320dfe7922cee160bf 100644
--- a/Demos/Device/LowLevel/AudioOutput/AudioOutput.c
+++ b/Demos/Device/LowLevel/AudioOutput/AudioOutput.c
@@ -96,9 +96,9 @@ void EVENT_USB_Connect(void)
 
 #if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))
 	/* PWM speaker timer initialization */
-	TCCRxA  = ((1 << WGMx0) | (1 << COMxA1) | (1 << COMxA0)
-	                        | (1 << COMxB1) | (1 << COMxB0)); // Set on match, clear on TOP
-	TCCRxB  = ((1 << WGMx2) | (1 << CSx0));  // Fast 8-Bit PWM, Fcpu speed
+	TCCR3A  = ((1 << WGM30) | (1 << COM3A1) | (1 << COM3A0)
+	                        | (1 << COM3B1) | (1 << COM3B0)); // Set on match, clear on TOP
+	TCCR3B  = ((1 << WGM32) | (1 << CS30));  // Fast 8-Bit PWM, Fcpu speed
 #endif	
 }
 
@@ -110,7 +110,7 @@ void EVENT_USB_Disconnect(void)
 	/* Stop the timers */
 	TCCR0B = 0;
 #if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))
-	TCCRxB = 0;
+	TCCR3B = 0;
 #endif		
 
 #if defined(AUDIO_OUT_MONO)
@@ -215,11 +215,11 @@ void USB_Audio_Task(void)
 		int8_t  MixedSample_8Bit  = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1);
 
 		/* Load the sample into the PWM timer channel */
-		OCRxA = ((uint8_t)MixedSample_8Bit ^ (1 << 7));
+		OCR3A = ((uint8_t)MixedSample_8Bit ^ (1 << 7));
 #elif defined(AUDIO_OUT_STEREO)
 		/* Load the dual 8-bit samples into the PWM timer channels */
-		OCRxA = ((uint8_t)LeftSample_8Bit  ^ (1 << 7));
-		OCRxB = ((uint8_t)RightSample_8Bit ^ (1 << 7));
+		OCR3A = ((uint8_t)LeftSample_8Bit  ^ (1 << 7));
+		OCR3B = ((uint8_t)RightSample_8Bit ^ (1 << 7));
 #elif defined(AUDIO_OUT_PORTC)
 		/* Mix the two channels together to produce a mono, 8-bit sample */
 		int8_t  MixedSample_8Bit  = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1);
diff --git a/Demos/Device/LowLevel/AudioOutput/AudioOutput.h b/Demos/Device/LowLevel/AudioOutput/AudioOutput.h
index 7970efe7e4333337a8fc664c1d0c86c1a3681466..8d7f16c5f4c23e51cb0b4962b23ccee839c68892 100644
--- a/Demos/Device/LowLevel/AudioOutput/AudioOutput.h
+++ b/Demos/Device/LowLevel/AudioOutput/AudioOutput.h
@@ -48,53 +48,6 @@
 		#include <LUFA/Drivers/Board/LEDs.h>
 	
 	/* Macros: */
-		#if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))
-			#define TCCRxA          TCCR3A
-			#define TCCRxB          TCCR3B
-			#define OCRxA           OCR3A
-			#define OCRxB           OCR3B
-			#define WGMx0           WGM30
-			#define WGMx2           WGM32
-			#define COMxA1          COM3A1
-			#define COMxA0          COM3A0
-			#define COMxB1          COM3B1
-			#define COMxB0          COM3B0
-			#define CSx0            CS30
-		#else
-			/** Timer count register used for left channel PWM audio output (or mixed output in mono output mode) */
-			#define TCCRxA          TCCR1A
-
-			/** Timer count register used for right channel PWM audio output */
-			#define TCCRxB          TCCR1B
-
-			/** Timer compare register used for left channel PWM audio output (or mixed output in mono output mode) */
-			#define OCRxA           OCR1A
-
-			/** Timer compare register used for right channel PWM audio output */
-			#define OCRxB           OCR1B
-
-			/** Timer control register mask used to select PWM mode */
-			#define WGMx0           WGM10
-
-			/** Timer control register mask used to select PWM mode */
-			#define WGMx2           WGM12
-
-			/** Timer control register mask used to set, clear or toggle channel output pin on match */
-			#define COMxA1          COM1A1
-
-			/** Timer control register mask used to set, clear or toggle channel output pin on match */
-			#define COMxA0          COM1A0
-
-			/** Timer control register mask used to set, clear or toggle channel output pin on match */
-			#define COMxB1          COM1B1
-
-			/** Timer control register mask used to set, clear or toggle channel output pin on match */
-			#define COMxB0          COM1B0
-
-			/** Timer control register mask used to start the timer at Fcpu clock rate */
-			#define CSx0            CS10
-		#endif
-		
 		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
 		#define LEDMASK_USB_NOTREADY      LEDS_LED1
 
diff --git a/Projects/Benito/Benito.c b/Projects/Benito/Benito.c
index 9e85fbd2f3f22a66c1981d003e04e64afd7b220a..26c56649620bf536c42cdaf3cc99c61196364a13 100644
--- a/Projects/Benito/Benito.c
+++ b/Projects/Benito/Benito.c
@@ -79,7 +79,7 @@ int main(void)
 	for (;;)
 	{
 		/* Echo bytes from the host to the target via the hardware USART */
-		if (CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface))
+		if (CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface) > 0)
 		{
 			Serial_TxByte(CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface));
 
diff --git a/Projects/Benito/Benito.txt b/Projects/Benito/Benito.txt
index 857a28f8d109b0ffb19920866d5cdb52fcf12ca0..63f3ea815de0112dbb7def3903e01e9787e4d23e 100644
--- a/Projects/Benito/Benito.txt
+++ b/Projects/Benito/Benito.txt
@@ -31,19 +31,20 @@
  *  </tr>
  *  <tr>
  *   <td><b>USB Class:</b></td>
- *   <td>Human Interface Device (HID)</td>
+ *   <td>Communications Device Class (CDC)</td>
  *  </tr>
  *  <tr> 
  *   <td><b>USB Subclass:</b></td>
- *   <td>Keyboard</td>
+ *   <td>Abstract Control Model (ACM)</td>
  *  </tr>
  *  <tr>
  *   <td><b>Relevant Standards:</b></td>
- *   <td>USBIF HID Standard, USBIF HID Usage Tables</td>
+ *   <td>USBIF CDC Class Standard</td>
+ *   <td>Arduino Bootloader Specification</td>
  *  </tr>
  *  <tr>
  *   <td><b>Usable Speeds:</b></td>
- *   <td>Low Speed Mode, Full Speed Mode</td>
+ *   <td>Full Speed Mode</td>
  *  </tr>
  * </table>
  *