diff --git a/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h b/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h
index 454f0b61cfc30c1beacc4979e548ec5164245733..1168fa2a1d45da018acc2cc9b7fb8cc732df5a82 100644
--- a/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h
+++ b/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h
@@ -47,7 +47,11 @@
 #define __CONFIGDESCRIPTOR_H__
 
 	/* Includes: */
-		#include <avr/io.h>
+		#if defined(__AVR32__)
+			#include <avr32/io.h>
+		#elif defined(__AVR__)
+			#include <avr/io.h>
+		#endif
 		
 		#include "../../../Common/Common.h"
 		#include "../HighLevel/USBMode.h"
diff --git a/LUFA/Drivers/USB/HighLevel/Events.h b/LUFA/Drivers/USB/HighLevel/Events.h
index 12b30b2502b70ff2c4a0e6ce66dae7e30b5921dd..f6d8aaca8b9714821ac4005474c72953b36ca42b 100644
--- a/LUFA/Drivers/USB/HighLevel/Events.h
+++ b/LUFA/Drivers/USB/HighLevel/Events.h
@@ -50,7 +50,11 @@
 #define __USBEVENTS_H__
 
 	/* Includes: */
-		#include <avr/io.h>
+		#if defined(__AVR32__)
+			#include <avr32/io.h>
+		#elif defined(__AVR__)
+			#include <avr/io.h>
+		#endif
 		
 		#include "../../../Common/Common.h"
 		#include "USBMode.h"
diff --git a/LUFA/Drivers/USB/HighLevel/StdDescriptors.h b/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
index 807eb78f82e0011c554457655bbf4305af19a3e3..f94673d2e10a1ced222d378bc138bb365b7bc5ac 100644
--- a/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
+++ b/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
@@ -41,9 +41,16 @@
 #define __USBDESCRIPTORS_H__
 
 	/* Includes: */
-		#include <avr/pgmspace.h>
-		#include <stdbool.h>
-		#include <stddef.h>
+		#if defined(__AVR32__)
+			#include <avr32/io.h>
+			#include <stdint.h>
+			#include <stdbool.h>
+			#include <stddef.h>
+		#elif defined(__AVR__)
+			#include <avr/pgmspace.h>
+			#include <stdbool.h>
+			#include <stddef.h>
+		#endif
 
 		#include "../../../Common/Common.h"
 		#include "USBMode.h"
diff --git a/LUFA/Drivers/USB/HighLevel/USBInterrupt.h b/LUFA/Drivers/USB/HighLevel/USBInterrupt.h
index 6ff7c70fa3fc1ed2f84c1ebfb9ee52b6dca58ce2..94f88e278e96fd893b1938c94fd10062ee44e7ea 100644
--- a/LUFA/Drivers/USB/HighLevel/USBInterrupt.h
+++ b/LUFA/Drivers/USB/HighLevel/USBInterrupt.h
@@ -32,8 +32,14 @@
 #define __USBINTERRUPT_H__
 
 	/* Includes: */
-		#include <avr/io.h>
-		#include <stdbool.h>
+		#if defined(__AVR32__)
+			#include <avr32/io.h>
+			#include <stdbool.h>
+			#include <stdint.h>
+		#elif defined(__AVR__)
+			#include <avr/io.h>
+			#include <stdbool.h>
+		#endif
 		
 		#include "../../../Common/Common.h"
 		#include "../LowLevel/LowLevel.h"
diff --git a/LUFA/Drivers/USB/HighLevel/USBMode.h b/LUFA/Drivers/USB/HighLevel/USBMode.h
index ba2d4539471454ee3918ddb64f5f6d0f5adcd9c5..1ceb981aedebe29eb57708a34a613bf38c916416 100644
--- a/LUFA/Drivers/USB/HighLevel/USBMode.h
+++ b/LUFA/Drivers/USB/HighLevel/USBMode.h
@@ -69,6 +69,11 @@
 		 *  (i.e. AT90USBXXX7) when defined.
 		 */
 		#define USB_SERIES_7_AVR
+		
+		/** Indicates that the target AVR microcontroller belongs to the Series UC3B USB controller
+		 *  (i.e. AT32UC3BXXXX) when defined.
+		 */
+		#define USB_SERIES_UC3B_AVR
 
 		/** Indicates that the target AVR microcontroller and compilation settings allow for the
 		 *  target to be configured in USB Device mode when defined.
@@ -95,9 +100,11 @@
 				#define USB_SERIES_6_AVR
 			#elif (defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1287__))
 				#define USB_SERIES_7_AVR
+			#elif (defined(__AVR32_UC3B0256__))
+				#define USB_SERIES_UC3B_AVR
 			#endif			
 
-			#if !defined(USB_SERIES_7_AVR)		
+			#if !defined(USB_SERIES_7_AVR) && !defined(USB_SERIES_UC3B_AVR)
 				#if defined(USB_HOST_ONLY)
 					#error USB_HOST_ONLY is not available for the currently selected USB AVR model.
 				#endif
diff --git a/LUFA/Drivers/USB/HighLevel/USBTask.h b/LUFA/Drivers/USB/HighLevel/USBTask.h
index c01b84c37ea65e08f46c72c66e572439dfec87dc..350ad5dc5408046903c264a0a861cb1738b23ca0 100644
--- a/LUFA/Drivers/USB/HighLevel/USBTask.h
+++ b/LUFA/Drivers/USB/HighLevel/USBTask.h
@@ -32,9 +32,15 @@
 #define __USBTASK_H__
 
 	/* Includes: */
