In regards to contracts, call up a network you want to join that has the phone you want, and complain that a different network has offered it x amount cheaper (don't take the piss, as you can do it again in 12 months - go for around 30% of the price.) 9 times out of 10 you'll get the contract loads cheaper than in store and online prices. If it fails, call again and speak to a different agent.
(This also works if you already have a contract, but the main point is to not take the piss too much.)