Hi, Scott wrote: >But, you do realize that it can be optimized... well yes :), I though it was 'clever' and just did 'straight' coding, never really thought about all implifications. However my hunch was that it would be an very effective solution compared to previous onces. >; W = CRC Message byte >; CRC16 - current 16-bit CRC check sum >; >; let CRC16 = abcd >; Message Byte = xy >; >; where abcd, xy are nibble variables >; >; Upon exit, >; >; a = c ^ (i1>>3) ^ i2 >; b = d ^ ((i1<<1)&0xf) ^ (i2>>3) >; c = i1 ^ ((i2<<1)&0xf) >; d = i2 >; >; First compute the nibble array indices: >; i1 = a ^ x >; i2 = i1 ^ b ^ y Absolutely brilliant, piclist at it best, hats off for you sir :) Makes one wonder how many other routines out 'there' that can be cut by 50% :) So Ashley, there you go, the *real* (tm) optimising people has woken up and the bait has been taken, a thing of beauty was created ( if one could consider code beautiful ). ( oh and I forgot to mention Dmitry previously, sorry ) Thanks to you all, /Tony -- http://www.piclist.com hint: The PICList is archived three different ways. See http://www.piclist.com/#archives for details.