-		#include <avr/io.h>
-		#include <avr/interrupt.h>
-		#include <stdbool.h>
+		#if defined(__AVR32__)
+			#include <avr32/io.h>
+			#include <stdint.h>
+			#include <stdbool.h>
+		#elif defined(__AVR__)
+			#include <avr/io.h>
+			#include <avr/interrupt.h>
+			#include <stdbool.h>
+		#endif
 		
 		#include "../LowLevel/LowLevel.h"
 		#include "Events.h"
diff --git a/LUFA/Drivers/USB/LowLevel/DevChapter9.c b/LUFA/Drivers/USB/LowLevel/DevChapter9.c
index 7d9e81502c4360f3d3e57b90168f063ac5024547..0d25e3b12eec1d8fee77a293ea5797bba3f7c3d5 100644
--- a/LUFA/Drivers/USB/LowLevel/DevChapter9.c
+++ b/LUFA/Drivers/USB/LowLevel/DevChapter9.c
@@ -139,7 +139,7 @@ static void USB_Device_SetAddress(void)
 	if (DeviceAddress)
 	  USB_DeviceState = DEVICE_STATE_Addressed;
 
-	UDADDR = ((1 << ADDEN) | DeviceAddress);
+	USB_Device_SetDeviceAddress(DeviceAddress);
 
 	return;
 }
diff --git a/LUFA/Drivers/USB/LowLevel/DevChapter9.h b/LUFA/Drivers/USB/LowLevel/DevChapter9.h
index 58a5dc80e4a88be893e09cddf3399f22f887ae10..cb1b44ac5a79c02cfc55299d26d8ba0d9c52a3c2 100644
--- a/LUFA/Drivers/USB/LowLevel/DevChapter9.h
+++ b/LUFA/Drivers/USB/LowLevel/DevChapter9.h
@@ -32,10 +32,15 @@
 #define __DEVCHAPTER9_H__
 
 	/* Includes: */
-		#include <avr/io.h>
-		#include <avr/pgmspace.h>
-		#include <avr/eeprom.h>
-		#include <avr/boot.h>
+		#if defined(__AVR32__)
+			#include <avr32/io.h>
+			#include <stdint.h>
+		#elif defined(__AVR__)
+			#include <avr/io.h>
+			#include <avr/pgmspace.h>
+			#include <avr/eeprom.h>
+			#include <avr/boot.h>
+		#endif
 		
 		#include "../HighLevel/StdDescriptors.h"
 		#include "../HighLevel/Events.h"
@@ -70,7 +75,11 @@
 				enum USB_DescriptorMemorySpaces_t
 				{
 					MEMSPACE_FLASH    = 0, /**< Indicates the requested descriptor is located in FLASH memory */
+					
+					#if defined(__AVR__) || defined(__DOXYGEN__)
 					MEMSPACE_EEPROM   = 1, /**< Indicates the requested descriptor is located in EEPROM memory */
+					#endif
+					
 					MEMSPACE_RAM      = 2, /**< Indicates the requested descriptor is located in RAM memory */
 				};
 			#endif
@@ -125,6 +134,10 @@
 		#elif defined(USE_FLASH_DESCRIPTORS) && defined(USE_EEPROM_DESCRIPTORS) && defined(USE_RAM_DESCRIPTORS)
 			#error Only one of the USE_*_DESCRIPTORS modes should be selected.
 		#endif
+		
+		#if defined(USE_EEPROM_DESCRIPTORS) && defined(USB_SERIES_UC3B_AVR)
+			#error USE_EEPROM_DESCRIPTORS is not available on the UC3B series AVRs.
+		#endif
 	
 		/* Function Prototypes: */
 			void USB_Device_ProcessControlRequest(void);
diff --git a/LUFA/Drivers/USB/LowLevel/Device.h b/LUFA/Drivers/USB/LowLevel/Device.h
index 1f929bff096f3848536866313fee3d7241160182..9dff3f9171892ba7b9a8fc8e46398de7456e58ed 100644
--- a/LUFA/Drivers/USB/LowLevel/Device.h
+++ b/LUFA/Drivers/USB/LowLevel/Device.h
@@ -41,9 +41,11 @@
 #define __USBDEVICE_H__
 
 	/* Includes: */
-		#include <avr/pgmspace.h>
-		#include <avr/eeprom.h>
-
+		#if defined(__AVR__)
+			#include <avr/pgmspace.h>
+			#include <avr/eeprom.h>
+		#endif
+		
 		#include "../../../Common/Common.h"	
 		#include "../HighLevel/StdDescriptors.h"
 		#include "Endpoint.h"
@@ -59,7 +61,8 @@
 			
 	/* Public Interface - May be used in end-application: */
 		/* Macros: */
-			#if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || defined(__DOXYGEN__)
+			#if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || \
+			     defined(USB_SERIES_UC3B_AVR) || defined(__DOXYGEN__))
 				/** Mask for the Options parameter of the \ref USB_Init() function. This indicates that the
 				 *  USB interface should be initialized in low speed (1.5Mb/s) mode.
 				 *
@@ -68,13 +71,13 @@
 				 *  \note Restrictions apply on the number, size and type of endpoints which can be used
 				 *        when running in low speed mode -- refer to the USB 2.0 standard.
 				 */
-				#define USB_DEVICE_OPT_LOWSPEED            (1 << 0)
+				#define USB_DEVICE_OPT_LOWSPEED       (1 << 0)
 			#endif
 			
 			/** Mask for the Options parameter of the USB_Init() function. This indicates that the
 			 *  USB interface should be initialized in full speed (12Mb/s) mode.
 			 */
