Always have a contract, just in case you get a difficult customer. This helps me because I outline clearly what the job entails, and what services/time constraints will be available for this particular job. If the client signs the contract, you're not obligated to commit to anything that's not in the contract, which will make it easier for you to put your foot down when dealing with someone who wants to play by their own rules.
In the end, if a discount will get them off your back, I would recommend taking that option (if it's not a significant amount). After all, as a freelancer, you're a professional and should know what you're worth.