You can sometimes find a few routines or data structures that are taking up an inordinate amount of space.... Some common candidates: 1. The floating point routines. Many (most?) apps that use floating point will work very well with fixed point arithmetic and a little bit of care. 2. The 'printf' routine and its relatives. This is a real hog, especially when combined with support for floats! You can avoid these routines by using simpler ones like itoa(), or even one written by yourself (it isn't hard!). 3. Inefficient data structures for things like menus (in code space). Look out for fixed length string buffers: char menu_choices[4][21] = { "La la", "Do de do", "Moonshine", "Happy!" }; This uses 68 bytes of memory to hold 4 20-character menu options. char *menu_choices[4] = { "La la", "Do de do", "Moonshine", "Happy!" }; This uses 8 bytes for 4 pointers, plus 32 bytes for text and nulls for a total of 40 bytes. Or, even better, since accessing menu choices is a "human speed" action... char menu_choices[] = { "La la\0" "Do de do\0" "Moonshine\0" "Happy!\0" }; Which uses only 33 bytes. Note that there are no commas, and each entry is terminated with an explicit null. The last entry is terminated with a double null. It is easy to write a function: char *find_menu_entry( char *menu, int n ) { while (n--) { /* point to next menu item */ menu = strchr(menu,0) + 1; /* next two lines are optional to protect from */ /* invalid values of 'n' */ if (*menu == 0) return 0; /* ran off the end */ } return menu; } (where n is a number in the range 0..number of substrings - 1) Bob Ammerman RAm Systems -- http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist