Borussia Dortmund were beaten 1-0 by Borussia Monchengladbach in the Bundesliga on Sunday with Haris Tabakovic scoring in 88th minute.
The loss was Dortmund's fifth of the season and a third from their last four games as their season climax goes from sour to bitter.
Despite failing to win their last five league games in a row, the Foals gave the BVB a tough run for their money and nearly grabbed a lead in the 29th minute.
Nico Elvedi had the ball into the back of the net but it was ruled out following a VAR review as the sides headed into the break level at 0-0.
Dortmund returned looking revitalized and began controling the ball, but their inability to convert possession into clear-cut chances was frustrating to watch.
Gladbach remained the more likely side to break the deadlock given their swift passing and dangerous inroads, all of which paid off in the closing stages.
Tabakovic coolly slotted one home with only two minutes of normal time remaining as Borussia Park erupted into celebrations.
With that, they also sealed Bundesliga survival. Dortmund remained in second with 67 points, five ahead of RB Leipzig who also lost on the day.
Here are the player ratings for Borussia Dortmund:
Gregor Kobel - 7: A heroics performance with three vital saves but was ultimately beaten in the closing stages
Luca Reggiani - 7: Got another start and was a reliable figure in defense, making crucial recoveries and vital passes
Waldemar Anton - 7: Fought tooth and nail in defense to keep out Gladbach for the longest time
Nico Schlotterbeck - 7.5: A dominant display from the German once again; he attempted 14 ground duels, winning seven while also making three interceptions and clearances each
Julian Ryerson - 7: Dortmund's assist king had a usual day at office, making four crosses and one key pass but alas, none of them came to fruition
Marcel Sabitzer - 6.5: Struggled to dominate the midfield
Jobe Bellingham - 7: Kept biting at the heels of Gladbach players for the ball and came up trumps too, winning five of his six duels; completed 94% of passes too
Maximilian Beier - 6: An unusually poor game for the otherwise energetic and lethal player; his attacking flair was sorely missing on the night
Julian Brandt - 6.5: Got beaten on the ball a few times and mustered just one shot in the match which flew off target too
Samuele Inacio - 6.5: Ruffled a few feathers with his electric, mazy runs and the ability to win back possession in key areas
Serhou Guirassy - 5: A toothless display from the Dortmund talisman, failing to muster a single shot on target
Substitutes
Daniel Svensson - 6
Salih Ozcan - 6
Fabio Silva - 6.5
Yan Couto - N/A
Carney Chukwuemeka - N/A
