I second this! I've taken to multiplying my time estimates by three as a way of working around the problem, but things will always take longer than you expect. There's debugging time, dealing with bugs in other peoples' code time, brain reset time when you need to stop and think, and let's not forget girlfriend time (they need attention, too).
The way that I've figured out how to deal with this, is to punt absolutely everything that isn't absolutely necessary into the next 'version' after launch. Throw all of those cool features into your feature bucket, and only implement them once you've gotten the existing feature set working.
Your mileage may vary, of course. :)