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 from 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.
After his win was announced, Mr French praised his predecessor, saying Mr Brokenshire had “made an enormous impact on everyone who lives here” and promising to “work tirelessly to build on everything he achieved”.
The main issues raised by residents during his campaign had been crime and policing, public transport, and problems with health services such as getting GP appointments.
The by-election turnout was significantly lower than the general election two years ago, with just 34% – 21,788 people – casting a vote.
This was down from the 46,145 votes cast in 2019 – a turnout of almost 70%.