diff --git a/Bootloaders/CDC/makefile b/Bootloaders/CDC/makefile
index 5045cc6864173d4719c09a72a3b56f84819ca2c0..1e6491c1edbe2743afae297bc003cddf468e652e 100644
--- a/Bootloaders/CDC/makefile
+++ b/Bootloaders/CDC/makefile
@@ -32,18 +32,6 @@
 # make program = Download the hex file to the device, using avrdude.
 #                Please customize the avrdude settings below first!
 #
-# make dfu = Download the hex file to the device, using dfu-programmer (must
-#            have dfu-programmer installed).
-#
-# make flip = Download the hex file to the device, using Atmel FLIP (must
-#             have Atmel FLIP installed).
-#
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
-#               (must have dfu-programmer installed).
-#
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
-#                (must have Atmel FLIP installed).
-#
 # make doxygen = Generate DoxyGen documentation for the project (must have
 #                DoxyGen installed)
 #
@@ -527,26 +515,6 @@ gccversion :
 program: $(TARGET).hex $(TARGET).eep
 	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 
-flip: $(TARGET).hex
-	batchisp -hardware usb -device $(MCU) -operation erase f
-	batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program
-	batchisp -hardware usb -device $(MCU) -operation start reset 0
-
-dfu: $(TARGET).hex
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex
-	dfu-programmer $(MCU) reset
-
-flip-ee: $(TARGET).hex $(TARGET).eep
-	copy $(TARGET).eep $(TARGET)eep.hex
-	batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase
-	batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program
-	batchisp -hardware usb -device $(MCU) -operation start reset 0
-
-dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
-	dfu-programmer $(MCU) reset
 
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
diff --git a/Bootloaders/DFU/makefile b/Bootloaders/DFU/makefile
index 5a26b7e3ef6bc72bc1cc6a1e1350ad15977948b0..88c539ca5338b6cef7c1cabe1f820275f963ef78 100644
--- a/Bootloaders/DFU/makefile
+++ b/Bootloaders/DFU/makefile
@@ -32,18 +32,6 @@
 # make program = Download the hex file to the device, using avrdude.
 #                Please customize the avrdude settings below first!
 #
-# make dfu = Download the hex file to the device, using dfu-programmer (must
-#            have dfu-programmer installed).
-#
-# make flip = Download the hex file to the device, using Atmel FLIP (must
-#             have Atmel FLIP installed).
-#
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
-#               (must have dfu-programmer installed).
-#
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
-#                (must have Atmel FLIP installed).
-#
 # make doxygen = Generate DoxyGen documentation for the project (must have
 #                DoxyGen installed)
 #
@@ -527,27 +515,8 @@ gccversion :
 # Program the device.  
 program: $(TARGET).hex $(TARGET).eep
 	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
-
-flip: $(TARGET).hex
-	batchisp -hardware usb -device $(MCU) -operation erase f
-	batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program
-	batchisp -hardware usb -device $(MCU) -operation start reset 0
-
-dfu: $(TARGET).hex
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex
-	dfu-programmer $(MCU) reset
-
-flip-ee: $(TARGET).hex $(TARGET).eep
-	copy $(TARGET).eep $(TARGET)eep.hex
-	batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase
-	batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program
-	batchisp -hardware usb -device $(MCU) -operation start reset 0
-
-dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
-	dfu-programmer $(MCU) reset
+	
+	
 
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
diff --git a/Bootloaders/TeensyHID/makefile b/Bootloaders/TeensyHID/makefile
index a815e01b45376ff3c22d63a8b461dbcdec82701e..8d8636f36068f2d65f2f3134ed01a7f91d7b0e34 100644
--- a/Bootloaders/TeensyHID/makefile
+++ b/Bootloaders/TeensyHID/makefile
@@ -32,18 +32,6 @@
 # make program = Download the hex file to the device, using avrdude.
 #                Please customize the avrdude settings below first!
 #
-# make dfu = Download the hex file to the device, using dfu-programmer (must
-#            have dfu-programmer installed).
-#
-# make flip = Download the hex file to the device, using Atmel FLIP (must
-#             have Atmel FLIP installed).
-#
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
-#               (must have dfu-programmer installed).
-#
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
-#                (must have Atmel FLIP installed).
-#
 # make doxygen = Generate DoxyGen documentation for the project (must have
 #                DoxyGen installed)
 #
@@ -527,26 +515,6 @@ gccversion :
 program: $(TARGET).hex $(TARGET).eep
 	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 
-flip: $(TARGET).hex
-	batchisp -hardware usb -device $(MCU) -operation erase f
-	batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program
-	batchisp -hardware usb -device $(MCU) -operation start reset 0
-
-dfu: $(TARGET).hex
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex
-	dfu-programmer $(MCU) reset
-
-flip-ee: $(TARGET).hex $(TARGET).eep
-	copy $(TARGET).eep $(TARGET)eep.hex
-	batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase
-	batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program
-	batchisp -hardware usb -device $(MCU) -operation start reset 0
-
-dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
-	dfu-programmer $(MCU) reset
 
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
diff --git a/Demos/AudioInput/makefile b/Demos/AudioInput/makefile
index 51f6cc5b85815a1ca126af139df7ba499d217f68..697442b5e5003798731bf97c124bf733fde0e6ad 100644
--- a/Demos/AudioInput/makefile
+++ b/Demos/AudioInput/makefile
@@ -534,10 +534,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -676,10 +676,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -714,4 +715,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/AudioOutput/makefile b/Demos/AudioOutput/makefile
index 6c2ee3230871dd2c7025d422774617e1c09c3a27..a84a4b58b56c9d4fe4e3623395f793d05c24cf80 100644
--- a/Demos/AudioOutput/makefile
+++ b/Demos/AudioOutput/makefile
@@ -534,10 +534,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -676,10 +676,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -714,4 +715,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/BluetoothHost/BluetoothHost.c b/Demos/BluetoothHost/BluetoothHost.c
index 0f9eb4a9e609ad7fa398f70e861ae58e5f504625..50bd1a8fe191bab3325e32de6263763fcda24e6d 100644
--- a/Demos/BluetoothHost/BluetoothHost.c
+++ b/Demos/BluetoothHost/BluetoothHost.c
@@ -62,9 +62,9 @@ TASK_LIST
 
 Bluetooth_Device_t Bluetooth_DeviceConfiguration =
 	{
-		Class: (DEVICE_CLASS_SERVICE_CAPTURING | DEVICE_CLASS_MAJOR_COMPUTER | DEVICE_CLASS_MINOR_COMPUTER_PALM),
+		Class:   (DEVICE_CLASS_SERVICE_CAPTURING | DEVICE_CLASS_MAJOR_COMPUTER | DEVICE_CLASS_MINOR_COMPUTER_PALM),
 		PINCode: "0000",
-		Name:  "LUFA Bluetooth Demo"
+		Name:    "LUFA Bluetooth Demo"
 	};
 
 
diff --git a/Demos/BluetoothHost/makefile b/Demos/BluetoothHost/makefile
index 189c84e1c8d3c5326bdcc6f51743fa2d66b836bf..0adac4bcdb8083365c2c1a2eb20d0a4ae7f5c7b7 100644
--- a/Demos/BluetoothHost/makefile
+++ b/Demos/BluetoothHost/makefile
@@ -540,10 +540,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -677,15 +677,16 @@ $(OBJDIR)/%.o : %.S
 	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 	
 
-## Target: clean project.
+# Target: clean project.
 clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -698,11 +699,15 @@ clean_list:
 	$(REMOVE) $(SRC:.c=.i)
 	$(REMOVEDIR) .dep
 
+
 doxygen:
 	@echo Generating Project Documentation...
 	@doxygen Doxygen.conf
 	@echo Documentation Generation Complete.
 
+clean_doxygen:
+	rm -rf Documentation
+
 # Create object files directory
 $(shell mkdir $(OBJDIR) 2>/dev/null)
 
@@ -716,4 +721,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/CDC/makefile b/Demos/CDC/makefile
index 9b0e5bdd669ff5a521fe7a5cc6f36609e76d29f1..8b19d1dee9c6c306416f7c7cfa86e03163c7f1ca 100644
--- a/Demos/CDC/makefile
+++ b/Demos/CDC/makefile
@@ -534,10 +534,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -676,10 +676,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -714,4 +715,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/CDCHost/makefile b/Demos/CDCHost/makefile
index d1e4cb990bead2b2b2dff5270d39c3d7afd52db3..98700824c70683436c3cdb2585e0cf54e9c29bf5 100644
--- a/Demos/CDCHost/makefile
+++ b/Demos/CDCHost/makefile
@@ -537,10 +537,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -674,15 +674,16 @@ $(OBJDIR)/%.o : %.S
 	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 	
 
-## Target: clean project.
+# Target: clean project.
 clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -717,4 +718,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/DualCDC/makefile b/Demos/DualCDC/makefile
index 01ab6099722198b69a12a539281bd55366e3da39..9313b8008e9599093d79786c12a3d6aee9586fb2 100644
--- a/Demos/DualCDC/makefile
+++ b/Demos/DualCDC/makefile
@@ -534,10 +534,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -676,10 +676,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -714,4 +715,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/Joystick/makefile b/Demos/Joystick/makefile
index a29a2d3802fc38c82a66cdc5bbb6492ddef8513d..6638c108c46bd5fe1eaf82cf8f15c1310efa00f0 100644
--- a/Demos/Joystick/makefile
+++ b/Demos/Joystick/makefile
@@ -534,10 +534,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -615,6 +615,8 @@ extcoff: $(TARGET).elf
 	@echo $(MSG_SYMBOL_TABLE) $@
 	$(NM) -n $< > $@
 
+
+
 # Create library from object files.
 .SECONDARY : $(TARGET).a
 .PRECIOUS : $(OBJ)
@@ -674,10 +676,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -712,4 +715,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/Keyboard/makefile b/Demos/Keyboard/makefile
index 681f729e20da1bb2e6a2e01b09ede162653d54e5..db138609aff26798d9e318022bb647e0cc0291a8 100644
--- a/Demos/Keyboard/makefile
+++ b/Demos/Keyboard/makefile
@@ -536,10 +536,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -678,10 +678,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -716,4 +717,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/KeyboardFullInt/makefile b/Demos/KeyboardFullInt/makefile
index b1f7f890f380c85c4b46bfd0b342998d96a24ea3..a7ebbf9fd31cef4c7d3d85ac6e34c617a2c1b5b0 100644
--- a/Demos/KeyboardFullInt/makefile
+++ b/Demos/KeyboardFullInt/makefile
@@ -533,10 +533,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -675,10 +675,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -713,4 +714,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/KeyboardHost/makefile b/Demos/KeyboardHost/makefile
index 7ff737e5197bb494dbf6a6cf37e710fbd0099cc4..6ef376b3343d2e79bfae218f11bbad6f0d4c2112 100644
--- a/Demos/KeyboardHost/makefile
+++ b/Demos/KeyboardHost/makefile
@@ -537,10 +537,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -674,15 +674,16 @@ $(OBJDIR)/%.o : %.S
 	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 	
 
-## Target: clean project.
+# Target: clean project.
 clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -717,4 +718,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/KeyboardHostViaInt/makefile b/Demos/KeyboardHostViaInt/makefile
index a8b3f23e60a6ebae8fe24a664cf02058c5c0354c..813ed690cda6b12edde40856d02bdc45c12c8655 100644
--- a/Demos/KeyboardHostViaInt/makefile
+++ b/Demos/KeyboardHostViaInt/makefile
@@ -537,10 +537,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -674,15 +674,16 @@ $(OBJDIR)/%.o : %.S
 	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 	
 
-## Target: clean project.
+# Target: clean project.
 clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -717,4 +718,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/KeyboardHostWithParser/makefile b/Demos/KeyboardHostWithParser/makefile
index ea768b4e4cae0947275cd200493fc4363a587198..41d8d9f662d60486807f61713d50bc3cd302f5f8 100644
--- a/Demos/KeyboardHostWithParser/makefile
+++ b/Demos/KeyboardHostWithParser/makefile
@@ -539,10 +539,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -676,15 +676,16 @@ $(OBJDIR)/%.o : %.S
 	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 	
 
-## Target: clean project.
+# Target: clean project.
 clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -719,4 +720,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/KeyboardMouse/makefile b/Demos/KeyboardMouse/makefile
index 7c26d2cf29d646fad949dceee653e336514df30c..b16146c2822a0ec967307a0cce285adb1e231216 100644
--- a/Demos/KeyboardMouse/makefile
+++ b/Demos/KeyboardMouse/makefile
@@ -534,10 +534,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -676,10 +676,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -714,4 +715,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/KeyboardViaInt/makefile b/Demos/KeyboardViaInt/makefile
index ff225b35c479c79c640b68cc49b842a6ad4507cd..5b84843b633f924eea59c88f74c275b1c0bfa1f6 100644
--- a/Demos/KeyboardViaInt/makefile
+++ b/Demos/KeyboardViaInt/makefile
@@ -534,10 +534,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -676,10 +676,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -714,4 +715,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/MIDI/makefile b/Demos/MIDI/makefile
index c5cc048d84d661eacde56c5df6353ffd5cae5b87..7d9f24a053e75ec53b1f06ea5a80eb257b62fbdb 100644
--- a/Demos/MIDI/makefile
+++ b/Demos/MIDI/makefile
@@ -534,10 +534,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -676,10 +676,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -714,4 +715,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/MassStorage/makefile b/Demos/MassStorage/makefile
index 2f17228afc6713f2c8b944460543137394603dc1..284d2aa284e8224bf4ffd31bd70be1a8ac2fad82 100644
--- a/Demos/MassStorage/makefile
+++ b/Demos/MassStorage/makefile
@@ -536,10 +536,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -678,10 +678,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -716,4 +717,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/MassStorageHost/makefile b/Demos/MassStorageHost/makefile
index 2608b76bb7bd330dce2c9e51c652a8fffaf8d0f4..322d76003233c196eb03f855f50e316c4b7b8ebe 100644
--- a/Demos/MassStorageHost/makefile
+++ b/Demos/MassStorageHost/makefile
@@ -539,10 +539,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -676,15 +676,16 @@ $(OBJDIR)/%.o : %.S
 	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 	
 
-## Target: clean project.
+# Target: clean project.
 clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -719,4 +720,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/Mouse/makefile b/Demos/Mouse/makefile
index 0f20dca636203fa0418e5833e4f0e6c69440db75..4886e892663e1b6e39fb531afcc4fc0b84a66e3a 100644
--- a/Demos/Mouse/makefile
+++ b/Demos/Mouse/makefile
@@ -535,10 +535,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -677,10 +677,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -715,4 +716,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/MouseFullInt/makefile b/Demos/MouseFullInt/makefile
index fe85516989a853f4bdc5ea91cd1f7dd2b5239ed2..0a7e684d58bfad47dcb04f90066f7c22312d703b 100644
--- a/Demos/MouseFullInt/makefile
+++ b/Demos/MouseFullInt/makefile
@@ -535,10 +535,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -677,10 +677,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -715,4 +716,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/MouseHost/makefile b/Demos/MouseHost/makefile
index 6e8688f10191f50b2298d73ad5abe10c7554ca8b..f2bb61ad28435127c11343f4de9f2627dff9914c 100644
--- a/Demos/MouseHost/makefile
+++ b/Demos/MouseHost/makefile
@@ -537,10 +537,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -679,10 +679,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -717,4 +718,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/MouseHostViaInt/makefile b/Demos/MouseHostViaInt/makefile
index f2b86e12f5b0e1517983dbf1897471ebf91856e7..45b53c6b3c909e6deb4c70e2bcd2faa1caf9560f 100644
--- a/Demos/MouseHostViaInt/makefile
+++ b/Demos/MouseHostViaInt/makefile
@@ -537,10 +537,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -679,10 +679,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -717,4 +718,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/MouseHostWithParser/makefile b/Demos/MouseHostWithParser/makefile
index 3eec44b369f62a64aa78797aa9cc7f341fe357c0..c815185f220bdef84e6878bed304aecefbeb741f 100644
--- a/Demos/MouseHostWithParser/makefile
+++ b/Demos/MouseHostWithParser/makefile
@@ -539,10 +539,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -681,10 +681,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -719,4 +720,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/MouseViaInt/makefile b/Demos/MouseViaInt/makefile
index 571d1f606755550e9e0aa0fea2c1d6c022372e1b..892fe44171afe4fd574e7bce7d4598fa936e6aaf 100644
--- a/Demos/MouseViaInt/makefile
+++ b/Demos/MouseViaInt/makefile
@@ -535,10 +535,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -677,10 +677,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -715,4 +716,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/RNDISEthernet/makefile b/Demos/RNDISEthernet/makefile
index ba1588af619270852b2fccab1db0af91467b19da..18f1fe4a82a117e9501236977e8ba78981c28d56 100644
--- a/Demos/RNDISEthernet/makefile
+++ b/Demos/RNDISEthernet/makefile
@@ -548,10 +548,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -690,10 +690,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -728,4 +729,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/StillImageHost/makefile b/Demos/StillImageHost/makefile
index 63e328ac40934d2513a2881018a41d374156aa05..8387c81610e6e5cde579684e8da23e69309c08e8 100644
--- a/Demos/StillImageHost/makefile
+++ b/Demos/StillImageHost/makefile
@@ -537,10 +537,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -674,15 +674,16 @@ $(OBJDIR)/%.o : %.S
 	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 	
 
-## Target: clean project.
+# Target: clean project.
 clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -717,4 +718,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/TestApp/makefile b/Demos/TestApp/makefile
index befc0e6fce60c80f781fcf7bfd917e4b64ba4097..e3a3ba935bd2a3e2f6aaf3a99f4b528a50511f99 100644
--- a/Demos/TestApp/makefile
+++ b/Demos/TestApp/makefile
@@ -542,10 +542,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -684,10 +684,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -722,4 +723,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Demos/USBtoSerial/makefile b/Demos/USBtoSerial/makefile
index 6703102bb00bc436ae237385963dbcea6ae8161e..0c4aa87e8dba100cc29d645e886bf7f96647bbda 100644
--- a/Demos/USBtoSerial/makefile
+++ b/Demos/USBtoSerial/makefile
@@ -536,10 +536,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -678,10 +678,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -716,4 +717,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/LUFA/ChangeLog.txt b/LUFA/ChangeLog.txt
index b89c6e8b947a9ea9a4e4ca1c628482a14a235de1..f699507dde28280d33ff461e099fec7bc1787fb7 100644
--- a/LUFA/ChangeLog.txt
+++ b/LUFA/ChangeLog.txt
@@ -8,7 +8,7 @@
   *
   *  \section Sec_ChangeLogXXXXXX Version XXXXXX
   *
-  *  - Added new BluetoothHost demo
+  *  - Added new incomplete BluetoothHost demo
   *  - Changed AVRISP Programmer descriptors to use a newly allocated 0x204F PID value
   *  - Fixed MagStripe project configuration descriptor containing an unused (blank) endpoint descriptor
   *  - Incorporated makefile changes by Denver Gingerich to retain compatibility with stock (non-WinAVR) AVR-GCC installations
@@ -26,6 +26,8 @@
   *  - Changed stream wait timeout counter to be 16-bit, so that very long timeout periods can be set for correct communications with
   *    badly designed hosts or devices which greatly exceed the USB specification limits
   *  - Mass Storage Host demo now uses a USB_STREAM_TIMEOUT_MS of two seconds to maintain compatibility with poorly designed devices
+  *  - Function attribute ATTR_ALWAYSINLINE renamed to ATTR_ALWAYS_INLINE to match other function attribute macro naming conventions
+  *  - Added ATTR_ALWAYS_INLINE attribute to several key inlined library components, to ensure they are inlined in all circumstances
   *
   *  \section Sec_ChangeLog090209 Version 090209
   *
diff --git a/LUFA/Common/FunctionAttributes.h b/LUFA/Common/FunctionAttributes.h
index 16503bb551ec3446abdf061073521138b4940097..daa6c4a2636e9060f377d52e4c08476600e3ce57 100644
--- a/LUFA/Common/FunctionAttributes.h
+++ b/LUFA/Common/FunctionAttributes.h
@@ -84,7 +84,7 @@
 			/** Forces the compiler to inline the specified function. When applied, the given function will be
 			 *  inlined under all circumstances.
 			 */
-			#define ATTR_ALWAYSINLINE           __attribute__ ((always_inline))
+			#define ATTR_ALWAYS_INLINE          __attribute__ ((always_inline))
 			
 			/** Indicates that the specified function is pure, in that it has no side-effects other than global
 			 *  or parameter variable access.
diff --git a/LUFA/Drivers/AT90USBXXX/SPI.h b/LUFA/Drivers/AT90USBXXX/SPI.h
index 0b333a804e7e999e95eb2e27d6776a506bdb4955..2cfa52322835f1ceebea878c433e44181d451609 100644
--- a/LUFA/Drivers/AT90USBXXX/SPI.h
+++ b/LUFA/Drivers/AT90USBXXX/SPI.h
@@ -98,7 +98,7 @@
 			 *
 			 *  \return Response byte from the attached SPI device
 			 */
