diff --git a/Bootloaders/makefile b/Bootloaders/makefile
index ba4f51259c20883c0e267f676c7e9f6c8c74505d..1a4d3457e01b8c65e97308fb5acfe0db9ef51117 100644
--- a/Bootloaders/makefile
+++ b/Bootloaders/makefile
@@ -22,16 +22,18 @@ ifeq ($(MAKELEVEL), 10)
    $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
 endif
 
-# If building without a per-project object directory, we can't build in parallel
+# Need to special-case building without a per-project object directory
 ifeq ($(OBJDIR),)
-   .NOTPARALLEL:
-
-   # Ensure projects are pre-cleaned if the target is the default or "all"
+   # If no target specified, force "clean all" and disallow parallel build   
    ifeq ($(MAKECMDGOALS),)
       MAKECMDGOALS := clean all
+      .NOTPARALLEL:
    endif
+
+   # If one of the targets is to build, force "clean" beforehand and disallow parallel build   
    ifneq ($(findstring all, $(MAKECMDGOALS)),)
       MAKECMDGOALS := clean $(MAKECMDGOALS)
+      .NOTPARALLEL:
    endif
 endif
 
diff --git a/BuildTests/makefile b/BuildTests/makefile
index caa22fb800761aae3e1f6373bd3c994f20f7efc3..901dbadbba9e2ea2e2e372a011dfaad79d2b6f5e 100644
--- a/BuildTests/makefile
+++ b/BuildTests/makefile
@@ -11,6 +11,7 @@
 # not intended to be modified or compiled by non-developers.
 
 all:
+
 %:
 	@echo Executing \"make $@\" on all LUFA build tests.
 	@echo
diff --git a/Demos/Device/ClassDriver/makefile b/Demos/Device/ClassDriver/makefile
index 3a5615e05a55098c73798391bb285415d887fdaa..797a483fa38bd768658da9b49682d6ce203d706c 100644
--- a/Demos/Device/ClassDriver/makefile
+++ b/Demos/Device/ClassDriver/makefile
@@ -22,16 +22,18 @@ ifeq ($(MAKELEVEL), 10)
    $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
 endif
 
-# If building without a per-project object directory, we can't build in parallel
+# Need to special-case building without a per-project object directory
 ifeq ($(OBJDIR),)
-   .NOTPARALLEL:
-
-   # Ensure projects are pre-cleaned if the target is the default or "all"
+   # If no target specified, force "clean all" and disallow parallel build   
    ifeq ($(MAKECMDGOALS),)
       MAKECMDGOALS := clean all
+      .NOTPARALLEL:
    endif
+
+   # If one of the targets is to build, force "clean" beforehand and disallow parallel build   
    ifneq ($(findstring all, $(MAKECMDGOALS)),)
       MAKECMDGOALS := clean $(MAKECMDGOALS)
+      .NOTPARALLEL:
    endif
 endif
 
diff --git a/Demos/Device/LowLevel/makefile b/Demos/Device/LowLevel/makefile
index 3a5615e05a55098c73798391bb285415d887fdaa..797a483fa38bd768658da9b49682d6ce203d706c 100644
--- a/Demos/Device/LowLevel/makefile
+++ b/Demos/Device/LowLevel/makefile
@@ -22,16 +22,18 @@ ifeq ($(MAKELEVEL), 10)
    $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
 endif
 
-# If building without a per-project object directory, we can't build in parallel
+# Need to special-case building without a per-project object directory
 ifeq ($(OBJDIR),)
-   .NOTPARALLEL:
-
-   # Ensure projects are pre-cleaned if the target is the default or "all"
+   # If no target specified, force "clean all" and disallow parallel build   
    ifeq ($(MAKECMDGOALS),)
       MAKECMDGOALS := clean all
+      .NOTPARALLEL:
    endif
+
+   # If one of the targets is to build, force "clean" beforehand and disallow parallel build   
    ifneq ($(findstring all, $(MAKECMDGOALS)),)
       MAKECMDGOALS := clean $(MAKECMDGOALS)
+      .NOTPARALLEL:
    endif
 endif
 
diff --git a/Demos/DualRole/ClassDriver/makefile b/Demos/DualRole/ClassDriver/makefile
index 71fb805ef4d6a9e1581ef7d9078bcc9c21b96d59..b9538fe3b805255f7d7015244d99d9f3defe43c6 100644
--- a/Demos/DualRole/ClassDriver/makefile
+++ b/Demos/DualRole/ClassDriver/makefile
@@ -22,16 +22,18 @@ ifeq ($(MAKELEVEL), 10)
    $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
 endif
 
-# If building without a per-project object directory, we can't build in parallel
+# Need to special-case building without a per-project object directory
 ifeq ($(OBJDIR),)
-   .NOTPARALLEL:
-
-   # Ensure projects are pre-cleaned if the target is the default or "all"
+   # If no target specified, force "clean all" and disallow parallel build   
    ifeq ($(MAKECMDGOALS),)
       MAKECMDGOALS := clean all
+      .NOTPARALLEL:
    endif
+
+   # If one of the targets is to build, force "clean" beforehand and disallow parallel build   
    ifneq ($(findstring all, $(MAKECMDGOALS)),)
       MAKECMDGOALS := clean $(MAKECMDGOALS)
+      .NOTPARALLEL:
    endif
 endif
 
diff --git a/Demos/Host/ClassDriver/makefile b/Demos/Host/ClassDriver/makefile
index a2b14c8a6e63838ad15d655c6b91551f8a5ab1fb..d057a1c698fc03ebb447e0de1aebc0b702db5f18 100644
--- a/Demos/Host/ClassDriver/makefile
+++ b/Demos/Host/ClassDriver/makefile
@@ -22,16 +22,18 @@ ifeq ($(MAKELEVEL), 10)
    $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
 endif
 
-# If building without a per-project object directory, we can't build in parallel
+# Need to special-case building without a per-project object directory
 ifeq ($(OBJDIR),)
-   .NOTPARALLEL:
-
-   # Ensure projects are pre-cleaned if the target is the default or "all"
+   # If no target specified, force "clean all" and disallow parallel build   
    ifeq ($(MAKECMDGOALS),)
       MAKECMDGOALS := clean all
+      .NOTPARALLEL:
    endif
+
+   # If one of the targets is to build, force "clean" beforehand and disallow parallel build   
    ifneq ($(findstring all, $(MAKECMDGOALS)),)
       MAKECMDGOALS := clean $(MAKECMDGOALS)
+      .NOTPARALLEL:
    endif
 endif
 
diff --git a/Demos/Host/LowLevel/makefile b/Demos/Host/LowLevel/makefile
index a2b14c8a6e63838ad15d655c6b91551f8a5ab1fb..d057a1c698fc03ebb447e0de1aebc0b702db5f18 100644
--- a/Demos/Host/LowLevel/makefile
+++ b/Demos/Host/LowLevel/makefile
@@ -22,16 +22,18 @@ ifeq ($(MAKELEVEL), 10)
    $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
 endif
 
-# If building without a per-project object directory, we can't build in parallel
+# Need to special-case building without a per-project object directory
 ifeq ($(OBJDIR),)
-   .NOTPARALLEL:
-
-   # Ensure projects are pre-cleaned if the target is the default or "all"
+   # If no target specified, force "clean all" and disallow parallel build   
    ifeq ($(MAKECMDGOALS),)
       MAKECMDGOALS := clean all
+      .NOTPARALLEL:
    endif
+
+   # If one of the targets is to build, force "clean" beforehand and disallow parallel build   
    ifneq ($(findstring all, $(MAKECMDGOALS)),)
       MAKECMDGOALS := clean $(MAKECMDGOALS)
+      .NOTPARALLEL:
    endif
 endif
 
