diff --git a/Projects/Webserver/USBDeviceMode.h b/Projects/Webserver/USBDeviceMode.h
index d76c667783dd62e7e59d553c3a3c1587cc94925b..999df6ef0dd362648e11937d7f752cf6e85c4641 100644
--- a/Projects/Webserver/USBDeviceMode.h
+++ b/Projects/Webserver/USBDeviceMode.h
@@ -37,6 +37,7 @@
 #define _USBDEVICEMODE_H_
 
 	/* Includes: */
+		#include <LUFA/Drivers/USB/USB.h>
 		#include <LUFA/Drivers/USB/Class/MassStorage.h>
 		
 		#include "Webserver.h"
diff --git a/Projects/Webserver/USBHostMode.h b/Projects/Webserver/USBHostMode.h
index 03387edd251c373c6976699eff8b731f02267037..b548e6b8d870fca74a267c79a5e8cf0631e37169 100644
--- a/Projects/Webserver/USBHostMode.h
+++ b/Projects/Webserver/USBHostMode.h
@@ -37,6 +37,7 @@
 #define _USBHOSTMODE_H_
 
 	/* Includes: */
+		#include <LUFA/Drivers/USB/USB.h>
 		#include <LUFA/Drivers/USB/Class/RNDIS.h>
 		
 		#include "Webserver.h"
diff --git a/Projects/XPLAINBridge/Lib/SoftUART.c b/Projects/XPLAINBridge/Lib/SoftUART.c
index bc0265378fc91201a6a8f521008ac258371aff74..01f9b2e12c9ae4c36a752869d2b7265e0758c613 100644
--- a/Projects/XPLAINBridge/Lib/SoftUART.c
+++ b/Projects/XPLAINBridge/Lib/SoftUART.c
@@ -35,12 +35,12 @@
 volatile uint8_t srx_done, stx_count;
 volatile uint8_t srx_data, srx_mask, srx_tmp, stx_data;
 
-unsigned char SoftUART_IsReady(void)
+uint8_t SoftUART_IsReady(void)
 {
 	return !(stx_count);
 }
 
-unsigned char SoftUART_TxByte(unsigned char c)
+uint8_t SoftUART_TxByte(uint8_t c)
 {
 	while (stx_count);
 
@@ -50,12 +50,12 @@ unsigned char SoftUART_TxByte(unsigned char c)
 	return c;
 }
 
-unsigned char SoftUART_IsReceived(void)
+uint8_t SoftUART_IsReceived(void)
 {
 	return srx_done;
 }
 
