Schalke held Borussia Dortmund to a hard-fought 2-2 draw in the Ruhr derby, doing Bayern Munich a favor in its quest for a fourth successive Bundesliga title. (Bayern Munich Close in On Fourth Straight Bundesliga Title)
Klaas Jan Huntelaar's penalty salvaged the draw for Schalke on Sunday and left Dortmund seven points behind Bayern with five games to play.
"It's a very realistic scenario that Bayern will be champions. The great big chase - I don't know if it still exists," Dortmund coach Thomas Tuchel said.
Bayer Leverkusen won the late match at Cologne 2-0 with two goals in five minutes to climb to fourth, a point behind Hertha Berlin and three above Borussia Moenchengladbach, Mainz and Schalke, all on 45 points.
Karim Bellarabi set up Julian Brandt to score in the 39th minute and then Javier "Chicharito" Hernandez before the break.
Cologne pushed hard in the second half only to be frustrated by Leverkusen goalkeeper Bernd Leno.
Hakan Calhanoglu might have made it 3-0 in injury time when his free kick struck the post and went out off the head of Cologne goalkeeper Timo Horn.
Tempers frayed at the end of the match due to a bad challenge by Leonardo Bittencourt on Leverkusen's Admir Mehmedi. Bittencourt was sent off for a straight red, and Leverkusen defender Wendell also left the match with his second yellow card for striking out in the ensuing melee.
"In the end it was stupid and unnecessary from both of them. It was actually a fair game," Leverkusen sporting director Rudi Voeller said.
Earlier, Tuchel rested players with an eye on Thursday's Europa League quarterfinal in Liverpool. The first leg ended 1-1.
Top-scorers Pierre-Emerick Aubameyang, Henrikh Mkhitaryan and Marco Reus started on the bench as did Lukasz Piszczek, Gonzalo Castro and Ilkay Gundogan.
American 17-year-old Christian Pulisic had the first big chance for Dortmund in the 23rd when he shot wide while Leroy Sane smashed Schalke's first opportunity off the right post 10 minutes later.
The game sparked into life after the break when Mkhitaryan came on for Mats Hummels.
"His introduction gave us a real push," Dortmund sporting director Michael Zorc said.
Shinji Kagawa broke the deadlock for Dortmund with a wonderful chip in the 49th minute. The Japan star played the ball to Moritz Leitner, who returned it with his heel, and Kagawa scooped it over the goalkeeper without breaking his stride.
Sane was well-placed to blast home the rebound after Roman Buerki cut out Junior Caicara's cross to bring Schalke level two minutes later.
Matthias Ginter restored the visitors' lead five minutes after that with a header after Schalke's Roman Neustaedter missed Mkhitaryan's deflected free kick.
"I thought Neustaedter would reach it. I just speculated in case it came to me and luckily it went in," said Ginter, who was elbowed in the face by Younes Belhanda with the Schalke player getting a yellow card.
Huntelaar equalized in the 66th after Sokratis Papastathopoulos dragged him down.
Both sides pushed for the winner, with chances falling to Kagawa, Mkhitaryan and Aubameyang before Max Meyer missed Schalke's best chance in injury time.
Dortmund remained unbeaten in 2016 but its lingering title hopes now seem over.
"The season isn't over but it's clear the games are getting fewer and Bayern keep winning," Zorc said.