Borussia Dortmund rallied to beat Bayern Munich 3-2 in their DFB Pokal semifinal at the Allianz Arena on Wednesday night, setting up a cup final against Eintracht Frankfurt.
Pierre-Emerick Aubameyang nearly had the visitors off to a dream start in the fourth minute after a mixup in the Bayern defence, but the Gabon international's sliding effort went wide of the target.
Bayern had their best chance of the opening minutes when Franck Ribery got free in the Dortmund area, cutting back against his defender but firing right at Roman Burki in goal.
Dortmund were first on the board through Marco Reus in the 19th minute. A poor Javi Martinez pass back to Sven Ulreich was intercepted by Raphael Guerreiro, who struck the ball with his second touch only to see it come back off the post for teammate Reus to tap home for a 1-0 lead.
Martinez would make amends less than 10 minutes later, powering a header past Burki from a Xabi Alonso corner kick to put the teams back on level terms.
The wide-open affair was well and truly on for the rest of the first half with Bayern getting the better of the chances, Alonso heading off the crossbar from a corner kick before Vidal blazed over the crossbar from a rebound.
And the hosts' pressure told soon after, with Ribery settling a long ball on the left flank, then squaring to Mats Hummels who slotted home with his first touch to give Bayern a deserved lead at half-time.
Dortmund were fortunate not to concede after a poor giveaway from Burki left Bayern in on goal with Robert Lewandowski and Arjen Robben, but the Netherlands international hit the post with his close-range effort and the score remained 2-1.
Against the run of play, Thomas Tuchel's team levelled things in the 69th minute, when Ousmane Dembele found Aubameyang with a deft chip at the back post and the Dortmund striker headed home to make it 2-2.
And just five minutes later, Dortmund would take the lead, Dembele collecting a loose ball on the right side of the Bayern area, cutting to his left and curling home to put the visitors up 3-2.
The German champions would not be deterred though and threw numbers forward, Robben cutting to his trusted left foot and curling a shot just outside of Burki's post.
Dortmund will face Eintracht Frankfurt in the final, after they beat Borussia Monchengladbach 7-6 on penalties on Tuesday.