Substitute Paco Alcacer scored again for Dortmund — with an injury-time winner — as they moved seven points clear of Borussia Moenchengladbach, which visits Leipzig on Sunday.

Serge Gnabry’s two goals were enough for Bayern to end its three-game run without a win. The six-time defending champion was holding on at the end, though, despite Bremen’s Niklas Moisander being sent off in second-half injury time.

Bayern remained nine points behind Dortmund but climbed to third, a point ahead of Eintracht Frankfurt, which hosts Wolfsburg on Sunday.

BAYERN FINALLY WIN

Gnabry broke the deadlock in the 20th minute. Joshua Kimmich sent the ball in for Gnabry to volley straight at Jiri Pavlenka, and the Germany forward scored at the second attempt from the rebound.

Bayern was shocked by Yuya Osako’s equalizer in the 33rd. Max Kruse crossed and Osako beat Jerome Boateng to the ball to head past goalkeeper Manuel Neuer. It ensured the Bayern captain conceded for the ninth straight game in the league.

Franck Ribery went off injured, but Kingsley Coman went on to make his return from a recurrence of the left-foot injury that kept him out of France’s World Cup win.

Thomas Mueller set up Gnabry’s second in the 50th, an injection of pace taking him past a defender to cross for Gnabry to score with a fortunate bounce off his shin.

DORTMUND MARCHES ON

Dortmund’s win was an edgy affair after the team failed to build on Marco Reus’ penalty five minutes before the break. The spot kick was awarded after a bad challenge on Jadon Sancho from Freiburg defender Dominique Heintz, who stood on the England forward’s right foot.

Jerome Gondorf almost equalized straight away with a free kick that crashed off the underside of the bar and came back down in front of the line. Dortmund’s Roman Buerki would have been powerless to stop it.

Lukasz Piszczek struck the underside of the crossbar late for Dortmund, then Alcacer finally sealed the win after some good work from Sancho and Piszczek to set him up.

It was the Spanish striker’s 10th goal in his eighth league appearance.

Stuttgart climbed off the bottom after edging Augsburg 1-0, and Hertha Berlin moved to seventh after topping Hannover 2-0.

Hoffenheim drew with Schalke 1-1, both sides scoring penalties, while Schalke had another penalty decision in its favor ruled out through VAR.

___

This story has been corrected to say Paco Alcacer has 10 league goals, not nine.