Ousmane Dembele's brilliant second-half strike took Borussia Dortmund through to the German Cup final as they came from behind to beat Bayern Munich.
Marco Reus had put Dortmund ahead, before Javier Martinez's towering header and Mats Hummels' tidy finish gave Bayern a 2-1 lead at the break.
Pierre-Emerick Aubameyang brought Dortmund level, before Dembele curled into the top corner with 15 to play.
Thomas Tuchel's side go on to play Eintracht Frankfurt in the final.
Frankfurt, who are ninth in the Bundesliga, beat Borussia Monchengladbach on penalties in the other semi-final on Tuesday.
The final will be held at Berlin's Olympiastadion on 27 May.
Dortmund will be competing in a record fourth successive final, having lost twice to Bayern and also to Wolfsburg in the past three seasons.
They have not claimed a major trophy since the 2011-12 season, when they won the double under Jurgen Klopp.
Bayern, who won the domestic treble last season, must now focus on wrapping up a fifth straight Bundesliga after also being eliminated from the Champions League last week by Real Madrid.
Carlo Ancelotti's men are nine points clear with four games left, but have now gone five games without a win in all competitions.
Line-ups
Bayern Munich
Formation 4-2-3-1
- 26Ulreich
- 21Lahm
- 8Martínez Aguinaga
- 5HummelsSubstituted forBoatengat 62'minutes
- 27Alaba
- 14AlonsoBooked at 78minsSubstituted forMüllerat 79'minutes
- 23Vidal
- 10RobbenBooked at 31mins
- 6Thiago Alcántara
- 7RibérySubstituted forDouglas Costaat 86'minutes
- 9Lewandowski
Substitutes
- 11Douglas Costa
- 13Ferreira de Souza
- 17Boateng
- 18Bernat
- 22Starke
- 25Müller
- 32Kimmich
B Dortmund
Formation 4-4-2
- 38BürkiBooked at 90mins
- 26PiszczekSubstituted forPulisicat 80'minutes
- 25Papastathopoulos
- 6Bender
- 29Schmelzer
- 7DembéléBooked at 25mins
- 27CastroSubstituted forDurmat 45'minutes
- 33WeiglBooked at 14mins
- 13Jose Guerreiro
- 17Aubameyang
- 11ReusSubstituted forGinterat 90+1'minutes
Substitutes
- 1Weidenfeller
- 14Isak
- 22Pulisic
- 23Kagawa
- 24Merino
- 28Ginter
- 37Durm
- Referee:
- Manuel Gräfe
- Attendance:
- 75,000
Match Stats
- Possession
- Home69%
- Away31%
- Shots
- Home24
- Away11
- Shots on Target
- Home9
- Away6
- Corners
- Home7
- Away2
- Fouls
- Home8
- Away12