diff --git a/LUFA/DoxygenPages/ChangeLog.txt b/LUFA/DoxygenPages/ChangeLog.txt
index 38fe1151d1f3447c0c6843eb868c2da998bc4620..c2e304a7c252aaeeecf0f047a944042e720d8d45 100644
--- a/LUFA/DoxygenPages/ChangeLog.txt
+++ b/LUFA/DoxygenPages/ChangeLog.txt
@@ -12,6 +12,7 @@
   *   - None
   *  - Library Applications:
   *   - Added User Application APIs to the CDC and DFU class bootloaders
+  *   - Added INVERTED_ISP_MISO compile time option to the AVRISP-MKII clone project (thanks to Chuck Rohs)
   *
   *  <b>Changed:</b>
   *  - Core:
diff --git a/Projects/AVRISP-MKII/AVRISP-MKII.txt b/Projects/AVRISP-MKII/AVRISP-MKII.txt
index c47a65e6803652aa5ebd67ef455ae82bd480def7..4533a8535e21924e81da8bbf1190bc9cf2d8cf8a 100644
--- a/Projects/AVRISP-MKII/AVRISP-MKII.txt
+++ b/Projects/AVRISP-MKII/AVRISP-MKII.txt
@@ -293,6 +293,12 @@
  *    <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>
+ *   <tr>
+ *    <td>INVERTED_ISP_MISO</td>
+ *    <td>Makefile LUFA_OPTS</td>
+ *    <td>Define to invert the received data on the ISP MISO line. This is sometimes needed depending on the level translation hardware used,
+ *        if the translator hardware inverts the received logic level.
+ *   </tr>
  *  </table>
  */
 
diff --git a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h
index 906ee82fbfc5f68a8dacaad0279d008b6bcf9e5b..350283f5e049c22e066d14a86c1f48b4b75336e0 100644
--- a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h
+++ b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h
@@ -104,10 +104,17 @@
 		 */
 		static inline uint8_t ISPTarget_ReceiveByte(void)
 		{
+			#if !defined(INVERTED_ISP_MISO)
 			if (HardwareSPIMode)
 			  return SPI_ReceiveByte();
 			else
 			  return ISPTarget_TransferSoftSPIByte(0x00);
+			#else
+			if (HardwareSPIMode)
+			  return ~SPI_ReceiveByte();
+			else
+			  return ~ISPTarget_TransferSoftSPIByte(0x00);			
+			#endif
 		}
 
 		/** Sends and receives a byte of ISP data to and from the attached target, using the
@@ -119,10 +126,17 @@
 		 */
 		static inline uint8_t ISPTarget_TransferByte(const uint8_t Byte)
 		{
+			#if !defined(INVERTED_ISP_MISO)
 			if (HardwareSPIMode)
 			  return SPI_TransferByte(Byte);
 			else
 			  return ISPTarget_TransferSoftSPIByte(Byte);
+			#else
+			if (HardwareSPIMode)
+			  return ~SPI_TransferByte(Byte);
+			else
+			  return ~ISPTarget_TransferSoftSPIByte(Byte);		
+			#endif
 		}
 
 #endif
diff --git a/Projects/AVRISP-MKII/makefile b/Projects/AVRISP-MKII/makefile
index 80d50bac6ef9daadb3d14a387025102cad05d90f..10b3c7525c31ba0be411ffa01680a02bcc2cc46f 100644
--- a/Projects/AVRISP-MKII/makefile
+++ b/Projects/AVRISP-MKII/makefile
@@ -144,6 +144,7 @@ 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
+#LUFA_OPTS += -D INVERTED_ISP_MISO
 
 
 # Create the LUFA source path variables by including the LUFA root makefile