Bayern Munich maintained the pressure on Bundesliga leaders Borussia Dortmund as Freiburg secured a priceless win over fellow strugglers Kaiserslautern and Schalke beat Bayer Leverkusen.
Hertha Berlin also picked up an important three points, Augsburg snatched a last-gasp draw at Werder Bremen and Borussia Monchengladbach's title challenge suffered a potentially fatal blow.
Mario Gomez came off the bench to have a decisive impact in Bayern's 2-1 win at home over Hannover which moved his side to within two points of Dortmund.
Toni Kroos opened the scoring for Bayern on 36 minutes and Gomez then struck the post almost immediately after being introduced on 63 minutes.
The Germany international striker did find the net on 68 minutes before Didier Ya Konan's 74th minute goal proved no more than a consolation for Hannover.
Bottom club Kaiserslautern's decision to sack their coach failed to have an immediate impact following a 2-0 defeat at Freiburg.
Karim Guede and Cedric Makiadi scored the goals inside the opening quarter of an hour before Freiburg's Stefan Reisinger was denied by the woodwork in the second half.
Adrian Ramos scored a second-half brace to clinch an important 3-1 victory for Hertha away to mid-table Mainz.
Anis Ben-Hatira had given Hertha the lead four minutes before half-time and Ramos doubled the advantage seven minutes after the break.
Eric Maxim Choupo-Moting pulled a goal back for Mainz just before the hour mark, but Ramos' second on 69 minutes killed off the hosts' fightback.
Klaas-Jan Huntelaar scored a goal in each half to lift Schalke to within six points of the summit after a 2-0 success over Bayer Leverkusen.
Netherlands international Huntelaar made the breakthrough after 18 minutes and then wrapped up the points with his second four minutes from time.
Borussia Monchengladbach are still eight points adrift of the leaders after a quick-fire double from Hoffenheim earned a 2-1 away win.
Marco Reus had given Gladbach the lead on 38 minutes and the home side's Juan Arango was then thwarted by the crossbar before half-time.
Substitute Roberto Firmino equalised for Hoffenheim on 77 minutes and, two minutes later, Boris Vukcevic scored the winner.
Paul Verhaegh scored an injury-time equalised as lowly Augsburg hit back to snatch a 1-1 draw at Werder Bremen.
Niclas Fullkrug broke the deadlock on 61 minutes for Bremen, but Verhaegh scored in the second minute of stoppage-time to salvage a point for Augsburg.