diff --git a/Demos/AudioInput/AudioInput.aps b/Demos/Device/AudioInput/AudioInput.aps
similarity index 100%
rename from Demos/AudioInput/AudioInput.aps
rename to Demos/Device/AudioInput/AudioInput.aps
diff --git a/Demos/AudioInput/AudioInput.c b/Demos/Device/AudioInput/AudioInput.c
similarity index 100%
rename from Demos/AudioInput/AudioInput.c
rename to Demos/Device/AudioInput/AudioInput.c
diff --git a/Demos/AudioInput/AudioInput.h b/Demos/Device/AudioInput/AudioInput.h
similarity index 100%
rename from Demos/AudioInput/AudioInput.h
rename to Demos/Device/AudioInput/AudioInput.h
diff --git a/Demos/AudioInput/AudioInput.txt b/Demos/Device/AudioInput/AudioInput.txt
similarity index 100%
rename from Demos/AudioInput/AudioInput.txt
rename to Demos/Device/AudioInput/AudioInput.txt
diff --git a/Demos/AudioInput/Descriptors.c b/Demos/Device/AudioInput/Descriptors.c
similarity index 100%
rename from Demos/AudioInput/Descriptors.c
rename to Demos/Device/AudioInput/Descriptors.c
diff --git a/Demos/AudioInput/Descriptors.h b/Demos/Device/AudioInput/Descriptors.h
similarity index 100%
rename from Demos/AudioInput/Descriptors.h
rename to Demos/Device/AudioInput/Descriptors.h
diff --git a/Demos/AudioInput/Doxygen.conf b/Demos/Device/AudioInput/Doxygen.conf
similarity index 100%
rename from Demos/AudioInput/Doxygen.conf
rename to Demos/Device/AudioInput/Doxygen.conf
diff --git a/Demos/AudioInput/makefile b/Demos/Device/AudioInput/makefile
similarity index 93%
rename from Demos/AudioInput/makefile
rename to Demos/Device/AudioInput/makefile
index ff2d83f939d06d810e5efc97502a78b37d925cc3..95297d7988a2f78cb59d16456d1171d00fb40116 100644
--- a/Demos/AudioInput/makefile
+++ b/Demos/Device/AudioInput/makefile
@@ -118,18 +118,23 @@ TARGET = AudioInput
 OBJDIR = .
 
 
+# Path to the LUFA library
+LUFA_PATH = ../../..
+
+
 # List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c                                          \
-	  Descriptors.c                                        \
-	  ../../LUFA/Scheduler/Scheduler.c                     \
-	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/Endpoint.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
-	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
-	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
-	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
-	  ../../LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
-	  
+SRC = $(TARGET).c                                                 \
+	  Descriptors.c                                               \
+	  $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
+
+
 # List C++ source files here. (C dependencies are automatically generated.)
 CPPSRC = 
 
@@ -161,7 +166,7 @@ DEBUG = dwarf-2
 #     Each directory must be seperated by a space.
 #     Use forward slashes for directory separators.
 #     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS = ../../
+EXTRAINCDIRS = $(LUFA_PATH)/
 
 
 # Compiler flag to set the C Standard level.
diff --git a/Demos/AudioOutput/AudioOutput.aps b/Demos/Device/AudioOutput/AudioOutput.aps
similarity index 100%
rename from Demos/AudioOutput/AudioOutput.aps
rename to Demos/Device/AudioOutput/AudioOutput.aps
diff --git a/Demos/AudioOutput/AudioOutput.c b/Demos/Device/AudioOutput/AudioOutput.c
similarity index 100%
rename from Demos/AudioOutput/AudioOutput.c
rename to Demos/Device/AudioOutput/AudioOutput.c
diff --git a/Demos/AudioOutput/AudioOutput.h b/Demos/Device/AudioOutput/AudioOutput.h
similarity index 100%
rename from Demos/AudioOutput/AudioOutput.h
rename to Demos/Device/AudioOutput/AudioOutput.h
diff --git a/Demos/AudioOutput/AudioOutput.txt b/Demos/Device/AudioOutput/AudioOutput.txt
similarity index 100%
rename from Demos/AudioOutput/AudioOutput.txt
rename to Demos/Device/AudioOutput/AudioOutput.txt
diff --git a/Demos/AudioOutput/Descriptors.c b/Demos/Device/AudioOutput/Descriptors.c
similarity index 100%
rename from Demos/AudioOutput/Descriptors.c
rename to Demos/Device/AudioOutput/Descriptors.c
diff --git a/Demos/AudioOutput/Descriptors.h b/Demos/Device/AudioOutput/Descriptors.h
similarity index 100%
rename from Demos/AudioOutput/Descriptors.h
rename to Demos/Device/AudioOutput/Descriptors.h
diff --git a/Demos/AudioOutput/Doxygen.conf b/Demos/Device/AudioOutput/Doxygen.conf
similarity index 100%
rename from Demos/AudioOutput/Doxygen.conf
rename to Demos/Device/AudioOutput/Doxygen.conf
diff --git a/Demos/AudioOutput/makefile b/Demos/Device/AudioOutput/makefile
similarity index 93%
rename from Demos/AudioOutput/makefile
rename to Demos/Device/AudioOutput/makefile
index af99358f5afb3bbb48e1624b08938bc58a056059..7ecd9009cec5a065597cf1a10f846bc5c321c3dd 100644
--- a/Demos/AudioOutput/makefile
+++ b/Demos/Device/AudioOutput/makefile
@@ -118,18 +118,23 @@ TARGET = AudioOutput
 OBJDIR = .
 
 
+# Path to the LUFA library
+LUFA_PATH = ../../..
+
+
 # List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c                                          \
-	  Descriptors.c                                        \
-	  ../../LUFA/Scheduler/Scheduler.c                     \
-	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/Endpoint.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
-	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
-	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
-	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
-	  ../../LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
-	  
+SRC = $(TARGET).c                                                 \
+	  Descriptors.c                                               \
+	  $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
+
+
 # List C++ source files here. (C dependencies are automatically generated.)
 CPPSRC = 
 
@@ -161,7 +166,7 @@ DEBUG = dwarf-2
 #     Each directory must be seperated by a space.
 #     Use forward slashes for directory separators.
 #     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS = ../../
+EXTRAINCDIRS = $(LUFA_PATH)/
 
 
 # Compiler flag to set the C Standard level.
diff --git a/Demos/CDC/CDC.aps b/Demos/Device/CDC/CDC.aps
similarity index 100%
rename from Demos/CDC/CDC.aps
rename to Demos/Device/CDC/CDC.aps
diff --git a/Demos/CDC/CDC.c b/Demos/Device/CDC/CDC.c
similarity index 100%
rename from Demos/CDC/CDC.c
rename to Demos/Device/CDC/CDC.c
diff --git a/Demos/CDC/CDC.h b/Demos/Device/CDC/CDC.h
similarity index 100%
rename from Demos/CDC/CDC.h
rename to Demos/Device/CDC/CDC.h
diff --git a/Demos/CDC/CDC.txt b/Demos/Device/CDC/CDC.txt
similarity index 100%
rename from Demos/CDC/CDC.txt
rename to Demos/Device/CDC/CDC.txt
diff --git a/Demos/CDC/Descriptors.c b/Demos/Device/CDC/Descriptors.c
similarity index 100%
rename from Demos/CDC/Descriptors.c
rename to Demos/Device/CDC/Descriptors.c
diff --git a/Demos/USBtoSerial/Descriptors.h b/Demos/Device/CDC/Descriptors.h
similarity index 100%
rename from Demos/USBtoSerial/Descriptors.h
rename to Demos/Device/CDC/Descriptors.h
diff --git a/Demos/CDC/Doxygen.conf b/Demos/Device/CDC/Doxygen.conf
similarity index 100%
rename from Demos/CDC/Doxygen.conf
rename to Demos/Device/CDC/Doxygen.conf
diff --git a/Demos/CDC/LUFA CDC.inf b/Demos/Device/CDC/LUFA CDC.inf
similarity index 100%
rename from Demos/CDC/LUFA CDC.inf
rename to Demos/Device/CDC/LUFA CDC.inf
diff --git a/Demos/CDC/makefile b/Demos/Device/CDC/makefile
similarity index 93%
rename from Demos/CDC/makefile
rename to Demos/Device/CDC/makefile
index 6547dc8079db7a04c356a98605185ef69d52c70c..6f27fb9268ba771cebcd43cd812f84735882ec90 100644
--- a/Demos/CDC/makefile
+++ b/Demos/Device/CDC/makefile
@@ -118,18 +118,23 @@ TARGET = CDC
 OBJDIR = .
 
 
+# Path to the LUFA library
+LUFA_PATH = ../../..
+
+
 # List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c                                          \
-	  Descriptors.c                                        \
-	  ../../LUFA/Scheduler/Scheduler.c                     \
-	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/Endpoint.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
-	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
-	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
-	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
-	  ../../LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
-	  
+SRC = $(TARGET).c                                                 \
+	  Descriptors.c                                               \
+	  $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
+
+
 # List C++ source files here. (C dependencies are automatically generated.)
 CPPSRC = 
 
@@ -161,7 +166,7 @@ DEBUG = dwarf-2
 #     Each directory must be seperated by a space.
 #     Use forward slashes for directory separators.
 #     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS = ../../
+EXTRAINCDIRS = $(LUFA_PATH)/
 
 
 # Compiler flag to set the C Standard level.
diff --git a/Demos/DualCDC/Descriptors.c b/Demos/Device/DualCDC/Descriptors.c
similarity index 100%
rename from Demos/DualCDC/Descriptors.c
rename to Demos/Device/DualCDC/Descriptors.c
diff --git a/Demos/DualCDC/Descriptors.h b/Demos/Device/DualCDC/Descriptors.h
similarity index 100%
rename from Demos/DualCDC/Descriptors.h
rename to Demos/Device/DualCDC/Descriptors.h
diff --git a/Demos/DualCDC/Doxygen.conf b/Demos/Device/DualCDC/Doxygen.conf
similarity index 100%
rename from Demos/DualCDC/Doxygen.conf
rename to Demos/Device/DualCDC/Doxygen.conf
diff --git a/Demos/DualCDC/DualCDC.aps b/Demos/Device/DualCDC/DualCDC.aps
similarity index 100%
rename from Demos/DualCDC/DualCDC.aps
rename to Demos/Device/DualCDC/DualCDC.aps
diff --git a/Demos/DualCDC/DualCDC.c b/Demos/Device/DualCDC/DualCDC.c
similarity index 100%
rename from Demos/DualCDC/DualCDC.c
rename to Demos/Device/DualCDC/DualCDC.c
diff --git a/Demos/DualCDC/DualCDC.h b/Demos/Device/DualCDC/DualCDC.h
similarity index 100%
rename from Demos/DualCDC/DualCDC.h
rename to Demos/Device/DualCDC/DualCDC.h
diff --git a/Demos/DualCDC/DualCDC.txt b/Demos/Device/DualCDC/DualCDC.txt
similarity index 100%
rename from Demos/DualCDC/DualCDC.txt
rename to Demos/Device/DualCDC/DualCDC.txt
diff --git a/Demos/DualCDC/LUFA DualCDC.inf b/Demos/Device/DualCDC/LUFA DualCDC.inf
similarity index 100%
rename from Demos/DualCDC/LUFA DualCDC.inf
rename to Demos/Device/DualCDC/LUFA DualCDC.inf
diff --git a/Demos/DualCDC/makefile b/Demos/Device/DualCDC/makefile
similarity index 93%
rename from Demos/DualCDC/makefile
rename to Demos/Device/DualCDC/makefile
index 08433130232dfb061331ba2ab4634de71936f56e..b2a8d9e045230e9b5baefb7c74dd76b9093afcdf 100644
--- a/Demos/DualCDC/makefile
+++ b/Demos/Device/DualCDC/makefile
@@ -118,18 +118,23 @@ TARGET = DualCDC
 OBJDIR = .
 
 
+# Path to the LUFA library
+LUFA_PATH = ../../..
+
+
 # List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c                                          \
-	  Descriptors.c                                        \
-	  ../../LUFA/Scheduler/Scheduler.c                     \
-	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/Endpoint.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
-	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
-	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
-	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
-	  ../../LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
-	  
+SRC = $(TARGET).c                                                 \
+	  Descriptors.c                                               \
+	  $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
+
+
 # List C++ source files here. (C dependencies are automatically generated.)
 CPPSRC = 
 
@@ -161,7 +166,7 @@ DEBUG = dwarf-2
 #     Each directory must be seperated by a space.
 #     Use forward slashes for directory separators.
 #     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS = ../../
+EXTRAINCDIRS = $(LUFA_PATH)/
 
 
 # Compiler flag to set the C Standard level.
diff --git a/Demos/Joystick/Descriptors.c b/Demos/Device/Joystick/Descriptors.c
similarity index 100%
rename from Demos/Joystick/Descriptors.c
rename to Demos/Device/Joystick/Descriptors.c
diff --git a/Demos/Joystick/Descriptors.h b/Demos/Device/Joystick/Descriptors.h
similarity index 100%
rename from Demos/Joystick/Descriptors.h
rename to Demos/Device/Joystick/Descriptors.h
diff --git a/Demos/Joystick/Doxygen.conf b/Demos/Device/Joystick/Doxygen.conf
similarity index 100%
rename from Demos/Joystick/Doxygen.conf
rename to Demos/Device/Joystick/Doxygen.conf
diff --git a/Demos/Joystick/Joystick.aps b/Demos/Device/Joystick/Joystick.aps
similarity index 100%
rename from Demos/Joystick/Joystick.aps
rename to Demos/Device/Joystick/Joystick.aps
diff --git a/Demos/Joystick/Joystick.c b/Demos/Device/Joystick/Joystick.c
similarity index 100%
rename from Demos/Joystick/Joystick.c
rename to Demos/Device/Joystick/Joystick.c
diff --git a/Demos/Joystick/Joystick.h b/Demos/Device/Joystick/Joystick.h
similarity index 100%
rename from Demos/Joystick/Joystick.h
rename to Demos/Device/Joystick/Joystick.h
diff --git a/Demos/Joystick/Joystick.txt b/Demos/Device/Joystick/Joystick.txt
similarity index 100%
rename from Demos/Joystick/Joystick.txt
rename to Demos/Device/Joystick/Joystick.txt
diff --git a/Demos/Joystick/makefile b/Demos/Device/Joystick/makefile
similarity index 93%
rename from Demos/Joystick/makefile
rename to Demos/Device/Joystick/makefile
index e29a3a509981fff41fdb26ecb15c677d6068bf5d..8c645747d17eb77c1809d2a3e51454fb1298acb0 100644
--- a/Demos/Joystick/makefile
+++ b/Demos/Device/Joystick/makefile
@@ -118,18 +118,23 @@ TARGET = Joystick
 OBJDIR = .
 
 
+# Path to the LUFA library
+LUFA_PATH = ../../..
+
+
 # List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c                                          \
-	  Descriptors.c                                        \
-	  ../../LUFA/Scheduler/Scheduler.c                     \
-	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/Endpoint.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
-	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
-	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
-	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
-	  ../../LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
-	  
+SRC = $(TARGET).c                                                 \
+	  Descriptors.c                                               \
+	  $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
+
+
 # List C++ source files here. (C dependencies are automatically generated.)
 CPPSRC = 
 
@@ -161,7 +166,7 @@ DEBUG = dwarf-2
 #     Each directory must be seperated by a space.
 #     Use forward slashes for directory separators.
 #     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS = ../../
+EXTRAINCDIRS = $(LUFA_PATH)/
 
 
 # Compiler flag to set the C Standard level.
diff --git a/Demos/Keyboard/Descriptors.c b/Demos/Device/Keyboard/Descriptors.c
similarity index 100%
rename from Demos/Keyboard/Descriptors.c
rename to Demos/Device/Keyboard/Descriptors.c
diff --git a/Demos/Keyboard/Descriptors.h b/Demos/Device/Keyboard/Descriptors.h
similarity index 100%
rename from Demos/Keyboard/Descriptors.h
rename to Demos/Device/Keyboard/Descriptors.h
diff --git a/Demos/Keyboard/Doxygen.conf b/Demos/Device/Keyboard/Doxygen.conf
similarity index 100%
rename from Demos/Keyboard/Doxygen.conf
rename to Demos/Device/Keyboard/Doxygen.conf
diff --git a/Demos/Keyboard/Keyboard.aps b/Demos/Device/Keyboard/Keyboard.aps
similarity index 100%
rename from Demos/Keyboard/Keyboard.aps
rename to Demos/Device/Keyboard/Keyboard.aps
diff --git a/Demos/Keyboard/Keyboard.c b/Demos/Device/Keyboard/Keyboard.c
similarity index 100%
rename from Demos/Keyboard/Keyboard.c
rename to Demos/Device/Keyboard/Keyboard.c
diff --git a/Demos/Keyboard/Keyboard.h b/Demos/Device/Keyboard/Keyboard.h
similarity index 100%
rename from Demos/Keyboard/Keyboard.h
rename to Demos/Device/Keyboard/Keyboard.h
diff --git a/Demos/Keyboard/Keyboard.txt b/Demos/Device/Keyboard/Keyboard.txt
similarity index 100%
rename from Demos/Keyboard/Keyboard.txt
rename to Demos/Device/Keyboard/Keyboard.txt
diff --git a/Demos/Keyboard/makefile b/Demos/Device/Keyboard/makefile
similarity index 93%
rename from Demos/Keyboard/makefile
rename to Demos/Device/Keyboard/makefile
index fde8ce0a1ea793fc04d6b580c196aba06c94ad03..9f738ce08e64663410f10f7210c1bfe8896797f2 100644
--- a/Demos/Keyboard/makefile
+++ b/Demos/Device/Keyboard/makefile
@@ -118,18 +118,23 @@ TARGET = Keyboard
 OBJDIR = .
 
 
+# Path to the LUFA library
+LUFA_PATH = ../../..
+
+
 # List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c                                          \
-	  Descriptors.c                                        \
-	  ../../LUFA/Scheduler/Scheduler.c                     \
-	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/Endpoint.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
-	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
-	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
-	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
-	  ../../LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
-	  
+SRC = $(TARGET).c                                                 \
+	  Descriptors.c                                               \
+	  $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
+
+
 # List C++ source files here. (C dependencies are automatically generated.)
 CPPSRC = 
 
@@ -161,7 +166,7 @@ DEBUG = dwarf-2
 #     Each directory must be seperated by a space.
 #     Use forward slashes for directory separators.
 #     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS = ../../
+EXTRAINCDIRS = $(LUFA_PATH)/
 
 
 # Compiler flag to set the C Standard level.
diff --git a/Demos/KeyboardMouse/Descriptors.c b/Demos/Device/KeyboardMouse/Descriptors.c
similarity index 100%
rename from Demos/KeyboardMouse/Descriptors.c
rename to Demos/Device/KeyboardMouse/Descriptors.c
diff --git a/Demos/KeyboardMouse/Descriptors.h b/Demos/Device/KeyboardMouse/Descriptors.h
similarity index 100%
rename from Demos/KeyboardMouse/Descriptors.h
rename to Demos/Device/KeyboardMouse/Descriptors.h
diff --git a/Demos/KeyboardMouse/Doxygen.conf b/Demos/Device/KeyboardMouse/Doxygen.conf
similarity index 100%
rename from Demos/KeyboardMouse/Doxygen.conf
rename to Demos/Device/KeyboardMouse/Doxygen.conf
diff --git a/Demos/KeyboardMouse/KeyboardMouse.aps b/Demos/Device/KeyboardMouse/KeyboardMouse.aps
similarity index 100%
rename from Demos/KeyboardMouse/KeyboardMouse.aps
rename to Demos/Device/KeyboardMouse/KeyboardMouse.aps
diff --git a/Demos/KeyboardMouse/KeyboardMouse.c b/Demos/Device/KeyboardMouse/KeyboardMouse.c
similarity index 100%
rename from Demos/KeyboardMouse/KeyboardMouse.c
rename to Demos/Device/KeyboardMouse/KeyboardMouse.c
diff --git a/Demos/KeyboardMouse/KeyboardMouse.h b/Demos/Device/KeyboardMouse/KeyboardMouse.h
similarity index 100%
rename from Demos/KeyboardMouse/KeyboardMouse.h
rename to Demos/Device/KeyboardMouse/KeyboardMouse.h
diff --git a/Demos/KeyboardMouse/KeyboardMouse.txt b/Demos/Device/KeyboardMouse/KeyboardMouse.txt
similarity index 100%
rename from Demos/KeyboardMouse/KeyboardMouse.txt
rename to Demos/Device/KeyboardMouse/KeyboardMouse.txt
diff --git a/Demos/KeyboardMouse/makefile b/Demos/Device/KeyboardMouse/makefile
similarity index 93%
rename from Demos/KeyboardMouse/makefile
rename to Demos/Device/KeyboardMouse/makefile
index d411fc4aa952dcfbfe7efbb6e0f4c40bb63add25..59d676f09b48ab7e3b29e3d9dd871afec00f5a32 100644
--- a/Demos/KeyboardMouse/makefile
+++ b/Demos/Device/KeyboardMouse/makefile
@@ -118,18 +118,23 @@ TARGET = KeyboardMouse
 OBJDIR = .
 
 
+# Path to the LUFA library
+LUFA_PATH = ../../..
+
+
 # List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c                                          \
-	  Descriptors.c                                        \
-	  ../../LUFA/Scheduler/Scheduler.c                     \
-	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/Endpoint.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
-	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
-	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
-	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
-	  ../../LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
-	  
+SRC = $(TARGET).c                                                 \
+	  Descriptors.c                                               \
+	  $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
+
+
 # List C++ source files here. (C dependencies are automatically generated.)
 CPPSRC = 
 
@@ -161,7 +166,7 @@ DEBUG = dwarf-2
 #     Each directory must be seperated by a space.
 #     Use forward slashes for directory separators.
 #     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS = ../../
+EXTRAINCDIRS = $(LUFA_PATH)/
 
 
 # Compiler flag to set the C Standard level.
diff --git a/Demos/MIDI/Descriptors.c b/Demos/Device/MIDI/Descriptors.c
similarity index 100%
rename from Demos/MIDI/Descriptors.c
rename to Demos/Device/MIDI/Descriptors.c
diff --git a/Demos/MIDI/Descriptors.h b/Demos/Device/MIDI/Descriptors.h
similarity index 100%
rename from Demos/MIDI/Descriptors.h
rename to Demos/Device/MIDI/Descriptors.h
diff --git a/Demos/MIDI/Doxygen.conf b/Demos/Device/MIDI/Doxygen.conf
similarity index 100%
rename from Demos/MIDI/Doxygen.conf
rename to Demos/Device/MIDI/Doxygen.conf
diff --git a/Demos/MIDI/MIDI.aps b/Demos/Device/MIDI/MIDI.aps
similarity index 100%
rename from Demos/MIDI/MIDI.aps
rename to Demos/Device/MIDI/MIDI.aps
diff --git a/Demos/MIDI/MIDI.c b/Demos/Device/MIDI/MIDI.c
similarity index 100%
rename from Demos/MIDI/MIDI.c
rename to Demos/Device/MIDI/MIDI.c
diff --git a/Demos/MIDI/MIDI.h b/Demos/Device/MIDI/MIDI.h
similarity index 100%
rename from Demos/MIDI/MIDI.h
rename to Demos/Device/MIDI/MIDI.h
diff --git a/Demos/MIDI/MIDI.txt b/Demos/Device/MIDI/MIDI.txt
similarity index 100%
rename from Demos/MIDI/MIDI.txt
rename to Demos/Device/MIDI/MIDI.txt
diff --git a/Demos/MIDI/makefile b/Demos/Device/MIDI/makefile
similarity index 93%
rename from Demos/MIDI/makefile
rename to Demos/Device/MIDI/makefile
index ecd4215c1dd91f16ba78d1e6eeacad29b7ac318a..09bd0c28f9cb6e928c721b8f15bb98e14ccd57fd 100644
--- a/Demos/MIDI/makefile
+++ b/Demos/Device/MIDI/makefile
@@ -118,18 +118,23 @@ TARGET = MIDI
 OBJDIR = .
 
 
+# Path to the LUFA library
+LUFA_PATH = ../../..
+
+
 # List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c                                          \
-	  Descriptors.c                                        \
-	  ../../LUFA/Scheduler/Scheduler.c                     \
-	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/Endpoint.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
-	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
-	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
-	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
-	  ../../LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
-	  
+SRC = $(TARGET).c                                                 \
+	  Descriptors.c                                               \
+	  $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
+
+
 # List C++ source files here. (C dependencies are automatically generated.)
 CPPSRC = 
 
@@ -161,7 +166,7 @@ DEBUG = dwarf-2
 #     Each directory must be seperated by a space.
 #     Use forward slashes for directory separators.
 #     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS = ../../
+EXTRAINCDIRS = $(LUFA_PATH)/
 
 
 # Compiler flag to set the C Standard level.
diff --git a/Demos/MassStorage/DataflashManager.c b/Demos/Device/MassStorage/DataflashManager.c
similarity index 100%
rename from Demos/MassStorage/DataflashManager.c
rename to Demos/Device/MassStorage/DataflashManager.c
diff --git a/Demos/MassStorage/DataflashManager.h b/Demos/Device/MassStorage/DataflashManager.h
similarity index 100%
rename from Demos/MassStorage/DataflashManager.h
rename to Demos/Device/MassStorage/DataflashManager.h
diff --git a/Demos/MassStorage/Descriptors.c b/Demos/Device/MassStorage/Descriptors.c
similarity index 100%
rename from Demos/MassStorage/Descriptors.c
rename to Demos/Device/MassStorage/Descriptors.c
diff --git a/Demos/MassStorage/Descriptors.h b/Demos/Device/MassStorage/Descriptors.h
similarity index 100%
rename from Demos/MassStorage/Descriptors.h
rename to Demos/Device/MassStorage/Descriptors.h
diff --git a/Demos/MassStorage/Doxygen.conf b/Demos/Device/MassStorage/Doxygen.conf
similarity index 100%
rename from Demos/MassStorage/Doxygen.conf
rename to Demos/Device/MassStorage/Doxygen.conf
diff --git a/Demos/MassStorage/MassStorage.aps b/Demos/Device/MassStorage/MassStorage.aps
similarity index 100%
rename from Demos/MassStorage/MassStorage.aps
rename to Demos/Device/MassStorage/MassStorage.aps
diff --git a/Demos/MassStorage/MassStorage.c b/Demos/Device/MassStorage/MassStorage.c
similarity index 100%
rename from Demos/MassStorage/MassStorage.c
rename to Demos/Device/MassStorage/MassStorage.c
diff --git a/Demos/MassStorage/MassStorage.h b/Demos/Device/MassStorage/MassStorage.h
similarity index 100%
rename from Demos/MassStorage/MassStorage.h
rename to Demos/Device/MassStorage/MassStorage.h
diff --git a/Demos/MassStorage/MassStorage.txt b/Demos/Device/MassStorage/MassStorage.txt
similarity index 100%
rename from Demos/MassStorage/MassStorage.txt
rename to Demos/Device/MassStorage/MassStorage.txt
diff --git a/Demos/MassStorage/SCSI.c b/Demos/Device/MassStorage/SCSI.c
similarity index 100%
rename from Demos/MassStorage/SCSI.c
rename to Demos/Device/MassStorage/SCSI.c
diff --git a/Demos/MassStorage/SCSI.h b/Demos/Device/MassStorage/SCSI.h
similarity index 100%
rename from Demos/MassStorage/SCSI.h
rename to Demos/Device/MassStorage/SCSI.h
diff --git a/Demos/MassStorageHost/SCSI_Codes.h b/Demos/Device/MassStorage/SCSI_Codes.h
similarity index 100%
rename from Demos/MassStorageHost/SCSI_Codes.h
rename to Demos/Device/MassStorage/SCSI_Codes.h
diff --git a/Demos/MassStorage/makefile b/Demos/Device/MassStorage/makefile
similarity index 92%
rename from Demos/MassStorage/makefile
rename to Demos/Device/MassStorage/makefile
index 65285253d05ded9dc88d6db223594f4a96c86937..a25c2335d93476b9112e4feff3103e26e4c3759e 100644
--- a/Demos/MassStorage/makefile
+++ b/Demos/Device/MassStorage/makefile
@@ -118,20 +118,25 @@ TARGET = MassStorage
 OBJDIR = .
 
 
+# Path to the LUFA library
+LUFA_PATH = ../../..
+
+
 # List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c                                          \
-	  Descriptors.c                                        \
-	  SCSI.c                                               \
-	  DataflashManager.c                                   \
-	  ../../LUFA/Scheduler/Scheduler.c                     \
-	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/Endpoint.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
-	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
-	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
-	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
-	  ../../LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
-	  
+SRC = $(TARGET).c                                                 \
+	  Descriptors.c                                               \
+	  SCSI.c                                                      \
+	  DataflashManager.c                                          \
+	  $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
+
+
 # List C++ source files here. (C dependencies are automatically generated.)
 CPPSRC = 
 
@@ -163,7 +168,7 @@ DEBUG = dwarf-2
 #     Each directory must be seperated by a space.
 #     Use forward slashes for directory separators.
 #     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS = ../../
+EXTRAINCDIRS = $(LUFA_PATH)/
 
 
 # Compiler flag to set the C Standard level.
diff --git a/Demos/Mouse/Descriptors.c b/Demos/Device/Mouse/Descriptors.c
similarity index 100%
rename from Demos/Mouse/Descriptors.c
rename to Demos/Device/Mouse/Descriptors.c
diff --git a/Demos/Mouse/Descriptors.h b/Demos/Device/Mouse/Descriptors.h
similarity index 100%
rename from Demos/Mouse/Descriptors.h
rename to Demos/Device/Mouse/Descriptors.h
diff --git a/Demos/Mouse/Doxygen.conf b/Demos/Device/Mouse/Doxygen.conf
similarity index 100%
rename from Demos/Mouse/Doxygen.conf
rename to Demos/Device/Mouse/Doxygen.conf
diff --git a/Demos/Mouse/Mouse.aps b/Demos/Device/Mouse/Mouse.aps
similarity index 100%
rename from Demos/Mouse/Mouse.aps
rename to Demos/Device/Mouse/Mouse.aps
diff --git a/Demos/Mouse/Mouse.c b/Demos/Device/Mouse/Mouse.c
similarity index 100%
rename from Demos/Mouse/Mouse.c
rename to Demos/Device/Mouse/Mouse.c
diff --git a/Demos/Mouse/Mouse.h b/Demos/Device/Mouse/Mouse.h
similarity index 100%
rename from Demos/Mouse/Mouse.h
rename to Demos/Device/Mouse/Mouse.h
diff --git a/Demos/Mouse/Mouse.txt b/Demos/Device/Mouse/Mouse.txt
similarity index 100%
rename from Demos/Mouse/Mouse.txt
rename to Demos/Device/Mouse/Mouse.txt
diff --git a/Demos/Mouse/makefile b/Demos/Device/Mouse/makefile
similarity index 93%
rename from Demos/Mouse/makefile
rename to Demos/Device/Mouse/makefile
index 27ca1d809612ee460574947235f19bcfef6e02a8..1dc0c663f2f80cfb271816654d7346bc9733dad3 100644
--- a/Demos/Mouse/makefile
+++ b/Demos/Device/Mouse/makefile
@@ -118,18 +118,23 @@ TARGET = Mouse
 OBJDIR = .
 
 
+# Path to the LUFA library
+LUFA_PATH = ../../..
+
+
 # List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c                                          \
-	  Descriptors.c                                        \
-	  ../../LUFA/Scheduler/Scheduler.c                     \
-	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/Endpoint.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
-	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
-	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
-	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
-	  ../../LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
-	  
+SRC = $(TARGET).c                                                 \
+	  Descriptors.c                                               \
+	  $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
+
+
 # List C++ source files here. (C dependencies are automatically generated.)
 CPPSRC = 
 
@@ -161,7 +166,7 @@ DEBUG = dwarf-2
 #     Each directory must be seperated by a space.
 #     Use forward slashes for directory separators.
 #     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS = ../../
+EXTRAINCDIRS = $(LUFA_PATH)/
 
 
 # Compiler flag to set the C Standard level.
diff --git a/Demos/RNDISEthernet/ARP.c b/Demos/Device/RNDISEthernet/ARP.c
similarity index 100%
rename from Demos/RNDISEthernet/ARP.c
rename to Demos/Device/RNDISEthernet/ARP.c
diff --git a/Demos/RNDISEthernet/ARP.h b/Demos/Device/RNDISEthernet/ARP.h
similarity index 100%
rename from Demos/RNDISEthernet/ARP.h
rename to Demos/Device/RNDISEthernet/ARP.h
diff --git a/Demos/RNDISEthernet/DHCP.c b/Demos/Device/RNDISEthernet/DHCP.c
similarity index 100%
rename from Demos/RNDISEthernet/DHCP.c
rename to Demos/Device/RNDISEthernet/DHCP.c
diff --git a/Demos/RNDISEthernet/DHCP.h b/Demos/Device/RNDISEthernet/DHCP.h
similarity index 100%
rename from Demos/RNDISEthernet/DHCP.h
rename to Demos/Device/RNDISEthernet/DHCP.h
diff --git a/Demos/RNDISEthernet/Descriptors.c b/Demos/Device/RNDISEthernet/Descriptors.c
similarity index 100%
rename from Demos/RNDISEthernet/Descriptors.c
rename to Demos/Device/RNDISEthernet/Descriptors.c
diff --git a/Demos/RNDISEthernet/Descriptors.h b/Demos/Device/RNDISEthernet/Descriptors.h
similarity index 100%
rename from Demos/RNDISEthernet/Descriptors.h
rename to Demos/Device/RNDISEthernet/Descriptors.h
diff --git a/Demos/RNDISEthernet/Doxygen.conf b/Demos/Device/RNDISEthernet/Doxygen.conf
similarity index 100%
rename from Demos/RNDISEthernet/Doxygen.conf
rename to Demos/Device/RNDISEthernet/Doxygen.conf
diff --git a/Demos/RNDISEthernet/Ethernet.c b/Demos/Device/RNDISEthernet/Ethernet.c
similarity index 100%
rename from Demos/RNDISEthernet/Ethernet.c
rename to Demos/Device/RNDISEthernet/Ethernet.c
diff --git a/Demos/RNDISEthernet/Ethernet.h b/Demos/Device/RNDISEthernet/Ethernet.h
similarity index 100%
rename from Demos/RNDISEthernet/Ethernet.h
rename to Demos/Device/RNDISEthernet/Ethernet.h
diff --git a/Demos/RNDISEthernet/EthernetProtocols.h b/Demos/Device/RNDISEthernet/EthernetProtocols.h
similarity index 100%
rename from Demos/RNDISEthernet/EthernetProtocols.h
rename to Demos/Device/RNDISEthernet/EthernetProtocols.h
diff --git a/Demos/RNDISEthernet/ICMP.c b/Demos/Device/RNDISEthernet/ICMP.c
similarity index 100%
rename from Demos/RNDISEthernet/ICMP.c
rename to Demos/Device/RNDISEthernet/ICMP.c
diff --git a/Demos/RNDISEthernet/ICMP.h b/Demos/Device/RNDISEthernet/ICMP.h
similarity index 100%
rename from Demos/RNDISEthernet/ICMP.h
rename to Demos/Device/RNDISEthernet/ICMP.h
diff --git a/Demos/RNDISEthernet/IP.c b/Demos/Device/RNDISEthernet/IP.c
similarity index 100%
rename from Demos/RNDISEthernet/IP.c
rename to Demos/Device/RNDISEthernet/IP.c
diff --git a/Demos/RNDISEthernet/IP.h b/Demos/Device/RNDISEthernet/IP.h
similarity index 100%
rename from Demos/RNDISEthernet/IP.h
rename to Demos/Device/RNDISEthernet/IP.h
diff --git a/Demos/RNDISEthernet/LUFA RNDIS.inf b/Demos/Device/RNDISEthernet/LUFA RNDIS.inf
similarity index 100%
rename from Demos/RNDISEthernet/LUFA RNDIS.inf
rename to Demos/Device/RNDISEthernet/LUFA RNDIS.inf
diff --git a/Demos/RNDISEthernet/ProtocolDecoders.c b/Demos/Device/RNDISEthernet/ProtocolDecoders.c
similarity index 100%
rename from Demos/RNDISEthernet/ProtocolDecoders.c
rename to Demos/Device/RNDISEthernet/ProtocolDecoders.c
diff --git a/Demos/RNDISEthernet/ProtocolDecoders.h b/Demos/Device/RNDISEthernet/ProtocolDecoders.h
similarity index 100%
rename from Demos/RNDISEthernet/ProtocolDecoders.h
rename to Demos/Device/RNDISEthernet/ProtocolDecoders.h
diff --git a/Demos/RNDISEthernet/RNDIS.c b/Demos/Device/RNDISEthernet/RNDIS.c
similarity index 100%
rename from Demos/RNDISEthernet/RNDIS.c
rename to Demos/Device/RNDISEthernet/RNDIS.c
diff --git a/Demos/RNDISEthernet/RNDIS.h b/Demos/Device/RNDISEthernet/RNDIS.h
similarity index 100%
rename from Demos/RNDISEthernet/RNDIS.h
rename to Demos/Device/RNDISEthernet/RNDIS.h
diff --git a/Demos/RNDISEthernet/RNDISConstants.h b/Demos/Device/RNDISEthernet/RNDISConstants.h
similarity index 100%
rename from Demos/RNDISEthernet/RNDISConstants.h
rename to Demos/Device/RNDISEthernet/RNDISConstants.h
diff --git a/Demos/RNDISEthernet/RNDISEthernet.aps b/Demos/Device/RNDISEthernet/RNDISEthernet.aps
similarity index 100%
rename from Demos/RNDISEthernet/RNDISEthernet.aps
rename to Demos/Device/RNDISEthernet/RNDISEthernet.aps
diff --git a/Demos/RNDISEthernet/RNDISEthernet.c b/Demos/Device/RNDISEthernet/RNDISEthernet.c
similarity index 100%
rename from Demos/RNDISEthernet/RNDISEthernet.c
rename to Demos/Device/RNDISEthernet/RNDISEthernet.c
diff --git a/Demos/RNDISEthernet/RNDISEthernet.h b/Demos/Device/RNDISEthernet/RNDISEthernet.h
similarity index 100%
rename from Demos/RNDISEthernet/RNDISEthernet.h
rename to Demos/Device/RNDISEthernet/RNDISEthernet.h
diff --git a/Demos/RNDISEthernet/RNDISEthernet.txt b/Demos/Device/RNDISEthernet/RNDISEthernet.txt
similarity index 100%
rename from Demos/RNDISEthernet/RNDISEthernet.txt
rename to Demos/Device/RNDISEthernet/RNDISEthernet.txt
diff --git a/Demos/RNDISEthernet/TCP.c b/Demos/Device/RNDISEthernet/TCP.c
similarity index 100%
rename from Demos/RNDISEthernet/TCP.c
rename to Demos/Device/RNDISEthernet/TCP.c
diff --git a/Demos/RNDISEthernet/TCP.h b/Demos/Device/RNDISEthernet/TCP.h
similarity index 100%
rename from Demos/RNDISEthernet/TCP.h
rename to Demos/Device/RNDISEthernet/TCP.h
diff --git a/Demos/RNDISEthernet/UDP.c b/Demos/Device/RNDISEthernet/UDP.c
similarity index 100%
rename from Demos/RNDISEthernet/UDP.c
rename to Demos/Device/RNDISEthernet/UDP.c
diff --git a/Demos/RNDISEthernet/UDP.h b/Demos/Device/RNDISEthernet/UDP.h
similarity index 100%
rename from Demos/RNDISEthernet/UDP.h
rename to Demos/Device/RNDISEthernet/UDP.h
diff --git a/Demos/RNDISEthernet/Webserver.c b/Demos/Device/RNDISEthernet/Webserver.c
similarity index 100%
rename from Demos/RNDISEthernet/Webserver.c
rename to Demos/Device/RNDISEthernet/Webserver.c
diff --git a/Demos/RNDISEthernet/Webserver.h b/Demos/Device/RNDISEthernet/Webserver.h
similarity index 100%
rename from Demos/RNDISEthernet/Webserver.h
rename to Demos/Device/RNDISEthernet/Webserver.h
diff --git a/Demos/RNDISEthernet/makefile b/Demos/Device/RNDISEthernet/makefile
similarity index 90%
rename from Demos/RNDISEthernet/makefile
rename to Demos/Device/RNDISEthernet/makefile
index 8e2c781a97b689f489aa51bb1730aecc2959a39f..1a068a03366dcede3b772d843284c21582f09485 100644
--- a/Demos/RNDISEthernet/makefile
+++ b/Demos/Device/RNDISEthernet/makefile
@@ -118,30 +118,35 @@ TARGET = RNDISEthernet
 OBJDIR = .
 
 
+# Path to the LUFA library
+LUFA_PATH = ../../..
+
+
 # List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c                                          \
-      Descriptors.c                                        \
-      RNDIS.c                                              \
-	  Ethernet.c                                           \
-	  ProtocolDecoders.c                                   \
-	  ICMP.c                                               \
-	  TCP.c                                                \
-	  UDP.c                                                \
-	  DHCP.c                                               \
-	  ARP.c                                                \
-	  IP.c                                                 \
-	  Webserver.c                                          \
-      ../../LUFA/Scheduler/Scheduler.c                     \
-      ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
-      ../../LUFA/Drivers/USB/LowLevel/Endpoint.c           \
-      ../../LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
-      ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
-      ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
-      ../../LUFA/Drivers/USB/HighLevel/Events.c            \
-      ../../LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
-      ../../LUFA/Drivers/AT90USBXXX/Serial_Stream.c        \
-      ../../LUFA/Drivers/AT90USBXXX/Serial.c               \
-	  
+SRC = $(TARGET).c                                                 \
+      Descriptors.c                                               \
+      RNDIS.c                                                     \
+	  Ethernet.c                                                  \
+	  ProtocolDecoders.c                                          \
+	  ICMP.c                                                      \
+	  TCP.c                                                       \
+	  UDP.c                                                       \
+	  DHCP.c                                                      \
+	  ARP.c                                                       \
+	  IP.c                                                        \
+	  Webserver.c                                                 \
+      $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
+      $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \
+      $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \
+      $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
+      $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \
+      $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
+      $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \
+      $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
+      $(LUFA_PATH)/LUFA/Drivers/AT90USBXXX/Serial_Stream.c        \
+      $(LUFA_PATH)/LUFA/Drivers/AT90USBXXX/Serial.c               \
+
+
 # List C++ source files here. (C dependencies are automatically generated.)
 CPPSRC = 
 
@@ -173,7 +178,7 @@ DEBUG = dwarf-2
 #     Each directory must be seperated by a space.
 #     Use forward slashes for directory separators.
 #     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS = ../../
+EXTRAINCDIRS = $(LUFA_PATH)/
 
 
 # Compiler flag to set the C Standard level.
diff --git a/Demos/USBtoSerial/Descriptors.c b/Demos/Device/USBtoSerial/Descriptors.c
similarity index 100%
rename from Demos/USBtoSerial/Descriptors.c
rename to Demos/Device/USBtoSerial/Descriptors.c
diff --git a/Demos/CDC/Descriptors.h b/Demos/Device/USBtoSerial/Descriptors.h
similarity index 100%
rename from Demos/CDC/Descriptors.h
rename to Demos/Device/USBtoSerial/Descriptors.h
diff --git a/Demos/USBtoSerial/Doxygen.conf b/Demos/Device/USBtoSerial/Doxygen.conf
similarity index 100%
rename from Demos/USBtoSerial/Doxygen.conf
rename to Demos/Device/USBtoSerial/Doxygen.conf
diff --git a/Demos/USBtoSerial/LUFA USBtoSerial.inf b/Demos/Device/USBtoSerial/LUFA USBtoSerial.inf
similarity index 100%
rename from Demos/USBtoSerial/LUFA USBtoSerial.inf
rename to Demos/Device/USBtoSerial/LUFA USBtoSerial.inf
diff --git a/Demos/USBtoSerial/RingBuff.c b/Demos/Device/USBtoSerial/RingBuff.c
similarity index 100%
rename from Demos/USBtoSerial/RingBuff.c
rename to Demos/Device/USBtoSerial/RingBuff.c
diff --git a/Demos/USBtoSerial/RingBuff.h b/Demos/Device/USBtoSerial/RingBuff.h
similarity index 100%
rename from Demos/USBtoSerial/RingBuff.h
rename to Demos/Device/USBtoSerial/RingBuff.h
diff --git a/Demos/USBtoSerial/USBtoSerial.aps b/Demos/Device/USBtoSerial/USBtoSerial.aps
similarity index 100%
rename from Demos/USBtoSerial/USBtoSerial.aps
rename to Demos/Device/USBtoSerial/USBtoSerial.aps
diff --git a/Demos/USBtoSerial/USBtoSerial.c b/Demos/Device/USBtoSerial/USBtoSerial.c
similarity index 100%
rename from Demos/USBtoSerial/USBtoSerial.c
rename to Demos/Device/USBtoSerial/USBtoSerial.c
diff --git a/Demos/USBtoSerial/USBtoSerial.h b/Demos/Device/USBtoSerial/USBtoSerial.h
similarity index 100%
rename from Demos/USBtoSerial/USBtoSerial.h
rename to Demos/Device/USBtoSerial/USBtoSerial.h
diff --git a/Demos/USBtoSerial/USBtoSerial.txt b/Demos/Device/USBtoSerial/USBtoSerial.txt
similarity index 100%
rename from Demos/USBtoSerial/USBtoSerial.txt
rename to Demos/Device/USBtoSerial/USBtoSerial.txt
diff --git a/Demos/USBtoSerial/makefile b/Demos/Device/USBtoSerial/makefile
similarity index 92%
rename from Demos/USBtoSerial/makefile
rename to Demos/Device/USBtoSerial/makefile
index 1e820a6142a377ed3254cee4e251df5f2eb3e222..62939ab60af7f284f1d928ab145d16fa2622f7f9 100644
--- a/Demos/USBtoSerial/makefile
+++ b/Demos/Device/USBtoSerial/makefile
@@ -118,20 +118,25 @@ TARGET = USBtoSerial
 OBJDIR = .
 
 
