Bayer Leverkusen beat Bayern Munich 2-0 as they bid to finish second in the Bundesliga, while Schalke ended their six-game winless run.
Bayern Munich warmed up for their UEFA Champions League semi-final with Barcelona by slumping to an underwhelming 2-0 defeat at Bayer Leverkusen, while Schalke beat Stuttgart 3-2 to end their winless run.
Although coach Pep Guardiola will likely make a few changes ahead of a first return to his former club for Wednesday's semi-final first leg, injury-ravaged Bayern were far from their best and appeared distracted.
Still recovering from a penalty shootout defeat to Borussia Dortmund in the DFB-Pokal semi-final on Tuesday, Guardiola's men faded away after an encouraging start.
Bayern held firm throughout the first half, but Hakan Calhanoglu broke the deadlock in trademark fashion early in the second period, bending home a fine free-kick.
Mario Gotze should have drawn Bayern level when through one-on-one with Bernd Leno in the 76th minute, but Leverkusen ultimately made sure of the win through Julian Brandt late on, with Barcelona - who beat Cordoba 8-0 on Saturday - next up for Guardiola's wounded team.
Schalke halted a run of six league matches without a win by beating rock-bottom Stuttgart 3-2 at the Veltins Arena, Klaas-Jan Huntelaar scoring twice to end his 13-match Bundesliga goal drought.
Huntelaar's 78th-minute equaliser had seemingly secured a point for Roberto Di Matteo's men, before a Florian Klein own-goal a minute from time secured a dramatic victory for the hosts.
Wolfsburg surrendered a two-goal lead at home to struggling Hannover as their grip on second place loosened a little more, drawing 2-2 despite leading at the break thanks efforts from Bas Dost and Ivan Persic.
Jimmy Briand and Salif Sane hit back for Hannover after the interval, though they dropped into the bottom three thanks to Paderborn's 2-1 win at Freiburg - Lukas Rupp scoring twice in the final 20 minutes to secure a potentially vital triumph.
Borussia Dortmund picked up a 1-1 draw at Hoffenheim, while Werder Bremen gave their top-six chances a boost with a 1-0 victory over Eintracht Frankfurt.
The day's other match saw Cologne hold Augsburg to a 0-0 draw, with the latter's position in the Europa League spots coming under threat from Bremen.