Lucas Barrios put Jurgen Klopp's side ahead in the ninth minute before Luis Gustavo brought Bayern level in the 16th minute.

But Nuri Sahin finished a fine counter-attack with an excellent curled finish to put Dortmund back in front within two minutes and Mats Hummels sealed the three points after an hour.

Dortmund's first win in Munich since 1991 gave them a 13-point lead over second-placed Bayern Leverkusen, who play away at Werder Bremen tomorrow, and 16 over fourth-placed Bayern, whose hopes of defending their title are now all but over.

Christian Schulz's goal in the 89th minute gave Hannover a 1-0 at St Pauli and a club record 14th victory of the Bundesliga season to go third, a point behind Bayer.

Mainz also remained in the hunt for a Champions League place thanks to a 2-1 win at Hoffenheim.

Andreas Ivanschitz gave Mainz the lead after 23 minutes before David Alaba equalised in the 83rd minute.

However, Elkin Soto struck the winner four minutes from time to leave Mainz five points off second.

Kaiserslautern held on for a 1-1 draw at home to Hamburg to move out of the Bundesliga relegation zone.

Adam Hlousek gave the hosts the lead in the 18th minute but Marcell Jansen equalised nine minutes after the break.

The point lifted Kaiserslautern out of the bottom three on goal difference as Hamburg climbed to sixth.

Lukas Podolski's late goal secured Cologne a 1-0 victory over Freiburg, who dropped to seventh.

Schalke drew 1-1 at home to Nurnberg.

Jens Hegeler put the visitors in front against the run of play in the 37th minute, but Raul earned Schalke a point with his goal in the 52nd minute.