+# Path to the LUFA library
+LUFA_PATH = ../../..
+
+
 # List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c                                          \
-	  Descriptors.c                                        \
-	  RingBuff.c                                           \
-	  ../../LUFA/Scheduler/Scheduler.c                     \
-	  ../../LUFA/Drivers/AT90USBXXX/Serial.c               \
-	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/Endpoint.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
-	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
-	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
-	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
-	  ../../LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
-	  
+SRC = $(TARGET).c                                                 \
+	  Descriptors.c                                               \
+	  RingBuff.c                                                  \
+	  $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
+	  $(LUFA_PATH)/LUFA/Drivers/AT90USBXXX/Serial.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
+
+
 # List C++ source files here. (C dependencies are automatically generated.)
 CPPSRC = 
 
@@ -163,7 +168,7 @@ DEBUG = dwarf-2
 #     Each directory must be seperated by a space.
 #     Use forward slashes for directory separators.
 #     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS = ../../
+EXTRAINCDIRS = $(LUFA_PATH)/
 
 
 # Compiler flag to set the C Standard level.
diff --git a/Demos/Device/makefile b/Demos/Device/makefile
new file mode 100644
index 0000000000000000000000000000000000000000..825825f8138dc47435cc51dca9c7a0c884aec82b
--- /dev/null
+++ b/Demos/Device/makefile
@@ -0,0 +1,65 @@
+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2009.
+#              
+#  dean [at] fourwalledcubicle [dot] com
+#      www.fourwalledcubicle.com
+#
+
+# Makefile to build all the LUFA Device Demos. Call with "make all" to
+# rebuild all Device demos.
+
+# Projects are pre-cleaned before each one is built, to ensure any
+# custom LUFA library build options are reflected in the compiled
+# code.
+
+all:
+	make -C AudioInput clean
+	make -C AudioInput all
+
+	make -C AudioOutput clean
+	make -C AudioOutput all
+
+	make -C CDC clean
+	make -C CDC all
+
+	make -C DualCDC clean
+	make -C DualCDC all
+
+	make -C Joystick clean
+	make -C Joystick all
+
+	make -C Keyboard clean
+	make -C Keyboard all
+
+	make -C KeyboardMouse clean
+	make -C KeyboardMouse all
+
+	make -C MassStorage clean
+	make -C MassStorage all
+
+	make -C MIDI clean
+	make -C MIDI all
+
+	make -C Mouse clean
+	make -C Mouse all
+
+	make -C RNDISEthernet clean
+	make -C RNDISEthernet all
+
+	make -C USBtoSerial clean
+	make -C USBtoSerial all
+
+%:
+	make -C AudioInput $@
+	make -C AudioOutput $@
+	make -C CDC $@
+	make -C DualCDC $@
+	make -C Joystick $@
+	make -C Keyboard $@
+	make -C KeyboardMouse $@
+	make -C MassStorage $@
+	make -C MIDI $@
+	make -C Mouse $@
+	make -C RNDISEthernet $@
+	make -C USBtoSerial $@
diff --git a/Demos/CDCHost/CDCHost.aps b/Demos/Host/CDCHost/CDCHost.aps
similarity index 100%
rename from Demos/CDCHost/CDCHost.aps
rename to Demos/Host/CDCHost/CDCHost.aps
diff --git a/Demos/CDCHost/CDCHost.c b/Demos/Host/CDCHost/CDCHost.c
similarity index 100%
rename from Demos/CDCHost/CDCHost.c
rename to Demos/Host/CDCHost/CDCHost.c
diff --git a/Demos/CDCHost/CDCHost.h b/Demos/Host/CDCHost/CDCHost.h
similarity index 100%
rename from Demos/CDCHost/CDCHost.h
rename to Demos/Host/CDCHost/CDCHost.h
diff --git a/Demos/CDCHost/CDCHost.txt b/Demos/Host/CDCHost/CDCHost.txt
similarity index 100%
rename from Demos/CDCHost/CDCHost.txt
rename to Demos/Host/CDCHost/CDCHost.txt
diff --git a/Demos/CDCHost/ConfigDescriptor.c b/Demos/Host/CDCHost/ConfigDescriptor.c
similarity index 100%
rename from Demos/CDCHost/ConfigDescriptor.c
rename to Demos/Host/CDCHost/ConfigDescriptor.c
diff --git a/Demos/CDCHost/ConfigDescriptor.h b/Demos/Host/CDCHost/ConfigDescriptor.h
similarity index 100%
rename from Demos/CDCHost/ConfigDescriptor.h
rename to Demos/Host/CDCHost/ConfigDescriptor.h
diff --git a/Demos/CDCHost/Doxygen.conf b/Demos/Host/CDCHost/Doxygen.conf
similarity index 100%
rename from Demos/CDCHost/Doxygen.conf
rename to Demos/Host/CDCHost/Doxygen.conf
diff --git a/Demos/CDCHost/makefile b/Demos/Host/CDCHost/makefile
similarity index 92%
rename from Demos/CDCHost/makefile
rename to Demos/Host/CDCHost/makefile
index 926b6967c36e52e7752370a26677fd21f6813854..80b986ad5fda1a6ba389d600544bb6105c61bc82 100644
--- a/Demos/CDCHost/makefile
+++ b/Demos/Host/CDCHost/makefile
@@ -118,21 +118,26 @@ TARGET = CDCHost
 OBJDIR = .
 
 
+# Path to the LUFA library
+LUFA_PATH = ../../..
+
+
 # List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c                                          \
-	  ConfigDescriptor.c                                   \
-	  ../../LUFA/Scheduler/Scheduler.c                     \
-	  ../../LUFA/Drivers/AT90USBXXX/Serial_Stream.c        \
-	  ../../LUFA/Drivers/AT90USBXXX/Serial.c               \
-	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/Pipe.c               \
-	  ../../LUFA/Drivers/USB/LowLevel/Host.c               \
-	  ../../LUFA/Drivers/USB/LowLevel/HostChapter9.c       \
-	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
-	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
-	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
-	  ../../LUFA/Drivers/USB/Class/ConfigDescriptor.c      \
-	  
+SRC = $(TARGET).c                                                 \
+	  ConfigDescriptor.c                                          \
+	  $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
+	  $(LUFA_PATH)/LUFA/Drivers/AT90USBXXX/Serial_Stream.c        \
+	  $(LUFA_PATH)/LUFA/Drivers/AT90USBXXX/Serial.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/Class/ConfigDescriptor.c      \
+
+
 # List C++ source files here. (C dependencies are automatically generated.)
 CPPSRC = 
 
@@ -164,7 +169,7 @@ DEBUG = dwarf-2
 #     Each directory must be seperated by a space.
 #     Use forward slashes for directory separators.
 #     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS = ../../
+EXTRAINCDIRS = $(LUFA_PATH)/
 
 
 # Compiler flag to set the C Standard level.
diff --git a/Demos/KeyboardHost/ConfigDescriptor.c b/Demos/Host/KeyboardHost/ConfigDescriptor.c
similarity index 100%
rename from Demos/KeyboardHost/ConfigDescriptor.c
rename to Demos/Host/KeyboardHost/ConfigDescriptor.c
diff --git a/Demos/KeyboardHost/ConfigDescriptor.h b/Demos/Host/KeyboardHost/ConfigDescriptor.h
similarity index 100%
rename from Demos/KeyboardHost/ConfigDescriptor.h
rename to Demos/Host/KeyboardHost/ConfigDescriptor.h
diff --git a/Demos/KeyboardHost/Doxygen.conf b/Demos/Host/KeyboardHost/Doxygen.conf
similarity index 100%
rename from Demos/KeyboardHost/Doxygen.conf
rename to Demos/Host/KeyboardHost/Doxygen.conf
diff --git a/Demos/KeyboardHost/KeyboardHost.aps b/Demos/Host/KeyboardHost/KeyboardHost.aps
similarity index 100%
rename from Demos/KeyboardHost/KeyboardHost.aps
rename to Demos/Host/KeyboardHost/KeyboardHost.aps
diff --git a/Demos/KeyboardHost/KeyboardHost.c b/Demos/Host/KeyboardHost/KeyboardHost.c
similarity index 100%
rename from Demos/KeyboardHost/KeyboardHost.c
rename to Demos/Host/KeyboardHost/KeyboardHost.c
diff --git a/Demos/KeyboardHost/KeyboardHost.h b/Demos/Host/KeyboardHost/KeyboardHost.h
similarity index 100%
rename from Demos/KeyboardHost/KeyboardHost.h
rename to Demos/Host/KeyboardHost/KeyboardHost.h
diff --git a/Demos/KeyboardHost/KeyboardHost.txt b/Demos/Host/KeyboardHost/KeyboardHost.txt
similarity index 100%
rename from Demos/KeyboardHost/KeyboardHost.txt
rename to Demos/Host/KeyboardHost/KeyboardHost.txt
diff --git a/Demos/KeyboardHost/makefile b/Demos/Host/KeyboardHost/makefile
similarity index 92%
rename from Demos/KeyboardHost/makefile
rename to Demos/Host/KeyboardHost/makefile
index 41ce5c7a19552d8702d328219aaf3387868557cb..cb720f2bf062cc5f8365fb4aeaa667bc373b85ed 100644
--- a/Demos/KeyboardHost/makefile
+++ b/Demos/Host/KeyboardHost/makefile
@@ -118,21 +118,26 @@ TARGET = KeyboardHost
 OBJDIR = .
 
 
+# Path to the LUFA library
+LUFA_PATH = ../../..
+
+
 # List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c                                          \
-	  ConfigDescriptor.c                                   \
-	  ../../LUFA/Scheduler/Scheduler.c                     \
-	  ../../LUFA/Drivers/AT90USBXXX/Serial_Stream.c        \
-	  ../../LUFA/Drivers/AT90USBXXX/Serial.c               \
-	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/Pipe.c               \
-	  ../../LUFA/Drivers/USB/LowLevel/Host.c               \
-	  ../../LUFA/Drivers/USB/LowLevel/HostChapter9.c       \
-	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
-	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
-	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
-	  ../../LUFA/Drivers/USB/Class/ConfigDescriptor.c      \
-	  
+SRC = $(TARGET).c                                                 \
+	  ConfigDescriptor.c                                          \
+	  $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
+	  $(LUFA_PATH)/LUFA/Drivers/AT90USBXXX/Serial_Stream.c        \
+	  $(LUFA_PATH)/LUFA/Drivers/AT90USBXXX/Serial.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/Class/ConfigDescriptor.c      \
+
+
 # List C++ source files here. (C dependencies are automatically generated.)
 CPPSRC = 
 
