If you want to get the most into a PIC, the only way is lovingly crafted assembler, with lots of macros to make things more portable/readable. High level languages have way too much overhead. That is what I have done with some of my radio projects. I believe my code has got all the function into 16C57, with about 20% ROM safety margin, in half the space any one else could do it in a higher level language, but I always was modest. In some cases, we have used C: we can create a 2 platform project, with common code, a Windows 'shell' and a PIC 'shell'. Test it on Windows, port it to PIC. We tend to move from 16C57 to 16C65 and eventually to 17C44 with 32 K external ROM purchased from funny sources to get around the port limitations and lots of agravation with far pointers to RAM. If this pointer stuff is fixed, someone tell me which version, because I think it is still a problem: 8 bit = near = RAM, 16 bit = far = ROM, how do you define a 9 bit pointer in C? We tend to use a lot of structures and pointers in our code, our projects just work out that way, or isit the people? Enough already.