diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index 1eda701abbafc1d6b7a0ee1ebd024d2c4135f85f..0afdd4abaa5a3905ddc26c799f01bf47d1fb35d5 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -35,6 +35,7 @@
   *  - Added new Pipe_GetBusyBanks(), Endpoint_GetBusyBanks() and Endpoint_AbortPendingIN() functions
   *  - Added new NO_BLOCK_SUPPORT, NO_EEPROM_BYTE_SUPPORT, NO_FLASH_BYTE_SUPPORT and NO_LOCK_BYTE_WRITE_SUPPORT compile time options to the
   *    CDC class bootloader
+  *  - Added new XCK_RESCUE_CLOCK_ENABLE compile time option to the AVRISP-MKII clone programmer project (thanks to Tom Light)
   *
   *  <b>Changed:</b>
   *  - Removed complicated logic for the Endpoint_ConfigureEndpoint() function to use inlined or function called versions
diff --git a/Projects/AVRISP-MKII/AVRISP-MKII.txt b/Projects/AVRISP-MKII/AVRISP-MKII.txt
index d569e7e3e83c653e007ac5f335a213ee4463bb91..7489cf6a0f180787d31edc5366359c1fd61856f6 100644
--- a/Projects/AVRISP-MKII/AVRISP-MKII.txt
+++ b/Projects/AVRISP-MKII/AVRISP-MKII.txt
@@ -280,6 +280,12 @@
  *    <td>Define to switch to a non-standard endpoint scheme, breaking compatibility with AVRStudio under Windows but making
  *        the code compatible with software such as avrdude (all platforms) that use the libUSB driver.
  *   </tr>
+ *   <tr>
+ *    <td>XCK_RESCUE_CLOCK_ENABLE</td>
+ *    <td>Makefile LUFA_OPTS</td>
+ *    <td>Define to move the ISP rescue clock to the AVR's XCK pin instead of the OCR1A output pin. This is useful for existing programming
+ *        hardware that does not expose the OCR1A pin of the AVR, but *may* cause some issues with PDI programming mode.
+ *   </tr>
  *  </table>
  */
 
diff --git a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c
index 66a1c25606d76c197a16fb54e992767d6be66c69..657c2c99932e6aed8f6ad28ecdb607a84cfa7f7f 100644
--- a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c
+++ b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c
@@ -189,19 +189,29 @@ void ISPTarget_DisableTargetISP(void)
  */
 void ISPTarget_ConfigureRescueClock(void)
 {
-	/* Configure OCR1A as an output for the specified AVR model */
-	#if defined(USB_SERIES_2_AVR)
-	DDRC |= (1 << 6);
+	#if defined(XCK_RESCUE_CLOCK_ENABLE)
+		/* Configure XCK as an output for the specified AVR model */
+		DDRD  |= (1 << 5);
+		
+		/* Start USART to generate a 4MHz clock on the XCK pin */
+		UBRR1  = ((F_CPU / 2 / ISP_RESCUE_CLOCK_SPEED) - 1);
+		UCSR1B = (1 << TXEN1);
+		UCSR1C = (1 << UMSEL10) | (1 << UPM11) | (1 << USBS1) | (1 << UCSZ11) | (1 << UCSZ10) | (1 << UCPOL1);
 	#else
-	DDRB |= (1 << 5);
+		/* Configure OCR1A as an output for the specified AVR model */
+		#if defined(USB_SERIES_2_AVR)
+		DDRC |= (1 << 6);
+		#else
+		DDRB |= (1 << 5);
+		#endif
+
+		/* Start Timer 1 to generate a 4MHz clock on the OCR1A pin */
+		TIMSK1 = 0;
+		TCNT1  = 0;
+		OCR1A  = ((F_CPU / 2 / ISP_RESCUE_CLOCK_SPEED) - 1);
+		TCCR1A = (1 << COM1A0);
+		TCCR1B = ((1 << WGM12) | (1 << CS10));
 	#endif
-
-	/* Start Timer 1 to generate a 4MHz clock on the OCR1A pin */
-	TIMSK1 = 0;
-	TCNT1  = 0;
-	OCR1A  = ((F_CPU / 2 / ISP_RESCUE_CLOCK_SPEED) - 1);
-	TCCR1A = (1 << COM1A0);
-	TCCR1B = ((1 << WGM12) | (1 << CS10));
 }
 
 /** Configures the AVR's timer ready to produce software ISP for the slower ISP speeds that
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
index 02fbbf44db4b80a25d9c1a8fe2a15227732fccad..276f63e0ea7a788776fb1b63828b57e166a23a1f 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
@@ -196,6 +196,10 @@ static void XPROGProtocol_LeaveXPROGMode(void)
 		XPROGTarget_DisableTargetTPI();
 	}
 
+	#if defined(XCK_RESCUE_CLOCK_ENABLE) && defined(ENABLE_ISP_PROTOCOL)
+	ISPTarget_ConfigureRescueClock();
+	#endif
+
 	Endpoint_Write_Byte(CMD_XPROG);
 	Endpoint_Write_Byte(XPRG_CMD_LEAVE_PROGMODE);
 	Endpoint_Write_Byte(XPRG_ERR_OK);
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c
index 8760e62cbd894094c82dc5be745a34e700471f51..f6fff1cf7749f4e38fb2e3219976549667af987a 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c
@@ -118,7 +118,7 @@ void XPROGTarget_DisableTargetTPI(void)
 	/* Set all USART lines as input, tristate */
 	DDRD  &= ~((1 << 5) | (1 << 3));
 	PORTD &= ~((1 << 5) | (1 << 3) | (1 << 2));
-
+	
 	/* Tristate target /RESET line */
 	AUX_LINE_DDR  &= ~AUX_LINE_MASK;
 	AUX_LINE_PORT &= ~AUX_LINE_MASK;
diff --git a/Projects/AVRISP-MKII/makefile b/Projects/AVRISP-MKII/makefile
index 6c6e11708ba7cadb60e6de9123c30e153a6af562..5135722fd5a5979c43710ae2adb1506a7ba5cad0 100644
--- a/Projects/AVRISP-MKII/makefile
+++ b/Projects/AVRISP-MKII/makefile
@@ -137,6 +137,7 @@ LUFA_OPTS += -D VTARGET_REF_VOLTS=5
 LUFA_OPTS += -D VTARGET_SCALE_FACTOR=1
 #LUFA_OPTS += -D NO_VTARGET_DETECT
 #LUFA_OPTS += -D LIBUSB_DRIVER_COMPAT
+#LUFA_OPTS += -D XCK_RESCUE_CLOCK_ENABLE
 
 
 # Create the LUFA source path variables by including the LUFA root makefile