Bayern Munich's seven-match winning run in the Bundesliga came to an end as they slumped to a 3-1 defeat to Bayer Leverkusen at the BayArena.
Leverkusen came from behind after a Leon Goretzka goal had put Bayern ahead just before half-time.
Leon Bailey fired in the equaliser with his first goal since September, drawing the teams level with a stunning free-kick at the start of the second half.
Leverkusen took the lead through Kevin Volland, who slotted home when one-on-one with Sven Ulreich, before Lucas Alario wrapped up all three points for the home side after his late goal was ruled onside by VAR.
Bayern's defeat means they failed to close the gap at the top of the Bundesliga, with Borussia Dortmund's draw against Eintracht Frankfurt stretching their lead to seven points.
Leverkusen started brightly, attacking from the start and had an early handball shout against Mats Hummels turned down after he had blocked a shot from Volland.
The home side survived a goalmouth scramble, as Kingsley Coman found Thomas Muller who tried to create some space in the box but was unable to get a clear shot away after some strong defending.
Coman also had a chance to put Bayern ahead, with goalkeeper Lukas Hradecky scrambling his curling shot away for a corner.
The visitors did manage to make the breakthrough just before the interval though, with Goretzka netting his fourth goal in three matches. Coman's initial shot was parried but the ball fell to Muller and he expertly crossed for Goretzka to head home.
Bayern almost doubled their lead in first-half stoppage time but Coman's pass to Robert Lewandowski, who slipped the ball over the goalkeeper and into the net, was ruled offside by the Linesman and VAR.
Bayern's lead lasted just eight minutes into the second half before an expertly-struck free-kick from Bailey found the far top corner.
Volland then put Leverkusen ahead 10 minutes later after he was found in the centre of the box and slotted past Ulreich for his eighth Bundesliga goal of the season.
Alario wrapped up the three points for the home side in the 87th minute, coming onto a pass to slot home, with VAR ruling the goal onside after the assistant referee had raised his flag.
ga('create', 'UA-72310761-1', 'auto', {'name': 'pacontentapi'});
ga('pacontentapi.set', 'referrer', location.origin);
ga('pacontentapi.set', 'dimension1', 'By Press Association Sport staff');
ga('pacontentapi.set', 'dimension2', 'cc2e892d-748a-408f-bd23-2491a5bfa31c');
ga('pacontentapi.set', 'dimension3', 'paservice:sport,paservice:sport:football,paservice:sport:match-reports,paservice:sport:uk,paservice:sport:world');
ga('pacontentapi.set', 'dimension6', 'story');
ga('pacontentapi.set', 'dimension7', 'composite');
ga('pacontentapi.set', 'dimension8', null);
ga('pacontentapi.set', 'dimension9', 'sport:football');
ga('pacontentapi.send', 'pageview', { 'location': location.href, 'page': (location.pathname + location.search + location.hash), 'title': 'Bayer Leverkusen fight back to end Bayern Munich\u2019s winning run'});