-unsigned char SoftUART_RxByte(void)
+uint8_t SoftUART_RxByte(void)
 {
 	while (!(srx_done));
 
diff --git a/Projects/XPLAINBridge/Lib/SoftUART.h b/Projects/XPLAINBridge/Lib/SoftUART.h
index 7dbf2d56b85fbee4e93482654706ff8bad824706..d6b24320fed4becb6488634842bf7fbfbd8f68aa 100644
--- a/Projects/XPLAINBridge/Lib/SoftUART.h
+++ b/Projects/XPLAINBridge/Lib/SoftUART.h
@@ -51,10 +51,10 @@
 		#define STXDDR     DDRD
 
 	/* Function Prototypes: */
-		unsigned char SoftUART_IsReady(void);
-		unsigned char SoftUART_TxByte(unsigned char c);
-		unsigned char SoftUART_IsReceived(void);
-		unsigned char SoftUART_RxByte(void);
-		void SoftUART_Init(void);
+		uint8_t SoftUART_IsReady(void);
+		uint8_t SoftUART_TxByte(uint8_t c);
+		uint8_t SoftUART_IsReceived(void);
+		uint8_t SoftUART_RxByte(void);
+		void    SoftUART_Init(void);
 
 #endif
\ No newline at end of file
diff --git a/Projects/XPLAINBridge/XPLAINBridge.c b/Projects/XPLAINBridge/XPLAINBridge.c
index 2de545f9510fe49df01bddf20e5d32cf4eebca82..13752ef8222b923ce85fc6163d8a68ce823a0b57 100644
--- a/Projects/XPLAINBridge/XPLAINBridge.c
+++ b/Projects/XPLAINBridge/XPLAINBridge.c
@@ -80,22 +80,25 @@ int main(void)
 	Buffer_Initialize(&USBtoUART_Buffer);
 	Buffer_Initialize(&UARTtoUSB_Buffer);
 
+	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
+
 	for (;;)
 	{
-		if (USB_DeviceState == DEVICE_STATE_Configured)
-		{
-			if (CurrentFirmwareMode == MODE_USART_BRIDGE)
-			  USARTBridge_Task();
-			else
-			  AVRISP_Task();
-		}
-		
+		if (CurrentFirmwareMode == MODE_USART_BRIDGE)
+		  USARTBridge_Task();
+		else
+		  AVRISP_Task();
+
 		USB_USBTask();
 	}
 }
 
 void AVRISP_Task(void)
 {
+	/* Must be in the configured state for the AVRISP code to process data */
+	if (USB_DeviceState != DEVICE_STATE_Configured)
+	  return;
+
 	Endpoint_SelectEndpoint(AVRISP_DATA_EPNUM);
 	
 	/* Check to see if a V2 Protocol command has been received */
@@ -112,6 +115,10 @@ void AVRISP_Task(void)
 
 void USARTBridge_Task(void)
 {
+	/* Must be in the configured state for the USART Bridge code to process data */
+	if (USB_DeviceState != DEVICE_STATE_Configured)
+	  return;
+
 	/* Read bytes from the USB OUT endpoint into the UART transmit buffer */
 	for (uint8_t DataBytesRem = CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface); DataBytesRem != 0; DataBytesRem--)
 	{
@@ -130,8 +137,8 @@ void USARTBridge_Task(void)
 	  SoftUART_TxByte(Buffer_GetElement(&USBtoUART_Buffer));
 	
 	/* Load bytes from the UART into the UART receive buffer */
-	if(SoftUART_IsReceived())
-		Buffer_StoreElement(&UARTtoUSB_Buffer, SoftUART_RxByte());
+	if (SoftUART_IsReceived())
+	  Buffer_StoreElement(&UARTtoUSB_Buffer, SoftUART_RxByte());
 
 	CDC_Device_USBTask(&VirtualSerial_CDC_Interface);
 }
@@ -169,6 +176,7 @@ void EVENT_USB_Device_ConfigurationChanged(void)
 {
 	bool EndpointConfigSuccess;
 
+	/* Configure the device endpoints according to the selected mode */
 	if (CurrentFirmwareMode == MODE_USART_BRIDGE)
 	{
 		EndpointConfigSuccess = CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface);
@@ -193,6 +201,18 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
 	  CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface);
 }
 
+/** Event handler for the library USB Connection event. */
+void EVENT_USB_Device_Connect(void)
+{
+	LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
+}
+
+/** Event handler for the library USB Disconnection event. */
+void EVENT_USB_Device_Disconnect(void)
+{
+	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
+}
+
 /** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
  *  documentation) by the application code so that the address and size of a requested descriptor can be given
  *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
@@ -201,6 +221,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
  */
 uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)
 {
+	/* Return the correct descriptors based on the selected mode */
 	if (CurrentFirmwareMode == MODE_USART_BRIDGE)
 	  return USART_GetDescriptor(wValue, wIndex, DescriptorAddress);
 	else
diff --git a/Projects/XPLAINBridge/XPLAINBridge.h b/Projects/XPLAINBridge/XPLAINBridge.h
index 805c30d096707472684384fee7cba47115dbee0b..0c3a56c9dc3b10f2488af81e5e8673c582e376d9 100644
--- a/Projects/XPLAINBridge/XPLAINBridge.h
+++ b/Projects/XPLAINBridge/XPLAINBridge.h
@@ -85,8 +85,8 @@
 
 		void EVENT_USB_Device_ConfigurationChanged(void);
 		void EVENT_USB_Device_UnhandledControlRequest(void);
-		
-		void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo);
+		void EVENT_USB_Device_Connect(void);
+		void EVENT_USB_Device_Disconnect(void);		
 
 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress);