A last-gasp goal gave Cologne a Rhine Derby win over Borussia Mönchengladbach and keeps their hopes of staying up alive. On Saturday, RB Leipzig beat Schalke and Mario Gomez was heavily involved as Stuttgart beat Hertha.
Cologne 2 -1 Borussia Mönchengladbach
(Sorensen 35', Terrode 90+5' - Raffael 69')
Incredibly, all is not lost for Cologne after Simon Terrode's dramatic late header secured them Rhine derby success. The striker, making his debut for the Carnival Club, glanced in a header from a left wing cross to spark delirious scenes in the Rhein-Energie Stadium.
Champions League-chasing Gladbach were left to ponder on what could have been after missing a host of chances in the Rhein Derby on Sunday. Christoph Kramer was an early culprit, blazing wide from close range before Frederik Sorensen turned in Milos Jojic's deep free kick to give the hosts hope for a second win of the season.
But, after more misses, from Lars Stindl and Thorgan Hazard in particular, substitute Raffael finally made Gladbach's pressure tell. There was still time for both sides to be denied penalty shouts before Terrode made his mark.
Borussia Dortmund 0 - 0 Wolfsburg
Dortmund missed the chance to go second after a game of missed opportunities. An hour before the game, Dortmund tweeted the news that Pierre-Emerick Aubameyang had been suspeneded by the club for missing a team meeting.
BVB gave full debuts to teen duo Jadon Sancho and Alexander Isak but couldn't find the breakthrough. Read the full report of that one here.
RB Leipzig 3-1 Schalke
(Keita 41', Werner 69', Bruma 71' - Naldo 55')
RB Leipzig leapfrogged Schalke into second place with a 3-1 win in the Red Bull Arena.
The hosts took the lead through Liverpool-bound Naby Keita just before half-time, four minutes after Schalke goalkeeper Ralf Fährmann had saved Jean-Kevin Augustin's penalty, but Brazilian defender Nalso headed the Royal Blues level 10 minutes after the restart.
Subsitute Timo Werner put the hosts' back in front just minutes after being introduced by coach Ralph Hasenhüttl before Bruma doubled the advantage moments later.
Hannover 3–2 Mainz
(Füllkrug 33', 38' pen, 75' – Muto 26', Hack 31')
Hannover ended 2017 with a 4-4 draw at home to Bayer Leverkusen and the goals continued to fly in at the HDI-Arena in 2018 as the Reds came from behind to beat Mainz 3-2 thanks to a Niclas Füllkrug hat trick.
After Mainz goalkeeper Robin Zentner kept out Waldemar Anton with a point-blank save, the visitors raced ahead with two goals in five minutes. First, Salif Sane afforded Yoshinori Muto too much space to turn and shoot in the box, before Alexander hack was allowed a free header at the back post to head Mainz into a 2-0 lead.
Hannover were level just seven minutes later. Füllkrug's powerful header from Pirmin Schwegler's corner got them back into the game, although replays showed that the ball was outside of the quadrant when the corner was taken. Füllkrug then leveled from the penalty spot after Nigel de Jong, on his return to the Bundesliga, fouled Felix Klaus.
Füllkrug completed his hat trick 15 minutes from time when he controlled Ihlas Bebou's cross in the box and fired home the winner.
Ahead of the game, thousands of Hannover supporters marched through the city center to protest in favor of German football's 50+1 ownership law and against the proposed takeover of their club by investor Martin Kind.
Eintracht Frankfurt 1–1 SC Freiburg
(Haller 28' – Koch 51')
Freiburg came closest to opening the scoring in Frankfurt when Marco Russ inadvertently deflected Lucas Höler's cross over Lukas Hradecky and towards goal, but Marius Wolf heroically cleared off the line.
And so it was Frankfurt themselves who took the lead just before the half-hour mark, Sebastien Haller nipping in at the near post for his seventh goal of the season, putting Eintracht temporarily up to third in the Bundesliga.
But, as they showed against Cologne and Augsburg before the winter break, Freiburg aren't fazed by going behind and they equalized six minutes into the second half, Robin Koch with a powerful header from Christian Ginter's corner.
Werder Bremen 1–1 Hoffenheim
Benjamin Hübner gave Hoffenheim the lead towards the end of an uneventful first half when he headed home unmarked from Serge Gnabry's cross – the defender's second goal of the season.
The hosts had more of the game after the break but didn't look like leveling until Gebre Selassie scrambled the ball off the underside of the ball and over the line following a Zlatko Junuzovic corner.
Hoffenheim almost restored their lead immediately but Jiri Pavlenka saved brilliantly from Andrej Kramaric at point-blank range.
VfB Stuttgart 1–0 Hertha Berlin
(Stark og 77')
Newly promoted Stuttgart secured three vital points in their battle against relegation with a hard-fought 1-0 win over Hertha Berlin, but they ran their luck in the opening stages.
Mathew Leckie should have given the Berliners an early lead with a free header but opted to go for the ball with his foot instead. Then, midway through the first half, Valentino Lazaro, signed from Red Bull Salzburg, struck the post after running onto Leckie's cross.
And they lived to rue their missed chances when Stuttgart took the lead against the run of play with 13 minutes remaining. Niklas Stark dragged Mario Gomez to ground in the box and, while Gomez appealed for a penalty, inadvertently lobbed the ball over the on-rushing Rune Jarstein.
Augsburg 1–0 Hamburg
Augsburg are up to seventh in the Bundesliga after a relatively comfortable 1-0 win over struggling Hamburg.
Ex-Hamburger Michael Gregoritsch almost gave his new side the lead after half-an-hour but 23-year-old goalkeeper Julian Pollersbeck was on hand to save on his debut.
Augsburg did take the lead just before halftime when South Korean international Ja-cheol Koo arrived late in the penalty area to power an impressive header past Pollersbeck from 12 yards.
Leverkusen 1-3 Bayern Munich
(Volland 70' — Martinez 32', Ribery 59', Rodriguez 90+1')
Bayern Munich picked up in 2018 where they left off in 2017. Javi Martinez gave the visitors lead at halftime by tapping in a deflected ball from a corner. Franck Ribery, who missed six league games in the first half of the season, scored his first Bundesliga goal after knocking down a long pass from James Rodriguez. Kevin Volland kept Leverkusen in the game after firing a shot that deflected off both Martinez and Niklas Süle, but Rodriguez sealed the game with a pin-point free kick at the top of the penalty area.