-			#define USB_DEVICE_OPT_FULLSPEED               (0 << 0)
+			#define USB_DEVICE_OPT_FULLSPEED          (0 << 0)
 			
 		/* Pseudo-Function Macros: */
 			#if defined(__DOXYGEN__)
@@ -129,16 +132,25 @@
 				 */
 				static inline bool USB_Device_DisableSOFEvents(void);
 			#else
-				#if !defined(NO_DEVICE_REMOTE_WAKEUP)
-					#define USB_Device_SendRemoteWakeup()   MACROS{ UDCON |= (1 << RMWKUP); }MACROE
+				#if defined(__AVR32__)
+					#if !defined(NO_DEVICE_REMOTE_WAKEUP)
+						#define USB_Device_SendRemoteWakeup()   MACROS{ AVR32_USBB.UDCON.rmwkup = true; }MACROE
+
+						#define USB_Device_IsRemoteWakeupSent()         AVR32_USBB.UDCON.rmwkup
+					#endif
+					
+					#define USB_Device_IsUSBSuspended()                 AVR32_USBB.UDINT.susp					
+				#elif defined(__AVR__)
+					#if !defined(NO_DEVICE_REMOTE_WAKEUP)
+						#define USB_Device_SendRemoteWakeup()   MACROS{ UDCON |= (1 << RMWKUP); }MACROE
 
-					#define USB_Device_IsRemoteWakeupSent()       ((UDCON &  (1 << RMWKUP)) ? false : true)
+						#define USB_Device_IsRemoteWakeupSent()       ((UDCON &  (1 << RMWKUP)) ? false : true)
+					#endif
+					
+					#define USB_Device_IsUSBSuspended()               ((UDINT & (1 << SUSPI)) ? true : false)
 				#endif
-				
-				#define USB_Device_IsUSBSuspended()           ((UDINT &  (1 << SUSPI)) ? true : false)
-				
-				#define USB_Device_EnableSOFEvents()    MACROS{ USB_INT_Enable(USB_INT_SOFI); }MACROE
 
+				#define USB_Device_EnableSOFEvents()    MACROS{ USB_INT_Enable(USB_INT_SOFI); }MACROE
 				#define USB_Device_DisableSOFEvents()   MACROS{ USB_INT_Disable(USB_INT_SOFI); }MACROE
 			#endif
 			
@@ -207,8 +219,17 @@
 	/* Private Interface - For use in library only: */
 	#if !defined(__DOXYGEN__)
 		/* Macros: */		
-			#define USB_Device_SetLowSpeed()        MACROS{ UDCON |=  (1 << LSM);   }MACROE
-			#define USB_Device_SetFullSpeed()       MACROS{ UDCON &= ~(1 << LSM);   }MACROE
+			#if defined(__AVR32__)
+				#define USB_Device_SetLowSpeed()          MACROS{ AVR32_USBB.UDCON.ls = true;  }MACROE
+				#define USB_Device_SetFullSpeed()         MACROS{ AVR32_USBB.UDCON.ls = false; }MACROE
+				
+				#define USB_Device_SetDeviceAddress(addr) MACROS{ AVR32_USBB.UDADDR = (AVR32_USBB_UDCON_ADDEN_MASK | DeviceAddress); }MACROE			
+			#elif defined(__AVR__)
+				#define USB_Device_SetLowSpeed()          MACROS{ UDCON |=  (1 << LSM);   }MACROE
+				#define USB_Device_SetFullSpeed()         MACROS{ UDCON &= ~(1 << LSM);   }MACROE
+				
+				#define USB_Device_SetDeviceAddress(addr) MACROS{ UDADDR =  ((1 << ADDEN) | DeviceAddress); }MACROE
+			#endif
 	#endif
 
 #endif
diff --git a/LUFA/Drivers/USB/LowLevel/Endpoint.c b/LUFA/Drivers/USB/LowLevel/Endpoint.c
index 81fef1c2ef85cb4fa1445dfcb54105f4d29f9752..819e3f81255103e30e3712b146b2c02c2f0218b8 100644
--- a/LUFA/Drivers/USB/LowLevel/Endpoint.c
+++ b/LUFA/Drivers/USB/LowLevel/Endpoint.c
@@ -225,12 +225,14 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length
 #define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr++))
 #include "Template/Template_Endpoint_RW.c"
 
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_EStream_LE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))
-#include "Template/Template_Endpoint_RW.c"
+#if defined(__AVR__)
+	#define  TEMPLATE_FUNC_NAME                    Endpoint_Write_EStream_LE
+	#define  TEMPLATE_BUFFER_TYPE                  const void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()             Endpoint_ClearIN()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)        0
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)     Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))
+	#include "Template/Template_Endpoint_RW.c"
+#endif
 
 #define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Stream_BE
 #define  TEMPLATE_BUFFER_TYPE                      const void*
@@ -239,12 +241,14 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length
 #define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(*((uint8_t*)BufferPtr--))
 #include "Template/Template_Endpoint_RW.c"
 
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_EStream_BE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))
-#include "Template/Template_Endpoint_RW.c"
+#if defined(__AVR__)
+	#define  TEMPLATE_FUNC_NAME                    Endpoint_Write_EStream_BE
+	#define  TEMPLATE_BUFFER_TYPE                  const void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()             Endpoint_ClearIN()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)        (Length - 1)
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)     Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))
+	#include "Template/Template_Endpoint_RW.c"
+#endif
 
 #define  TEMPLATE_FUNC_NAME                        Endpoint_Write_PStream_BE
 #define  TEMPLATE_BUFFER_TYPE                      const void*
