The Conservatives have held on to the southeast London seat of Old Bexley and Sidcup after a by-election prompted by the death of MP James Brokenshire in October.
Mr Brokenshire, who represented the area since 2010 until his death from lung cancer, had held the seat with a majority of almost 19,000.
Thursday’s by-election, however, was tighter, with local Tory councillor Louie French gaining 11,189 votes, over Labour councillor Daniel Francis, who secured 6,711 votes.
Mr French was deputy leader of Bexley Council from 2018 to 2021, and Mr Francis is a former leader of the council’s Labour group.
Standing for the Liberal Democrats was Simone Reynolds, while Jonathan Rooks was representing the Greens and Richard Tice was standing for the Reform Party.
Other candidates included Elaine Cheeseman (English Democrats), Richard Hewison (Rejoin EU), David Kurten (Heritage Party), John Poynton (UKIP), Carol Valinejad (Christian Peoples Alliance), and Mad Mike Young (Official Monster Raving Loony Party).
The by-election turnout was significantly lower than the previous snap general election two years ago, with just 34% – 21,788 people – casting a vote.
It was down from almost 70% at the previous election which saw 46,145 votes cast.