Labour has taken Kingswood from the Conservatives, in another by-election victory for Sir Keir Starmer’s party.
Damian Egan won 11,176 votes, while Tory candidate Sam Bromiley polled 8,675 votes, giving Labour a majority of 2,501.
The seat in Gloucestershire had been held by Tory MP Chris Skidmore since 2010, but he quit in January in protest over government legislation to boost North Sea oil and gas drilling.
By-election results live: Follow updates here
The former energy minister had increased his share of the vote at each of the four elections in the past 13 years, from 40% in 2010 to 49% in 2015, 55% in 2017 and 56% in 2019.
A Labour source told Sky News they believed they had won the seat at around 1.30am.
Results were announced at around 1.50am.
Before 2010, Labour had won the seat at every general election since 1992.
The turnout was 24,905 – which equates to around 37.1% of eligible voters in the constituency.
This is a significant drop of 34 percentage points.
To win, Labour needed a swing in the share of the vote of 11.4 percentage points – equivalent to a net change of 12 in every 100 people who voted Conservative in 2019 switching sides.
Provisional calculations show the swing ended up being 16.4 from the Conservatives to Labour.
In total, the Conservative Party’s vote share fell by 21.3 percentage points, meanwhile the Labour Party’s vote increased by 11.5 percentage points.
The Liberal Democrats vote fell by 3.4 points, and the Green Party went up by 3.4 points.
This breaking news story is being updated and more details will be published shortly.
Please refresh the page for the fullest version.
You can receive breaking news alerts on a smartphone or tablet via the Sky News app. You can also follow @SkyNews on X or subscribe to our YouTube channel to keep up with the latest news.