Borussia Dortmund clinched a place in the Champions League for the 10th time in 11 seasons by beating Mainz on the penultimate day of the league season.
The achievement could be a boost to their hopes of keeping star players like Erling Braut Haaland and Jadon Sancho in Germany next season.
Dortmund were seven points off the top four in early April but have won their six Bundesliga games since.
Raphael Guerreiro, Marco Reus and Julian Brandt scored in a 3-1 win.
Robin Quaison scored a last-minute consolation penalty for hosts Mainz.
It caps a great week for Dortmund, who beat RB Leipzig 4-1 to win the German Cup on Thursday.
“Not many people believed in us,” Dortmund captain Reus said.
“The team deserves an incredible compliment. We have shown a really strong mentality in the last few weeks.
“When we have to, we are capable of great things.”
- 4St. Juste
- 35Barreiro Martins
- 22da CostaSubstituted forFernandesat 45′minutes
- 6LatzaSubstituted forKohrat 84′minutes
- 5BoëtiusSubstituted forStögerat 72′minutes
- 9GlatzelSubstituted forQuaisonat 45′minutes
- 21OnisiwoSubstituted forSzalaiat 72′minutes
- 13GuerreiroSubstituted forSchulzat 84′minutes
- 22BellinghamSubstituted forDelaneyat 87′minutes
- 32ReynaSubstituted forBrandtat 76′minutes
- 11ReusSubstituted forT Hazardat 84′minutes
- 7SanchoSubstituted forCarvalhoat 84′minutes
- 10T Hazard
Match ends, 1. FSV Mainz 05 1, Borussia Dortmund 3.
Second Half ends, 1. FSV Mainz 05 1, Borussia Dortmund 3.
Goal! 1. FSV Mainz 05 1, Borussia Dortmund 3. Robin Quaison (1. FSV Mainz 05) converts the penalty with a right footed shot to the bottom left corner.
VAR Decision: Penalty 1. FSV Mainz 05.
Penalty conceded by Thorgan Hazard (Borussia Dortmund) with a hand ball in the penalty area.
Attempt blocked. Alexander Hack (1. FSV Mainz 05) header from the centre of the box is blocked. Assisted by Kevin Stöger with a cross.
Corner, 1. FSV Mainz 05. Conceded by Manuel Akanji.
Substitution, Borussia Dortmund. Thomas Delaney replaces Jude Bellingham.
Jude Bellingham (Borussia Dortmund) wins a free kick in the defensive half.
Foul by Kevin Stöger (1. FSV Mainz 05).
Substitution, 1. FSV Mainz 05. Dominik Kohr replaces Danny Latza.
Substitution, Borussia Dortmund. Thorgan Hazard replaces Marco Reus.
Substitution, Borussia Dortmund. Reinier replaces Jadon Sancho.
Substitution, Borussia Dortmund. Nico Schulz replaces Raphael Guerreiro.
Attempt saved. Ádám Szalai (1. FSV Mainz 05) right footed shot from the left side of the box is saved in the centre of the goal.
Goal! 1. FSV Mainz 05 0, Borussia Dortmund 3. Julian Brandt (Borussia Dortmund) left footed shot from the left side of the six yard box to the bottom left corner. Assisted by Erling Haaland.
Attempt blocked. Leandro Barreiro Martins (1. FSV Mainz 05) right footed shot from the centre of the box is blocked. Assisted by Edimilson Fernandes with a cross.
Substitution, Borussia Dortmund. Julian Brandt replaces Giovanni Reyna.
Mahmoud Dahoud (Borussia Dortmund) wins a free kick in the defensive half.
Foul by Leandro Barreiro Martins (1. FSV Mainz 05).