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)));