@@ -260,12 +264,14 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length
 #define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *((uint8_t*)BufferPtr++) = Endpoint_Read_Byte()
 #include "Template/Template_Endpoint_RW.c"
 
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_EStream_LE
-#define  TEMPLATE_BUFFER_TYPE                      void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_write_byte((uint8_t*)BufferPtr++, Endpoint_Read_Byte())
-#include "Template/Template_Endpoint_RW.c"
+#if defined(__AVR__)
+	#define  TEMPLATE_FUNC_NAME                    Endpoint_Read_EStream_LE
+	#define  TEMPLATE_BUFFER_TYPE                  void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()             Endpoint_ClearOUT()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)        0
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)     eeprom_write_byte((uint8_t*)BufferPtr++, Endpoint_Read_Byte())
+	#include "Template/Template_Endpoint_RW.c"
+#endif
 
 #define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Stream_BE
 #define  TEMPLATE_BUFFER_TYPE                      void*
@@ -274,12 +280,14 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length
 #define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *((uint8_t*)BufferPtr--) = Endpoint_Read_Byte()
 #include "Template/Template_Endpoint_RW.c"
 
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_EStream_BE
-#define  TEMPLATE_BUFFER_TYPE                      void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_write_byte((uint8_t*)BufferPtr--, Endpoint_Read_Byte())
-#include "Template/Template_Endpoint_RW.c"
+#if defined(__AVR__)
+	#define  TEMPLATE_FUNC_NAME                    Endpoint_Read_EStream_BE
+	#define  TEMPLATE_BUFFER_TYPE                  void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()             Endpoint_ClearOUT()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)        (Length - 1)
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)     eeprom_write_byte((uint8_t*)BufferPtr--, Endpoint_Read_Byte())
+	#include "Template/Template_Endpoint_RW.c"
+#endif
 
 #endif
 
@@ -293,10 +301,12 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length
 #define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr++))
 #include "Template/Template_Endpoint_Control_W.c"
 
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_EStream_LE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))
-#include "Template/Template_Endpoint_Control_W.c"
+#if defined(__AVR__)
+	#define  TEMPLATE_FUNC_NAME                    Endpoint_Write_Control_EStream_LE
+	#define  TEMPLATE_BUFFER_OFFSET(Length)        0
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)     Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))
+	#include "Template/Template_Endpoint_Control_W.c"
+#endif
 
 #define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_Stream_BE
 #define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
@@ -308,29 +318,35 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length
 #define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr--))
 #include "Template/Template_Endpoint_Control_W.c"
 
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_EStream_BE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))
-#include "Template/Template_Endpoint_Control_W.c"
+#if defined(__AVR__)
+	#define  TEMPLATE_FUNC_NAME                    Endpoint_Write_Control_EStream_BE
+	#define  TEMPLATE_BUFFER_OFFSET(Length)        (Length - 1)
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)     Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))
+	#include "Template/Template_Endpoint_Control_W.c"
+#endif
 
 #define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_Stream_LE
 #define  TEMPLATE_BUFFER_OFFSET(Length)            0
 #define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *((uint8_t*)BufferPtr++) = Endpoint_Read_Byte()
 #include "Template/Template_Endpoint_Control_R.c"
 
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_EStream_LE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_write_byte((uint8_t*)BufferPtr++, Endpoint_Read_Byte())
-#include "Template/Template_Endpoint_Control_R.c"
+#if defined(__AVR__)
+	#define  TEMPLATE_FUNC_NAME                    Endpoint_Read_Control_EStream_LE
+	#define  TEMPLATE_BUFFER_OFFSET(Length)        0
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)     eeprom_write_byte((uint8_t*)BufferPtr++, Endpoint_Read_Byte())
+	#include "Template/Template_Endpoint_Control_R.c"
+#endif
 
 #define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_Stream_BE
 #define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
 #define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *((uint8_t*)BufferPtr--) = Endpoint_Read_Byte()
 #include "Template/Template_Endpoint_Control_R.c"
 
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_EStream_BE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_write_byte((uint8_t*)BufferPtr--, Endpoint_Read_Byte())
-#include "Template/Template_Endpoint_Control_R.c"
+#if defined(__AVR__)
+	#define  TEMPLATE_FUNC_NAME                    Endpoint_Read_Control_EStream_BE
+	#define  TEMPLATE_BUFFER_OFFSET(Length)        (Length - 1)
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)     eeprom_write_byte((uint8_t*)BufferPtr--, Endpoint_Read_Byte())
+	#include "Template/Template_Endpoint_Control_R.c"
+#endif
 
 #endif
diff --git a/LUFA/Drivers/USB/LowLevel/Endpoint.h b/LUFA/Drivers/USB/LowLevel/Endpoint.h
index 6d98b78f08e7cc71e0d7a98ecee7f46c6e4d5487..cf6fbc63209311776b410855ad45faef9cde9c4b 100644
--- a/LUFA/Drivers/USB/LowLevel/Endpoint.h
+++ b/LUFA/Drivers/USB/LowLevel/Endpoint.h
@@ -66,11 +66,17 @@
 #define __ENDPOINT_H__
 
 	/* Includes: */
