Regarding the suboptimal code mentioned earlier (I've deleted that message): 1) The sequence if(RB0) a |= b; could indeed be improved by one word. Thanks for that. It will be done. 2) Regarding shifting of longs, I couldn't find a problem. The compiler generates 32 ;x.c: 10: c <<= 8; 33 03EC 0811 movf ?a_main+4,w 34 03ED 0092 movwf ?a_main+5 35 03EE 0810 movf ?a_main+3,w 36 03EF 0091 movwf ?a_main+4 37 03F0 080F movf ?a_main+2,w 38 03F1 0090 movwf ?a_main+3 39 03F2 018F clrf ?a_main+2 which looks pretty good to me. Cheers, Clyde -- Clyde Smith-Stubbs | HI-TECH Software Email: clyde@htsoft.com | Phone Fax WWW: http://www.htsoft.com/ | USA: (408) 490 2885 (408) 490 2885 PGP: finger clyde@htsoft.com | AUS: +61 7 3355 8333 +61 7 3355 8334 --------------------------------------------------------------------------- HI-TECH C: compiling the real world.