Zac Goldsmith's political career looks to be over after the Liberal Democrats pulled off a dramatic comeback to beat him in the Richmond Park by-election.
Sarah Olney won the London constituency with 20,510 votes to Goldsmith's 18,638, in a contest prompted by Goldsmith's decision to force a by-election after Theresa May said she would back a third runway at Heathrow airport.
The result is a major boost for the Lib Dems, who overturned an enormous majority and, having successfully turned the election into a rerun of the referendum on Britain's membership of the EU, were rewarded handsomely in the Remain-voting constituency.
Olney said her victory sent a message to the government on behalf of Remain voters: "We do not want a hard Brexit. We do not want to be pulled out of the single market. We will not let intolerance, division, and fear win."
She added: "Brexit and Heathrow were the two key things we fought this campaign on, so those are the two priorities when I get into parliament."
Goldsmith's political career is now in tatters: He began the year as the Conservative party's London mayoral candidate, having built up a reputation for being a relatively independent-minded backbench MP with an interest in environmental issues, which attracted praise from the likes of Green party co-leader Caroline Lucas.
Then it went very wrong. First, Goldsmith suffered a major defeat in May's mayoral contest against Labour's Sadiq Khan, with his campaign accused of adopting divisive and racist tactics. Immediately afterwards he campaigned to leave the EU in June's referendum despite representing a strongly pro-Remain constituency in parliament, potentially undermining his local support base in Richmond Park.
In October Theresa May indicated she would back the expansion of Heathrow airport, a decision that would route extra aircraft over Goldsmith's constituency. He responded by making good on a campaign promise to resign from both the Conservative party and the House of Commons and fight the resulting by-election, this time as an independent candidate.
The Conservatives decided not stand a candidate against Goldsmith in order to avoid splitting the vote, while many Tory MPs and local activists volunteered on his campaign. However, this was not enough to save his political career and he is now no longer in the Tories and has no obvious route back into politics.
Goldsmith's next move is unclear but he will have some freedom thanks to the substantial wealth he inherited from his financier father – tax returns declared during his mayoral run show he had income of around £1.2 million per year.
Although Goldsmith wanted to fight the by-election as a debate on Heathrow, he was harmed by the fact that all the leading candidates were against expansion.
The Liberal Democrats flooded the seat with thousands of volunteers, fighting hard with a variety of fake newspapers and faux-handwritten flyers. They organised phone banks with volunteers from around the country calling in and claim to have contacted voters 150,000 times during the contest.
Labour finished a distant third, losing their deposit with just 1,515 votes. Christian Wolmar, the party's candidate, said Goldsmith's "disgusting" mayoral campaign contributed to his defeat.
One Lib Dem campaigner said they encountered many Labour activists in Richmond Park who "fucking hate us" but were willing to get out and vote for Olney in order to get rid of Goldsmith. Some Labour and Green supporters even went out campaigning for the pro-EU Lib Dem candidate.
The constituency and its predecessors were held by the Lib Dems between 1997 and 2010, when Goldsmith took the seat for the Tories with a narrow win. By the 2015 election he had increased his majority to 23,015 votes over the Lib Dems.
Olney will now become the Lib Dems' ninth MP in the House of Commons – and their only woman.
Jim Waterson is a politics editor for BuzzFeed News and is based in London.
Contact Jim Waterson at firstname.lastname@example.org.
Got a confidential tip? Submit it here.