-		#include <avr/io.h>
-		#include <avr/pgmspace.h>
-		#include <avr/eeprom.h>
-		#include <stdbool.h>
-
+		#if defined(__AVR32__)
+			#include <avr32/io.h>
+			#include <stdint.h>
+			#include <stdbool.h>
+		#elif defined(__AVR__)
+			#include <avr/io.h>
+			#include <avr/pgmspace.h>
+			#include <avr/eeprom.h>
+			#include <stdbool.h>
+		#endif
+		
 		#include "../../../Common/Common.h"
 		#include "../HighLevel/USBTask.h"
 
@@ -486,7 +492,11 @@
 			static inline uint8_t Endpoint_Read_Byte(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
 			static inline uint8_t Endpoint_Read_Byte(void)
 			{
+				#if defined(__AVR32__)
+				return 0; // TODO
+				#elif defined(__AVR__)
 				return UEDATX;
+				#endif
 			}
 
 			/** Writes one byte from the currently selected endpoint's bank, for IN direction endpoints.
@@ -498,7 +508,11 @@
 			static inline void Endpoint_Write_Byte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
 			static inline void Endpoint_Write_Byte(const uint8_t Byte)
 			{
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				UEDATX = Byte;
+				#endif
 			}
 
 			/** Discards one byte from the currently selected endpoint's bank, for OUT direction endpoints.
@@ -510,7 +524,11 @@
 			{
 				uint8_t Dummy;
 				
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				Dummy = UEDATX;
+				#endif
 			}
 			
 			/** Reads two bytes from the currently selected endpoint's bank in little endian format, for OUT
@@ -529,8 +547,12 @@
 					uint8_t  Bytes[2];
 				} Data;
 				
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				Data.Bytes[0] = UEDATX;
 				Data.Bytes[1] = UEDATX;
+				#endif
 			
 				return Data.Word;
 			}
@@ -551,8 +573,12 @@
 					uint8_t  Bytes[2];
 				} Data;
 				
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				Data.Bytes[1] = UEDATX;
 				Data.Bytes[0] = UEDATX;
+				#endif
 			
 				return Data.Word;
 			}
@@ -567,8 +593,12 @@
 			static inline void Endpoint_Write_Word_LE(const uint16_t Word) ATTR_ALWAYS_INLINE;
 			static inline void Endpoint_Write_Word_LE(const uint16_t Word)
 			{
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				UEDATX = (Word & 0xFF);
 				UEDATX = (Word >> 8);
+				#endif
 			}
 			
 			/** Writes two bytes to the currently selected endpoint's bank in big endian format, for IN
@@ -581,8 +611,12 @@
 			static inline void Endpoint_Write_Word_BE(const uint16_t Word) ATTR_ALWAYS_INLINE;
 			static inline void Endpoint_Write_Word_BE(const uint16_t Word)
 			{
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				UEDATX = (Word >> 8);
 				UEDATX = (Word & 0xFF);
+				#endif
 			}
 
 			/** Discards two bytes from the currently selected endpoint's bank, for OUT direction endpoints.
@@ -594,8 +628,12 @@
 			{
 				uint8_t Dummy;
 				
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				Dummy = UEDATX;
 				Dummy = UEDATX;
+				#endif
 			}
 
 			/** Reads four bytes from the currently selected endpoint's bank in little endian format, for OUT
@@ -614,10 +652,14 @@
 					uint8_t  Bytes[4];
 				} Data;
 				
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				Data.Bytes[0] = UEDATX;
 				Data.Bytes[1] = UEDATX;
 				Data.Bytes[2] = UEDATX;
 				Data.Bytes[3] = UEDATX;
+				#endif
 			
 				return Data.DWord;
 			}
@@ -638,10 +680,14 @@
 					uint8_t  Bytes[4];
 				} Data;
 				
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				Data.Bytes[3] = UEDATX;
 				Data.Bytes[2] = UEDATX;
 				Data.Bytes[1] = UEDATX;
 				Data.Bytes[0] = UEDATX;
+				#endif
 			
 				return Data.DWord;
 			}
@@ -656,10 +702,14 @@
 			static inline void Endpoint_Write_DWord_LE(const uint32_t DWord) ATTR_ALWAYS_INLINE;
 			static inline void Endpoint_Write_DWord_LE(const uint32_t DWord)
 			{
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				UEDATX = (DWord &  0xFF);
 				UEDATX = (DWord >> 8);
 				UEDATX = (DWord >> 16);
 				UEDATX = (DWord >> 24);
+				#endif
 			}
 			
 			/** Writes four bytes to the currently selected endpoint's bank in big endian format, for IN
@@ -672,10 +722,14 @@
 			static inline void Endpoint_Write_DWord_BE(const uint32_t DWord) ATTR_ALWAYS_INLINE;
 			static inline void Endpoint_Write_DWord_BE(const uint32_t DWord)
 			{
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				UEDATX = (DWord >> 24);
 				UEDATX = (DWord >> 16);
 				UEDATX = (DWord >> 8);
 				UEDATX = (DWord &  0xFF);
+				#endif
 			}
 
 			/** Discards four bytes from the currently selected endpoint's bank, for OUT direction endpoints.	
@@ -687,10 +741,14 @@
 			{
 				uint8_t Dummy;
 				
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				Dummy = UEDATX;
 				Dummy = UEDATX;
 				Dummy = UEDATX;
 				Dummy = UEDATX;
+				#endif
 			}
 
 		/* External Variables: */
diff --git a/LUFA/Drivers/USB/LowLevel/Host.h b/LUFA/Drivers/USB/LowLevel/Host.h
index 5672dd5319cd73de5f2aed41d8e2d9f66c733a04..1e4d3c96d1d11ee5a3b2f4b712180f188b06e6f4 100644
--- a/LUFA/Drivers/USB/LowLevel/Host.h
+++ b/LUFA/Drivers/USB/LowLevel/Host.h
@@ -41,10 +41,16 @@
 #define __USBHOST_H__
 
 	/* Includes: */
-		#include <avr/io.h>
-		#include <stdbool.h>
-		#include <util/delay.h>
-
+		#if defined(__AVR32__)
+			#include <avr32/io.h>
+			#include <stdint.h>
+			#include <stdbool.h>
+		#elif defined(__AVR__)
+			#include <avr/io.h>
+			#include <stdbool.h>
+			#include <util/delay.h>
+		#endif
+		
 		#include "../../../Common/Common.h"
 		#include "../HighLevel/USBInterrupt.h"
 		#include "../HighLevel/StdDescriptors.h"
diff --git a/LUFA/Drivers/USB/LowLevel/HostChapter9.h b/LUFA/Drivers/USB/LowLevel/HostChapter9.h
index 1a85cf6d617141c50cfba1052410d74af80ddb3e..1bd8b6f971913dcddfe057f39c95b9dc80822e17 100644
--- a/LUFA/Drivers/USB/LowLevel/HostChapter9.h
+++ b/LUFA/Drivers/USB/LowLevel/HostChapter9.h
@@ -32,8 +32,14 @@
 #define __HOSTCHAPTER9_H__
 
 	/* Includes: */
-		#include <avr/io.h>
-		#include <stdbool.h>
+		#if defined(__AVR32__)
+			#include <avr32/io.h>
+			#include <stdint.h>
+			#include <stdbool.h>
+		#elif defined(__AVR__)
+			#include <avr/io.h>
+			#include <stdbool.h>
+		#endif
 		
 		#include "LowLevel.h"
 		#include "../HighLevel/USBMode.h"
diff --git a/LUFA/Drivers/USB/LowLevel/LowLevel.h b/LUFA/Drivers/USB/LowLevel/LowLevel.h
index 1a92d470b72c1ca2b12464a039a76baaa1207d80..581dfd11361a9fba262c3bf304b046cfd3158b06 100644
--- a/LUFA/Drivers/USB/LowLevel/LowLevel.h
+++ b/LUFA/Drivers/USB/LowLevel/LowLevel.h
@@ -40,10 +40,16 @@
 #define __USBLOWLEVEL_H__
 
 	/* Includes: */
-		#include <avr/io.h>
-		#include <avr/interrupt.h>
-		#include <stdbool.h>
-		
+		#if defined(__AVR32__)
+			#include <avr32/io.h>
+			#include <stdint.h>
+			#include <stdbool.h>
+		#elif defined(__AVR__)
+			#include <avr/io.h>
+			#include <avr/interrupt.h>
+			#include <stdbool.h>
+		#endif
+				
 		#include "../HighLevel/USBMode.h"
 
 		#include "../../../Common/Common.h"
diff --git a/LUFA/Drivers/USB/LowLevel/OTG.h b/LUFA/Drivers/USB/LowLevel/OTG.h
index 25cb180a14ac0253ff512b4b944910f6f68f346f..acbd47937af1e03d585aad9a0506b2ad45115726 100644
--- a/LUFA/Drivers/USB/LowLevel/OTG.h
+++ b/LUFA/Drivers/USB/LowLevel/OTG.h
@@ -42,8 +42,14 @@
 #define __USBOTG_H__
 
 	/* Includes: */
-		#include <avr/io.h>
-		#include <stdbool.h>
+		#if defined(__AVR32__)
+			#include <avr32/io.h>
+			#include <stdint.h>
+			#include <stdbool.h>
+		#elif defined(__AVR__)
+			#include <avr/io.h>
+			#include <stdbool.h>
+		#endif
 		
 		#include "../../../Common/Common.h"
 
diff --git a/LUFA/Drivers/USB/LowLevel/Pipe.c b/LUFA/Drivers/USB/LowLevel/Pipe.c
index 78c82e8c4722830d5c3233d28ae10c8744254b41..e6ac0e57c6dc0540b37a6fc2d355e82372cb87e1 100644
--- a/LUFA/Drivers/USB/LowLevel/Pipe.c
+++ b/LUFA/Drivers/USB/LowLevel/Pipe.c
@@ -226,13 +226,15 @@ uint8_t Pipe_Discard_Stream(uint16_t Length
 #define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Pipe_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr++))
 #include "Template/Template_Pipe_RW.c"
 
-#define  TEMPLATE_FUNC_NAME                        Pipe_Write_EStream_LE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_TOKEN                            PIPE_TOKEN_OUT
-#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Pipe_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))
-#include "Template/Template_Pipe_RW.c"
+#if defined(__AVR__)
+	#define  TEMPLATE_FUNC_NAME                    Pipe_Write_EStream_LE
+	#define  TEMPLATE_BUFFER_TYPE                  const void*
+	#define  TEMPLATE_TOKEN                        PIPE_TOKEN_OUT
+	#define  TEMPLATE_CLEAR_PIPE()                 Pipe_ClearOUT()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)        0
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)     Pipe_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))
+	#include "Template/Template_Pipe_RW.c"
+#endif
 
 #define  TEMPLATE_FUNC_NAME                        Pipe_Write_Stream_BE
 #define  TEMPLATE_BUFFER_TYPE                      const void*
