BERLIN — Bayern Munich beat Wolfsburg 2-0 to remain top of the Bundesliga on goal difference on Saturday, just ahead of Borussia Dortmund which brushed Hoffenheim aside 3-1.
Dortmund was already 3-0 up at home through two goals from Shinji Kagawa and another from Kevin Grosskreutz, before league topscorer Mario Gomez's 60th-minute strike allowed Bayern a sigh of relief.
Dutch winger Arjen Robben sealed the points in an edgy win for Bayern with a goal in injury time.
Werder Bremen drew 1-1 with Bayer Leverkusen, Hamburger SV won 2-1 at Hertha Berlin, and Augsburg and Kaiserslautern played out a 2-2 draw in a relegation battle.
Schalke could draw level at the top with Bayern and Dortmund with a win at Cologne later Saturday.
Dortmund piled on the pressure early on, Hoffenheim's Tom Starke pulling off a great save to stop Robert Lewandowski's header in the fifth minute. It was Dortmund's third effort on goal.
Kagawa deservedly put the defending champions ahead in the 16th, Sebastian Kehl robbing Sebastian Rudy of possession to allow the Japan midfielder to advance and slot the ball to Starke's left.
Jakub Blaszczykowski crossed for Kevin Grosskreutz to effectively kill the game in the 31st, when Hoffenheim looked bewildered in the face of Dortmund's quick passing game.
Grosskreutz combined with Kagawa to set up his second goal with a delightful back heel in the 55th, Kagawa firing to the right for his sixth goal of the season.
Fabian Johnson pulled one back for Hoffenheim in the 63rd.
As the goals rained in in Dortmund, fans were getting nervous in Munich.
Gomez should have scored in the 19th, when he beat the offside trap but then missed the ball with only the goalkeeper to beat from five meters (yards).
As their side labored to create clear chances, supporters began whistling after half an hour.
Bastian Schweinsteiger's timely block prevented Mario Mandzukic from giving Wolfsburg a halftime lead, and Bayern again looked short of ideas after the break.
The home side finally found the breakthrough when Gomez scored his 17th goal of the season at the second attempt after a Toni Kroos free kick, blasting the ball home from five meters (yards) after misplacing his initial header.
Wolfsburg's late penalty appeals were waved away after Jerome Boateng's arm got in the way of a free kick, before Robben inadvertently secured the win.
Substitute Ivica Olic lobbed the ball over Wolfsburg 'keeper Diego Benaglio, with Felipe Lopes attempting a goalline clearance only to see the ball rebound off Robben and in.
Former Germany captain Michael Ballack started on the bench for Leverkusen in Bremen, after club management criticized his disappointing impact on the team.
Claudio Pizarro put Werder ahead with his 13th goal of the season in the 29th, the Peru striker controlling Tom Trybull's cross on his chest before firing to the bottom right corner.
Stefan Reinartz salvaged a point for Robin Dutt's side when he equalized from a corner in the 57th, Tim Wiese emerging from goal but failing to clear.
Marcel Jansen and Mladen Petric put Hamburg 2-0 up at Hertha before the break, before Pierre-Michel Lasogga grabbed a late consolation for Berlin.
It was Hertha coach Michael Skibbe's second loss in a row since taking over from Markus Babbel, who was sacked after falling out with club management.
In Augsburg, Canada defender Marcel de Jong scored his first Bundesliga goal from a 22-meter (yard) free kick to give the home side the lead in the fifth.
Defender Florian Dick equalized with a header from a corner in the 25th before putting Kaiserslautern ahead in the 48th, capitalizing both times on poor defending.
However, Augsburg striker Stephan Hain equalized 22 seconds after going on as a substitute in the 66th to lift his side off the bottom of the table.