Bayer Leverkusen suffered their first home Bundesliga defeat since March as they went down to a very hard-working Eintracht Frankfurt side.
The first half was dominated by the visitors, but despite hitting the post they could not find a way past Bernd Leno.
Leverkusen came out strongly in the second half but it was Marco Russ who headed in a crucial winner, with the visitors even able to miss a late penalty from Joselu.
Read how the action unfolded below.
Hello again folks! Thanks for joining me for the final Bundesliga game in the penultimate weekend before the winter break. Here I have Bayer vs. Frankfurt for you.
We have just five minutes to go until kickoff, so there is just time to bring the two teams over to you.
BAYER XI: Leno; Donati, Wollscheid, Toprak, Can; Rolfes, Bender, Castro; Kruse, Kiessling, Son
FRANKFURT XI: Trapp; Jung, Zambrano, Anderson, Djakpa; Schwegler, Russ; Schrock, Flum, Rosenthal; Joselu
KICKOFF: The visitors in their all white kit, get us started for this one. All signs point to a home win as Leverkusen have not been beaten here since March.
Neither side is in control at the moment and while Leverkusen have probably seen more of the ball the visitors are pressing well and are not making it comfortable.
Djakpa, who is always looking to get up and down that left flank, has his first crossing opportunity. He is found by Schwegler, but can only direct his low ball at Leno, who clings on.
First foray forward from the attacking midfielder-turned left-back Emre Can. He tries to take on Jung, but can only run the ball out for a goal kick. Armin Veh will be delighted with his side's start here. They are currently enjoying a good spell of possession.
BOOKING: Kiessling catches Zambrano in the face as he swing his arms when losing out to the Frankfurt man. That's fair enough - he was caught out and stopped the counter at the source.
OFF THE POST! That's a really good opening for the visitors! It's really unfortunate for Rosenthal who powers a header goalwards but sees it come crashing back off the post.
Decent attempt on goal from Djakpa there, who curls goalwards from the edge of the box but it's a comfortable stop from Leno. There's no doubt as to which side is playing better at the moment.
Still Bayer are struggling to get into the game and have yet to have a genuine chance. Kruse is just unable to beat the offside trap and another patch of possession is wasted.
Jung drives forward from right-back and after his first effort is deflected he slashes a left-footed effort over the bar. Still Frankfurt are creating all the danger.
Half-way through the half and Leverkusen really have to improve. They are fortunate to be level, really. I can certainly see them scoring and knocking the wind out of their visitors, however.
Leverkusen are now seeing more of the ball and are patiently passing it between defence and midfield. However, a hopeful pass into the left channel from Rolfes goes out of play. They have been so wasteful on the ball so far.
Good play from Castro, who picks up the ball and drives through the middle. He looks to his right but unfortunately it's Bender, who isn't the best crosser and the German cannot beat the first man with his delivery. Trapp still yet to be tested.
Joselu is leading the line very well for Frankfurt so far. He is making sure that he is a focal point for the attacks, with Schrock and Flum finding plenty of space behind him.
Frankfurt are still pressing really well whenever Leverkusen are getting near their half. Joselu is leading by example in attack, but throughout the men in white are not allowing the side in second any space.
Rosenthal gets back to help out in defence but ends up clattering Kiessling. Suddenly Bayer have a dangerous free kick just outside the box.
Really good defending from Zambrano. Kiessling uses his height to meet a deep cross and gets a decent header goalwards, but Zambrano hacks it clear as it was looking to sneak into the corner.
Frankfurt are finishing the half well with some possession football, but it's Bayer's turn to defend rigidly. They break thorough Bender and Kruse's cross from the left is aimed at Kiessling but gathered by Trapp.
HALF TIME: Bayer Leverkusen 0-0 Frankfurt
So the first half comes to an end and really Bayer are fortunate not to be behind. Frankfurt have committed themselves really well all over the pitch and but for the frame of the goal would be holding a deserved lead at half time.
Frankfurt certainly aren't playing like a team who have won just twice all season in the league. However, their wins have been away from home and you can tell - they have made it very hard for the hosts. They will need to keep it up for another half, of course.
The big chance was for Rosenthal and really he probably should have scored. A free kick was cleared before Jung crossed deep from the right in the second phase. Rosenthal, arriving in the box, headed it down low and back off the post after it bounced up in the air. It was the closest either team has come.
Hyypia and Veh might well leave things to see how they develop for another 15 minutes before looking to their bench. However, if either coach is likely to make a chance at the half it will be Hyypia.
We're back underway for the second half here. Can immediately troubled by Jung as the out of position left-back misjudged a ball forward.
Bayer break at pace and Kruse is set away down the left. His shot from the edge of the box is tipped over by Trapp, which I think is his first save. Bayer have started this half much better than they did the first.
BOOKING: Zambrano goes into the book for a foul on Son as he nipped the ball past him. A little harsh that yellow I think.
It's starting to get a bit desperate for Frankfurt at the back. Kruse is away down the right and he tries to turn it into the path of Kiessling but Zambrano puts it behind instead. He has been brilliant, the centre-back.
Wasteful there from Kiessling, but equally he had a lack of options. He was found by Toprak and after drifting across the edge of the box with the ball his pass went to no-one. Anderson then defends well against Kruse, who could have shot early but delayed to allow the centre-back in for the block.
SAVE! Trapp is tested by Son now, but the Korean's effort was too close to him really. Kiessling made a run to take Anderson away before Son's effort was parried clear by Trapp. Leverkusen ramping it up.
Veh might consider going to his bench soon in order to get his team back into the game. Frankfurt have a free kick as Castro is penalised for handball, but it was off his shoulder.
GOAL! Leverkusen 0-1 Frankfurt (Marco Russ)
That is as commanding a header as you'll see. He's up for the initial free kick, which is instead put wide to Jung, who delivers a brilliant cross and the big man meets it for what is a huge goal for his side.
SAVE! That's a really good save from Trapp. Leverkusen get forward and the ball is played across the edge of the box to Donati, who shoots low but the visiting keeper gets down to push it wide of his near post.
Leverkusen are still seeing most of the ball, but the chances have very much dried up. Suddenly passes aren't finding their target, as Can tries an ambitious volley but sees his effort bobble wide.
LEVERKUSEN SUBS: Kruse and Bender make way, with Eren Derdiyok and Jens Hegeler on for them. That's some height up front and more creativity in the middle.
BOOKING: Joselu is brought down in a dangerous area, which Hegeler going into the book not long after coming on. Can they make the most of this?
CHANCE! Toprak raced forward to join a counter attack and when Kiessling crossed from the left it was a bit powerful for the centre-back to direct his header on target and it flies wide.
FRANKFURT SUB: On comes a tricky attacking midfielder for the visitors, with the goalscorer Russ coming off. That's a bold move from Veh, who does not want to just sit on this lead.
Rolfes strikes a snap-shot towards goal following a corner, but doesn't get enough on it and Trapp is down well to gather. Not that long left now for a Leverkusen equaliser. At the moment it doesn't look likely.
BOOKING: Bit of a nasty foul there for Flum, who went in quite high on Son. He was running the risk of a red, but I think the yellow is fair.
SAVE! Another stop from Trapp and he is still not beaten. Some good passing set Kiessling away in the box, but his low drive was pushed away before Jung got across to make a brilliant block from the rebound.
As Toprak hooks the ball over the bar from an angle trying to catch Trapp off his line it begins to look increasingly likely that Bayern will be well ahead in the title race by the winter break. Frankfurt are already taking it into the corner as Schrock gives away a goal kick.
BAYER SUB: Levin Oztunali is on for Donati here as Hyypia plays his last card. The coach is not looking happy at the moment. Schwegler then goes into the box for chopping down the new man right on the corner of the box.
BOOKING: It's getting a little testy here. Rolfes goes into the book for following through over the top on Djakpa. That looks harsh to me - Rolfes got the ball and it was Djakpa who had his studs up.
FRANKFURT SUB: Marvin Bakalorz comes on for Schrock late on and that will waste a little more time for what would be a very surprising win.
CHANCE! Almost 2-0 and game over! Joselu controls an angled long ball absolutely brilliantly. He then cuts inside Hegeler, but the Bayer man reacts just in time to block the effort. There will be three minutes left to play. Still enough time, but the hosts need the ball in the other half.
Just one left now. Veh is calm and collected, while Hyypia has the look on his face that shows he's resigned to defeat here.
PENALTY TO FRANKFURT!
SAVED!
FULL TIME: Bayer Leverkusen 0-1 Eintracht Frankfurt
That is an absolutely stunning save, but it will not matter. Leno tips it on to the angle of post and bar before the whistle is blown. This is a shock result and Bayer's first defeat since March. Bayern now lead by seven - is the race over?
Thanks for joining me for this one folks. It was a really good game and Frankfurt managed to hang on for a vital win, their third away from home. That's all from me here, so until next weekend that's the Bundesliga done! Goodbye.