diff --git a/LUFA/ChangeLog.txt b/LUFA/ChangeLog.txt
index 6d19e79624e1c20c950bc919c8b2f662535c09a9..b4ecc89515608aa361a0cfe40e68e83f6024c930 100644
--- a/LUFA/ChangeLog.txt
+++ b/LUFA/ChangeLog.txt
@@ -20,6 +20,8 @@
   *    to early-abort
   *  - Move StdRequestType.h, StreamCallbacks.h, USBMode.h from the LowLevel USB driver directory to the HighLevel USB driver directory,
   *    where they are more suited
+  *  - Removed all binary constants and replaced with decimal or hexadecimal constants so that unpatched GCC compilers can still build the
+  *    code without having to be itself patched and recompiled first
   *
   *  \section Sec_ChangeLog090401 Version 090401
   *
diff --git a/LUFA/Drivers/USB/Class/ConfigDescriptor.h b/LUFA/Drivers/USB/Class/ConfigDescriptor.h
index d42b71cce02a2228a3b11b7819135d6f99dd0357..bd92b51f3a568dbf07cd04aa6fea5a9d3daee36e 100644
--- a/LUFA/Drivers/USB/Class/ConfigDescriptor.h
+++ b/LUFA/Drivers/USB/Class/ConfigDescriptor.h
@@ -52,6 +52,11 @@
 
 	/* Public Interface - May be used in end-application: */
 		/* Macros: */
+			/** Mask for determining the type of an endpoint from an endpoint descriptor. This should then be compared
+			 *  with the EP_TYPE_* masks to determine the exact type of the endpoint.
+			 */
+			#define EP_TYPE_MASK                       0x03
+
 			/** Casts a pointer to a descriptor inside the configuration descriptor into a pointer to the given
 			 *  descriptor type.
 			 *
diff --git a/LUFA/Drivers/USB/Class/HIDReportData.h b/LUFA/Drivers/USB/Class/HIDReportData.h
index 0961cd40cd70f9980966438ca45589da1288bf4c..b1468a31a69fee6b9dbe0d6b48dfd0e084e057d1 100644
--- a/LUFA/Drivers/USB/Class/HIDReportData.h
+++ b/LUFA/Drivers/USB/Class/HIDReportData.h
@@ -90,39 +90,41 @@
 	/* Private Interface - For use in library only: */
 	#if !defined(__DOXYGEN__)
 		/* Macros: */
-			#define DATA_SIZE_MASK           0b00000011
-			#define TYPE_MASK                0b00001100
-			#define TAG_MASK                 0b11110000
-
-			#define DATA_SIZE_0              0b00000000
-			#define DATA_SIZE_1              0b00000001
-			#define DATA_SIZE_2              0b00000010
-			#define DATA_SIZE_4              0b00000011
+			#define DATA_SIZE_MASK           0x03
+			#define TYPE_MASK                0x0C
+			#define TAG_MASK                 0xF0
+
+			#define DATA_SIZE_0              0x00
+			#define DATA_SIZE_1              0x01
+			#define DATA_SIZE_2              0x02
+			#define DATA_SIZE_4              0x03
 			
-			#define TYPE_MAIN                0b00000000
-			#define TYPE_GLOBAL              0b00000100
-			#define TYPE_LOCAL               0b00001000
+			#define TYPE_MAIN                0x00
+			#define TYPE_GLOBAL              0x04
+			#define TYPE_LOCAL               0x08
 			
-			#define TAG_MAIN_INPUT           0b10000000
-			#define TAG_MAIN_OUTPUT          0b10010000
-			#define TAG_MAIN_COLLECTION      0b10100000
-			#define TAG_MAIN_FEATURE         0b10110000
-			#define TAG_MAIN_ENDCOLLECTION   0b11000000
-			#define TAG_GLOBAL_USAGEPAGE     0b00000000
-			#define TAG_GLOBAL_LOGICALMIN    0b00010000
-			#define TAG_GLOBAL_LOGICALMAX    0b00100000
-			#define TAG_GLOBAL_PHYSMIN       0b00110000
-			#define TAG_GLOBAL_PHYSMAX       0b01000000
-			#define TAG_GLOBAL_UNITEXP       0b01010000
-			#define TAG_GLOBAL_UNIT          0b01100000
-			#define TAG_GLOBAL_REPORTSIZE    0b01110000
-			#define TAG_GLOBAL_REPORTID      0b10000000
-			#define TAG_GLOBAL_REPORTCOUNT   0b10010000
-			#define TAG_GLOBAL_PUSH          0b10100000
-			#define TAG_GLOBAL_POP           0b10110000
-			#define TAG_LOCAL_USAGE          0b00000000
-			#define TAG_LOCAL_USAGEMIN       0b00010000
-			#define TAG_LOCAL_USAGEMAX       0b00100000
+			#define TAG_MAIN_INPUT           0x80
+			#define TAG_MAIN_OUTPUT          0x90
+			#define TAG_MAIN_COLLECTION      0xA0
+			#define TAG_MAIN_FEATURE         0xB0
+			#define TAG_MAIN_ENDCOLLECTION   0xC0
+
+			#define TAG_GLOBAL_USAGEPAGE     0x00
+			#define TAG_GLOBAL_LOGICALMIN    0x10
+			#define TAG_GLOBAL_LOGICALMAX    0x20
+			#define TAG_GLOBAL_PHYSMIN       0x30
+			#define TAG_GLOBAL_PHYSMAX       0x40
+			#define TAG_GLOBAL_UNITEXP       0x50
+			#define TAG_GLOBAL_UNIT          0x60
+			#define TAG_GLOBAL_REPORTSIZE    0x70
+			#define TAG_GLOBAL_REPORTID      0x80
+			#define TAG_GLOBAL_REPORTCOUNT   0x90
+			#define TAG_GLOBAL_PUSH          0xA0
+			#define TAG_GLOBAL_POP           0xB0
+			
+			#define TAG_LOCAL_USAGE          0x00
+			#define TAG_LOCAL_USAGEMIN       0x10
+			#define TAG_LOCAL_USAGEMAX       0x20
 	#endif
 		
 #endif
diff --git a/LUFA/Drivers/USB/HighLevel/StdDescriptors.h b/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
index 7a247cbda40c6a802e57e67b66ab6c6679358ee9..d628363219ad6b40da621842d938b038432fb1ce 100644
--- a/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
+++ b/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
@@ -108,69 +108,69 @@
 			 *  descriptor's ConfigAttributes value to indicate that the specified configuration can draw its power
 			 *  from the host's VBUS line.
 			 */
-			#define USB_CONFIG_ATTR_BUSPOWERED        0b10000000
+			#define USB_CONFIG_ATTR_BUSPOWERED        0x80
 
 			/** Can be masked with other configuration descriptor attributes for a USB_Descriptor_Configuration_Header_t
 			 *  descriptor's ConfigAttributes value to indicate that the specified configuration can draw its power
 			 *  from the device's own power source.
 			 */
-			#define USB_CONFIG_ATTR_SELFPOWERED       0b11000000
+			#define USB_CONFIG_ATTR_SELFPOWERED       0xC0
 
 			/** Can be masked with other configuration descriptor attributes for a USB_Descriptor_Configuration_Header_t
 			 *  descriptor's ConfigAttributes value to indicate that the specified configuration supports the
 			 *  remote wakeup feature of the USB standard, allowing a suspended USB device to wake up the host upon
 			 *  request.
 			 */
-			#define USB_CONFIG_ATTR_REMOTEWAKEUP      0b10100000
+			#define USB_CONFIG_ATTR_REMOTEWAKEUP      0xA0
 
 			/** Can be masked with other endpoint descriptor attributes for a USB_Descriptor_Endpoint_t descriptor's
 			 *  Attributes value to indicate that the specified endpoint is not synchronized.
 			 *
 			 *  \see The USB specification for more details on the possible Endpoint attributes.
 			 */
-			#define ENDPOINT_ATTR_NO_SYNC             (0b00 << 2)
+			#define ENDPOINT_ATTR_NO_SYNC             (0 << 2)
 
 			/** Can be masked with other endpoint descriptor attributes for a USB_Descriptor_Endpoint_t descriptor's
 			 *  Attributes value to indicate that the specified endpoint is asynchronous.
 			 *
 			 *  \see The USB specification for more details on the possible Endpoint attributes.
 			 */
-			#define ENDPOINT_ATTR_ASYNC               (0b01 << 2)
+			#define ENDPOINT_ATTR_ASYNC               (1 << 2)
 
 			/** Can be masked with other endpoint descriptor attributes for a USB_Descriptor_Endpoint_t descriptor's
 			 *  Attributes value to indicate that the specified endpoint is adaptive.
 			 *
 			 *  \see The USB specification for more details on the possible Endpoint attributes.
 			 */
-			#define ENDPOINT_ATTR_ADAPTIVE            (0b10 << 2)
+			#define ENDPOINT_ATTR_ADAPTIVE            (2 << 2)
 
 			/** Can be masked with other endpoint descriptor attributes for a USB_Descriptor_Endpoint_t descriptor's
 			 *  Attributes value to indicate that the specified endpoint is synchronized.
 			 *
 			 *  \see The USB specification for more details on the possible Endpoint attributes.
 			 */