diff --git a/LUFA/Build/lufa.sources.in b/LUFA/Build/lufa.sources.in
index 10e5c1d70ff1df28f51754b2ffe4da0f1aa2cd32..0e026c54e8b4eea359cb27247bcef6d7427fa525 100644
--- a/LUFA/Build/lufa.sources.in
+++ b/LUFA/Build/lufa.sources.in
@@ -75,7 +75,7 @@ LUFA_SRC_USB         := $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/Device_$(ARCH
                         $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/USBInterrupt_$(ARCH).c    \
                         $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/EndpointStream_$(ARCH).c  \
                         $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/PipeStream_$(ARCH).c      \
-                        $(LUFA_ROOT_PATH)/Drivers/USB/Core/ConfigDescriptor.c                \
+                        $(LUFA_ROOT_PATH)/Drivers/USB/Core/ConfigDescriptors.c               \
                         $(LUFA_ROOT_PATH)/Drivers/USB/Core/DeviceStandardReq.c               \
                         $(LUFA_ROOT_PATH)/Drivers/USB/Core/Events.c                          \
                         $(LUFA_ROOT_PATH)/Drivers/USB/Core/HostStandardReq.c                 \
diff --git a/LUFA/DoxygenPages/MigrationInformation.txt b/LUFA/DoxygenPages/MigrationInformation.txt
index f0fd9b2109ad507f11a6e161c4bab9888dcf6e92..544c94e9ee0dd9c350ce2a21693c3644e6c545aa 100644
--- a/LUFA/DoxygenPages/MigrationInformation.txt
+++ b/LUFA/DoxygenPages/MigrationInformation.txt
@@ -44,6 +44,9 @@
  *    - The MIDI class driver \ref MIDI_EventPacket_t event packet no longer contains seperate \c CableIndex and \c Command entries; these have been combined
  *      into a single \c Event element which can be contructed using the new macro \ref MIDI_EVENT(). Existing applications should use the new macro and structure
  *      element name.
+ *    - The library "LUFA/Drivers/USB/Core/ConfigDescriptor.c" source file has been renamed "LUFA/Drivers/USB/Core/ConfigDescriptors.c" as this was clashing with
+ *      files in some low level host mode demo applications, preventing parallel project builds. If you are referencing the project source files directly instead
+ *      of using the makefile module names, you will need to adjust your project makefile.
  *
  *  \section Sec_Migration120219 Migrating from 111009 to 120219
  *  <b>USB Core</b>
diff --git a/LUFA/Drivers/USB/Core/ConfigDescriptor.c b/LUFA/Drivers/USB/Core/ConfigDescriptors.c
similarity index 99%
rename from LUFA/Drivers/USB/Core/ConfigDescriptor.c
rename to LUFA/Drivers/USB/Core/ConfigDescriptors.c
index 5bdcdc66332abbb998ff3b772bef55b49a18532a..47332d854777c28fa7bc42b66147ba71226a11a3 100644
--- a/LUFA/Drivers/USB/Core/ConfigDescriptor.c
+++ b/LUFA/Drivers/USB/Core/ConfigDescriptors.c
@@ -29,7 +29,7 @@
 */
 
 #define  __INCLUDE_FROM_USB_DRIVER
-#include "ConfigDescriptor.h"
+#include "ConfigDescriptors.h"
 
 #if defined(USB_CAN_BE_HOST)
 uint8_t USB_Host_GetDeviceConfigDescriptor(const uint8_t ConfigNumber,
diff --git a/LUFA/Drivers/USB/Core/ConfigDescriptor.h b/LUFA/Drivers/USB/Core/ConfigDescriptors.h
similarity index 100%
rename from LUFA/Drivers/USB/Core/ConfigDescriptor.h
rename to LUFA/Drivers/USB/Core/ConfigDescriptors.h
diff --git a/LUFA/Drivers/USB/USB.h b/LUFA/Drivers/USB/USB.h
index 626635c8d09aa22918fda58873a0885258a457b4..512f7029f5a2996cb37fbf6ab19406d2c9094b74 100644
--- a/LUFA/Drivers/USB/USB.h
+++ b/LUFA/Drivers/USB/USB.h
@@ -41,7 +41,7 @@
  *
  *  \section Sec_Dependencies Module Source Dependencies
  *  The following files must be built with any user project that uses this module:
- *    - LUFA/Drivers/USB/Core/ConfigDescriptor.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
+ *    - LUFA/Drivers/USB/Core/ConfigDescriptors.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
  *    - LUFA/Drivers/USB/Core/DeviceStandardReq.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
  *    - LUFA/Drivers/USB/Core/Events.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
  *    - LUFA/Drivers/USB/Core/HostStandardReq.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
@@ -382,7 +382,7 @@
 		#include "Core/USBTask.h"
 		#include "Core/Events.h"
 		#include "Core/StdDescriptors.h"
-		#include "Core/ConfigDescriptor.h"
+		#include "Core/ConfigDescriptors.h"
 		#include "Core/USBController.h"
 		#include "Core/USBInterrupt.h"
 
diff --git a/Projects/makefile b/Projects/makefile
index ec8e65b8b795e41cf2a6eae90d1b455d862057ea..f4b411145ae59a0940e66582c4d2349cf04756a1 100644
--- a/Projects/makefile
+++ b/Projects/makefile
@@ -22,16 +22,18 @@ ifeq ($(MAKELEVEL), 10)
    $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
 endif
 
-# If building without a per-project object directory, we can't build in parallel
+# Need to special-case building without a per-project object directory
 ifeq ($(OBJDIR),)
-   .NOTPARALLEL:
-
-   # Ensure projects are pre-cleaned if the target is the default or "all"
+   # If no target specified, force "clean all" and disallow parallel build   
    ifeq ($(MAKECMDGOALS),)
       MAKECMDGOALS := clean all
+      .NOTPARALLEL:
    endif
+
+   # If one of the targets is to build, force "clean" beforehand and disallow parallel build   
    ifneq ($(findstring all, $(MAKECMDGOALS)),)
       MAKECMDGOALS := clean $(MAKECMDGOALS)
+      .NOTPARALLEL:
    endif
 endif
 
diff --git a/makefile b/makefile
index 8005f442a66b57ab8202259eef2d9d2516c7c235..a134dc0abfa25c85b4716815386e0d97b695759e 100644
--- a/makefile
+++ b/makefile
@@ -14,6 +14,7 @@
 # "make help" for additional target build information within a specific project.
 
 all:
+
 %:
 	@echo Executing \"make $@\" on all LUFA library elements.
 	@echo