How about this: Programmers are NOT gods, and contractors will ALWAYS try to get out with the minimal amount of work done that gets them paid.
If I hire a contracted programmer to build something and deliver it, and it turns out it has bugs in it, then I'm going to demand that they fix them - after all, the contract required that the deliverable actually WORK to the spec I provided. Why this is such a foreign concept to so many people on here I'll never understand.
If you're a freelance programmer - great, I think that's awesome. Working for yourself is incredibly rewarding. That said, if I contract you to complete a task, and you deliver something that's buggy and doesn't work right, you haven't fulfilled your contract until it meets the specifications that I provided and that were written into your contract, even if that means you have to spend more time on it than you originally estimated because you didn't do it right the first time. I'm not going to pay you for that extra time, as it's your fault.
If, on the other hand, I wrote a bad spec and the software you deliver works to the spec I gave you, but not what I actually need, and I need it changed, then I WILL pay you for the extra time to modify it, because I didn't do my part correctly.