-			#define ENDPOINT_ATTR_SYNC                (0b11 << 2)
+			#define ENDPOINT_ATTR_SYNC                (3 << 2)
 			
 			/** Can be masked with other endpoint descriptor attributes for a USB_Descriptor_Endpoint_t descriptor's
 			 *  Attributes value to indicate that the specified endpoint is used for data transfers.
 			 *
 			 *  \see The USB specification for more details on the possible Endpoint usage attributes.
 			 */
-			#define ENDPOINT_USAGE_DATA               (0b00 << 4)
+			#define ENDPOINT_USAGE_DATA               (0 << 4)
 
 			/** Can be masked with other endpoint descriptor attributes for a USB_Descriptor_Endpoint_t descriptor's
 			 *  Attributes value to indicate that the specified endpoint is used for feedback.
 			 *
 			 *  \see The USB specification for more details on the possible Endpoint usage attributes.
 			 */
-			#define ENDPOINT_USAGE_FEEDBACK           (0b01 << 4)
+			#define ENDPOINT_USAGE_FEEDBACK           (1 << 4)
 
 			/** Can be masked with other endpoint descriptor attributes for a USB_Descriptor_Endpoint_t descriptor's
 			 *  Attributes value to indicate that the specified endpoint is used for implicit feedback.
 			 *
 			 *  \see The USB specification for more details on the possible Endpoint usage attributes.
 			 */
-			#define ENDPOINT_USAGE_IMPLICIT_FEEDBACK  (0b10 << 4)
+			#define ENDPOINT_USAGE_IMPLICIT_FEEDBACK  (2 << 4)
 
 			/** Gives a void pointer to the specified descriptor (of any type). */
 			#define DESCRIPTOR_ADDRESS(Descriptor)    ((void*)&Descriptor)
diff --git a/LUFA/Drivers/USB/HighLevel/StdRequestType.h b/LUFA/Drivers/USB/HighLevel/StdRequestType.h
index 02d4fdc58dddb839e631bd36a343580886e6e82e..423de6d9c95a44c963583766b228fe2d8d3e957c 100644
--- a/LUFA/Drivers/USB/HighLevel/StdRequestType.h
+++ b/LUFA/Drivers/USB/HighLevel/StdRequestType.h
@@ -44,14 +44,14 @@
 			 *
 			 *  \see REQDIR_* macros for masks indicating the request data direction.
 			 */
-			#define CONTROL_REQTYPE_DIRECTION  0b10000000
+			#define CONTROL_REQTYPE_DIRECTION  0x80
 
 			/** Mask for the request type parameter, to indicate the type of request (Device, Class or Vendor
 			 *  Specific). The result of this mask should then be compared to the request type masks.
 			 *
 			 *  \see REQTYPE_* macros for masks indicating the request type.
 			 */
-			#define CONTROL_REQTYPE_TYPE       0b01100000
+			#define CONTROL_REQTYPE_TYPE       0x60
 
 			/** Mask for the request type parameter, to indicate the recipient of the request (Standard, Class
 			 *  or Vendor Specific). The result of this mask should then be compared to the request recipient
@@ -59,7 +59,7 @@
 			 *
 			 *  \see REQREC_* macros for masks indicating the request recipient.
 			 */
-			#define CONTROL_REQTYPE_RECIPIENT  0b00011111
+			#define CONTROL_REQTYPE_RECIPIENT  0x1F
 
 			/** Request data direction mask, indicating that the request data will flow from host to device.
 			 *
diff --git a/LUFA/Drivers/USB/LowLevel/Endpoint.h b/LUFA/Drivers/USB/LowLevel/Endpoint.h
index 009d8622db58f83bfc9be7c958a4b49bbc5c87e5..c0eab3584eba5b2bfe8d6ce2660ee36e7abcbc4a 100644
--- a/LUFA/Drivers/USB/LowLevel/Endpoint.h
+++ b/LUFA/Drivers/USB/LowLevel/Endpoint.h
@@ -95,7 +95,7 @@
 			/** Endpoint number mask, for masking against endpoint addresses to retrieve the endpoint's
 			 *  numerical address in the device.
 			 */
