Match ends, Borussia Dortmund 0, FC Bayern München 1.
Robert Lewandowski condemned former club Borussia Dortmund to defeat and helped Bayern Munich close in on a third successive Bundesliga title.
The Poland striker headed in after Dortmund keeper Roman Weidenfeller parried Thomas Muller's shot.
Lewandowski, who left Dortmund in the summer to join rivals Bayern, did not celebrate his first-half goal.
Midfielder Thiago completed a fine day for Bayern, coming off the bench after a year out with a knee injury.
It was a resilient display from a Bayern side who are now 10 points clear at the top of the table but had a point to prove following a first home defeat in 11 months last time out, when they lost 2-0 to Borussia Monchengladbach.
Winger Arjen Robben tore an abdominal muscle in that defeat and was ruled out for "several weeks" ensuring he missed the meeting with rivals Dortmund.
This was the 14th time the teams have met in competitive fixtures in the last three seasons and Champions League quarter-finalists Bayern were favourites to win.
But they were up against a Dortmund side who have been much-improved in recent weeks.
When Dortmund lost to Augsburg on 4 February to remain bottom of the German top-flight table, the players went to placate vocal fans at the final whistle.
But a seven-game unbeaten run in the league since has taken Jurgen Klopp's men to 10th and looking up to Europa League places rather than down towards the second tier.
Their confidence was evident during a tight contest at the Westfalenstadion, when they never looked outclassed or intimidated by their opponents.
However, it was Bayern who had the best of the few first-half chances.
Lewandowski had the ball in the net on 15 minutes after a one-two with Muller but it was correctly ruled out for offside.
However, the 26-year-old was not to be denied for long, beating defender Marcel Schmelzer to the ball after Muller's shot had been saved to head in.
A more urgent Dortmund began creating opportunities after the break and midfielder Ilkay Gundogan came close when he drilled a long-range effort wide.
Marco Reus wasted a fine chance on the hour, beating the Bayern offside trap but firing his effort into the side-netting.
Manuel Neuer had barely had a save to make until two minutes from time, when he brilliantly stopped Reus's free-kick.
- 29SchmelzerBooked at 28mins
- 8GündoganSubstituted forMkhitaryanat 79'minutes
- 16BlaszczykowskiSubstituted forKagawaat 67'minutes
- 23KamplSubstituted forRamosat 67'minutes
- 17AubameyangBooked at 21mins
- 4Costa Santos
- 3AlonsoBooked at 75mins
- 13Ferreira de Souza
- 21LahmSubstituted forThiago Alcántaraat 69'minutes
- 31SchweinsteigerBooked at 19minsSubstituted forRodeat 58'minutesBooked at 90mins
- 25MüllerSubstituted forGötzeat 79'minutes
- 6Thiago Alcántara
- Knut Kircher
- Shots on Target
Second Half ends, Borussia Dortmund 0, FC Bayern München 1.
Thiago Alcántara (FC Bayern München) wins a free kick on the left wing.
Foul by Sokratis (Borussia Dortmund).
Attempt missed. Neven Subotic (Borussia Dortmund) header from a difficult angle on the left misses to the left. Assisted by Sokratis.
Sebastian Rode (FC Bayern München) is shown the yellow card for a bad foul.
Foul by Sebastian Rode (FC Bayern München).
Henrikh Mkhitaryan (Borussia Dortmund) wins a free kick in the defensive half.
Foul by Mario Götze (FC Bayern München).
Neven Subotic (Borussia Dortmund) wins a free kick in the defensive half.
Attempt saved. Marco Reus (Borussia Dortmund) right footed shot from outside the box is saved in the bottom left corner.
Hand ball by Sebastian Rode (FC Bayern München).
Attempt blocked. Marco Reus (Borussia Dortmund) right footed shot from the centre of the box is blocked.
Attempt missed. Mats Hummels (Borussia Dortmund) right footed shot from the centre of the box misses to the left.
Foul by Dante (FC Bayern München).
Marco Reus (Borussia Dortmund) wins a free kick on the right wing.
Foul by Mario Götze (FC Bayern München).
Marco Reus (Borussia Dortmund) wins a free kick in the defensive half.
Attempt blocked. Mario Götze (FC Bayern München) left footed shot from outside the box is blocked. Assisted by Thiago Alcántara with a headed pass.
Substitution, FC Bayern München. Mario Götze replaces Thomas Müller.