The Conservatives have gained seats from Labour across London, but not in some key marginals.
The Tories have gained a net total of seven seats in London, including Harrow East, and Ealing Central and Acton.
But they failed to make gains from Labour in Westminster North, and Tooting. Labour also held Barking, where the BNP's Nick Griffin was third.
All 73 London seats have now been called. Labour won 38, the Tories won 28 and the Liberal Democrats seven.
There was a 2.5% swing from Labour to the Conservatives across the capital.
Tory Zac Goldsmith gained Richmond Park from the Lib Dems. The Tories also gained Brentford and Isleworth, Croydon Central and Hendon from Labour.
The Conservatives made gains from Labour in the target seats of Battersea and Croydon Central and held Enfield Southgate, Kensington, and Putney and Wimbledon.
Labour retook Bethnal Green and Bow, after losing the seat to the Respect Party in 2005. Labour's Rushanara Ali ended up with a majority of 11,574 votes, in a 14.1% swing from Respect.
Meanwhile, Labour Environment Minister Jim Fitzpatrick held on to Poplar and Limehouse, 6,030 votes ahead of Tory Tim Archer who came second. Respect's George Galloway came third in the seat, receiving 8,160 votes.
The Lib Dems gained Brent Central from Labour and held Carshalton and Wallington, Twickenham, Kingston and Surbiton, Sutton and Cheam, and Hornsey and Wood Green.
Labour minister Margaret Hodge saw off a challenge by the British National Party (BNP) in Barking in a win she called the "moral battle of her life".
This page is best viewed in an up-to-date web browser with style sheets (CSS) enabled. While you will be able to view the content of this page in your current browser, you will not be able to get the full visual experience. Please consider upgrading your browser software or enabling style sheets (CSS) if you are able to do so.