MPs have voted by a huge margin to ban smoking from all pubs and private members' clubs in England.
Ministers have argued about the extent of a ban
Health Secretary Patricia Hewitt said the change, expected to take effect in summer 2007, would "save thousands of people's lives".
Ministers gave a free vote amid fears Labour MPs could rebel against plans to exempt clubs and pubs not serving food.
The Commons decided by a margin of 200 to impose a ban on smoking in all enclosed public spaces.
The Cabinet was split on how far restrictions - set out in the Health Bill - should go, with Conservatives calling government policy a "shambles".
Prime Minister Tony Blair, Chancellor Gordon Brown and Home Secretary Charles Clarke all voted for a blanket ban.
But Deputy Prime Minister John Prescott, Culture Secretary Tessa Jowell, Defence Secretary John Reid and Education Secretary Ruth Kelly opposed it.
A total smoking ban is due to come into force in Scotland next month, and Northern Ireland is set to follow suit in April, next year.
The Health Bill gives the Welsh Assembly the right to decide for itself whether to implement a ban it has already twice approved in principle.
Ms Hewitt, who voted for a total ban for England, told the BBC: "I'm absolutely delighted. This is really a historic day for public health."
She added: "This is going to save thousands of people's lives."
Elspeth Lee, of Cancer Research UK, said: "This is really going to affect generations to come and make the nation a lot healthier."
However, Simon Clark, director of smoking support group Forest, said: "This is a double whammy and an unnecessary and illiberal piece of legislation that denies freedom of choice to millions of people.
"The Government should educate people about the health risks of smoking but politicians have no right to force people to quit by making it more difficult for people to consume a legal product."
About one third of people who smoke more than 20 cigarettes a day will have their first within five minutes of waking
Earlier, health minister Caroline Flint said fines for failing to stop people smoking in restricted areas would go up by more than ten times from £200 to £2,500.
She said: "I am confident that these increased fine levels will result in better compliance with smoke-free legislation, which of course, will make enforcement easier."
The Cabinet originally proposed prohibiting smoking only in pubs serving food, in line with Labour's election manifesto.
A free vote was offered after many Labour MPs, fearing a partial ban could increase health inequalities among customers and staff, threatened to rebel.
Ministers came up with three choices: a total ban; exempting private clubs; or exempting clubs and pubs not serving food.
Many MPs opposed a smoking ban on civil liberties grounds.
The government predicts an estimated 600,000 people will give up smoking as a result of the law change.
Conservative MPs were offered a free vote on the issue.
Shadow health secretary Andrew Lansley said ministers had "put forward proposals which their own backbenchers thought were completely unworkable".
But it was "a very important step", he added there "had to be a culture that encourages better health".
Liberal Democrat health spokesman Steve Webb said: "This legislation is good news for tens of thousands of bar staff up and down the country.
"The key issue has always been the health and safety of people who work in public places."
Tory leader David Cameron missed the vote following the birth of his third child, a son, earlier on Tuesday.
In a recent report, the Commons health select committee said a total ban was the "only effective means" of protecting public health.