Boris Johnson is on course for a pre-Christmas general election after MPs finally backed his demands to go to the country in an attempt to end the Brexit deadlock.
The Commons voted by 438 to 20 at third reading to approve the one-page Bill enabling the election to be held on December 12.
Earlier, MPs voted by 315 to 295 to reject a Labour amendment for the proposed polling day to be moved to December 9 – three days earlier than ministers wanted.
The vote effectively clears the way for Parliament to be dissolved on November 6, paving the way for an election on December 12.
Addressing Tory MPs afterwards at Westminster, Mr Johnson said that he was prepared for a “tough” election fight in the weeks ahead.
“I think it’s time for the country to come together, get Brexit done and go forward,” he said.
“It’ll be a tough election and we are going to do the best we can.”
The opposition parties had wanted to bring forward polling day to cut off any possibility Mr Johnson could make a fresh attempt to ram through his Brexit deal before Parliament is dissolved.
However, Downing Street warned that it was not “logistically possible” while Government sources accused the opposition of a deliberate attempt to scupper the whole election.
It will now go to the House of Lords, but after being approved by MPs it is unlikely that it will be held up by the unelected upper chamber.
The one-page Bill sets aside the provisions of the Fixed-Term Parliament’s Act, meaning the Government did not require a two-thirds “super majority” to get it through.
The result means Mr Johnson finally has within his grasp the election he has been pushing for since September after three previous attempts – the most recent on Monday – failed.
Following the vote, Jeremy Corbyn said: “This election is a once-in-a-generation chance to transform our country and take on the vested interests holding people back.”
Lib Dem leader Jo Swinson confirmed they would be campaigning on a platform to halt Britain’s withdrawal from the EU.
“It is our best chance to elect a government to stop Brexit,” she said.
“The Liberal Democrats are the strongest party of Remain and will be standing on a manifesto to stop Brexit by revoking Article 50.”
The breakthrough came after Mr Corbyn finally bowed to intense pressure and agreed in principle to support an election.
It followed the announcement at the weekend by the Lib Dems and the SNP that they would support an election if they could be sure Mr Johnson would not reintroduce the Withdrawal Agreement Bill (WAB) to ratify his Brexit deal.
Following a meeting of the shadow cabinet, the Labour leader said their condition that a no-deal-Brexit was taken “off the table” had finally been met after the EU agreed to another extension to the end of January.
“I have consistently said that we are ready for an election and our support is subject to a no-deal Brexit being off the table,” he said.
“We will now launch the most ambitious and radical campaign for real change our country has ever seen.”
However, with the party trailing in the polls, many Labour MPs are deeply unhappy at the prospect of an election in the run-up to Christmas.
More than 50 signed an amendment calling for the election to be delayed to May 2020.
Owen Smith, the Labour MP for Pontypridd, has written to Jeremy Corbyn to say he will not stand in the election “for political and personal reasons”.
Mr Smith was sacked as shadow Northern Ireland secretary last year after breaking ranks with Mr Corbyn by calling for a new EU referendum.
He unsuccessfully challenged Mr Corbyn for the party leadership in 2016.