German Chancellor Gerhard Schroeder has faced down rebels from his Social Democratic Party (SPD) to push through key social and economic reforms that he's staked his career on.
As Germany grapples with an economy in recession, a bulging budget deficit, and more than 4.5 million people out of work, everyone agrees something must be done to reverse the tide.
But the Chancellor's recipe is painful and unpopular.
Mr Schroeder has won this one, but it's too early to open champagne
Key elements approved on Friday include merging unemployment benefit and social welfare payments -the result being that people out of work will get less money in future.
They also face penalties if they refuse jobs offered to them by Labour Offices.
One senior Social Democrat said this week he'd rather take a job selling grilled sausages on the street than live off benefits.
"We have to tell people that we need to go back a couple of steps in order to save the social system," said Doris Barnett, SPD employment and economic affairs spokeswoman.
"Of course it's really unrealistic that a top manager would end up flipping sausages. But work is work and it's better than nothing."
Other reforms approved last month weakened safeguards protecting employees from dismissal, and introduced new charges for using the health service.
The harsh tone has been sweetened by 15 billion euros of tax cuts, brought forward from 2005 to 2004.
Mr Schroeder was heckled this week by members of the IG Metall union
But critics say this will have little impact on growth as the government intends to claw back much of the money in savings elsewhere.
The unions are also not impressed - they see the reforms as a betrayal by the party that has always been their natural ally.
Chancellor Schroeder was heckled this week when he addressed a conference of the IG Metall union, whose leader Juergen Peters said the reforms were "throwing the tradition of unions and Social Democracy into question".
"Who would have thought that the pillars of the welfare state would be put into jeopardy by a Social Democrat government?" he asked.
Reduced unemployment benefit
Tax cuts next year
Higher tobacco duties
Reform of local government finances
Reduced subsidies for commuters and homebuilders
Reduced spending on health
Retirement age raised to 67
But in a sign of changing times, the unions have found themselves sidestepped.
Left-wingers in Mr Schroeder's own party were also overcome, partly with concessions that softened some of the provisions in Friday's package of bills.
Deal with the right
The big challenge now will come from the conservative opposition parties. They control the Bundesrat, the upper house of Parliament, where the bills now go.
"The government bills go in the right direction, but not far enough," said CDU backbencher Michael Meistr.
"For example there needs to be more flexibility in the labour market. We're not talking about a high-and-fire economy, but at the moment if small businessmen need to lay someone off they've got a real problem."
It's likely the government bills will now be rejected by the Bundesrat, meaning Mr Schroeder would have to reach a compromise with the opposition. He would then have to sell that to his own party, which might be tricky.
"I hope this compromise won't be too hard to stomach," said Doris Barnett.
"It shouldn't be that the CDU agrees to our tax cut, and in return we agree to (further) reduce protection from dismissal or water-down the current collective wage bargaining system."
There are more hard choices for the government this weekend, as it meets in conclave to discuss reform of Germany's over-stretched pension system.
One of the crucial questions here will be proposals to raise the retirement age to 67 - another unpopular step.
So while this vote is an important victory for Mr Schroeder, he can keep the champagne on ice.