-			static inline uint8_t SPI_TransferByte(const uint8_t Byte) ATTR_ALWAYSINLINE;
+			static inline uint8_t SPI_TransferByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
 			static inline uint8_t SPI_TransferByte(const uint8_t Byte)
 			{
 				SPDR = Byte;
@@ -111,7 +111,7 @@
 			 *
 			 *  \param Byte Byte to send through the SPI interface
 			 */
-			static inline void SPI_SendByte(const uint8_t Byte) ATTR_ALWAYSINLINE;
+			static inline void SPI_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
 			static inline void SPI_SendByte(const uint8_t Byte)
 			{
 				SPDR = Byte;
@@ -123,7 +123,7 @@
 			 *
 			 *  \return The response byte from the attached SPI device
 			 */
-			static inline uint8_t SPI_ReceiveByte(void) ATTR_ALWAYSINLINE ATTR_WARN_UNUSED_RESULT;
+			static inline uint8_t SPI_ReceiveByte(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
 			static inline uint8_t SPI_ReceiveByte(void)
 			{
 				SPDR = 0x00;
diff --git a/LUFA/Drivers/Board/Dataflash.h b/LUFA/Drivers/Board/Dataflash.h
index 08deb50d4ef358c2ab07164901aff0b6b0b276cc..2b682d7c9c34beec851778fc7bce419fdf931f94 100644
--- a/LUFA/Drivers/Board/Dataflash.h
+++ b/LUFA/Drivers/Board/Dataflash.h
@@ -108,7 +108,7 @@
 			 *
 			 *  \return Last response byte from the dataflash
 			 */
-			static inline uint8_t Dataflash_TransferByte(const uint8_t Byte) ATTR_ALWAYSINLINE;
+			static inline uint8_t Dataflash_TransferByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
 			static inline uint8_t Dataflash_TransferByte(const uint8_t Byte)
 			{
 				return SPI_TransferByte(Byte);
@@ -118,7 +118,7 @@
 			 *
 			 *  \param Byte of data to send to the dataflash
 			 */
-			static inline void Dataflash_SendByte(const uint8_t Byte) ATTR_ALWAYSINLINE;
+			static inline void Dataflash_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
 			static inline void Dataflash_SendByte(const uint8_t Byte)
 			{
 				SPI_SendByte(Byte);
@@ -128,7 +128,7 @@
 			 *
 			 *  \return Last response byte from the dataflash
 			 */
-			static inline uint8_t Dataflash_ReceiveByte(void) ATTR_ALWAYSINLINE ATTR_WARN_UNUSED_RESULT;
+			static inline uint8_t Dataflash_ReceiveByte(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
 			static inline uint8_t Dataflash_ReceiveByte(void)
 			{
 				return SPI_ReceiveByte();
diff --git a/LUFA/Drivers/USB/LowLevel/Endpoint.h b/LUFA/Drivers/USB/LowLevel/Endpoint.h
index 5f3170416cf1971ba662c1938eccd903ed364371..d1ad1315ad6a3e309e7be8cc8fbd8b782d30fb0e 100644
--- a/LUFA/Drivers/USB/LowLevel/Endpoint.h
+++ b/LUFA/Drivers/USB/LowLevel/Endpoint.h
@@ -58,69 +58,69 @@
 			/** Endpoint data direction mask for Endpoint_ConfigureEndpoint(). This indicates that the endpoint
 			 *  should be initialized in the OUT direction - i.e. data flows from host to device.
 			 */
-			#define ENDPOINT_DIR_OUT                           0
+			#define ENDPOINT_DIR_OUT                      (0 << EPDIR)
 
 			/** Endpoint data direction mask for Endpoint_ConfigureEndpoint(). This indicates that the endpoint
 			 *  should be initialized in the IN direction - i.e. data flows from device to host.
 			 */
-			#define ENDPOINT_DIR_IN                            (1 << EPDIR)
+			#define ENDPOINT_DIR_IN                       (1 << EPDIR)
 
 			/** Mask for the bank mode selection for the Endpoint_ConfigureEndpoint() macro. This indicates
 			 *  that the endpoint should have one single bank, which requires less USB FIFO memory but results
 			 *  in slower transfers as only one USB device (the AVR or the host) can access the endpoint's
 			 *  bank at the one time.
 			 */
-			#define ENDPOINT_BANK_SINGLE                       0
+			#define ENDPOINT_BANK_SINGLE                  (0 << EPBK0)
 
 			/** Mask for the bank mode selection for the Endpoint_ConfigureEndpoint() macro. This indicates
 			 *  that the endpoint should have two banks, which requires more USB FIFO memory but results
 			 *  in faster transfers as one USB device (the AVR or the host) can access one bank while the other
 			 *  accesses the second bank.
 			 */
-			#define ENDPOINT_BANK_DOUBLE                       (1 << EPBK0)
+			#define ENDPOINT_BANK_DOUBLE                  (1 << EPBK0)
 			
 			/** Endpoint address for the default control endpoint, which always resides in address 0. This is
 			 *  defined for convenience to give more readable code when used with the endpoint macros.
 			 */
-			#define ENDPOINT_CONTROLEP                         0
+			#define ENDPOINT_CONTROLEP                    0
 
 			/** Default size of the default control endpoint's bank, until altered by the Endpoint0Size value 
 			 *  in the device descriptor. Not available if the FIXED_CONTROL_ENDPOINT_SIZE token is defined.
 			 */
 			#if (!defined(FIXED_CONTROL_ENDPOINT_SIZE) || defined(__DOXYGEN__))
-				#define ENDPOINT_CONTROLEP_DEFAULT_SIZE            8
+				#define ENDPOINT_CONTROLEP_DEFAULT_SIZE   8
 			#endif
 			
 			/** Endpoint number mask, for masking against endpoint addresses to retrieve the endpoint's
 			 *  numerical address in the device.
 			 */
-			#define ENDPOINT_EPNUM_MASK                        0b111
+			#define ENDPOINT_EPNUM_MASK                   0b111
 
 			/** Endpoint bank size mask, for masking against endpoint addresses to retrieve the endpoint's
 			 *  bank size in the device.
 			 */
-			#define ENDPOINT_EPSIZE_MASK                       0x7FF
+			#define ENDPOINT_EPSIZE_MASK                  0x7FF
 			
 			/** Maximum size in bytes of a given endpoint.
 			 *
 			 *  \param n  Endpoint number, a value between 0 and (ENDPOINT_TOTAL_ENDPOINTS - 1)
 			 */				
-			#define ENDPOINT_MAX_SIZE(n)                      _ENDPOINT_GET_MAXSIZE(n)
+			#define ENDPOINT_MAX_SIZE(n)                  _ENDPOINT_GET_MAXSIZE(n)
 
 			/** Indicates if the given endpoint supports double banking.
 			 *
 			 *  \param n  Endpoint number, a value between 0 and (ENDPOINT_TOTAL_ENDPOINTS - 1)
 			 */				
-			#define ENDPOINT_DOUBLEBANK_SUPPORTED(n)          _ENDPOINT_GET_DOUBLEBANK(n)
+			#define ENDPOINT_DOUBLEBANK_SUPPORTED(n)      _ENDPOINT_GET_DOUBLEBANK(n)
 
 			#if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) || defined(__DOXYGEN__)
 				/** Total number of endpoints (including the default control endpoint at address 0) which may
 				 *  be used in the device. Different USB AVR models support different amounts of endpoints,
 				 *  this value reflects the maximum number of endpoints for the currently selected AVR model.
 				 */
-				#define ENDPOINT_TOTAL_ENDPOINTS                7
+				#define ENDPOINT_TOTAL_ENDPOINTS          7
 			#else
-				#define ENDPOINT_TOTAL_ENDPOINTS                5			
+				#define ENDPOINT_TOTAL_ENDPOINTS          5			
 			#endif
 
 			/** Interrupt definition for the endpoint SETUP interrupt (for CONTROL type endpoints). Should be
@@ -128,8 +128,13 @@
 			 *
 			 *  This interrupt will fire if enabled on a CONTROL type endpoint if a new control packet is
 			 *  received from the host.
+			 *
+			 *  \note This interrupt must be enabled and cleared on *each* endpoint which requires it (after the
+			 *        endpoint is selected), and will fire the common endpoint interrupt vector.
+			 *
+			 *  \see ENDPOINT_PIPE_vect for more information on the common pipe and endpoint interrupt vector.
 			 */
-			#define ENDPOINT_INT_SETUP                         UEIENX, (1 << RXSTPE), UEINTX, (1 << RXSTPI)
+			#define ENDPOINT_INT_SETUP                    UEIENX, (1 << RXSTPE), UEINTX, (1 << RXSTPI)
 
 			/** Interrupt definition for the endpoint IN interrupt (for INTERRUPT type endpoints). Should be
 			 *  used with the USB_INT_* macros located in USBInterrupt.h.
@@ -137,8 +142,13 @@
 			 *  This interrupt will fire if enabled on an INTERRUPT type endpoint if a the endpoint interrupt
 			 *  period has elapsed and the endpoint is ready for a new packet to be written to its FIFO buffer
 			 *  (if required).
+			 *
+			 *  \note This interrupt must be enabled and cleared on *each* endpoint which requires it (after the
+			 *        endpoint is selected), and will fire the common endpoint interrupt vector.
+			 *
+			 *  \see ENDPOINT_PIPE_vect for more information on the common pipe and endpoint interrupt vector.
 			 */
-			#define ENDPOINT_INT_IN                            UEIENX, (1 << TXINE) , UEINTX, (1 << TXINI)
+			#define ENDPOINT_INT_IN                       UEIENX, (1 << TXINE) , UEINTX, (1 << TXINI)
 
 			/** Interrupt definition for the endpoint OUT interrupt (for INTERRUPT type endpoints). Should be
 			 *  used with the USB_INT_* macros located in USBInterrupt.h.
@@ -146,21 +156,26 @@
 			 *  This interrupt will fire if enabled on an INTERRUPT type endpoint if a the endpoint interrupt
 			 *  period has elapsed and the endpoint is ready for a packet from the host to be read from its
 			 *  FIFO buffer (if received).
+			 *
+			 *  \note This interrupt must be enabled and cleared on *each* endpoint which requires it (after the
+			 *        endpoint is selected), and will fire the common endpoint interrupt vector.
+			 *
+			 *  \see ENDPOINT_PIPE_vect for more information on the common pipe and endpoint interrupt vector.
 			 */
-			#define ENDPOINT_INT_OUT                           UEIENX, (1 << RXOUTE), UEINTX, (1 << RXOUTI)
+			#define ENDPOINT_INT_OUT                      UEIENX, (1 << RXOUTE), UEINTX, (1 << RXOUTI)
 			
 			#if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) || defined(__DOXYGEN__)
 				/** Indicates the number of bytes currently stored in the current endpoint's selected bank. */
-				#define Endpoint_BytesInEndpoint()             UEBCX
+				#define Endpoint_BytesInEndpoint()        UEBCX
 			#else
-				#define Endpoint_BytesInEndpoint()             UEBCLX
+				#define Endpoint_BytesInEndpoint()        UEBCLX
 			#endif
 			
 			/** Returns the endpoint address of the currently selected endpoint. This is typically used to save
 			 *  the currently selected endpoint number so that it can be restored after another endpoint has
 			 *  been manipulated.
 			 */
-			#define Endpoint_GetCurrentEndpoint()             (UENUM   &   ENDPOINT_EPNUM_MASK)
+			#define Endpoint_GetCurrentEndpoint()         (UENUM & ENDPOINT_EPNUM_MASK)
 			
 			/** Selects the given endpoint number. If the address from the device descriptors is used, the
 			 *  value should be masked with the ENDPOINT_EPNUM_MASK constant to extract only the endpoint
@@ -169,12 +184,12 @@
 			 *  Any endpoint operations which do not require the endpoint number to be indicated will operate on
 			 *  the currently selected endpoint.
 			 */
-			#define Endpoint_SelectEndpoint(epnum)     MACROS{ UENUM    =  epnum;                         }MACROE
+			#define Endpoint_SelectEndpoint(epnum)        MACROS{ UENUM = epnum; }MACROE
 
 			/** Resets the endpoint bank FIFO. This clears all the endpoint banks and resets the USB controller's
 			 *  In and Out pointers to the bank's contents.
 			 */
-			#define Endpoint_ResetFIFO(epnum)          MACROS{ UERST    =  (1 << epnum); UERST = 0;       }MACROE
+			#define Endpoint_ResetFIFO(epnum)             MACROS{ UERST = (1 << epnum); UERST = 0; }MACROE
 
 			/** Enables the currently selected endpoint so that data can be sent and received through it to
 			 *  and from a host.
@@ -182,15 +197,15 @@
 			 *  \note Endpoints must first be configured properly rather than just being enabled via the
 			 *        Endpoint_ConfigureEndpoint() macro, which calls Endpoint_EnableEndpoint() automatically.
 			 */
-			#define Endpoint_EnableEndpoint()          MACROS{ UECONX  |=  (1 << EPEN);                   }MACROE
+			#define Endpoint_EnableEndpoint()             MACROS{ UECONX |= (1 << EPEN); }MACROE
 
 			/** Disables the currently selected endpoint so that data cannot be sent and received through it
 			 *  to and from a host.
 			 */
-			#define Endpoint_DisableEndpoint()         MACROS{ UECONX  &= ~(1 << EPEN);                   }MACROE
+			#define Endpoint_DisableEndpoint()            MACROS{ UECONX &= ~(1 << EPEN); }MACROE
 
 			/** Returns true if the currently selected endpoint is enabled, false otherwise. */
-			#define Endpoint_IsEnabled()                     ((UECONX  &   (1 << EPEN)) ? true : false)
+			#define Endpoint_IsEnabled()                  ((UECONX & (1 << EPEN)) ? true : false)
 
 			/** Returns true if the currently selected endpoint may be read from (if data is waiting in the endpoint
 			 *  bank and the endpoint is an OUT direction, or if the bank is not yet full if the endpoint is an
@@ -198,53 +213,53 @@
 			 *  the endpoint is an OUT direction and no packet has been received, or if the endpoint is an IN
 			 *  direction and the endpoint bank is full.
 			 */
-			#define Endpoint_ReadWriteAllowed()              ((UEINTX  & (1 << RWAL)) ? true : false)
+			#define Endpoint_ReadWriteAllowed()           ((UEINTX & (1 << RWAL)) ? true : false)
 
 			/** Returns true if the currently selected endpoint is configured, false otherwise. */
-			#define Endpoint_IsConfigured()                  ((UESTA0X & (1 << CFGOK)) ? true : false)
+			#define Endpoint_IsConfigured()               ((UESTA0X & (1 << CFGOK)) ? true : false)
 
 			/** Returns a mask indicating which INTERRUPT type endpoints have interrupted - i.e. their
 			 *  interrupt duration has elapsed. Which endpoints have interrupted can be determined by
 			 *  masking the return value against (1 << {Endpoint Number}).
 			 */
-			#define Endpoint_GetEndpointInterrupts()           UEINT
+			#define Endpoint_GetEndpointInterrupts()      UEINT
 
 			/** Clears the endpoint interrupt flag. This clears the specified endpoint number's interrupt
 			 *  mask in the endpoint interrupt flag register.
 			 */
-			#define Endpoint_ClearEndpointInterrupt(n) MACROS{ UEINT   &= ~(1 << n);                     }MACROE
+			#define Endpoint_ClearEndpointInterrupt(n)    MACROS{ UEINT &= ~(1 << n); }MACROE
 
 			/** Returns true if the specified endpoint number has interrupted (valid only for INTERRUPT type
 			 *  endpoints), false otherwise.
 			 */
-			#define Endpoint_HasEndpointInterrupted(n)       ((UEINT   &   (1 << n)) ? true : false)
+			#define Endpoint_HasEndpointInterrupted(n)    ((UEINT & (1 << n)) ? true : false)
 
 			/** Clears the currently selected endpoint bank, and switches to the alternate bank if the currently
 			 *  selected endpoint is dual-banked. When cleared, this either frees the bank up for the next packet
 			 *  from the host (if the endpoint is of the OUT direction) or sends the packet contents to the host
 			 *  (if the endpoint is of the IN direction).
 			 */
-			#define Endpoint_ClearCurrentBank()       MACROS{ UEINTX  &= ~(1 << FIFOCON);               }MACROE
+			#define Endpoint_ClearCurrentBank()           MACROS{ UEINTX &= ~(1 << FIFOCON); }MACROE
 			
 			/** Returns true if the current CONTROL type endpoint is ready for an IN packet, false otherwise. */
-			#define Endpoint_IsSetupINReady()               ((UEINTX  & (1 << TXINI))  ? true : false)
+			#define Endpoint_IsSetupINReady()             ((UEINTX & (1 << TXINI))  ? true : false)
 
 			/** Returns true if the current CONTROL type endpoint is ready for an OUT packet, false otherwise. */
-			#define Endpoint_IsSetupOUTReceived()           ((UEINTX  & (1 << RXOUTI)) ? true : false)
+			#define Endpoint_IsSetupOUTReceived()         ((UEINTX & (1 << RXOUTI)) ? true : false)
 
 			/** Returns true if the current CONTROL type endpoint is ready for a SETUP packet, false otherwise. */
-			#define Endpoint_IsSetupReceived()              ((UEINTX  & (1 << RXSTPI)) ? true : false)
+			#define Endpoint_IsSetupReceived()            ((UEINTX & (1 << RXSTPI)) ? true : false)
 
 			/** Clears a received SETUP packet on the currently selected CONTROL type endpoint. */
-			#define Endpoint_ClearSetupReceived()      MACROS{ UEINTX  &= ~(1 << RXSTPI);                }MACROE
+			#define Endpoint_ClearSetupReceived()         MACROS{ UEINTX &= ~(1 << RXSTPI); }MACROE
 
 			/** Sends an IN packet to the host on the currently selected CONTROL type endpoint. */
-			#define Endpoint_ClearSetupIN()            MACROS{ UEINTX  &= ~(1 << TXINI);                 }MACROE
+			#define Endpoint_ClearSetupIN()               MACROS{ UEINTX &= ~(1 << TXINI); }MACROE
 
 			/** Acknowedges an OUT packet to the host on the currently selected CONTROL type endpoint, freeing
 			 *  up the endpoint for the next packet.
 			 */
-			#define Endpoint_ClearSetupOUT()           MACROS{ UEINTX  &= ~(1 << RXOUTI);                }MACROE
+			#define Endpoint_ClearSetupOUT()              MACROS{ UEINTX &= ~(1 << RXOUTI); }MACROE
 
 			/** Stalls the current endpoint, indicating to the host that a logical problem occured with the
 			 *  indicated endpoint and that the current transfer sequence should be aborted. This provides a
@@ -255,16 +270,16 @@
 			 *  is called, or the host issues a CLEAR FEATURE request to the device for the currently selected
 			 *  endpoint.
 			 */
-			#define Endpoint_StallTransaction()        MACROS{ UECONX  |=  (1 << STALLRQ);               }MACROE
+			#define Endpoint_StallTransaction()           MACROS{ UECONX |= (1 << STALLRQ); }MACROE
 
 			/** Clears the stall on the currently selected endpoint. */
-			#define Endpoint_ClearStall()              MACROS{ UECONX  |=  (1 << STALLRQC);              }MACROE
+			#define Endpoint_ClearStall()                 MACROS{ UECONX |= (1 << STALLRQC); }MACROE
 
 			/** Returns true if the currently selected endpoint is stalled, false othewise. */
-			#define Endpoint_IsStalled()                     ((UECONX  &   (1 << STALLRQ)) ? true : false)
+			#define Endpoint_IsStalled()                  ((UECONX & (1 << STALLRQ)) ? true : false)
 
 			/** Resets the data toggle of the currently selected endpoint. */
-			#define Endpoint_ResetDataToggle()         MACROS{ UECONX  |=  (1 << RSTDT);                 }MACROE
+			#define Endpoint_ResetDataToggle()            MACROS{ UECONX |= (1 << RSTDT); }MACROE
 
 		/* Enums: */
 			/** Enum for the possible error return codes of the Endpoint_WaitUntilReady function */
@@ -311,19 +326,21 @@
 
 		/* Inline Functions: */
 			/** Reads one byte from the currently selected endpoint's bank, for OUT direction endpoints. */
-			static inline uint8_t Endpoint_Read_Byte(void) ATTR_WARN_UNUSED_RESULT;
+			static inline uint8_t Endpoint_Read_Byte(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
 			static inline uint8_t Endpoint_Read_Byte(void)
 			{
 				return UEDATX;
 			}
 
 			/** Writes one byte from the currently selected endpoint's bank, for IN direction endpoints. */
+			static inline void Endpoint_Write_Byte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
 			static inline void Endpoint_Write_Byte(const uint8_t Byte)
 			{
 				UEDATX = Byte;
 			}
 
 			/** Discards one byte from the currently selected endpoint's bank, for OUT direction endpoints. */
+			static inline void Endpoint_Discard_Byte(void) ATTR_ALWAYS_INLINE;
 			static inline void Endpoint_Discard_Byte(void)
 			{
 				uint8_t Dummy;
@@ -334,7 +351,7 @@
 			/** Reads two bytes from the currently selected endpoint's bank in little endian format, for OUT
 			 *  direction endpoints.
 			 */
-			static inline uint16_t Endpoint_Read_Word_LE(void) ATTR_WARN_UNUSED_RESULT;
+			static inline uint16_t Endpoint_Read_Word_LE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
 			static inline uint16_t Endpoint_Read_Word_LE(void)
 			{
 				uint16_t Data;
@@ -348,7 +365,7 @@
 			/** Reads two bytes from the currently selected endpoint's bank in big endian format, for OUT
 			 *  direction endpoints.
 			 */
-			static inline uint16_t Endpoint_Read_Word_BE(void) ATTR_WARN_UNUSED_RESULT;
+			static inline uint16_t Endpoint_Read_Word_BE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
 			static inline uint16_t Endpoint_Read_Word_BE(void)
 			{
 				uint16_t Data;
@@ -362,6 +379,7 @@
 			/** Writes two bytes to the currently selected endpoint's bank in little endian format, for IN
 			 *  direction endpoints.
 			 */
+			static inline void Endpoint_Write_Word_LE(const uint16_t Word) ATTR_ALWAYS_INLINE;
 			static inline void Endpoint_Write_Word_LE(const uint16_t Word)
 			{
 				UEDATX = (Word & 0xFF);
@@ -371,6 +389,7 @@
 			/** Writes two bytes to the currently selected endpoint's bank in big endian format, for IN
 			 *  direction endpoints.
 			 */
+			static inline void Endpoint_Write_Word_BE(const uint16_t Word) ATTR_ALWAYS_INLINE;
 			static inline void Endpoint_Write_Word_BE(const uint16_t Word)
 			{
 				UEDATX = (Word >> 8);
@@ -378,6 +397,7 @@
 			}
 
 			/** Discards two bytes from the currently selected endpoint's bank, for OUT direction endpoints. */
+			static inline void Endpoint_Discard_Word(void) ATTR_ALWAYS_INLINE;
 			static inline void Endpoint_Discard_Word(void)
 			{
 				uint8_t Dummy;
@@ -389,7 +409,7 @@
 			/** Reads four bytes from the currently selected endpoint's bank in little endian format, for OUT
 			 *  direction endpoints.
 			 */
-			static inline uint32_t Endpoint_Read_DWord_LE(void) ATTR_WARN_UNUSED_RESULT;
+			static inline uint32_t Endpoint_Read_DWord_LE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
 			static inline uint32_t Endpoint_Read_DWord_LE(void)
 			{
 				union
@@ -409,7 +429,7 @@
 			/** Reads four bytes from the currently selected endpoint's bank in big endian format, for OUT
 			 *  direction endpoints.
 			 */
-			static inline uint32_t Endpoint_Read_DWord_BE(void) ATTR_WARN_UNUSED_RESULT;
+			static inline uint32_t Endpoint_Read_DWord_BE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
 			static inline uint32_t Endpoint_Read_DWord_BE(void)
 			{
 				union
@@ -429,22 +449,29 @@
 			/** Writes four bytes to the currently selected endpoint's bank in little endian format, for IN
 			 *  direction endpoints.
 			 */
+			static inline void Endpoint_Write_DWord_LE(const uint32_t DWord) ATTR_ALWAYS_INLINE;
 			static inline void Endpoint_Write_DWord_LE(const uint32_t DWord)
 			{
-				Endpoint_Write_Word_LE(DWord);
-				Endpoint_Write_Word_LE(DWord >> 16);
+				UEDATX = (DWord &  0xFF);
+				UEDATX = (DWord >> 8);
+				UEDATX = (DWord >> 16);
+				UEDATX = (DWord >> 24);
 			}
 			
 			/** Writes four bytes to the currently selected endpoint's bank in big endian format, for IN
 			 *  direction endpoints.
 			 */
+			static inline void Endpoint_Write_DWord_BE(const uint32_t DWord) ATTR_ALWAYS_INLINE;
 			static inline void Endpoint_Write_DWord_BE(const uint32_t DWord)
 			{
-				Endpoint_Write_Word_BE(DWord >> 16);
-				Endpoint_Write_Word_BE(DWord);
+				UEDATX = (DWord >> 24);
+				UEDATX = (DWord >> 16);
+				UEDATX = (DWord >> 8);
+				UEDATX = (DWord &  0xFF);
 			}
 
 			/** Discards four bytes from the currently selected endpoint's bank, for OUT direction endpoints. */
+			static inline void Endpoint_Discard_DWord(void) ATTR_ALWAYS_INLINE;
 			static inline void Endpoint_Discard_DWord(void)
 			{
 				uint8_t Dummy;
@@ -810,7 +837,7 @@
 			bool Endpoint_ConfigureEndpointStatic(const uint8_t Number, const uint8_t UECFG0XData, const uint8_t UECFG1XData);
 			
 		/* Inline Functions: */
-			static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) ATTR_WARN_UNUSED_RESULT ATTR_CONST ATTR_ALWAYSINLINE;
+			static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) ATTR_WARN_UNUSED_RESULT ATTR_CONST ATTR_ALWAYS_INLINE;
 			static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes)
 			{
 				if (Bytes <= 8)
diff --git a/LUFA/Drivers/USB/LowLevel/Pipe.h b/LUFA/Drivers/USB/LowLevel/Pipe.h
index a1f28ccc2ae321dc5a798ab2eae12bd2aac34f7d..f7d10bc1db96f7898efbcbc676c8bfac615fb366 100644
--- a/LUFA/Drivers/USB/LowLevel/Pipe.h
+++ b/LUFA/Drivers/USB/LowLevel/Pipe.h
@@ -56,85 +56,85 @@
 	/* Public Interface - May be used in end-application: */
 		/* Macros: */
 			/** Mask for Pipe_GetErrorFlags(), indicating that a CRC error occurred in the pipe on the received data. */
-			#define PIPE_ERRORFLAG_CRC16                   (1 << 4)
+			#define PIPE_ERRORFLAG_CRC16            (1 << 4)
 
 			/** Mask for Pipe_GetErrorFlags(), indicating that a hardware timeout error occurred in the pipe. */
-			#define PIPE_ERRORFLAG_TIMEOUT                 (1 << 3)
+			#define PIPE_ERRORFLAG_TIMEOUT          (1 << 3)
 
 			/** Mask for Pipe_GetErrorFlags(), indicating that a hardware PID error occurred in the pipe. */
-			#define PIPE_ERRORFLAG_PID                     (1 << 2)
+			#define PIPE_ERRORFLAG_PID              (1 << 2)
 
 			/** Mask for Pipe_GetErrorFlags(), indicating that a hardware data PID error occurred in the pipe. */
-			#define PIPE_ERRORFLAG_DATAPID                 (1 << 1)
+			#define PIPE_ERRORFLAG_DATAPID          (1 << 1)
 
 			/** Mask for Pipe_GetErrorFlags(), indicating that a hardware data toggle error occurred in the pipe. */
-			#define PIPE_ERRORFLAG_DATATGL                 (1 << 0)
+			#define PIPE_ERRORFLAG_DATATGL          (1 << 0)
 
 			/** Token mask for Pipe_ConfigurePipe(). This sets the pipe as a SETUP token (for CONTROL type pipes),
 			 *  which will trigger a control request on the attached device when data is written to the pipe.
 			 */
-			#define PIPE_TOKEN_SETUP                       (0b00 << PTOKEN0)
+			#define PIPE_TOKEN_SETUP                (0b00 << PTOKEN0)
 
 			/** Token mask for Pipe_ConfigurePipe(). This sets the pipe as a IN token (for non-CONTROL type pipes),
 			 *  indicating that the pipe data will flow from device to host.
 			 */
-			#define PIPE_TOKEN_IN                          (0b01 << PTOKEN0)
+			#define PIPE_TOKEN_IN                   (0b01 << PTOKEN0)
 
 			/** Token mask for Pipe_ConfigurePipe(). This sets the pipe as a IN token (for non-CONTROL type pipes),
 			 *  indicating that the pipe data will flow from host to device.
 			 */
-			#define PIPE_TOKEN_OUT                         (0b10 << PTOKEN0)
+			#define PIPE_TOKEN_OUT                  (0b10 << PTOKEN0)
 
 			/** Mask for the bank mode selection for the Pipe_ConfigurePipe() macro. This indicates that the pipe
 			 *  should have one single bank, which requires less USB FIFO memory but results in slower transfers as
 			 *  only one USB device (the AVR or the attached device) can access the pipe's bank at the one time.
 			 */
-			#define PIPE_BANK_SINGLE                       0
+			#define PIPE_BANK_SINGLE                (0 << EPBK0)
 
 			/** Mask for the bank mode selection for the Pipe_ConfigurePipe() macro. This indicates that the pipe
 			 *  should have two banks, which requires more USB FIFO memory but results in faster transfers as one
 			 *  USB device (the AVR or the attached device) can access one bank while the other accesses the second
 			 *  bank.
 			 */
-			#define PIPE_BANK_DOUBLE                       (1 << EPBK0)
+			#define PIPE_BANK_DOUBLE                (1 << EPBK0)
 			
 			/** Pipe address for the default control pipe, which always resides in address 0. This is
 			 *  defined for convenience to give more readable code when used with the pipe macros.
 			 */
-			#define PIPE_CONTROLPIPE                       0
+			#define PIPE_CONTROLPIPE                0
 
 			/** Default size of the default control pipe's bank, until altered by the Endpoint0Size value 
 			 *  in the device descriptor of the attached device.
 			 */
-			#define PIPE_CONTROLPIPE_DEFAULT_SIZE          8
+			#define PIPE_CONTROLPIPE_DEFAULT_SIZE   8
 			
 			/** Pipe number mask, for masking against pipe addresses to retrieve the pipe's numerical address
 			 *  in the device.
 			 */
-			#define PIPE_PIPENUM_MASK                      0x07
+			#define PIPE_PIPENUM_MASK               0x07
 
 			/** Total number of pipes (including the default control pipe at address 0) which may be used in
 			 *  the device. Different USB AVR models support different amounts of pipes, this value reflects
 			 *  the maximum number of pipes for the currently selected AVR model.
 			 */
-			#define PIPE_TOTAL_PIPES                       7
+			#define PIPE_TOTAL_PIPES                7
 
 			/** Size in bytes of the largest pipe bank size possible in the device. Not all banks on each AVR
 			 *  model supports the largest bank size possible on the device; different pipe numbers support
 			 *  different maximum bank sizes. This value reflects the largest possible bank of any pipe on the
 			 *  currently selected USB AVR model.
 			 */
-			#define PIPE_MAX_SIZE                          256
+			#define PIPE_MAX_SIZE                   256
 
 			/** Endpoint number mask, for masking against endpoint addresses to retrieve the endpoint's
 			 *  numerical address in the attached device.
 			 */
-			#define PIPE_EPNUM_MASK                        0x07
+			#define PIPE_EPNUM_MASK                 0x07
 
 			/** Endpoint bank size mask, for masking against endpoint addresses to retrieve the endpoint's
 			 *  bank size in the attached device.
 			 */
-			#define PIPE_EPSIZE_MASK                       0x7FF
+			#define PIPE_EPSIZE_MASK                0x7FF
 
 			/** Interrupt definition for the pipe IN interrupt (for INTERRUPT type pipes). Should be used with
 			 *  the USB_INT_* macros located in USBInterrupt.h.
@@ -143,12 +143,12 @@
 			 *  elapsed and the pipe is ready for the next packet from the attached device to be read out from its
 			 *  FIFO buffer (if received).
 			 *
-			 *  This interrupt must be enabled on *each* pipe which requires it (after the pipe is selected), and
-			 *  will fire the common pipe interrupt vector.
+			 *  \note This interrupt must be enabled and cleared on *each* pipe which requires it (after the pipe
+			 *        is selected), and will fire the common pipe interrupt vector.
 			 *
 			 *  \see ENDPOINT_PIPE_vect for more information on the common pipe and endpoint interrupt vector.
 			 */
-			#define PIPE_INT_IN                            UPIENX, (1 << RXINE) , UPINTX, (1 << RXINI)
+			#define PIPE_INT_IN                     UPIENX, (1 << RXINE) , UPINTX, (1 << RXINI)
 
 			/** Interrupt definition for the pipe OUT interrupt (for INTERRUPT type pipes). Should be used with
 			 *  the USB_INT_* macros located in USBInterrupt.h.
@@ -157,11 +157,12 @@
 			 *  has elapsed and the pipe is ready for a packet to be written to the pipe's FIFO buffer and sent
 			 *  to the attached device (if required).
 			 *  
-			 *  This interrupt must be enabled on *each* pipe which requires it (after the pipe is selected), and
-			 *  will fire the common pipe interrupt vector.
+			 *  \note This interrupt must be enabled and cleared on *each* pipe which requires it (after the pipe
+			 *        is selected), and will fire the common pipe interrupt vector.
 			 *
-			 *  \see ENDPOINT_PIPE_vect for more information on the common pipe and endpoint interrupt vector.			 */
-			#define PIPE_INT_OUT                           UPIENX, (1 << TXOUTE), UPINTX, (1 << TXOUTI)
+			 *  \see ENDPOINT_PIPE_vect for more information on the common pipe and endpoint interrupt vector.
+			 */
+			#define PIPE_INT_OUT                   UPIENX, (1 << TXOUTE), UPINTX, (1 << TXOUTI)
 
 			/** Interrupt definition for the pipe SETUP bank ready interrupt (for CONTROL type pipes). Should be
 			 *  used with the USB_INT_* macros located in USBInterrupt.h.
@@ -169,12 +170,12 @@
 			 *  This interrupt will fire if enabled on an CONTROL type pipe when the pipe is ready for a new
 			 *  control request.
 			 *
-			 *  This interrupt must be enabled on *each* pipe which requires it (after the pipe is selected), and
-			 *  will fire the common pipe interrupt vector.
+			 *  \note This interrupt must be enabled and cleared on *each* pipe which requires it (after the pipe
+			 *        is selected), and will fire the common pipe interrupt vector.
 			 *
 			 *  \see ENDPOINT_PIPE_vect for more information on the common pipe and endpoint interrupt vector.
 			 */
-			#define PIPE_INT_SETUP                         UPIENX, (1 << TXSTPE) , UPINTX, (1 << TXSTPI)
+			#define PIPE_INT_SETUP                 UPIENX, (1 << TXSTPE) , UPINTX, (1 << TXSTPI)
 
 			/** Interrupt definition for the pipe error interrupt. Should be used with the USB_INT_* macros
 			 *  located in USBInterrupt.h.
@@ -182,14 +183,14 @@
 			 *  This interrupt will fire if enabled on a particular pipe if an error occurs on that pipe, such
 			 *  as a CRC mismatch error.
 			 *
-			 *  This interrupt must be enabled on *each* pipe which requires it (after the pipe is selected), and
-			 *  will fire the common pipe interrupt vector.
+			 *  \note This interrupt must be enabled and cleared on *each* pipe which requires it (after the pipe
+			 *        is selected), and will fire the common pipe interrupt vector.
 			 *
 			 *  \see ENDPOINT_PIPE_vect for more information on the common pipe and endpoint interrupt vector.
 			 *
 			 *  \see Pipe_GetErrorFlags() for more information on the pipe errors.
 			 */
-			#define PIPE_INT_ERROR                         UPIENX, (1 << PERRE), UPINTX, (1 << PERRI)
+			#define PIPE_INT_ERROR                 UPIENX, (1 << PERRE), UPINTX, (1 << PERRI)
 
 			/** Interrupt definition for the pipe NAK received interrupt. Should be used with the USB_INT_* macros
 			 *  located in USBInterrupt.h.
@@ -197,14 +198,14 @@
 			 *  This interrupt will fire if enabled on a particular pipe if an attached device returns a NAK in
 			 *  response to a sent packet.
 			 *
-			 *  This interrupt must be enabled on *each* pipe which requires it (after the pipe is selected), and
-			 *  will fire the common pipe interrupt vector.
+			 *  \note This interrupt must be enabled and cleared on *each* pipe which requires it (after the pipe
+			 *        is selected), and will fire the common pipe interrupt vector.
 			 *
 			 *  \see ENDPOINT_PIPE_vect for more information on the common pipe and endpoint interrupt vector.
 			 *
 			 *  \see Pipe_IsNAKReceived() for more information on pipe NAKs.
 			 */
-			#define PIPE_INT_NAK                         UPIENX, (1 << NAKEDE), UPINTX, (1 << NAKEDI)
+			#define PIPE_INT_NAK                   UPIENX, (1 << NAKEDE), UPINTX, (1 << NAKEDI)
 
 			/** Interrupt definition for the pipe STALL received interrupt. Should be used with the USB_INT_* macros
 			 *  located in USBInterrupt.h.
@@ -212,28 +213,28 @@
 			 *  This interrupt will fire if enabled on a particular pipe if an attached device returns a STALL on the
 			 *  currently selected pipe. This will also fire if the pipe is an isochronous pipe and a CRC error occurs.
 			 *
-			 *  This interrupt must be enabled on *each* pipe which requires it (after the pipe is selected), and
-			 *  will fire the common pipe interrupt vector.
+			 *  \note This interrupt must be enabled and cleared on *each* pipe which requires it (after the pipe
+			 *        is selected), and will fire the common pipe interrupt vector.
 			 *
 			 *  \see ENDPOINT_PIPE_vect for more information on the common pipe and endpoint interrupt vector.
 			 */
-			#define PIPE_INT_STALL                       UPIENX, (1 << RXSTALLE), UPINTX, (1 << RXSTALLI)
+			#define PIPE_INT_STALL                 UPIENX, (1 << RXSTALLE), UPINTX, (1 << RXSTALLI)
 
 			/** Indicates the number of bytes currently stored in the current pipe's selected bank. */
-			#define Pipe_BytesInPipe()                     UPBCX
+			#define Pipe_BytesInPipe()             UPBCX
 
 			/** Resets the desired pipe, including the pipe banks and flags. */
-			#define Pipe_ResetPipe(pipenum)        MACROS{ UPRST    =  (1 << pipenum); UPRST = 0;                  }MACROE
+			#define Pipe_ResetPipe(pipenum)        MACROS{ UPRST = (1 << pipenum); UPRST = 0; }MACROE
 
 			/** Selects the given pipe number. Any pipe operations which do not require the pipe number to be
 			 *  indicated will operate on the currently selected pipe.
 			 */
-			#define Pipe_SelectPipe(pipenum)       MACROS{ UPNUM    =  pipenum;                                    }MACROE
+			#define Pipe_SelectPipe(pipenum)       MACROS{ UPNUM = pipenum; }MACROE
 
 			/** Returns the pipe address of the currently selected pipe. This is typically used to save the
 			 *  currently selected pipe number so that it can be restored after another pipe has been manipulated.
 			 */
-			#define Pipe_GetCurrentPipe()                 (UPNUM   &   PIPE_PIPENUM_MASK)
+			#define Pipe_GetCurrentPipe()          (UPNUM & PIPE_PIPENUM_MASK)
 
 			/** Enables the currently selected pipe so that data can be sent and received through it to and from
 			 *  an attached device.
@@ -241,78 +242,78 @@
 			 *  \note Pipes must first be configured properly rather than just being enabled via the
 			 *        Pipe_ConfigurePipe() macro, which calls Pipe_EnablePipe() automatically.
 			 */
-			#define Pipe_EnablePipe()              MACROS{ UPCONX  |=  (1 << PEN);                                 }MACROE
+			#define Pipe_EnablePipe()              MACROS{ UPCONX |= (1 << PEN); }MACROE
 
 			/** Disables the currently selected pipe so that data cannot be sent and received through it to and
 			 *  from an attached device.
 			 */
-			#define Pipe_DisablePipe()             MACROS{ UPCONX  &= ~(1 << PEN);                                 }MACROE
+			#define Pipe_DisablePipe()             MACROS{ UPCONX &= ~(1 << PEN); }MACROE
 
 			/** Returns true if the currently selected pipe is enabled, false otherwise. */
-			#define Pipe_IsEnabled()                     ((UPCONX  &   (1 << PEN)) ? true : false)
+			#define Pipe_IsEnabled()               ((UPCONX & (1 << PEN)) ? true : false)
 
 			/** Sets the token for the currently selected endpoint to one of the tokens specified by the PIPE_TOKEN_*
 			 *  masks. This should only be used on CONTROL type endpoints, to allow for bidirectional transfer of
 			 *  data during control requests.
 			 */
-			#define Pipe_SetToken(token)           MACROS{ UPCFG0X  = ((UPCFG0X & ~PIPE_TOKEN_MASK) | token);      }MACROE
+			#define Pipe_SetToken(token)           MACROS{ UPCFG0X = ((UPCFG0X & ~PIPE_TOKEN_MASK) | token); }MACROE
 			
 			/** Configures the currently selected pipe to allow for an unlimited number of IN requests. */
-			#define Pipe_SetInfiniteINRequests()   MACROS{ UPCONX  |=  (1 << INMODE);                              }MACROE
+			#define Pipe_SetInfiniteINRequests()   MACROS{ UPCONX |= (1 << INMODE); }MACROE
 
 			/** Configures the currently selected pipe to only allow the specified number of IN requests to be
 			 *  accepted by the pipe before it is automatically frozen.
 			 */
-			#define Pipe_SetFiniteINRequests(n)    MACROS{ UPCONX  &= ~(1 << INMODE); UPINRQX = n;                 }MACROE
+			#define Pipe_SetFiniteINRequests(n)    MACROS{ UPCONX &= ~(1 << INMODE); UPINRQX = n; }MACROE
 
 			/** Returns true if the currently selected pipe is configured, false otherwise. */
-			#define Pipe_IsConfigured()                  ((UPSTAX  & (1 << CFGOK)) ? true : false)
+			#define Pipe_IsConfigured()            ((UPSTAX  & (1 << CFGOK)) ? true : false)
 
 			/** Sets the period between interrupts for an INTERRUPT type pipe to a specified number of milliseconds. */
-			#define Pipe_SetInterruptPeriod(ms)    MACROS{ UPCFG2X  = ms;                                          }MACROE
+			#define Pipe_SetInterruptPeriod(ms)    MACROS{ UPCFG2X = ms; }MACROE
 
 			/** Returns a mask indicating which pipe's interrupt periods have elapsed, indicating that the pipe should
 			 *  be serviced.
 			 */
-			#define Pipe_GetPipeInterrupts()               UPINT
+			#define Pipe_GetPipeInterrupts()       UPINT
 
 			/** Clears the interrupt flag for the specified pipe number. */
-			#define Pipe_ClearPipeInterrupt(n)     MACROS{ UPINT   &= ~(1 << n);                                   }MACROE
+			#define Pipe_ClearPipeInterrupt(n)     MACROS{ UPINT &= ~(1 << n); }MACROE
 
 			/** Returns true if the specified pipe's interrupt period has elapsed, false otherwise. */
-			#define Pipe_HasPipeInterrupted(n)           ((UPINT   &   (1 << n)) ? true : false)
+			#define Pipe_HasPipeInterrupted(n)     ((UPINT & (1 << n)) ? true : false)
 			
 			/** Clears the pipe bank, and switches to the alternate bank if the currently selected pipe is
 			 *  dual-banked. When cleared, this either frees the bank up for the next packet from the host
 			 *  (if the endpoint is of the OUT direction) or sends the packet contents to the host (if the
 			 *  pipe is of the IN direction).
 			 */
-			#define Pipe_ClearCurrentBank()        MACROS{ UPINTX  &= ~(1 << FIFOCON);                             }MACROE
+			#define Pipe_ClearCurrentBank()        MACROS{ UPINTX &= ~(1 << FIFOCON); }MACROE
 
 			/** Unfreezes the pipe, allowing it to communicate with an attached device. */
-			#define Pipe_Unfreeze()                MACROS{ UPCONX  &= ~(1 << PFREEZE);                             }MACROE
+			#define Pipe_Unfreeze()                MACROS{ UPCONX &= ~(1 << PFREEZE); }MACROE
 
 			/** Freezes the pipe, preventing it from communicating with an attached device. */
-			#define Pipe_Freeze()                  MACROS{ UPCONX  |=  (1 << PFREEZE);                             }MACROE
+			#define Pipe_Freeze()                  MACROS{ UPCONX |= (1 << PFREEZE); }MACROE
 
 			/** Clears the master pipe error flag. */
-			#define Pipe_ClearError()              MACROS{ UPINTX  &= ~(1 << PERRI);                               }MACROE
+			#define Pipe_ClearError()              MACROS{ UPINTX &= ~(1 << PERRI); }MACROE
 
 			/** Returns true if the master pipe error flag is set for the currently selected pipe, indicating that
 			 *  some sort of hardware error has occurred on the pipe.
 			 *
 			 *  \see Pipe_GetErrorFlags() macro for information on retreiving the exact error flag.
 			 */
-			#define Pipe_IsError()                       ((UPINTX  &   (1 << PERRI)) ? true : false)
+			#define Pipe_IsError()                 ((UPINTX & (1 << PERRI)) ? true : false)
 			
 			/** Clears all the currently selected pipe's hardware error flags, but does not clear the master error
 			 *  flag for the pipe. */
-			#define Pipe_ClearErrorFlags()         MACROS{ UPERRX   = 0;                                           }MACROE
+			#define Pipe_ClearErrorFlags()         MACROS{ UPERRX = 0; }MACROE
 
 			/** Returns a mask of the hardware error flags which have occured on the currently selected pipe. This
 			 *  value can then be masked against the PIPE_ERRORFLAG_* masks to determine what error has occurred.
 			 */
-			#define Pipe_GetErrorFlags()                   UPERRX
+			#define Pipe_GetErrorFlags()           UPERRX
 
 			/** Returns true if the currently selected pipe may be read from (if data is waiting in the pipe
 			 *  bank and the pipe is an IN direction, or if the bank is not yet full if the pipe is an OUT
@@ -320,40 +321,40 @@
 			 *  is an IN direction and no packet has been received, or if the pipe is an OUT direction and the
 			 *  pipe bank is full.
 			 */
-			#define Pipe_ReadWriteAllowed()              ((UPINTX  & (1 << RWAL)) ? true : false)
+			#define Pipe_ReadWriteAllowed()        ((UPINTX & (1 << RWAL)) ? true : false)
 
 			/** Clears the flag indicating that a SETUP request has been sent to the attached device from the
 			 *  currently selected CONTROL type pipe.
 			 */
-			#define Pipe_ClearSetupSent()          MACROS{ UPINTX  &= ~(1 << TXSTPI);                              }MACROE
+			#define Pipe_ClearSetupSent()          MACROS{ UPINTX &= ~(1 << TXSTPI); }MACROE
 
 			/** Returns true if no SETUP request is currently being sent to the attached device, false otherwise. */
-			#define Pipe_IsSetupSent()                   ((UPINTX  &   (1 << TXSTPI)) ? true : false)
+			#define Pipe_IsSetupSent()             ((UPINTX & (1 << TXSTPI)) ? true : false)
 
 			/** Returns true if the currently selected pipe has been stalled by the attached device, false otherwise. */
-			#define Pipe_IsStalled()                     ((UPINTX  &   (1 << RXSTALLI)) ? true : false)
+			#define Pipe_IsStalled()               ((UPINTX & (1 << RXSTALLI)) ? true : false)
 
 			/** Clears the stall condition on the currently selected pipe. */
-			#define Pipe_ClearStall()              MACROS{ UPINTX  &= ~(1 << RXSTALLI);                            }MACROE             
+			#define Pipe_ClearStall()              MACROS{ UPINTX &= ~(1 << RXSTALLI); }MACROE             
 
 			/** Returns true if an IN request has been received on the currently selected CONTROL type pipe, false
 			 *  otherwise.
 			 */
-			#define Pipe_IsSetupINReceived()             ((UPINTX  &   (1 << RXINI)) ? true : false)
+			#define Pipe_IsSetupINReceived()       ((UPINTX & (1 << RXINI)) ? true : false)
 
 			/** Returns true if the currently selected CONTROL type pipe is ready to send an OUT request, false
 			 *  otherwise.
 			 */
-			#define Pipe_IsSetupOUTReady()               ((UPINTX  &   (1 << TXOUTI)) ? true : false)
+			#define Pipe_IsSetupOUTReady()         ((UPINTX & (1 << TXOUTI)) ? true : false)
 
 			/** Acknowedges the reception of a setup IN request from the attached device on the currently selected
 			 *  CONTROL type endpoint, allowing for the transmission of a setup OUT packet, or the reception of
 			 *  another setup IN packet.
 			 */
-			#define Pipe_ClearSetupIN()            MACROS{ UPINTX  &= ~(1 << RXINI); UPINTX &= ~(1 << FIFOCON);    }MACROE
+			#define Pipe_ClearSetupIN()            MACROS{ UPINTX &= ~(1 << RXINI); UPINTX &= ~(1 << FIFOCON); }MACROE
 
 			/** Sends the currently selected CONTROL type pipe's contents to the device as a setup OUT packet. */
-			#define Pipe_ClearSetupOUT()           MACROS{ UPINTX  &= ~(1 << TXOUTI); UPINTX &= ~(1 << FIFOCON);   }MACROE
+			#define Pipe_ClearSetupOUT()           MACROS{ UPINTX &= ~(1 << TXOUTI); UPINTX &= ~(1 << FIFOCON); }MACROE
 			
 			/** Returns true if the device sent a NAK (Negative Acknowedge) in response to the last sent packet on
 			 *  the currently selected pipe. This ocurrs when the host sends a packet to the device, but the device
@@ -361,13 +362,13 @@
 			 *  received, it must be cleard using Pipe_ClearNAKReceived() before the previous (or any other) packet
 			 *  can be re-sent.
 			 */
-			#define Pipe_IsNAKReceived()                 ((UPINTX & (1 << NAKEDI)) ? true : false)
+			#define Pipe_IsNAKReceived()           ((UPINTX & (1 << NAKEDI)) ? true : false)
 
 			/** Clears the NAK condition on the currently selected pipe.
 			 *
 			 *  \see Pipe_IsNAKReceived() for more details.
 			 */
-			#define Pipe_ClearNAKReceived()        MACROS{ UPINTX &= ~(1 << NAKEDI);                              }MACROE
+			#define Pipe_ClearNAKReceived()        MACROS{ UPINTX &= ~(1 << NAKEDI); }MACROE
 
 		/* Enums: */
 			/** Enum for the possible error return codes of the Pipe_WaitUntilReady function */
@@ -401,19 +402,21 @@
 
 		/* Inline Functions: */
 			/** Reads one byte from the currently selected pipe's bank, for OUT direction pipes. */
-			static inline uint8_t Pipe_Read_Byte(void) ATTR_WARN_UNUSED_RESULT;
+			static inline uint8_t Pipe_Read_Byte(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
 			static inline uint8_t Pipe_Read_Byte(void)
 			{
 				return UPDATX;
 			}
 
 			/** Writes one byte from the currently selected pipe's bank, for IN direction pipes. */
+			static inline void Pipe_Write_Byte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
 			static inline void Pipe_Write_Byte(const uint8_t Byte)
 			{
 				UPDATX = Byte;
 			}
 
 			/** Discards one byte from the currently selected pipe's bank, for OUT direction pipes. */
+			static inline void Pipe_Discard_Byte(void) ATTR_ALWAYS_INLINE;
 			static inline void Pipe_Discard_Byte(void)
 			{
 				uint8_t Dummy;
@@ -424,7 +427,7 @@
 			/** Reads two bytes from the currently selected pipe's bank in little endian format, for OUT
 			 *  direction pipes.
 			 */
-			static inline uint16_t Pipe_Read_Word_LE(void) ATTR_WARN_UNUSED_RESULT;
+			static inline uint16_t Pipe_Read_Word_LE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
 			static inline uint16_t Pipe_Read_Word_LE(void)
 			{
 				uint16_t Data;
@@ -438,7 +441,7 @@
 			/** Reads two bytes from the currently selected pipe's bank in big endian format, for OUT
 			 *  direction pipes.
 			 */
-			static inline uint16_t Pipe_Read_Word_BE(void) ATTR_WARN_UNUSED_RESULT;
+			static inline uint16_t Pipe_Read_Word_BE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
 			static inline uint16_t Pipe_Read_Word_BE(void)
 			{
 				uint16_t Data;
@@ -452,6 +455,7 @@
 			/** Writes two bytes to the currently selected pipe's bank in little endian format, for IN
 			 *  direction pipes.
 			 */
+			static inline void Pipe_Write_Word_LE(const uint16_t Word) ATTR_ALWAYS_INLINE;
 			static inline void Pipe_Write_Word_LE(const uint16_t Word)
 			{
 				UPDATX = (Word & 0xFF);
@@ -461,6 +465,7 @@
 			/** Writes two bytes to the currently selected pipe's bank in big endian format, for IN
 			 *  direction pipes.
 			 */
+			static inline void Pipe_Write_Word_BE(const uint16_t Word) ATTR_ALWAYS_INLINE;
 			static inline void Pipe_Write_Word_BE(const uint16_t Word)
 			{
 				UPDATX = (Word >> 8);
@@ -468,6 +473,7 @@
 			}
 
 			/** Discards two bytes from the currently selected pipe's bank, for OUT direction pipes. */
+			static inline void Pipe_Ignore_Word(void) ATTR_ALWAYS_INLINE;
 			static inline void Pipe_Ignore_Word(void)
 			{
 				uint8_t Dummy;
@@ -479,7 +485,7 @@
 			/** Reads four bytes from the currently selected pipe's bank in little endian format, for OUT
 			 *  direction pipes.
 			 */
-			static inline uint32_t Pipe_Read_DWord_LE(void) ATTR_WARN_UNUSED_RESULT;
+			static inline uint32_t Pipe_Read_DWord_LE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
 			static inline uint32_t Pipe_Read_DWord_LE(void)
 			{
 				union
@@ -499,7 +505,7 @@
 			/** Reads four bytes from the currently selected pipe's bank in big endian format, for OUT
 			 *  direction pipes.
 			 */
-			static inline uint32_t Pipe_Read_DWord_BE(void) ATTR_WARN_UNUSED_RESULT;
+			static inline uint32_t Pipe_Read_DWord_BE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
 			static inline uint32_t Pipe_Read_DWord_BE(void)
 			{
 				union
@@ -519,6 +525,7 @@
 			/** Writes four bytes to the currently selected pipe's bank in little endian format, for IN
 			 *  direction pipes.
 			 */
+			static inline void Pipe_Write_DWord_LE(const uint32_t DWord) ATTR_ALWAYS_INLINE;
 			static inline void Pipe_Write_DWord_LE(const uint32_t DWord)
 			{
 				Pipe_Write_Word_LE(DWord);
@@ -527,7 +534,8 @@
 			
 			/** Writes four bytes to the currently selected pipe's bank in big endian format, for IN
 			 *  direction pipes.
-			 */			
+			 */
+			static inline void Pipe_Write_DWord_BE(const uint32_t DWord) ATTR_ALWAYS_INLINE;
 			static inline void Pipe_Write_DWord_BE(const uint32_t DWord)
 			{
 				Pipe_Write_Word_BE(DWord >> 16);
@@ -535,6 +543,7 @@
 			}			
 			
 			/** Discards four bytes from the currently selected pipe's bank, for OUT direction pipes. */
+			static inline void Pipe_Ignore_DWord(void) ATTR_ALWAYS_INLINE;
 			static inline void Pipe_Ignore_DWord(void)
 			{
 				uint8_t Dummy;
@@ -754,14 +763,14 @@
 		/* Macros: */
 			#define PIPE_TOKEN_MASK                    (0x03 << PTOKEN0)
 
-			#define Pipe_AllocateMemory()          MACROS{ UPCFG1X |=  (1 << ALLOC);                               }MACROE
-			#define Pipe_DeallocateMemory()        MACROS{ UPCFG1X &= ~(1 << ALLOC);                               }MACROE
+			#define Pipe_AllocateMemory()          MACROS{ UPCFG1X |=  (1 << ALLOC); }MACROE
+			#define Pipe_DeallocateMemory()        MACROS{ UPCFG1X &= ~(1 << ALLOC); }MACROE
 
 		/* Function Prototypes: */
 			void Pipe_ClearPipes(void);
 
 		/* Inline Functions: */
-			static inline uint8_t Pipe_BytesToEPSizeMask(uint16_t Bytes) ATTR_WARN_UNUSED_RESULT ATTR_CONST ATTR_ALWAYSINLINE;
+			static inline uint8_t Pipe_BytesToEPSizeMask(uint16_t Bytes) ATTR_WARN_UNUSED_RESULT ATTR_CONST ATTR_ALWAYS_INLINE;
 			static inline uint8_t Pipe_BytesToEPSizeMask(uint16_t Bytes)
 			{
 				if (Bytes <= 8)
diff --git a/LUFA/MigrationInformation.txt b/LUFA/MigrationInformation.txt
index cd23da3328215e2eb0024c6ff69cc9e3bf2154f1..ebfc364d05e4e254b0958a499136033892ae0ad3 100644
--- a/LUFA/MigrationInformation.txt
+++ b/LUFA/MigrationInformation.txt
@@ -21,6 +21,9 @@
  *  <b>Library Demos</b>
  *    - The USBtoSerial demo now discards all data when not connected to a host, rather than buffering it for later transmission.
  *
+ *  <b>Non-USB Library Components</b>
+ *    - The ATTR_ALWAYSINLINE function attribute macro has been renamed to ATTR_ALWAYS_INLINE.
+ *
  * \section Sec_Migration090209 Migrating from 081217 to 090209
  *
  *  <b>Device Mode</b>
diff --git a/LUFA/Scheduler/Scheduler.h b/LUFA/Scheduler/Scheduler.h
index 39f94ef80a20305073467e764b12d1f584b495e4..e536e7137823678cb5fd2b47e8004937ed37d31e 100644
--- a/LUFA/Scheduler/Scheduler.h
+++ b/LUFA/Scheduler/Scheduler.h
@@ -175,7 +175,7 @@
 			 *  \param DelayCounter  Counter which is storing the starting tick count for a given delay.
 			 */
 			static inline void Scheduler_ResetDelay(SchedulerDelayCounter_t* const DelayCounter)
-			                                        ATTR_NON_NULL_PTR_ARG(1);
+			                                        ATTR_NON_NULL_PTR_ARG(1) ATTR_ALWAYS_INLINE;
 			static inline void Scheduler_ResetDelay(SchedulerDelayCounter_t* const DelayCounter)
 			{
 				ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
@@ -229,12 +229,13 @@
 			#define MAX_DELAYCTR_COUNT                0xFFFF
 
 		/* Inline Functions: */
+			static inline void Scheduler_InitScheduler(const uint8_t TotalTasks) ATTR_ALWAYS_INLINE;
 			static inline void Scheduler_InitScheduler(const uint8_t TotalTasks)
 			{
 				Scheduler_TotalTasks = TotalTasks;
 			}
 		
-			static inline void Scheduler_GoSchedule(const uint8_t TotalTasks) ATTR_NO_RETURN;
+			static inline void Scheduler_GoSchedule(const uint8_t TotalTasks) ATTR_NO_RETURN ATTR_ALWAYS_INLINE;
 			static inline void Scheduler_GoSchedule(const uint8_t TotalTasks)
 			{
 				Scheduler_InitScheduler(TotalTasks);
diff --git a/Projects/AVRISP_Programmer/makefile b/Projects/AVRISP_Programmer/makefile
index f8d75b65883230f81e5406be8aa3f51c3bca1e82..1ef7370c85009e678c7f63b14a885e97e13a1100 100644
--- a/Projects/AVRISP_Programmer/makefile
+++ b/Projects/AVRISP_Programmer/makefile
@@ -536,10 +536,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -678,10 +678,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -716,4 +717,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee
diff --git a/Projects/Magstripe/makefile b/Projects/Magstripe/makefile
index 10997609094e48011c0b455853a4d0d4e2be5516..0abf05c219d88721c659230e1c1dd33f1c7cdfcd 100644
--- a/Projects/Magstripe/makefile
+++ b/Projects/Magstripe/makefile
@@ -544,10 +544,10 @@ flip-ee: $(TARGET).hex $(TARGET).eep
 	batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu-ee: $(TARGET).hex $(TARGET).eep
-	dfu-programmer $(MCU) erase
-	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
+	dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 	dfu-programmer $(MCU) reset
 
+
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set 
 #     a breakpoint at main().
@@ -686,10 +686,11 @@ clean: begin clean_list clean_binary end
 
 clean_binary:
 	$(REMOVE) $(TARGET).hex
-
+	
 clean_list:
 	@echo $(MSG_CLEANING)
 	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET)eep.hex
 	$(REMOVE) $(TARGET).cof
 	$(REMOVE) $(TARGET).elf
 	$(REMOVE) $(TARGET).map
@@ -724,4 +725,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 finish end sizebefore sizeafter gccversion  \
 build elf hex eep lss sym coff extcoff      \
 clean clean_list clean_binary program debug \
-gdb-config doxygen dfu flip
+gdb-config doxygen dfu flip flip-ee dfu-ee