Ante Rebic scored twice as Eintracht Frankfurt shocked Bayern Munich to win the German Cup final.
The Croatia striker pounced on James Rodriguez's error to give Eintracht the lead, but Robert Lewandowski equalised.
Rebic clipped in his second before Bayern were denied a penalty in a disputed VAR call late on as Kevin-Prince Boateng caught Javi Martinez.
Referee Felix Zwayer rewatched the incident and gave a corner - and from it, Mihat Gacinovic broke to score.
That third Eintracht goal sparked a pitch invasion by emotional fans celebrating their first German Cup triumph since 1988.
It was not clear initially if Zwayer had blown the final whistle, although the game did not restart after the goal.
Bayern started the match as favourites, having finished 35 points above Eintracht in this season's league standings, and Lewandowski hit the underside of the bar with an early free-kick.
But it was Rebic who scored first, dispossessing Rodriguez and exchanging passes with Boateng before racing clear to slot a low shot past goalkeeper Sven Ulreich.
Lewandowski's equaliser - a record-equalling fourth German Cup final goal - came eight minutes after half-time when he met Joshua Kimmich's right-wing cut-back first time to drive in via a deflection off Omar Mascarell.
Bayern pressed for a winner as the game entered its final 15 minutes. Lewandowski turned one chance wide and Mats Hummels looped a header against the crossbar from a corner.
But with eight minutes to go, Rebic burst between Hummels and Niklas Sule to reach Boateng's angled through pass and nick the ball beyond the advancing Ulreich - who has been deputising for the injured Manuel Neuer since September.
There was further drama three minutes into stoppage time following Boateng's challenge on Martinez.
Television replays showed clear contact, yet Zwayer, having referred to a pitchside monitor, refused to change his initial decision to give a corner.
Goalkeeper Ulreich, who had stayed forward from a previous set-piece, was then left helpless as Eintracht cleared, and substitute Gacinovic raced more than 70 yards to run the ball into the unguarded Bayern goal.
- 8Martínez Aguinaga
- 6Thiago AlcántaraSubstituted forTolissoat 64'minutes
- 25MüllerSubstituted forComanat 70'minutesBooked at 86mins
- 9LewandowskiBooked at 37mins
- 7RibérySubstituted forWagnerat 87'minutes
- 13Ferreira de Souza
- 24da Costa
- 13SalcedoBooked at 7mins
- 15WillemsBooked at 45mins
- 20HasebeBooked at 45mins
- 6de GuzmánSubstituted forRussat 74'minutes
- 27WolfSubstituted forGacinovicat 60'minutes
- 4RebicBooked at 84minsSubstituted forHallerat 89'minutes
- Felix Zwayer
- Shots on Target