-			#define ENDPOINT_EPNUM_MASK                   0b111
+			#define ENDPOINT_EPNUM_MASK                   0x03
 
 			/** Endpoint bank size mask, for masking against endpoint addresses to retrieve the endpoint's
 			 *  bank size in the device.
diff --git a/LUFA/Drivers/USB/LowLevel/Host.h b/LUFA/Drivers/USB/LowLevel/Host.h
index 427ed85ee2f0bba2a5b0eb67f891ec547cc88e2a..18eebfec1dbece4ed0cd8eec9727abe33fdc6ad5 100644
--- a/LUFA/Drivers/USB/LowLevel/Host.h
+++ b/LUFA/Drivers/USB/LowLevel/Host.h
@@ -221,7 +221,7 @@
 			#define USB_Host_VBUS_Auto_Off()        MACROS{ OTGCON |=  (1 << VBUSRQC);        }MACROE
 			#define USB_Host_VBUS_Manual_Off()      MACROS{ PORTE  &= ~(1 << 7);              }MACROE
 
-			#define USB_Host_SetDeviceAddress(addr) MACROS{ UHADDR  =  (addr & 0b01111111);   }MACROE
+			#define USB_Host_SetDeviceAddress(addr) MACROS{ UHADDR  =  (addr & 0x7F);         }MACROE
 
 		/* Enums: */
 			enum USB_Host_WaitMSErrorCodes_t
diff --git a/LUFA/Drivers/USB/LowLevel/LowLevel.h b/LUFA/Drivers/USB/LowLevel/LowLevel.h
index 94d8c83c9dacf5c108b3a1f0e05d283417815e5c..07be4396d2cd1e9af79741e0e288b0a235f34b30 100644
--- a/LUFA/Drivers/USB/LowLevel/LowLevel.h
+++ b/LUFA/Drivers/USB/LowLevel/LowLevel.h
@@ -160,32 +160,25 @@
 			 *
 			 *  \note See Endpoint.h and Pipe.h headers for endpoint/pipe functions.
 			 */
-			#define EP_TYPE_CONTROL                    0b00
+			#define EP_TYPE_CONTROL                    0x00
 
 			/** Mask for an ISOCHRONOUS type endpoint or pipe.
 			 *
 			 *  \note See Endpoint.h and Pipe.h headers for endpoint/pipe functions.
 			 */
-			#define EP_TYPE_ISOCHRONOUS                0b01
+			#define EP_TYPE_ISOCHRONOUS                0x01
 
 			/** Mask for a BULK type endpoint or pipe.
 			 *
 			 *  \note See Endpoint.h and Pipe.h headers for endpoint/pipe functions.
 			 */
-			#define EP_TYPE_BULK                       0b10
+			#define EP_TYPE_BULK                       0x02
 
 			/** Mask for an INTERRUPT type endpoint or pipe.
 			 *
 			 *  \note See Endpoint.h and Pipe.h headers for endpoint/pipe functions.
 			 */
-			#define EP_TYPE_INTERRUPT                  0b11
-
-			/** Mask for determining the type of an endpoint or pipe. This should then be compared with the
-			 *  EP_TYPE_* macros elsewhere in this module to determine the exact type of the endpoint or pipe.
-			 *
-			 *  \note See Endpoint.h and Pipe.h headers for endpoint/pipe functions.
-			 */
-			#define EP_TYPE_MASK                       0b11
+			#define EP_TYPE_INTERRUPT                  0x03
 
 			#if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) || defined(__DOXYGEN__)
 				/** Returns boolean true if the VBUS line is currently high (i.e. the USB host is supplying power),
diff --git a/LUFA/Drivers/USB/LowLevel/Pipe.h b/LUFA/Drivers/USB/LowLevel/Pipe.h
index a4fdcfd20b0ecdd0349543043b9456ae873a1aff..46a10e493cf365847bcbab6feecff0122ef186d3 100644
--- a/LUFA/Drivers/USB/LowLevel/Pipe.h
+++ b/LUFA/Drivers/USB/LowLevel/Pipe.h
@@ -74,17 +74,17 @@
 			/** Token mask for Pipe_ConfigurePipe(). This sets the pipe as a SETUP token (for CONTROL type pipes),
 			 *  which will trigger a control request on the attached device when data is written to the pipe.
 			 */
-			#define PIPE_TOKEN_SETUP                (0b00 << PTOKEN0)
+			#define PIPE_TOKEN_SETUP                (0 << PTOKEN0)
 
 			/** Token mask for Pipe_ConfigurePipe(). This sets the pipe as a IN token (for non-CONTROL type pipes),
 			 *  indicating that the pipe data will flow from device to host.
 			 */
-			#define PIPE_TOKEN_IN                   (0b01 << PTOKEN0)
+			#define PIPE_TOKEN_IN                   (1 << PTOKEN0)
 
 			/** Token mask for Pipe_ConfigurePipe(). This sets the pipe as a IN token (for non-CONTROL type pipes),
 			 *  indicating that the pipe data will flow from host to device.
 			 */
-			#define PIPE_TOKEN_OUT                  (0b10 << PTOKEN0)
+			#define PIPE_TOKEN_OUT                  (2 << PTOKEN0)
 
 			/** Mask for the bank mode selection for the Pipe_ConfigurePipe() macro. This indicates that the pipe
 			 *  should have one single bank, which requires less USB FIFO memory but results in slower transfers as