@@ -250,13 +252,15 @@ uint8_t Pipe_Discard_Stream(uint16_t Length
 #define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Pipe_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr--))
 #include "Template/Template_Pipe_RW.c"
 
-#define  TEMPLATE_FUNC_NAME                        Pipe_Write_EStream_BE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_TOKEN                            PIPE_TOKEN_OUT
-#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Pipe_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))
-#include "Template/Template_Pipe_RW.c"
+#if defined(__AVR__)
+	#define  TEMPLATE_FUNC_NAME                    Pipe_Write_EStream_BE
+	#define  TEMPLATE_BUFFER_TYPE                  const void*
+	#define  TEMPLATE_TOKEN                        PIPE_TOKEN_OUT
+	#define  TEMPLATE_CLEAR_PIPE()                 Pipe_ClearOUT()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)        (Length - 1)
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)     Pipe_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))
+	#include "Template/Template_Pipe_RW.c"
+#endif
 
 #define  TEMPLATE_FUNC_NAME                        Pipe_Read_Stream_LE
 #define  TEMPLATE_BUFFER_TYPE                      void*
@@ -266,13 +270,15 @@ uint8_t Pipe_Discard_Stream(uint16_t Length
 #define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *((uint8_t*)BufferPtr++) = Pipe_Read_Byte()
 #include "Template/Template_Pipe_RW.c"
 
-#define  TEMPLATE_FUNC_NAME                        Pipe_Read_EStream_LE
-#define  TEMPLATE_BUFFER_TYPE                      void*
-#define  TEMPLATE_TOKEN                            PIPE_TOKEN_IN
-#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_write_byte((uint8_t*)BufferPtr++, Pipe_Read_Byte())
-#include "Template/Template_Pipe_RW.c"
+#if defined(__AVR__)
+	#define  TEMPLATE_FUNC_NAME                    Pipe_Read_EStream_LE
+	#define  TEMPLATE_BUFFER_TYPE                  void*
+	#define  TEMPLATE_TOKEN                        PIPE_TOKEN_IN
+	#define  TEMPLATE_CLEAR_PIPE()                 Pipe_ClearIN()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)        0
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)     eeprom_write_byte((uint8_t*)BufferPtr++, Pipe_Read_Byte())
+	#include "Template/Template_Pipe_RW.c"
+#endif
 
 #define  TEMPLATE_FUNC_NAME                        Pipe_Read_Stream_BE
 #define  TEMPLATE_BUFFER_TYPE                      void*
