Substitute Markus Rosenberg opened the scoring after 68 minutes and Hugo Almeida sealed the victory 11 minutes from time as the hosts closed the gap on Ottmar Hitzfeld's side to nine points with three games to go.

Bayern, though, can seal their 21st Bundesliga crown with a draw or better at Wolfsburg on Sunday.

Second-placed Bremen and Schalke, in third, started the day needing a mathematical miracle to snatch the Bundesliga crown from Bayern's grasp.

Not only did they have to win their remaining matches and hope Bayern lost all of theirs, both clubs also had huge goal differences to make up.

And while Bremen recorded a hard-fought win, the Royal Blues could only manage a 1-1 draw at home to Hannover, a result which leaves them 11 points off top spot with only nine to play for.

Arnold Bruggink opened the scoring for the visitors after only eight minutes, and even though Halil Altintop pulled one back for Schalke five minutes before the break, they could not find a winner in the second half.

Stuttgart and Hamburg kept their hopes of Champions League qualification alive after both sides enjoyed comfortable wins.

Stuttgart crushed Eintracht Frankfurt 4-1 to move to within four points of Schalke, while fifth-placed Hamburg remain ahead of the defending champions on goal difference after a 3-1 win at struggling Hansa Rostock.

Stuttgart were two goals up after just six minutes thanks to goals from Yildiray Basturk and Mario Gomez.

Basturk made it three in the 18th minute and Cacau added a fourth two minutes after the restart before Ioannis Amanatidis snatched a consolation for the visitors.

Ivica Olic scored twice either side of a Rafael van der Vaart strike for Hamburg, while an own goal from Joris Mathijsen put Rostock on the scoresheet.

That defeat means Rostock slip five points adrift of safety after fourth-bottom Armenia Bielefeld claimed a crucial 2-0 success over Bochum.

Andre Mijatovic broke the deadlock in the 70th minute before Jonas Kamper made the points safe in stoppage time.

Elsewhere, Hertha Berlin claimed a 3-1 win at home to Karlsruhe to confirm their top-flight status.

Goals from Gojko Kacar and Marko Pantelic put Hertha 2-0 up at the break and even though Edmond Kapllani pulled one back, Rudi Skacel sealed the win in the 84th minute.

Basement boys Duisburg, six points from safety, host UEFA Cup hopefuls Bayer Leverkusen on Sunday.