@@ -164,7 +169,7 @@ DEBUG = dwarf-2
 #     Each directory must be seperated by a space.
 #     Use forward slashes for directory separators.
 #     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS = ../../
+EXTRAINCDIRS = $(LUFA_PATH)/
 
 
 # Compiler flag to set the C Standard level.
diff --git a/Demos/KeyboardHostWithParser/ConfigDescriptor.c b/Demos/Host/KeyboardHostWithParser/ConfigDescriptor.c
similarity index 100%
rename from Demos/KeyboardHostWithParser/ConfigDescriptor.c
rename to Demos/Host/KeyboardHostWithParser/ConfigDescriptor.c
diff --git a/Demos/KeyboardHostWithParser/ConfigDescriptor.h b/Demos/Host/KeyboardHostWithParser/ConfigDescriptor.h
similarity index 100%
rename from Demos/KeyboardHostWithParser/ConfigDescriptor.h
rename to Demos/Host/KeyboardHostWithParser/ConfigDescriptor.h
diff --git a/Demos/KeyboardHostWithParser/Doxygen.conf b/Demos/Host/KeyboardHostWithParser/Doxygen.conf
similarity index 100%
rename from Demos/KeyboardHostWithParser/Doxygen.conf
rename to Demos/Host/KeyboardHostWithParser/Doxygen.conf
diff --git a/Demos/KeyboardHostWithParser/HIDReport.c b/Demos/Host/KeyboardHostWithParser/HIDReport.c
similarity index 100%
rename from Demos/KeyboardHostWithParser/HIDReport.c
rename to Demos/Host/KeyboardHostWithParser/HIDReport.c
diff --git a/Demos/KeyboardHostWithParser/HIDReport.h b/Demos/Host/KeyboardHostWithParser/HIDReport.h
similarity index 100%
rename from Demos/KeyboardHostWithParser/HIDReport.h
rename to Demos/Host/KeyboardHostWithParser/HIDReport.h
diff --git a/Demos/KeyboardHostWithParser/KeyboardHostWithParser.aps b/Demos/Host/KeyboardHostWithParser/KeyboardHostWithParser.aps
similarity index 100%
rename from Demos/KeyboardHostWithParser/KeyboardHostWithParser.aps
rename to Demos/Host/KeyboardHostWithParser/KeyboardHostWithParser.aps
diff --git a/Demos/KeyboardHostWithParser/KeyboardHostWithParser.c b/Demos/Host/KeyboardHostWithParser/KeyboardHostWithParser.c
similarity index 100%
rename from Demos/KeyboardHostWithParser/KeyboardHostWithParser.c
rename to Demos/Host/KeyboardHostWithParser/KeyboardHostWithParser.c
diff --git a/Demos/KeyboardHostWithParser/KeyboardHostWithParser.h b/Demos/Host/KeyboardHostWithParser/KeyboardHostWithParser.h
similarity index 100%
rename from Demos/KeyboardHostWithParser/KeyboardHostWithParser.h
rename to Demos/Host/KeyboardHostWithParser/KeyboardHostWithParser.h
diff --git a/Demos/KeyboardHostWithParser/KeyboardHostWithParser.txt b/Demos/Host/KeyboardHostWithParser/KeyboardHostWithParser.txt
similarity index 100%
rename from Demos/KeyboardHostWithParser/KeyboardHostWithParser.txt
rename to Demos/Host/KeyboardHostWithParser/KeyboardHostWithParser.txt
diff --git a/Demos/KeyboardHostWithParser/makefile b/Demos/Host/KeyboardHostWithParser/makefile
similarity index 92%
rename from Demos/KeyboardHostWithParser/makefile
rename to Demos/Host/KeyboardHostWithParser/makefile
index d3de1d19c50a406e97568a7a09ab7ec740f7ea40..0a2e95eaca132874e003aff662dafeba12dba929 100644
--- a/Demos/KeyboardHostWithParser/makefile
+++ b/Demos/Host/KeyboardHostWithParser/makefile
@@ -118,23 +118,28 @@ TARGET = KeyboardHostWithParser
 OBJDIR = .
 
 
+# Path to the LUFA library
+LUFA_PATH = ../../..
+
+
 # List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c                                          \
-	  ConfigDescriptor.c                                   \
-	  HIDReport.c                                          \
-	  ../../LUFA/Scheduler/Scheduler.c                     \
-	  ../../LUFA/Drivers/AT90USBXXX/Serial_Stream.c        \
-	  ../../LUFA/Drivers/AT90USBXXX/Serial.c               \
-	  ../../LUFA/Drivers/USB/Class/HIDParser.c             \
-	  ../../LUFA/Drivers/USB/Class/ConfigDescriptor.c      \
-	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/Pipe.c               \
-	  ../../LUFA/Drivers/USB/LowLevel/Host.c               \
-	  ../../LUFA/Drivers/USB/LowLevel/HostChapter9.c       \
-	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
-	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
-	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
-	  
+SRC = $(TARGET).c                                                 \
+	  ConfigDescriptor.c                                          \
+	  HIDReport.c                                                 \
+	  $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
+	  $(LUFA_PATH)/LUFA/Drivers/AT90USBXXX/Serial_Stream.c        \
+	  $(LUFA_PATH)/LUFA/Drivers/AT90USBXXX/Serial.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c             \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/Class/ConfigDescriptor.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \
+
+
 # List C++ source files here. (C dependencies are automatically generated.)
 CPPSRC = 
 
@@ -166,7 +171,7 @@ DEBUG = dwarf-2
 #     Each directory must be seperated by a space.
 #     Use forward slashes for directory separators.
 #     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS = ../../
+EXTRAINCDIRS = $(LUFA_PATH)/
 
 
 # Compiler flag to set the C Standard level.
diff --git a/Demos/MassStorageHost/ConfigDescriptor.c b/Demos/Host/MassStorageHost/ConfigDescriptor.c
similarity index 100%
rename from Demos/MassStorageHost/ConfigDescriptor.c
rename to Demos/Host/MassStorageHost/ConfigDescriptor.c
diff --git a/Demos/MassStorageHost/ConfigDescriptor.h b/Demos/Host/MassStorageHost/ConfigDescriptor.h
similarity index 100%
rename from Demos/MassStorageHost/ConfigDescriptor.h
rename to Demos/Host/MassStorageHost/ConfigDescriptor.h
diff --git a/Demos/MassStorageHost/Doxygen.conf b/Demos/Host/MassStorageHost/Doxygen.conf
similarity index 100%
rename from Demos/MassStorageHost/Doxygen.conf
rename to Demos/Host/MassStorageHost/Doxygen.conf
diff --git a/Demos/MassStorageHost/MassStorageHost.aps b/Demos/Host/MassStorageHost/MassStorageHost.aps
similarity index 100%
rename from Demos/MassStorageHost/MassStorageHost.aps
rename to Demos/Host/MassStorageHost/MassStorageHost.aps
diff --git a/Demos/MassStorageHost/MassStorageHost.c b/Demos/Host/MassStorageHost/MassStorageHost.c
similarity index 100%
rename from Demos/MassStorageHost/MassStorageHost.c
rename to Demos/Host/MassStorageHost/MassStorageHost.c
diff --git a/Demos/MassStorageHost/MassStorageHost.h b/Demos/Host/MassStorageHost/MassStorageHost.h
similarity index 100%
rename from Demos/MassStorageHost/MassStorageHost.h
rename to Demos/Host/MassStorageHost/MassStorageHost.h
diff --git a/Demos/MassStorageHost/MassStorageHost.txt b/Demos/Host/MassStorageHost/MassStorageHost.txt
similarity index 100%
rename from Demos/MassStorageHost/MassStorageHost.txt
rename to Demos/Host/MassStorageHost/MassStorageHost.txt
diff --git a/Demos/MassStorageHost/MassStoreCommands.c b/Demos/Host/MassStorageHost/MassStoreCommands.c
similarity index 100%
rename from Demos/MassStorageHost/MassStoreCommands.c
rename to Demos/Host/MassStorageHost/MassStoreCommands.c
diff --git a/Demos/MassStorageHost/MassStoreCommands.h b/Demos/Host/MassStorageHost/MassStoreCommands.h
similarity index 100%
rename from Demos/MassStorageHost/MassStoreCommands.h
rename to Demos/Host/MassStorageHost/MassStoreCommands.h
diff --git a/Demos/MassStorage/SCSI_Codes.h b/Demos/Host/MassStorageHost/SCSI_Codes.h
similarity index 100%
rename from Demos/MassStorage/SCSI_Codes.h
rename to Demos/Host/MassStorageHost/SCSI_Codes.h
diff --git a/Demos/MassStorageHost/makefile b/Demos/Host/MassStorageHost/makefile
similarity index 92%
rename from Demos/MassStorageHost/makefile
rename to Demos/Host/MassStorageHost/makefile
index de7ee3dc11ef197b51c89479fff615cc197ec424..5d853e4bea8facda47b2b3443e29cd3ddfad8c5b 100644
--- a/Demos/MassStorageHost/makefile
+++ b/Demos/Host/MassStorageHost/makefile
@@ -118,22 +118,27 @@ TARGET = MassStorageHost
 OBJDIR = .
 
 
+# Path to the LUFA library
+LUFA_PATH = ../../..
+
+
 # List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c                                          \
-	  ConfigDescriptor.c                                   \
-	  MassStoreCommands.c                                  \
-	  ../../LUFA/Scheduler/Scheduler.c                     \
-	  ../../LUFA/Drivers/AT90USBXXX/Serial_Stream.c        \
-	  ../../LUFA/Drivers/AT90USBXXX/Serial.c               \
-	  ../../LUFA/Drivers/USB/Class/ConfigDescriptor.c      \
-	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/Pipe.c               \
-	  ../../LUFA/Drivers/USB/LowLevel/Host.c               \
-	  ../../LUFA/Drivers/USB/LowLevel/HostChapter9.c       \
-	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
-	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
-	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
-	  
+SRC = $(TARGET).c                                                 \
+	  ConfigDescriptor.c                                          \
+	  MassStoreCommands.c                                         \
+	  $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
+	  $(LUFA_PATH)/LUFA/Drivers/AT90USBXXX/Serial_Stream.c        \
+	  $(LUFA_PATH)/LUFA/Drivers/AT90USBXXX/Serial.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/Class/ConfigDescriptor.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \
+
+
 # List C++ source files here. (C dependencies are automatically generated.)
 CPPSRC = 
 
@@ -165,7 +170,7 @@ DEBUG = dwarf-2
 #     Each directory must be seperated by a space.
 #     Use forward slashes for directory separators.
 #     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS = ../../
+EXTRAINCDIRS = $(LUFA_PATH)/
 
 
 # Compiler flag to set the C Standard level.
diff --git a/Demos/MouseHost/ConfigDescriptor.c b/Demos/Host/MouseHost/ConfigDescriptor.c
similarity index 100%
rename from Demos/MouseHost/ConfigDescriptor.c
rename to Demos/Host/MouseHost/ConfigDescriptor.c
diff --git a/Demos/MouseHost/ConfigDescriptor.h b/Demos/Host/MouseHost/ConfigDescriptor.h
similarity index 100%
rename from Demos/MouseHost/ConfigDescriptor.h
rename to Demos/Host/MouseHost/ConfigDescriptor.h
diff --git a/Demos/MouseHost/Doxygen.conf b/Demos/Host/MouseHost/Doxygen.conf
similarity index 100%
rename from Demos/MouseHost/Doxygen.conf
rename to Demos/Host/MouseHost/Doxygen.conf
diff --git a/Demos/MouseHost/MouseHost.aps b/Demos/Host/MouseHost/MouseHost.aps
similarity index 100%
rename from Demos/MouseHost/MouseHost.aps
rename to Demos/Host/MouseHost/MouseHost.aps
diff --git a/Demos/MouseHost/MouseHost.c b/Demos/Host/MouseHost/MouseHost.c
similarity index 100%
rename from Demos/MouseHost/MouseHost.c
rename to Demos/Host/MouseHost/MouseHost.c
diff --git a/Demos/MouseHost/MouseHost.h b/Demos/Host/MouseHost/MouseHost.h
similarity index 100%
rename from Demos/MouseHost/MouseHost.h
rename to Demos/Host/MouseHost/MouseHost.h
diff --git a/Demos/MouseHost/MouseHost.txt b/Demos/Host/MouseHost/MouseHost.txt
similarity index 100%
rename from Demos/MouseHost/MouseHost.txt
rename to Demos/Host/MouseHost/MouseHost.txt
diff --git a/Demos/MouseHost/makefile b/Demos/Host/MouseHost/makefile
similarity index 92%
rename from Demos/MouseHost/makefile
rename to Demos/Host/MouseHost/makefile
index bbdb548fe5e8201c981de8c4d7886840f1dbff62..65c9dd676bdb3fca8216bf3bd95c0d66ee6c1aa8 100644
--- a/Demos/MouseHost/makefile
+++ b/Demos/Host/MouseHost/makefile
@@ -118,21 +118,26 @@ TARGET = MouseHost
 OBJDIR = .
 
 
+# Path to the LUFA library
+LUFA_PATH = ../../..
+
+
 # List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c                                          \
-	  ConfigDescriptor.c                                   \
-	  ../../LUFA/Scheduler/Scheduler.c                     \
-	  ../../LUFA/Drivers/AT90USBXXX/Serial_Stream.c        \
-	  ../../LUFA/Drivers/AT90USBXXX/Serial.c               \
-	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/Pipe.c               \
-	  ../../LUFA/Drivers/USB/LowLevel/Host.c               \
-	  ../../LUFA/Drivers/USB/LowLevel/HostChapter9.c       \
-	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
-	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
-	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
-	  ../../LUFA/Drivers/USB/Class/ConfigDescriptor.c      \
-	  
+SRC = $(TARGET).c                                                 \
+	  ConfigDescriptor.c                                          \
+	  $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
+	  $(LUFA_PATH)/LUFA/Drivers/AT90USBXXX/Serial_Stream.c        \
+	  $(LUFA_PATH)/LUFA/Drivers/AT90USBXXX/Serial.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/Class/ConfigDescriptor.c      \
+
+
 # List C++ source files here. (C dependencies are automatically generated.)
 CPPSRC = 
 
@@ -164,7 +169,7 @@ DEBUG = dwarf-2
 #     Each directory must be seperated by a space.
 #     Use forward slashes for directory separators.
 #     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS = ../../
+EXTRAINCDIRS = $(LUFA_PATH)/
 
 
 # Compiler flag to set the C Standard level.
diff --git a/Demos/MouseHostWithParser/ConfigDescriptor.c b/Demos/Host/MouseHostWithParser/ConfigDescriptor.c
similarity index 100%
rename from Demos/MouseHostWithParser/ConfigDescriptor.c
rename to Demos/Host/MouseHostWithParser/ConfigDescriptor.c
diff --git a/Demos/MouseHostWithParser/ConfigDescriptor.h b/Demos/Host/MouseHostWithParser/ConfigDescriptor.h
similarity index 100%
rename from Demos/MouseHostWithParser/ConfigDescriptor.h
rename to Demos/Host/MouseHostWithParser/ConfigDescriptor.h
diff --git a/Demos/MouseHostWithParser/Doxygen.conf b/Demos/Host/MouseHostWithParser/Doxygen.conf
similarity index 100%
rename from Demos/MouseHostWithParser/Doxygen.conf
rename to Demos/Host/MouseHostWithParser/Doxygen.conf
diff --git a/Demos/MouseHostWithParser/HIDReport.c b/Demos/Host/MouseHostWithParser/HIDReport.c
similarity index 100%
rename from Demos/MouseHostWithParser/HIDReport.c
rename to Demos/Host/MouseHostWithParser/HIDReport.c
diff --git a/Demos/MouseHostWithParser/HIDReport.h b/Demos/Host/MouseHostWithParser/HIDReport.h
similarity index 100%
rename from Demos/MouseHostWithParser/HIDReport.h
rename to Demos/Host/MouseHostWithParser/HIDReport.h
diff --git a/Demos/MouseHostWithParser/MouseHostWithParser.aps b/Demos/Host/MouseHostWithParser/MouseHostWithParser.aps
similarity index 100%
rename from Demos/MouseHostWithParser/MouseHostWithParser.aps
rename to Demos/Host/MouseHostWithParser/MouseHostWithParser.aps
diff --git a/Demos/MouseHostWithParser/MouseHostWithParser.c b/Demos/Host/MouseHostWithParser/MouseHostWithParser.c
similarity index 100%
rename from Demos/MouseHostWithParser/MouseHostWithParser.c
rename to Demos/Host/MouseHostWithParser/MouseHostWithParser.c
diff --git a/Demos/MouseHostWithParser/MouseHostWithParser.h b/Demos/Host/MouseHostWithParser/MouseHostWithParser.h
similarity index 100%
rename from Demos/MouseHostWithParser/MouseHostWithParser.h
rename to Demos/Host/MouseHostWithParser/MouseHostWithParser.h
diff --git a/Demos/MouseHostWithParser/MouseHostWithParser.txt b/Demos/Host/MouseHostWithParser/MouseHostWithParser.txt
similarity index 100%
rename from Demos/MouseHostWithParser/MouseHostWithParser.txt
rename to Demos/Host/MouseHostWithParser/MouseHostWithParser.txt
diff --git a/Demos/MouseHostWithParser/makefile b/Demos/Host/MouseHostWithParser/makefile
similarity index 92%
rename from Demos/MouseHostWithParser/makefile
rename to Demos/Host/MouseHostWithParser/makefile
index bc5e28d34108b364867334ec6576d22d8cc6fd4b..bc4ca6ca25fa0d88c9256d58281b4c4a45096bb4 100644
--- a/Demos/MouseHostWithParser/makefile
+++ b/Demos/Host/MouseHostWithParser/makefile
@@ -118,23 +118,28 @@ TARGET = MouseHostWithParser
 OBJDIR = .
 
 
+# Path to the LUFA library
+LUFA_PATH = ../../..
+
+
 # List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c                                          \
-	  ConfigDescriptor.c                                   \
-	  HIDReport.c                                          \
-	  ../../LUFA/Scheduler/Scheduler.c                     \
-	  ../../LUFA/Drivers/AT90USBXXX/Serial_Stream.c        \
-	  ../../LUFA/Drivers/AT90USBXXX/Serial.c               \
-	  ../../LUFA/Drivers/USB/Class/HIDParser.c             \
-	  ../../LUFA/Drivers/USB/Class/ConfigDescriptor.c      \
-	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/Pipe.c               \
-	  ../../LUFA/Drivers/USB/LowLevel/Host.c               \
-	  ../../LUFA/Drivers/USB/LowLevel/HostChapter9.c       \
-	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
-	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
-	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
-	  
+SRC = $(TARGET).c                                                 \
+	  ConfigDescriptor.c                                          \
+	  HIDReport.c                                                 \
+	  $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
+	  $(LUFA_PATH)/LUFA/Drivers/AT90USBXXX/Serial_Stream.c        \
+	  $(LUFA_PATH)/LUFA/Drivers/AT90USBXXX/Serial.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c             \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/Class/ConfigDescriptor.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \
+
+
 # List C++ source files here. (C dependencies are automatically generated.)
 CPPSRC = 
 
@@ -166,7 +171,7 @@ DEBUG = dwarf-2
 #     Each directory must be seperated by a space.
 #     Use forward slashes for directory separators.
 #     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS = ../../
+EXTRAINCDIRS = $(LUFA_PATH)/
 
 
 # Compiler flag to set the C Standard level.
diff --git a/Demos/StillImageHost/ConfigDescriptor.c b/Demos/Host/StillImageHost/ConfigDescriptor.c
similarity index 100%
rename from Demos/StillImageHost/ConfigDescriptor.c
rename to Demos/Host/StillImageHost/ConfigDescriptor.c
diff --git a/Demos/StillImageHost/ConfigDescriptor.h b/Demos/Host/StillImageHost/ConfigDescriptor.h
similarity index 100%
rename from Demos/StillImageHost/ConfigDescriptor.h
rename to Demos/Host/StillImageHost/ConfigDescriptor.h
diff --git a/Demos/StillImageHost/Doxygen.conf b/Demos/Host/StillImageHost/Doxygen.conf
similarity index 100%
rename from Demos/StillImageHost/Doxygen.conf
rename to Demos/Host/StillImageHost/Doxygen.conf
diff --git a/Demos/StillImageHost/PIMACodes.h b/Demos/Host/StillImageHost/PIMACodes.h
similarity index 100%
rename from Demos/StillImageHost/PIMACodes.h
rename to Demos/Host/StillImageHost/PIMACodes.h
diff --git a/Demos/StillImageHost/StillImageCommands.c b/Demos/Host/StillImageHost/StillImageCommands.c
similarity index 100%
rename from Demos/StillImageHost/StillImageCommands.c
rename to Demos/Host/StillImageHost/StillImageCommands.c
diff --git a/Demos/StillImageHost/StillImageCommands.h b/Demos/Host/StillImageHost/StillImageCommands.h
similarity index 100%
rename from Demos/StillImageHost/StillImageCommands.h
rename to Demos/Host/StillImageHost/StillImageCommands.h
diff --git a/Demos/StillImageHost/StillImageHost.aps b/Demos/Host/StillImageHost/StillImageHost.aps
similarity index 100%
rename from Demos/StillImageHost/StillImageHost.aps
rename to Demos/Host/StillImageHost/StillImageHost.aps
diff --git a/Demos/StillImageHost/StillImageHost.c b/Demos/Host/StillImageHost/StillImageHost.c
similarity index 100%
rename from Demos/StillImageHost/StillImageHost.c
rename to Demos/Host/StillImageHost/StillImageHost.c
diff --git a/Demos/StillImageHost/StillImageHost.h b/Demos/Host/StillImageHost/StillImageHost.h
similarity index 100%
rename from Demos/StillImageHost/StillImageHost.h
rename to Demos/Host/StillImageHost/StillImageHost.h
diff --git a/Demos/StillImageHost/StillImageHost.txt b/Demos/Host/StillImageHost/StillImageHost.txt
similarity index 100%
rename from Demos/StillImageHost/StillImageHost.txt
rename to Demos/Host/StillImageHost/StillImageHost.txt
diff --git a/Demos/StillImageHost/makefile b/Demos/Host/StillImageHost/makefile
similarity index 92%
rename from Demos/StillImageHost/makefile
rename to Demos/Host/StillImageHost/makefile
index df81e4842b9153872c61eabab6439e924bcdd0f4..e34c18f39cf2602a6c95b9ba06e9fd580bd706f4 100644
--- a/Demos/StillImageHost/makefile
+++ b/Demos/Host/StillImageHost/makefile
@@ -117,22 +117,27 @@ TARGET = StillImageHost
 OBJDIR = .
 
 
