I've found that since moving to an agile approach with weekly/fortnightly deliverables, my estimates have become better and clients expectations are managed nicely. Clients can constantly see progress and can easily see how my time is going to be spent week-by-week. If new features are requested or problems hit, it's easy to communicate how that's going to effect the current timings and next deliverable.