As I have been into business for a long time now I know that this is one of a real freelance nightmare (maybe also for companies, but especially for freelancers).
It can be even worse in case that you made the mistake to agree on getting your money after the project is finished as your client literally has your balls in his hands (luckily I do not make any of those mistakes any more, but when I was starting I sometimes was silly enough to accept a lot of stupid conditions).
So as I was looking how other companies handle it I have seen the following strategies:
1) The project is done when the project is done
That means you work until the customer accepts the result of the project.
Problem: Really nice. For your client. But in my personal experience definitely the worst way to go for a freelancer. You might work extremely long for a project which you have calculated to require much less effort.
2) The project is done when the project is done, but efforts (in time) which exceed the original plan are charged afterwards
Sure this is great as long as you do not need the time for other projects.
Problem: Clients are very unlikely to accept higher expenses in a fixed-time project. They might get angry or even refuse to pay or threat to sue you.
3) Limit the number of correction loops to two (or three) in your terms of service
You finish the project and present it, the customer makes a list of required changes, you implement the changes, you present again, there is a last list of changes and after that there is no more right of the client to complain
Problem: The project might be unfinished and the customer will complain heavily
4) After your first project presentation you listen for change requests and document and implement them, but the clients' chance for new change requests is gone after that
In the second presentation only change requests for the last change requests are allowed. The number of correction loops is shrinking with any presentation as the list is significantly decreasing every time.
Problem: Clients usually complain afterwards about things they "forgot" or that the project is not exactly what they wanted now (still I think this is quite a good way to go).
Does anybody know even better ways to handle client denial or change requests in fixed price projects? If not for which reason would you recommend which of those method?