+# Path to the LUFA library
+LUFA_PATH = ../../..
+
+
 # List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c                                          \
-	  ConfigDescriptor.c                                   \
-	  StillImageCommands.c                                 \
-	  ../../LUFA/Scheduler/Scheduler.c                     \
-	  ../../LUFA/Drivers/AT90USBXXX/Serial_Stream.c        \
-	  ../../LUFA/Drivers/AT90USBXXX/Serial.c               \
-	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/Pipe.c               \
-	  ../../LUFA/Drivers/USB/LowLevel/Host.c               \
-	  ../../LUFA/Drivers/USB/LowLevel/HostChapter9.c       \
-	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
-	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
-	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
-	  ../../LUFA/Drivers/USB/Class/ConfigDescriptor.c      \
-	  
+SRC = $(TARGET).c                                                 \
+	  ConfigDescriptor.c                                          \
+	  StillImageCommands.c                                        \
+	  $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
+	  $(LUFA_PATH)/LUFA/Drivers/AT90USBXXX/Serial_Stream.c        \
+	  $(LUFA_PATH)/LUFA/Drivers/AT90USBXXX/Serial.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/Class/ConfigDescriptor.c      \
+
+
 # List C++ source files here. (C dependencies are automatically generated.)
 CPPSRC = 
 
@@ -164,7 +169,7 @@ DEBUG = dwarf-2
 #     Each directory must be seperated by a space.
 #     Use forward slashes for directory separators.
 #     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS = ../../
+EXTRAINCDIRS = $(LUFA_PATH)/
 
 
 # Compiler flag to set the C Standard level.
diff --git a/Demos/Host/makefile b/Demos/Host/makefile
new file mode 100644
index 0000000000000000000000000000000000000000..6e43133905bec6119a51b0f36a10fc150b471864
--- /dev/null
+++ b/Demos/Host/makefile
@@ -0,0 +1,42 @@
+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2009.
+#              
+#  dean [at] fourwalledcubicle [dot] com
+#      www.fourwalledcubicle.com
+#
+
+# Makefile to build all the LUFA Host Demos. Call with "make all" to
+# rebuild all Host demos.
+
+# Projects are pre-cleaned before each one is built, to ensure any
+# custom LUFA library build options are reflected in the compiled
+# code.
+
+all:
+	make -C CDCHost clean
+	make -C CDCHost all	
+
+	make -C KeyboardHost clean
+	make -C KeyboardHostWithParser all	
+
+	make -C MassStorageHost clean
+	make -C MassStorageHost all	
+
+	make -C MouseHost clean
+	make -C MouseHost all	
+
+	make -C MouseHostWithParser clean
+	make -C MouseHostWithParser all	
+
+	make -C StillImageHost clean
+	make -C StillImageHost all	
+
+%:
+	make -C CDCHost $@
+	make -C KeyboardHost $@
+	make -C KeyboardHostWithParser $@
+	make -C MassStorageHost $@
+	make -C MouseHost $@
+	make -C MouseHostWithParser $@
+	make -C StillImageHost $@
diff --git a/Demos/TestApp/Descriptors.c b/Demos/OTG/TestApp/Descriptors.c
similarity index 100%
rename from Demos/TestApp/Descriptors.c
rename to Demos/OTG/TestApp/Descriptors.c
diff --git a/Demos/TestApp/Descriptors.h b/Demos/OTG/TestApp/Descriptors.h
similarity index 100%
rename from Demos/TestApp/Descriptors.h
rename to Demos/OTG/TestApp/Descriptors.h
diff --git a/Demos/TestApp/Doxygen.conf b/Demos/OTG/TestApp/Doxygen.conf
similarity index 100%
rename from Demos/TestApp/Doxygen.conf
rename to Demos/OTG/TestApp/Doxygen.conf
diff --git a/Demos/TestApp/TestApp.aps b/Demos/OTG/TestApp/TestApp.aps
similarity index 100%
rename from Demos/TestApp/TestApp.aps
rename to Demos/OTG/TestApp/TestApp.aps
diff --git a/Demos/TestApp/TestApp.c b/Demos/OTG/TestApp/TestApp.c
similarity index 100%
rename from Demos/TestApp/TestApp.c
rename to Demos/OTG/TestApp/TestApp.c
diff --git a/Demos/TestApp/TestApp.h b/Demos/OTG/TestApp/TestApp.h
similarity index 100%
rename from Demos/TestApp/TestApp.h
rename to Demos/OTG/TestApp/TestApp.h
diff --git a/Demos/TestApp/TestApp.txt b/Demos/OTG/TestApp/TestApp.txt
similarity index 100%
rename from Demos/TestApp/TestApp.txt
rename to Demos/OTG/TestApp/TestApp.txt
diff --git a/Demos/TestApp/TestEvents.c b/Demos/OTG/TestApp/TestEvents.c
similarity index 100%
rename from Demos/TestApp/TestEvents.c
rename to Demos/OTG/TestApp/TestEvents.c
diff --git a/Demos/TestApp/TestEvents.h b/Demos/OTG/TestApp/TestEvents.h
similarity index 100%
rename from Demos/TestApp/TestEvents.h
rename to Demos/OTG/TestApp/TestEvents.h
diff --git a/Demos/TestApp/makefile b/Demos/OTG/TestApp/makefile
similarity index 91%
rename from Demos/TestApp/makefile
rename to Demos/OTG/TestApp/makefile
index ac2e6053e9a1f047cba831d417878ef3a30bbee0..0d198317542eb9d2e8b36c8d47773768b1a594ed 100644
--- a/Demos/TestApp/makefile
+++ b/Demos/OTG/TestApp/makefile
@@ -118,26 +118,31 @@ TARGET = TestApp
 OBJDIR = .
 
 
+# Path to the LUFA library
+LUFA_PATH = ../../..
+
+
 # List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c                                          \
-	  TestEvents.c                                         \
-	  Descriptors.c                                        \
-	  ../../LUFA/Scheduler/Scheduler.c                     \
-	  ../../LUFA/MemoryAllocator/DynAlloc.c                \
-	  ../../LUFA/Drivers/Board/Temperature.c               \
-	  ../../LUFA/Drivers/AT90USBXXX/Serial_Stream.c        \
-	  ../../LUFA/Drivers/AT90USBXXX/Serial.c               \
-	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/Endpoint.c           \
-	  ../../LUFA/Drivers/USB/LowLevel/Pipe.c               \
-	  ../../LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
-	  ../../LUFA/Drivers/USB/LowLevel/HostChapter9.c       \
-	  ../../LUFA/Drivers/USB/LowLevel/Host.c               \
-	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
-	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
-	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
-	  ../../LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
-	  
+SRC = $(TARGET).c                                                 \
+	  TestEvents.c                                                \
+	  Descriptors.c                                               \
+	  $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
+	  $(LUFA_PATH)/LUFA/MemoryAllocator/DynAlloc.c                \
+	  $(LUFA_PATH)/LUFA/Drivers/Board/Temperature.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/AT90USBXXX/Serial_Stream.c        \
+	  $(LUFA_PATH)/LUFA/Drivers/AT90USBXXX/Serial.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \
+	  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
+
+
 # List C++ source files here. (C dependencies are automatically generated.)
 CPPSRC = 
 
@@ -169,7 +174,7 @@ DEBUG = dwarf-2
 #     Each directory must be seperated by a space.
 #     Use forward slashes for directory separators.
 #     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS = ../../
+EXTRAINCDIRS = $(LUFA_PATH)/
 
 
 # Compiler flag to set the C Standard level.
diff --git a/Demos/OTG/makefile b/Demos/OTG/makefile
new file mode 100644
index 0000000000000000000000000000000000000000..44596749d3e95fae835a1c81b505e7536acc7d27
--- /dev/null
+++ b/Demos/OTG/makefile
@@ -0,0 +1,21 @@
+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2009.
+#              
+#  dean [at] fourwalledcubicle [dot] com
+#      www.fourwalledcubicle.com
+#
+
+# Makefile to build all the LUFA OTG Demos. Call with "make all" to
+# rebuild all OTG demos.
+
+# Projects are pre-cleaned before each one is built, to ensure any
+# custom LUFA library build options are reflected in the compiled
+# code.
+
+all:
+	make -C TestApp clean
+	make -C TestApp all	
+
+%:
+	make -C TestApp $@
\ No newline at end of file
diff --git a/Demos/makefile b/Demos/makefile
index 67d1b8cdfde5a83f514fc85af49752ed27c12793..cb624f4125191957b3609270ccb20fa754daaceb 100644
--- a/Demos/makefile
+++ b/Demos/makefile
@@ -13,85 +13,7 @@
 # custom LUFA library build options are reflected in the compiled
 # code.
 
-all:
-	make -C AudioInput clean
-	make -C AudioInput all
-
-	make -C AudioOutput clean
-	make -C AudioOutput all
-
-	make -C CDC clean
-	make -C CDC all
-
-	make -C CDCHost clean
-	make -C CDCHost all
-
-	make -C DualCDC clean
-	make -C DualCDC all
-
-	make -C Joystick clean
-	make -C Joystick all
-
-	make -C KeyboardMouse clean
-	make -C KeyboardMouse all
-
-	make -C Keyboard clean
-	make -C Keyboard all
-
-	make -C KeyboardHost clean
-	make -C KeyboardHost all
-	
-	make -C KeyboardHostWithParser clean
-	make -C KeyboardHostWithParser all
-
-	make -C MassStorage clean
-	make -C MassStorage all
-
-	make -C MassStorageHost clean
-	make -C MassStorageHost all
-
-	make -C MIDI clean
-	make -C MIDI all
-
-	make -C Mouse clean
-	make -C Mouse all
-	
-	make -C MouseHost clean
-	make -C MouseHost all
-
-	make -C MouseHostWithParser clean
-	make -C MouseHostWithParser all
-
-	make -C RNDISEthernet clean
-	make -C RNDISEthernet all
-
-	make -C StillImageHost clean
-	make -C StillImageHost all
-
-	make -C TestApp clean
-	make -C TestApp all
-
-	make -C USBtoSerial clean
-	make -C USBtoSerial all
-
 %:
-	make -C AudioInput $@
-	make -C AudioOutput $@
-	make -C CDC $@
-	make -C CDCHost $@
-	make -C DualCDC $@
-	make -C Joystick $@
-	make -C KeyboardMouse $@
-	make -C Keyboard $@
-	make -C KeyboardHost $@
-	make -C KeyboardHostWithParser $@
-	make -C MassStorage $@
-	make -C MassStorageHost $@
-	make -C MIDI $@
-	make -C Mouse $@
-	make -C MouseHost $@
-	make -C MouseHostWithParser $@
-	make -C RNDISEthernet $@
-	make -C StillImageHost $@
-	make -C TestApp $@
-	make -C USBtoSerial $@
\ No newline at end of file
+	make -C Device/ $@
+	make -C Host/ $@
+	make -C OTG/ $@