@@ -282,12 +288,14 @@ uint8_t Pipe_Discard_Stream(uint16_t Length
 #define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *((uint8_t*)BufferPtr--) = Pipe_Read_Byte()
 #include "Template/Template_Pipe_RW.c"
 
-#define  TEMPLATE_FUNC_NAME                        Pipe_Read_EStream_BE
-#define  TEMPLATE_BUFFER_TYPE                      void*
-#define  TEMPLATE_TOKEN                            PIPE_TOKEN_IN
-#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_write_byte((uint8_t*)BufferPtr--, Pipe_Read_Byte())
-#include "Template/Template_Pipe_RW.c"
+#if defined(__AVR__)
+	#define  TEMPLATE_FUNC_NAME                    Pipe_Read_EStream_BE
+	#define  TEMPLATE_BUFFER_TYPE                  void*
+	#define  TEMPLATE_TOKEN                        PIPE_TOKEN_IN
+	#define  TEMPLATE_CLEAR_PIPE()                 Pipe_ClearIN()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)        (Length - 1)
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)     eeprom_write_byte((uint8_t*)BufferPtr--, Pipe_Read_Byte())
+	#include "Template/Template_Pipe_RW.c"
+#endif
 
 #endif
diff --git a/LUFA/Drivers/USB/LowLevel/Pipe.h b/LUFA/Drivers/USB/LowLevel/Pipe.h
index 3e25d4976b07efd9660e7152d2a925190966fd20..08935e1f111b2648e1fe53204544e91b1c731bea 100644
--- a/LUFA/Drivers/USB/LowLevel/Pipe.h
+++ b/LUFA/Drivers/USB/LowLevel/Pipe.h
@@ -74,10 +74,16 @@
 #define __PIPE_H__
 
 	/* Includes: */
-		#include <avr/io.h>
-		#include <avr/pgmspace.h>
-		#include <avr/eeprom.h>
-		#include <stdbool.h>
+		#if defined(__AVR32__)
+			#include <avr32/io.h>
+			#include <stdint.h>
+			#include <stdbool.h>
+		#elif defined(__AVR__)
+			#include <avr/io.h>
+			#include <avr/pgmspace.h>
+			#include <avr/eeprom.h>
+			#include <stdbool.h>
+		#endif
 
 		#include "../../../Common/Common.h"
 		#include "../HighLevel/USBTask.h"
