Bundesliga leaders Bayern Munich twice came from behind before finally getting the better of Fortuna Dusseldorf 3-2 at the Allianz Arena.
Mathis Bolly put the visitors in front in the 16th minute with Thomas Muller replying on the stroke of half-time.
Andreas Lambertz gave the visitors the lead for the second time in the 71st minute, but Franck Ribery equalised almost immediately afterwards before Jerome Boateng's first goal for Bayern earned them victory late on to take them 20 points clear at the top of the Bundesliga.
Schalke completed a league double over second-placed Borussia Dortmund thanks to a 2-1 win at the Arena AufSchalke, a result which lifts Jens Keller's side up to fourth in the table.
Julian Draxler got the home team on their way to victory in the 11th minute with Klaas Jan Huntelaar doubling their advantage 10 minutes before the break.
The defending champions tried to respond in the second half, but only had a Robert Lewandowski consolation goal to show for their efforts as the gap between them and Bayern Munich at the top of the table grew even further.
Bayer Leverkusen passed up the chance to move above Dortmund as they lost 1-0 at Mainz.
Andreas Ivanschitz netted the game's only goal from the penalty spot in the 61st minute to lift the hosts to sixth spot.
The win ended a run of four straight draws for Mainz, who have lost just once in the last nine matches, while Leverkusen saw their four-match unbeaten streak ended and remained a point adrift of Dortmund.
Wolfsburg pulled away from the relegation zone with their biggest away win of the season as they thrashed Freiburg 5-2.
Max Kruse put Freiburg ahead in the second minute, but an own goal from Cedric Makiadi and fine strikes from Vieirinha and Ivica Olic turned the game on its head within 20 minutes.
Olic's second gave Dieter Hecking's side an even more comfortable lead after the break before Johannes Flum scored a second for the home team, who dropped out of the top six as a result of their loss.
Diego added a fifth Wolfsburg goal with the last kick of the game as they opened a nine-point cushion over the relegation zone.
Hoffenheim picked up a crucial victory in the fight against relegation, winning 3-0 at bottom club Greuther Furth.
Roberto Firmino gave Hoffenheim the lead in the 10th minute before Joselu made it 2-0 after 16 minutes and Tobias Weis wrapped up the win five minutes into the second half.
Hoffenheim, who came into game as the league's worst away team, jumped to 19 points for 17th place - just two points behind the relegation play-off spot.
Furth have collected just four points at home, scoring four goals in the process, and have just 14 points.
Borussia Monchengladbach and Werder Bremen drew 1-1 in the evening game - a result which does little to improve either side's position.
Peniel Mlapa gave Monchengladbach the lead in the 72nd minute but Aleksandar Ignjovski equalised for the visitors just five minutes later.
The draw left Gladbach in eighth place and Bremen, who at least snapped a three-game losing streak - in 13th spot and eight points above the relegation play-off berth.
On Sunday, Eintracht Frankfurt continued their scoring struggles with a goalless draw at Hannover, missing a chance to reclaim fourth place.
Frankfurt have not scored in their last five games since February 2 to move to 39 points in fifth place, behind Schalke, who won on Saturday.
Hannover had won their last five home matches but collected just one point in moving to 34.
Artjoms Rudnevs' second-half goal gave European hopefuls Hamburg a 1-0 victory at Stuttgart.
Hamburg ended a two-game winless streak to climb into sixth place as Rudnevs scored the only goal of the match in the 50th minute.
Stuttgart, meanwhile, came into the game on the back of a 2-0 Europa League defeat to Lazio and a third straight loss in all competitions sees the Reds struggling down in 14th place.
On Friday night Augsburg's survival hopes suffered a setback on as they were beaten 2-1 at home in a Bavarian derby by Nurnberg.
Hiroshi Kiyotake put the visitors ahead in the 21st minute and, although Tobias Werner equalised before half-time, Alexander Esswein restored Nurnberg's lead soon after the break.