diff --git a/Bootloaders/CDC/BootloaderCDC.c b/Bootloaders/CDC/BootloaderCDC.c
index b2a278ed7fa929bab675e5faced8705b5912049e..0b2eb810bd5b85dc3cb6d4edc31a6e245ad85a26 100644
--- a/Bootloaders/CDC/BootloaderCDC.c
+++ b/Bootloaders/CDC/BootloaderCDC.c
@@ -233,7 +233,7 @@ static void ReadWriteMemoryBlock(const uint8_t Command)
 			else
 			{
 				/* Read the next EEPROM byte into the endpoint */
-				WriteNextResponseByte(eeprom_read_byte((uint8_t*)(uint16_t)(CurrAddress >> 1)));
+				WriteNextResponseByte(eeprom_read_byte((uint8_t*)(intptr_t)(CurrAddress >> 1)));
 
 				/* Increment the address counter after use */
 				CurrAddress += 2;
@@ -275,7 +275,7 @@ static void ReadWriteMemoryBlock(const uint8_t Command)
 			else
 			{
 				/* Write the next EEPROM byte from the endpoint */
-				eeprom_write_byte((uint8_t*)(uint16_t)(CurrAddress >> 1), FetchNextCommandByte());					
+				eeprom_write_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte());					
 
 				/* Increment the address counter after use */
 				CurrAddress += 2;
@@ -513,7 +513,7 @@ void CDC_Task(void)
 		else if (Command == 'D')
 		{
 			/* Read the byte from the endpoint and write it to the EEPROM */
-			eeprom_write_byte((uint8_t*)((uint16_t)(CurrAddress >> 1)), FetchNextCommandByte());
+			eeprom_write_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte());
 			
 			/* Increment the address after use */			
 			CurrAddress += 2;
@@ -524,7 +524,7 @@ void CDC_Task(void)
 		else if (Command == 'd')
 		{
 			/* Read the EEPROM byte and write it to the endpoint */
-			WriteNextResponseByte(eeprom_read_byte((uint8_t*)((uint16_t)(CurrAddress >> 1))));
+			WriteNextResponseByte(eeprom_read_byte((uint8_t*)((intptr_t)(CurrAddress >> 1))));
 
 			/* Increment the address after use */
 			CurrAddress += 2;
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.c b/Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.c
index e6377af52c1723f86574238e341d7feb1242dbf2..761c6adf14420d656e43288b91403672ffeb1d0e 100644
--- a/Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.c
+++ b/Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.c
@@ -69,7 +69,7 @@ int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, void* DHCPHeaderInStart, v
 	DHCPHeaderOUT->ElapsedSeconds        = 0;
 	DHCPHeaderOUT->Flags                 = DHCPHeaderIN->Flags;
 	DHCPHeaderOUT->YourIP                = ClientIPAddress;
-	memcpy(&DHCPHeaderOUT->ClientHardwareAddress, &DHCPHeaderIN->ClientHardwareAddress, sizeof(MAC_Address_t));
+	memmove(&DHCPHeaderOUT->ClientHardwareAddress, &DHCPHeaderIN->ClientHardwareAddress, sizeof(MAC_Address_t));
 	DHCPHeaderOUT->Cookie                = SwapEndian_32(DHCP_MAGIC_COOKIE);
 	
 	/* Alter the incoming IP packet header so that the corrected IP source and destinations are used - this means that
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/ICMP.c b/Demos/Device/ClassDriver/RNDISEthernet/Lib/ICMP.c
index 2d818374612a5487be0186ad1e6494d6fafd8b3f..fa1a651e6ea048e8ec700bb8d9b9d1fef317abc1 100644
--- a/Demos/Device/ClassDriver/RNDISEthernet/Lib/ICMP.c
+++ b/Demos/Device/ClassDriver/RNDISEthernet/Lib/ICMP.c
@@ -63,12 +63,12 @@ int16_t ICMP_ProcessICMPPacket(Ethernet_Frame_Info_t* FrameIN, void* InDataStart
 		ICMPHeaderOUT->Id       = ICMPHeaderIN->Id;
 		ICMPHeaderOUT->Sequence = ICMPHeaderIN->Sequence;
 		
-		uint16_t DataSize = FrameIN->FrameLength - ((((uint16_t)InDataStart + sizeof(ICMP_Header_t)) - (uint16_t)FrameIN->FrameData));
+		intptr_t DataSize = FrameIN->FrameLength - ((((intptr_t)InDataStart + sizeof(ICMP_Header_t)) - (intptr_t)FrameIN->FrameData));
 		
 		/* Copy the remaining payload to the response - echo requests should echo back any sent data */
-		memcpy(&((uint8_t*)OutDataStart)[sizeof(ICMP_Header_t)],
-		       &((uint8_t*)InDataStart)[sizeof(ICMP_Header_t)],
-			   DataSize);
+		memmove(&((uint8_t*)OutDataStart)[sizeof(ICMP_Header_t)],
+		        &((uint8_t*)InDataStart)[sizeof(ICMP_Header_t)],
+			    DataSize);
 
 		ICMPHeaderOUT->Checksum = Ethernet_Checksum16(ICMPHeaderOUT, (DataSize + sizeof(ICMP_Header_t)));
 
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.c
index d3bffe9967cb828909886c745b32e4d72793ff15..eeed88491ae7c633e6bd41f146c993ee312bf5cd 100644
--- a/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.c
+++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.c
@@ -69,7 +69,7 @@ int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, void* DHCPHeaderInStart, v
 	DHCPHeaderOUT->ElapsedSeconds        = 0;
 	DHCPHeaderOUT->Flags                 = DHCPHeaderIN->Flags;
 	DHCPHeaderOUT->YourIP                = ClientIPAddress;
-	memcpy(&DHCPHeaderOUT->ClientHardwareAddress, &DHCPHeaderIN->ClientHardwareAddress, sizeof(MAC_Address_t));
+	memmove(&DHCPHeaderOUT->ClientHardwareAddress, &DHCPHeaderIN->ClientHardwareAddress, sizeof(MAC_Address_t));
 	DHCPHeaderOUT->Cookie                = SwapEndian_32(DHCP_MAGIC_COOKIE);
 	
 	/* Alter the incoming IP packet header so that the corrected IP source and destinations are used - this means that
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.c
index 02a401f6ac64d5d01556d4fd079feb38244da613..a43ffca54cdca1bea6db51b41ab76d9bcd86d640 100644
--- a/Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.c
+++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.c
@@ -62,12 +62,12 @@ int16_t ICMP_ProcessICMPPacket(void* InDataStart, void* OutDataStart)
 		ICMPHeaderOUT->Id       = ICMPHeaderIN->Id;
 		ICMPHeaderOUT->Sequence = ICMPHeaderIN->Sequence;
 		
-		uint16_t DataSize = FrameIN.FrameLength - ((((uint16_t)InDataStart + sizeof(ICMP_Header_t)) - (uint16_t)FrameIN.FrameData));
+		intptr_t DataSize = FrameIN.FrameLength - ((((intptr_t)InDataStart + sizeof(ICMP_Header_t)) - (intptr_t)FrameIN.FrameData));
 		
 		/* Copy the remaining payload to the response - echo requests should echo back any sent data */
-		memcpy(&((uint8_t*)OutDataStart)[sizeof(ICMP_Header_t)],
-		       &((uint8_t*)InDataStart)[sizeof(ICMP_Header_t)],
-			   DataSize);
+		memmove(&((uint8_t*)OutDataStart)[sizeof(ICMP_Header_t)],
+		        &((uint8_t*)InDataStart)[sizeof(ICMP_Header_t)],
+			    DataSize);
 
 		ICMPHeaderOUT->Checksum = Ethernet_Checksum16(ICMPHeaderOUT, (DataSize + sizeof(ICMP_Header_t)));