Bayern march on as Schalke defeat Dortmund
Bayern made it 10 victories out of 10 in all competitions this year after twice coming from behind to beat fourth-from-bottom Fortuna.
Defender Jerome Boateng nodded the winner in the 86th minute, his first goal since joining the club in 2011.
With nine matches to play, Bayern need only three more wins to take the title.
First-half goals from Julian Draxler and Klaas-Jan Huntelaar secured Schalke's victory over champions Dortmund and elsewhere there were spectacular goals and a double dose of controversy.
VfL Wolfsburg produced the day's best goals as they came from behind to win 5-2 at Freiburg.
Vieirinha rifled in a stunning 30-metre volley to put the visitors 2-1 ahead but was quickly upstaged by team-mate Ivica Olic who met a low cross first time to score with an incredible bicycle kick, the first of two goals for the Croat.
The first storm blew up after Mainz 05 beat third-placed Bayer Leverkusen 1-0 with a penalty awarded for handball against Manuel Friedrich and converted by Andreas Ivanschitz.
Even Mainz coach Thomas Tuchel was surprised by the 61st-minute decision.
"The penalty should not have been given," he told reporters. "But I have to also say that I no longer know when a penalty should be given and when a penalty shouldn't be given."
There was also confusion early in Borussia Monchengladbach's 1-1 draw at home to Werder Bremen when the referee awarded a goal to Patrick Hermann for the hosts and then disallowed it for offside after consulting his assistant.
Table-propping Greuther Furth remained without a home win as they crashed 3-0 against Hoffenheim in a meeting of the bottom two.
Bayern have 66 points from 25 games while second-placed Dortmund have 46, one more than Leverkusen.
Schalke, who won the season's first Ruhr derby by the same score, climbed into the Champions League play-off berth in fourth spot on 39 points. Mainz, two points behind in sixth, also stayed in the hunt.
Dortmund's usually effervescent coach Jurgen Klopp was left almost speechless by the defeat against Schalke.
"We lost 2-1, what can I say?" he told Sky Sports. "Everyone in our team understands what a derby means."
Asked what it meant to lose two derbies in a season, he replied: "I have no words for that," and walked off.
Draxler swept home Atsuto Uchida's low cross from the right in the 12th minute as Schalke tore into their arch rivals.
Dutchman Huntelaar, left unmarked at the far post, then headed in another centre from the Japanese midfielder after 35 minutes.
The course of the game changed after Jefferson Farfan wasted an excellent chance to put Schalke further ahead early in the second half, shooting weakly at keeper Roman Weidenfeller.
Robert Lewandowski took centre stage in the Dortmund fightback when he had one goal disallowed and then produced a clinical finish to give his team hope just before the hour.
The Pole had a shot blocked by team-mate Mario Gotze and wasted a golden chance to equalise when he had a shot stopped by keeper Timo Hildebrand with two minutes left.
Mathis Bolly stunned the 71,000 crowd in the Allianz Arena when he side-footed the ball in from close range for visitors Fortuna against the run of play in the 16th minute.
Dominant Bayern missed several good chances before Thomas Muller turned in Philipp Lahm's pass on the stroke of half-time.
Bayern stayed on top after the break but Fortuna regained the lead via the direct route when a long punt out of defence was headed into the path of Andreas Lambertz who broke clear and finished coolly in the 71st minute.
Franck Ribery levelled two minutes later and Boateng's header ended Fortuna's brave resistance.