@ Tim Spence
When it comes to breaking contracts, there's a concept called mitigation of damages. Before a company can collect money from the contract breaker (the customer), it must attempt to recoup that money by selling its services to another customer. Any money recouped is money not owed by the first customer for breaking the contract. I don't know about the UK, but in Canada, a company MUST attempt to mitigate its damages.
If the customer pays the remaining amount on the contract and the company then resells those same services, it just made double income.. and that's a no-no in the eyes of regulators.
Fees for breaking a contract make sense, but they should be reasonable in so far as they relate to the expense of reselling the services and not as a profit generating arm of the business. IMHO, anyway.