diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index 09a168dc128feabc445d2644f2286cff143a912d..70c81dc0068a5e2d8d10a460aea6fac65e18d324 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -17,6 +17,9 @@
   *  <b>Fixed:</b>
   *  - Fixed possible device lockup when INTERRUPT_CONTROL_ENDPOINT is enabled and the control endpoint is not properly
   *    selected when the ISR completes
+  *  - Fixed AVRISP-MKII clone project not correctly issuing SET EXTENDED ADDRESS commands when the extended address
+  *    boundary is crossed during programming or readback (thanks to Gerard Sexton)
+  *  - Fixed warnings when building the AVRISP-MKII clone project with the ENABLE_XPROG_PROTOCOL compile time option disabled
   *
   *  \section Sec_ChangeLog100512 Version 100512
   *
diff --git a/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c b/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c
index a16504da14115a4687209793cac0d0ca42259c19..430772ddc262ed19abc7a6e9039868429e4690eb 100644
--- a/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c
+++ b/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c
@@ -227,8 +227,18 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command)
 				PollAddress = (CurrentAddress & 0xFFFF);				
 			}		
 
-			if (IsOddByte || (V2Command == CMD_PROGRAM_EEPROM_ISP))
-			  CurrentAddress++;
+			/* EEPROM just increments the address each byte, flash needs to increment on each word and
+			 * also check to ensure that a LOAD EXTENDED ADDRESS command is issued each time the extended
+			 * address boundary has been crossed */
+			if (V2Command == CMD_PROGRAM_EEPROM_ISP)
+			{
+				CurrentAddress++;
+			}
+			else if (IsOddByte)
+			{
+				if (!(++CurrentAddress & 0xFFFF))
+				  ISPTarget_LoadExtendedAddress();			
+			}
 		}
 		
 		/* If the current page must be committed, send the PROGRAM PAGE command to the target */
@@ -276,8 +286,18 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command)
 				PollAddress = (CurrentAddress & 0xFFFF);
 			}
 
-			if (IsOddByte || (V2Command == CMD_PROGRAM_EEPROM_ISP))
-			  CurrentAddress++;
+			/* EEPROM just increments the address each byte, flash needs to increment on each word and
+			 * also check to ensure that a LOAD EXTENDED ADDRESS command is issued each time the extended
+			 * address boundary has been crossed */
+			if (V2Command == CMD_PROGRAM_EEPROM_ISP)
+			{
+				CurrentAddress++;
+			}
+			else if (IsOddByte)
+			{
+				if (!(++CurrentAddress & 0xFFFF))
+				  ISPTarget_LoadExtendedAddress();			
+			}
 			
 			ProgrammingStatus = ISPTarget_WaitForProgComplete(Write_Memory_Params.ProgrammingMode, PollAddress, PollValue,
 			                                                  Write_Memory_Params.DelayMS, Write_Memory_Params.ProgrammingCommands[2]);
@@ -346,11 +366,19 @@ void ISPProtocol_ReadMemory(uint8_t V2Command)
 		 * or low byte at the current word address */
 		if (V2Command == CMD_READ_FLASH_ISP)
 		  Read_Memory_Params.ReadMemoryCommand ^= READ_WRITE_HIGH_BYTE_MASK;
-
-		/* Only increment the current address if we have read both bytes in the current word when in FLASH
-		 * read mode, or for each byte when in EEPROM read mode */		 
-		if (((CurrentByte & 0x01) && (V2Command == CMD_READ_FLASH_ISP)) || (V2Command == CMD_READ_EEPROM_ISP))
-		  CurrentAddress++;
+		 
+		/* EEPROM just increments the address each byte, flash needs to increment on each word and
+		 * also check to ensure that a LOAD EXTENDED ADDRESS command is issued each time the extended
+		 * address boundary has been crossed */
+		if (V2Command == CMD_READ_EEPROM_ISP)
+		{
+			CurrentAddress++;
+		}
+		else if (CurrentByte & 0x01)
+		{
+			if (!(++CurrentAddress & 0xFFFF))
+			  ISPTarget_LoadExtendedAddress();			
+		}
 	}
 
 	Endpoint_Write_Byte(STATUS_CMD_OK);
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h
index 73bf1f9535529f480b8f327b5aa28c2408d7b244..2daca16fcf056d4312b2a0a32da039c3610dd512 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h
+++ b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h
@@ -68,7 +68,7 @@
 		bool TINYNVM_WriteMemory(const uint16_t WriteAddress, uint8_t* WriteBuffer, uint16_t WriteLength);
 		bool TINYNVM_EraseMemory(const uint8_t EraseCommand, const uint16_t Address);
 
-		#if defined(INCLUDE_FROM_TINYNVM_C)
+		#if (defined(INCLUDE_FROM_TINYNVM_C) && defined(ENABLE_XPROG_PROTOCOL))
 			static void TINYNVM_SendReadNVMRegister(const uint8_t Address);
 			static void TINYNVM_SendWriteNVMRegister(const uint8_t Address);
 			static void TINYNVM_SendPointerAddress(const uint16_t AbsoluteAddress);
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h
index 1fdb5a1b8af9d089bd68ae9768623ecebbc0dc34..c812578e5109fe81ba3f73069e80c3479da4f011 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h
@@ -119,7 +119,7 @@
 		void XPROGProtocol_SetMode(void);
 		void XPROGProtocol_Command(void);
 		
-		#if defined(INCLUDE_FROM_XPROGPROTOCOL_C)
+		#if (defined(INCLUDE_FROM_XPROGPROTOCOL_C) && defined(ENABLE_XPROG_PROTOCOL))
 			static void XPROGProtocol_EnterXPROGMode(void);
 			static void XPROGProtocol_LeaveXPROGMode(void);
 			static void XPROGProtocol_SetParam(void);
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h
index 436f0f30df5a3c1536cc79e4be5466463dd96180..db233a1a495e2a44eff1ece942fa89d131a024fb 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h
@@ -118,7 +118,7 @@
 		void    XPROGTarget_SendBreak(void);
 		bool    XPROGTarget_WaitWhileNVMBusBusy(void);
 		
-		#if defined(INCLUDE_FROM_XPROGTARGET_C)
+		#if (defined(INCLUDE_FROM_XPROGTARGET_C) && defined(ENABLE_XPROG_PROTOCOL))
 			static void XPROGTarget_SetTxMode(void);
 			static void XPROGTarget_SetRxMode(void);
 		#endif
diff --git a/Projects/Benito/Lib/RingBuff.h b/Projects/Benito/Lib/RingBuff.h
index b4933aa4d51ec334aaebb38dc787b608ad6aeaa0..30dbf104e83b666cc64747c27c0a1b95e443a278 100644
--- a/Projects/Benito/Lib/RingBuff.h
+++ b/Projects/Benito/Lib/RingBuff.h
@@ -30,7 +30,7 @@
 
 /* Buffer Configuration: */
    /* Buffer length - select static size of created ring buffers: */
-	 #define BUFF_STATICSIZE 128      // Set to the static ring buffer size for all ring buffers (place size after define)
+	 #define BUFF_STATICSIZE 255      // Set to the static ring buffer size for all ring buffers (place size after define)
 
    /* Volatile mode - uncomment to make buffers volatile, for use in ISRs, etc: */
 	 #define BUFF_VOLATILE            // Uncomment to cause all ring buffers to become volatile (and atomic if multi-byte) in access
diff --git a/Projects/Benito/makefile b/Projects/Benito/makefile
index 4fadc10c19d6778627e36a93163a5710b37417da..5bab672f45cf93f125246c69aed5b9e0c904e374 100644
--- a/Projects/Benito/makefile
+++ b/Projects/Benito/makefile
@@ -60,7 +60,7 @@
 
 
 # MCU name
-MCU = atmega32u4
+MCU = atmega32u2
 
 
 # Target board (see library "Board Types" documentation, NONE for projects not requiring