Bayer Leverkusen snapped a three-game winless streak with a hard-fought 2-1 victory over relegation-threatened Augsburg to remain in the running for second place in the Bundesliga.
Stefan Kiessling opened the scoring for Leverkusen in the 26th minute and Lars Bender doubled their advantage 15 minutes from time.
Sascha Molders made things interesting by pulling a goal back for the visitors in the 89th minute, but they could not force an equaliser.
Borussia Dortmund bounced straight back from a home defeat to Hamburg last week by seeing off fourth-placed Frankfurt 3-0, despite playing with 10 men for the second week in a row.
Marco Reus single-handedly dismantled the Eagles with a hat-trick for the defending German champions, who move back to within 15 points of the runaway league leaders Bayern Munich.
The Germany international netted two goals in as many first-half minutes before adding a third midway through the second half after Julian Schieber had been given his marching orders.
Frankfurt also ended the game with 10 men after Takashi Inui saw red in the 74th minute, compounding a disappointing evening for Armin Veh's men.
Michael Bastos scored a brace as Schalke twice came from behind to snatch an away point at Mainz, drawing 2-2.
Mainz went ahead through Andreas Ivanschitz in the 27th minute, but Bastos levelled four minutes before the break.
Zdenek Pospech restored the hosts' lead midway through the second half, but Bastos ensured the visitors a draw with eight minutes left.
Rafael van der Vaart's brilliant first-half goal proved decisive as Hamburg boosted their hopes of European football with a narrow 1-0 triumph over Borussia Monchengladbach.
The Holland midfielder despatched a fine effort into the top-left corner from outside the box in the 24th minute. The result lifted HSV to sixth spot in the standings - four points ahead of ninth-placed Gladbach - after 22 games.
Freiburg twice saw Werder Bremen equalise before finally taking the lead and finishing off the 3-2 victory in a wild match, recording their first win over Bremen in 11 years.
Max Kruse gave Freiburg the lead after 36 minutes before Nils Petersen equalised moments later.
Daniel Caligiuri made it 2-1 to the visitors from the penalty spot in the 55th minute, and although Petersen's second levelled it up again nine minutes later, Christian Gunter's 70th minute strike finally settled it.
Elsewhere, Pavel Krmas scored late in the game to hand Freiburg a 1-0 victory over Fortuna Dusseldorf, a result that lifted the host to fifth place in the Bundesliga.
Krmas converted the only goal of the match - only Freiburg's second in four matches since the winter break - in the 87th minute.