diff --git a/Projects/AVRISP/AVRISP.c b/Projects/AVRISP/AVRISP.c
index 44b8356cd2dac206fc1953b4dd9c22d06d9ed4b2..4eb02d2bf3951f981cc14264a2728cecbbeceb24 100644
--- a/Projects/AVRISP/AVRISP.c
+++ b/Projects/AVRISP/AVRISP.c
@@ -120,11 +120,11 @@ void Process_AVRISP_Commands(void)
 
 	Endpoint_SelectEndpoint(AVRISP_DATA_EPNUM);
 	
-	/* Check to see if a V2 Protocol command has been received - if not, abort */
-	if (!(Endpoint_IsOUTReceived()))
-	  return;
-
-	/* Pass off processing of the V2 Protocol command to the V2 Protocol handler */
-	V2Protocol_ProcessCommand();
+	/* Check to see if a V2 Protocol command has been received */
+	if (Endpoint_IsOUTReceived())
+	{
+		/* Pass off processing of the V2 Protocol command to the V2 Protocol handler */
+		V2Protocol_ProcessCommand();
+	}
 }
 
diff --git a/Projects/AVRISP/Lib/V2Protocol.c b/Projects/AVRISP/Lib/V2Protocol.c
index 6099234faef96a85cc76b9db8a67e9434c524c49..d7343aad636ea9f7f4174b7c5e499db36d9a7cef 100644
--- a/Projects/AVRISP/Lib/V2Protocol.c
+++ b/Projects/AVRISP/Lib/V2Protocol.c
@@ -301,11 +301,9 @@ static void V2Protocol_Command_ProgramMemory(uint8_t V2Command)
 		uint8_t  ProgrammingCommands[3];
 		uint8_t  PollValue1;
 		uint8_t  PollValue2;
-		uint8_t  ProgData[256];
-	} Write_Memory_Params;
+		uint8_t  ProgData[256]; // Note, the Jungo driver has a very short ACK timeout period, need to buffer the
+	} Write_Memory_Params;      // whole page and ACK the packet as fast as possible to prevent it from aborting
 	
-	uint8_t* NextWriteByte = Write_Memory_Params.ProgData;
-
 	Endpoint_Read_Stream_LE(&Write_Memory_Params, sizeof(Write_Memory_Params) - sizeof(Write_Memory_Params.ProgData));
 	Write_Memory_Params.BytesToWrite = SwapEndian_16(Write_Memory_Params.BytesToWrite);
 	
@@ -329,6 +327,8 @@ static void V2Protocol_Command_ProgramMemory(uint8_t V2Command)
 	uint16_t PollAddress       = 0;
 	uint8_t  PollValue         = (V2Command == CMD_PROGRAM_FLASH_ISP) ? Write_Memory_Params.PollValue1 :
 	                                                                    Write_Memory_Params.PollValue2;
+	uint8_t* NextWriteByte = Write_Memory_Params.ProgData;
+
 	if (Write_Memory_Params.ProgrammingMode & PROG_MODE_PAGED_WRITES_MASK)
 	{
 		uint16_t StartAddress = (CurrentAddress & 0xFFFF);
diff --git a/Projects/AVRISP/Lib/V2ProtocolParams.c b/Projects/AVRISP/Lib/V2ProtocolParams.c
index 6aaa9558ede498594962270fb4c722bf6f0b2932..6b4568a94a3acdbf64b974e29d9dbaa839f00761 100644
--- a/Projects/AVRISP/Lib/V2ProtocolParams.c
+++ b/Projects/AVRISP/Lib/V2ProtocolParams.c
@@ -132,7 +132,7 @@ uint8_t V2Params_GetParameterValue(uint8_t ParamID)
 {
 	ParameterItem_t* ParamInfo = V2Params_GetParamFromTable(ParamID);
 	
-	if (ParamInfo == NULL)
+	if ((ParamInfo == NULL) || !(ParamInfo->ParamPrivellages & PARAM_PRIV_READ))
 	  return 0;
 	
 	return ParamInfo->ParamValue;
@@ -149,7 +149,7 @@ void V2Params_SetParameterValue(uint8_t ParamID, uint8_t Value)
 {
 	ParameterItem_t* ParamInfo = V2Params_GetParamFromTable(ParamID);
 
-	if (ParamInfo == NULL)
+	if ((ParamInfo == NULL) || !(ParamInfo->ParamPrivellages & PARAM_PRIV_WRITE))
 	  return;
 
 	ParamInfo->ParamValue = Value;
diff --git a/Projects/AVRISP/Lib/V2ProtocolTarget.c b/Projects/AVRISP/Lib/V2ProtocolTarget.c
index 9f8978a70861469610e80573a85f92308f9b6d77..169e49ac7c45135df553c6ec918eedf586258007 100644
--- a/Projects/AVRISP/Lib/V2ProtocolTarget.c
+++ b/Projects/AVRISP/Lib/V2ProtocolTarget.c
@@ -85,7 +85,7 @@ void V2Protocol_ChangeTargetResetLine(bool ResetTarget)
 {
 	if (ResetTarget)
 	{
-		RESET_LINE_DDR  |= RESET_LINE_MASK;
+		RESET_LINE_DDR |= RESET_LINE_MASK;
 		
 		if (!(V2Params_GetParameterValue(PARAM_RESET_POLARITY)))
 		  RESET_LINE_PORT |= RESET_LINE_MASK;
@@ -155,17 +155,14 @@ uint8_t V2Protocol_WaitWhileTargetBusy(void)
 {
 	TCNT0 = 0;
 	
-	bool DeviceBusy;
-	
 	do
 	{
 		SPI_SendByte(0xF0);
 		SPI_SendByte(0x00);
 
 		SPI_SendByte(0x00);
-		DeviceBusy = (SPI_ReceiveByte() & 0x01);
 	}
-	while (DeviceBusy && (TCNT0 < TARGET_BUSY_TIMEOUT_MS));
+	while ((SPI_ReceiveByte() & 0x01) && (TCNT0 < TARGET_BUSY_TIMEOUT_MS));
 
 	if (TCNT0 >= TARGET_BUSY_TIMEOUT_MS)
 	  return STATUS_RDY_BSY_TOUT;