@@ -547,7 +553,11 @@
 			static inline uint8_t Pipe_Read_Byte(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
 			static inline uint8_t Pipe_Read_Byte(void)
 			{
+				#if defined(__AVR32__)
+				return 0; // TODO
+				#elif defined(__AVR__)
 				return UPDATX;
+				#endif
 			}
 
 			/** Writes one byte from the currently selected pipe's bank, for IN direction pipes.
@@ -559,7 +569,11 @@
 			static inline void Pipe_Write_Byte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
 			static inline void Pipe_Write_Byte(const uint8_t Byte)
 			{
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				UPDATX = Byte;
+				#endif
 			}
 
 			/** Discards one byte from the currently selected pipe's bank, for OUT direction pipes.
@@ -571,7 +585,11 @@
 			{
 				uint8_t Dummy;
 				
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				Dummy = UPDATX;
+				#endif
 			}
 			
 			/** Reads two bytes from the currently selected pipe's bank in little endian format, for OUT
@@ -590,8 +608,12 @@
 					uint8_t  Bytes[2];
 				} Data;
 				
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				Data.Bytes[0] = UPDATX;
 				Data.Bytes[1] = UPDATX;
+				#endif
 			
 				return Data.Word;
 			}
@@ -612,8 +634,12 @@
 					uint8_t  Bytes[2];
 				} Data;
 				
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				Data.Bytes[1] = UPDATX;
 				Data.Bytes[0] = UPDATX;
+				#endif
 			
 				return Data.Word;
 			}
@@ -628,8 +654,12 @@
 			static inline void Pipe_Write_Word_LE(const uint16_t Word) ATTR_ALWAYS_INLINE;
 			static inline void Pipe_Write_Word_LE(const uint16_t Word)
 			{
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				UPDATX = (Word & 0xFF);
 				UPDATX = (Word >> 8);
+				#endif
 			}
 			
 			/** Writes two bytes to the currently selected pipe's bank in big endian format, for IN
@@ -642,8 +672,12 @@
 			static inline void Pipe_Write_Word_BE(const uint16_t Word) ATTR_ALWAYS_INLINE;
 			static inline void Pipe_Write_Word_BE(const uint16_t Word)
 			{
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				UPDATX = (Word >> 8);
 				UPDATX = (Word & 0xFF);
+				#endif
 			}
 
 			/** Discards two bytes from the currently selected pipe's bank, for OUT direction pipes.
@@ -655,8 +689,12 @@
 			{
 				uint8_t Dummy;
 				
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				Dummy = UPDATX;
 				Dummy = UPDATX;
+				#endif
 			}
 
 			/** Reads four bytes from the currently selected pipe's bank in little endian format, for OUT
@@ -675,10 +713,14 @@
 					uint8_t  Bytes[4];
 				} Data;
 				
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				Data.Bytes[0] = UPDATX;
 				Data.Bytes[1] = UPDATX;
 				Data.Bytes[2] = UPDATX;
 				Data.Bytes[3] = UPDATX;
+				#endif
 			
 				return Data.DWord;
 			}
@@ -699,6 +741,9 @@
 					uint8_t  Bytes[4];
 				} Data;
 				
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				Data.Bytes[3] = UPDATX;
 				Data.Bytes[2] = UPDATX;
 				Data.Bytes[1] = UPDATX;
@@ -717,10 +762,14 @@
 			static inline void Pipe_Write_DWord_LE(const uint32_t DWord) ATTR_ALWAYS_INLINE;
 			static inline void Pipe_Write_DWord_LE(const uint32_t DWord)
 			{
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				UPDATX = (DWord &  0xFF);
 				UPDATX = (DWord >> 8);
 				UPDATX = (DWord >> 16);
 				UPDATX = (DWord >> 24);
+				#endif
 			}
 			
 			/** Writes four bytes to the currently selected pipe's bank in big endian format, for IN
@@ -733,10 +782,14 @@
 			static inline void Pipe_Write_DWord_BE(const uint32_t DWord) ATTR_ALWAYS_INLINE;
 			static inline void Pipe_Write_DWord_BE(const uint32_t DWord)
 			{
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				UPDATX = (DWord >> 24);
 				UPDATX = (DWord >> 16);
 				UPDATX = (DWord >> 8);
 				UPDATX = (DWord &  0xFF);
+				#endif
 			}			
 			
 			/** Discards four bytes from the currently selected pipe's bank, for OUT direction pipes.	
@@ -748,10 +801,14 @@
 			{
 				uint8_t Dummy;
 				
+				#if defined(__AVR32__)
+				// TODO
+				#elif defined(__AVR__)
 				Dummy = UPDATX;
 				Dummy = UPDATX;
 				Dummy = UPDATX;
 				Dummy = UPDATX;
+				#endif
 			}
 
 		/* External Variables: */
diff --git a/LUFA/Drivers/USB/USB.h b/LUFA/Drivers/USB/USB.h
index 3bc356d8e77531529baa098afb96a26ada0269ff..484978bedea7dad7b8688c50b3bec2ac0f996b76 100644
--- a/LUFA/Drivers/USB/USB.h
+++ b/LUFA/Drivers/USB/USB.h
@@ -360,7 +360,8 @@
 
 	/* Preprocessor Checks: */		
 		#if (!defined(USB_SERIES_2_AVR) && !defined(USB_SERIES_4_AVR) && \
-		     !defined(USB_SERIES_6_AVR) && !defined(USB_SERIES_7_AVR))
+		     !defined(USB_SERIES_6_AVR) && !defined(USB_SERIES_7_AVR) && \
+			 !defined(USB_SERIES_UC3B_AVR))
 			#error The currently selected AVR model is not supported under the USB component of the LUFA library.
 		#endif
 		
diff --git a/LUFA/ManPages/FutureChanges.txt b/LUFA/ManPages/FutureChanges.txt
index 53c074b0129586b084ab72d91fda7418007d9ae2..86114f43458c3f49ea0491cabb867a8b4fcdc6a8 100644
--- a/LUFA/ManPages/FutureChanges.txt
+++ b/LUFA/ManPages/FutureChanges.txt
@@ -46,11 +46,11 @@
   *
   *  The following drivers have been partially ported:
   *    - SPI Peripheral Driver
+  *    - USB Driver
   *
   *  The following drivers have not yet been ported:
   *    - Dataflash Board Driver
   *    - Serial Peripheral Driver
   *    - ADC Peripheral Driver
   *    - TWI Peripheral Driver
-  *    - USB Driver
   */