Bayern Munich scored three second half goals to beat Borussia Dortmund
and stay four points clear at the top of the Bundesliga.
Former Dortmund man Mario Gotze put the visitors ahead before late goals from Arjen Robben and Thomas Muller sealed victory.
Here, BBC Sport's European football expert Andy Brassell assesses the individual performances of both sets of players.
Here's how our man in Germany rated the players.
The newly-capped Germany international just about made his first save, a tip away from Mandzukic in the first half but had little else to do apart from retrieve the ball from the net three times. A strange evening for him, thought he could maybe have done better with Gotze's opener.
The youngster's defensive positioning left a bit to be desired, but luckily he was well backed up by Reus and Sokratis.
His side's best defender, it felt as if the Greece international was holding it together on his own sometimes - shown by the amount of last-ditch interceptions he made.
A shaky start from the new signing, who was very short of match practice. His distribution was poor too, but he stuck to the task as best he could.
Initially looked as if he could be in for a long night up against Robben, but held his own reasonably well for most of the game until he fully committed to attack after Klopp's substitutions.
A decent display, winning the ball well, but it felt as if he was on his own a lot of the time, trying to protect a shaky defence.
His passing usually makes Dortmund tick, though he was restricted mainly to short-range by Bayern's pressing.
Ran himself into the ground in both halves of the pitch, and created a couple of his team's most dangerous moments from the right before being sacrificed for Aubameyang's greater pace.
Intelligent display in the centre, helping Dortmund hold on to the ball when Bayern were monopolising it in the first period. Not at his potent best going forward though, and took too long over a great chance with his last touch before being replaced.
Incredibly industrious display from arguably Dortmund's star turn, who was his side's biggest threat coming forward too. Denied by one fine Neuer save.
The Poland striker is a player of such multi-functionality that it's easy to forget how physical he is, and he kept two centre-backs busy on his own. Missed two great chances to score, though.
Pierre-Emerick Aubameyang (for Blaszczykowski 71 mins) - 5
Introduced to go at Bayern with his pace, but unable to do much with the ball when he did get it in wide positions on either side.
Jonas Hoffmann (for Mkhitaryan 71 mins)
One dangerous cross towards Lewandowski, but little tangible impact from the 21-year-old.
Lukasz Piszczek (for Bender 79) - 5
A surprise inclusion in the squad, brought on as a late gamble. A charging Robben on the left would have been the last thing he wished to see.
A well-earned clean sheet. Authoritative in the air and some fine stops from Reus (twice) and Mkhitaryan.
He looked stretched by Reus on occasion, especially during the first half, but did well to recover his cool after being booked for a wild tackle near the end of the first half.
The former Manchester City man was strong, often flirting with the boundaries of legality, but held his own in a punishing battle with Lewandowski and remained composed. Replaced by Thiago Alcantara.
An absorbing battle with Lewandowski, and one crucial intervention from a Grosskreutz cross. Calm and assured.
Classy and composed as usual in possession as usual, though he had less attacking impact than he sometimes does.
Back to his pre-injury best, showing incredible drive and willingness to press. Showcased versatility (and perhaps Bayern's future) by slotting into central defence after Thiago's arrival.
He didn't wreak as much havoc between the lines as he had against Barcelona or Manchester City earlier in this calendar year, but worked as hard as ever, and was rewarded with a goal and an assist.
The captain looks as if he has played in midfield for his whole career. A responsible and mature display capped with the assist for Muller's goal.
A spritely presence in the middle of the park. Kept the game flowing with his easy passing and movement and helped Bayern to establish a first-half rhythm.
Started the match as if he was going to be an integral part of proceedings and then faded, only to show in a devastating burst in the final part of the match why he is one of the most dangerous players in the world.
Got through plenty of work as per usual, but rarely threatened a breakthrough despite Dortmund's weakened defence - and missed a great chance from Robben's cross in the first half.
Mario Gotze (for Mandzukic 56 mins) - 7
Returning to a frosty reception, to say the least, Gotze took less than ten minutes to make his mark with a fine finish. Focused and professional.
Thiago Alcantara (for Boateng 64 mins) - 6
An unfussy and useful contribution in midfield after coming on for Boateng.
Daniel van Buyten (for Rafinha 79 mins) - 6
Brought on by Guardiola to keep it right in the closing stages.