UKIP rise makes election even tougher to call
Labour won Heywood and Middleton at the last general election with 40% of the vote - on a much lower turnout yesterday, they retained the seat with 41% of the vote.
A small step forward for them but a giant leap for UKIP from a derisory 3% and fifth place behind the BNP in 2010 to second place and 39% of the vote now - a swing from Labour to UKIP of 18 points.
That would have been their best ever by-election performance - but for Clacton.
So Nigel Farage will claim he can take Labour votes in the north just as he can take Tory votes in the south.
But that's not to say he is harming both main parties equally.
The Conservatives saw their share of the vote fall dramatically here - as did the Lib Dems.
So it's likely that UKIP took votes from David Cameron's party while Labour gained votes from Nick Clegg's.
That meant that Labour retained the seat and saw off the robust UKIP challenge.
That said, it was a much worse result than Labour had anticipated.
So on the surface it won't calm some Labour jitters about Ed Miliband's leadership - but the party's back-room staff calculate that a similar strong performance by UKIP could help Labour win up to 14 marginal seats in north-west England.
But that's hardly the firm foundations for a Labour general election victory.
If UKIP are now seen to have momentum behind them who is to say they won't make a breakthrough?
A 39% vote share here is an improvement on their 31% at the council elections less than six months ago.
On the other hand, if the Conservatives persuade enough people that a vote for UKIP would let Labour in, Ed Miliband's party won't get the benefit it's banking on from marginal seats as UKIP can reach Tory voters that Labour can never reach.
The reason that Labour's private polling in the marginals is so positive is in part because of a relatively strong showing for UKIP at the expense - mostly - of the Conservatives.
All this means the result of an unpredictable general election has become even more difficult to call.