Second suggestion: split your contracts up; your first contract is your "Master", and your second a "Statement of Work" (SOW). Both require execution by both sides before you proceed. Don't work without an explicit SOW again. The SOW should list in bullets the whole scope of the project and the acceptance criteria, and list the payment schedule.
You need to be able to tell you client "OK, but to do that we'll need to put in place a new SOW" when they try to extend scope.
We don't ask for up-front payment at all, and I'm not wild about it (if you really need it, you have crappy clients, and should fix that instead of coming up with ways to mitigate crappy clients). But since you do:
Next suggestion: by the time a client has paid you 50% for a project, you now hold all the cards. They can't afford to have you walk away with an incomplete deliverable and write off the cost of the engagement. So next time this happens, just say "no" to scope extensions (politely!) and see what happens.
You might be surprised at how much more effective you are at negotiating if you go into these things knowing you have the leverage and not them.