Marco Richter scored twice as hosts Hertha Berlin earned a shock 3-2 win over second-placed Borussia Dortmund Saturday to leave Bayern Munich nine points clear at the top of the Bundesliga.
Dortmund loss at Hertha leaves Bayern nine points clear
Marco Richter (C) celebrates scoring Hertha Berlin's second goal to sink Dortmund on Saturday
Julian Brandt gave Dortmund a first-half lead, but Hertha roared back with three unanswered goals at Berlin's Olympic Stadium as Ishak Belfodil equalised before Richter scored twice.
Dortmund substitute striker Steffen Tigges pulled one back shortly after replacing Brandt, but the visitors head into the winter break having won just once in their last four league games.
"We gave the game away," admitted Dortmund goalkeeper Marwin Hitz.
"We did nothing in the 20 minutes after half-time and only after were we back in it."
Bayern thrashed Wolfsburg 4-0 on Friday and will start the new year as overwhelming favourites for a 10th straight Bundesliga title.
Just four days after losing 4-0 at mid-table Mainz, Hertha bossed Dortmund and crucially kept Erling Haaland quiet after the Norwegian had scored four goals in a 5-2 romp in the same fixture last season.
Haaland barely had one shot on goal and showed his frustration at Dortmund's poor display as Hertha fought hard from the first whistle.
Forward Myziane Maolida tapped an early shot past Hitz, but the goal was disallowed with Belfodil marginally offside.
Dortmund took the lead when Haaland spotted a run by Brandt, who chipped in with half an hour gone.
It stayed 1-0 at the break, but Hertha stamped their authority with two goals within six minutes.
Belfodil beat Axel Witsel and tucked his shot under Hitz to claim his first Bundesliga goal for three years.
Moments later Brandt lost possession and Maolida laid it off to his right for Richter to hammer in.
He then grabbed his second after getting in behind the defence following Brandt's loose pass before Tigges gave Dortmund late hope.
Earlier, Eintracht Frankfurt continued their rise up the table with a sixth win in seven games as Danish forward Jesper Lindstrom scored for the third match in succession to seal a 1-0 victory over Mainz.
Frankfurt broke into the top five, having started last weekend 12th, as Lindstrom added to goals he scored in wins against Moenchengladbach and Leverkusen over the past week.
When Rafael Borre snuck in behind the defence, the Colombia striker chipped the on-rushing goalkeeper straight into the path of Lindstrom who tapped in the winner on 35 minutes.
The clubs passed each other in the table as Mainz dropped to eighth.
Union Berlin went sixth - level with Frankfurt on 27 points - thanks to former Germany striker Max Kruse, who scored the only goal in a 1-0 win at Bochum two days after getting married.
Fourth-placed Hoffenheim snatched a 1-1 draw at home to Borussia Moenchengladbach after defender Kevin Akpoguma tapped in a last-gasp equaliser.
Gladbach, who had lost their four previous league games, took a first-half lead when Swiss striker Breel Embolo scored from close range.
Domenico Tedesco suffered his first loss in three games as coach of RB Leipzig, who lost 2-0 at home to 10-man Arminia Bielefeld.
After forward Janni Serra put the visitors 1-0 up, Bielefeld substitute Fabian Klos was shown a red card for fouling Leipzig defender Willi Orban soon after coming on.
Despite being a man down, Bielefeld clinched the win when Japan midfielder Masaya Okugawa hit the bottom corner with 15 minutes left.
Greuther Fuerth are now 11 points adrift at the foot of the table after their goalless draw at home to Augsburg.