Hi Brooke, sounds like you've got the problem firmly by the .... Let's get squeezing > My code is riddled with delays and it's not clear which ones > need to be there and which are extra You've got options, including - (1) Test Busy before entering the write/read routine. Go away and do something else if the LCD is not ready (2) Do the write/read and wait for Busy to clear before exiting. Time spent here is generally 40us (book value) per command except Clear and Return Home, 1640us (3) Use an interrupt to periodically test Busy One (or more in combination) of these would be optimal for best use of processor time. Obviously depends on what else the s/w has to deal with. eg using (2) exclusively might not be such a good idea if it means you miss incoming comms -- http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist