diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index 805b3e1654d5667d3f574570efb9aef8fd997ae3..23ef75c5c610e2b414a635fa210470ccc06fea0c 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -68,6 +68,7 @@
   *  - Fixed incorrect LEDs_ChangeLEDs() function in the Benito board LED driver
   *  - Fixed incorrect USB_DeviceState value when unconfiguring the device without an address set
   *  - Fixed broken FLASH/EEPROM programming in the AVRISP-MKII clone project when writing in non-paged mode and the polling byte cannot be used
+  *  - Fixed broken lock byte programming in the AVRISP-MKII clone project for some XMEGA targets
   *
   *  \section Sec_ChangeLog100807 Version 100807
   *  <b>New:</b>
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c b/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c
index 93419d00d6a80b378e78b8e96e23fd6038e24301..537441fc0b054d0d0148017817c09ca8c9cd9adf 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c
@@ -216,10 +216,19 @@ bool XMEGANVM_WriteByteMemory(const uint8_t WriteCommand, const uint32_t WriteAd
 	XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_CMD);
 	XPROGTarget_SendByte(WriteCommand);
 	
-	/* Send new memory byte to the memory to the target */
+	/* Send new memory byte to the memory of the target */
 	XPROGTarget_SendByte(PDI_CMD_STS | (PDI_DATSIZE_4BYTES << 2));
 	XMEGANVM_SendAddress(WriteAddress);
 	XPROGTarget_SendByte(Byte);
+
+	/* Lock bytes need a special confirmation sequence for the write to complete */
+	if (WriteCommand == XMEGA_NVM_CMD_WRITELOCK)
+	{
+		/* Set CMDEX bit in NVM CTRLA register to start the Lock Byte write sequence */
+		XPROGTarget_SendByte(PDI_CMD_STS | (PDI_DATSIZE_4BYTES << 2));
+		XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_CTRLA);
+		XPROGTarget_SendByte(1 << 0);
+	}
 	
 	return true;
 }
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
index 0f5269db9e9be0592a5972b381e1ed6a699fbc98..85820fd310fb74fcbc3e40c79bfdfe3876c23f7e 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
@@ -324,8 +324,6 @@ static void XPROGProtocol_WriteMemory(void)
 				EraseBuffCommand = XMEGA_NVM_CMD_ERASEEEPROMPAGEBUFF;			
 				break;
 			case XPRG_MEM_TYPE_USERSIG:
-				/* User signature is paged, but needs us to manually indicate the mode bits since the host doesn't set them */
-				WriteMemory_XPROG_Params.PageMode = (XPRG_PAGEMODE_ERASE | XPRG_PAGEMODE_WRITE);
 				WriteCommand     = XMEGA_NVM_CMD_WRITEUSERSIG;
 				break;
 			case XPRG_MEM_TYPE_FUSE: