Goals in each half from Alex Grimaldo took Bayer Leverkusen to a 3-2 win at Hoffenheim on Saturday, sending Xabi Alonso's side five points clear at the top of the table.

Unbeaten Leverkusen, who have now won nine and drawn one in the league, made difficult work of the win, allowing Hoffenheim to score twice in two minutes to let a 2-0 lead slip. 

The visitors re-took the lead thanks to a late Grimaldo goal. 

Bayern Munich can narrow the gap to two points with a win later on Saturday at Borussia Dortmund in Germany's 'Klassiker'. 

Florian Wirtz opened the score after just nine minutes, tapping in a Victor Boniface assist. 

Leverkusen doubled their lead just before half-time through a set-piece, Alejandro Grimaldo in a low Jonas Hofmann corner. 

With Leverkusen cruising midway through the second-half, goalkeeper Hradecky hit a low pass while roaming well outside his box, Anton Stach taking advantage of the error by driving a long-range shot home. 

Former Man United striker Wout Weghorst unleashed a stunner just two minutes later, bringing the home side level. 

Grimaldo curled in the winner with 20 minutes remaining, his fifth league goal of the season since arriving from Benfica in the summer.

Union Berlin's woes continued ahead of Wednesday's Champions League visit to Napoli, losing 3-0 at home to Eintracht Frankfurt thanks to a first-half double from Omar Marmoush and a late strike from Nacho Ferri. 

The loss, Union's 12th in a row in all competitions, means the side has now tasted defeat eight times so far this season -- equal to their final total at the end of the last campaign. 

Elsewhere, Mainz won their first match of the season, shocking RB Leipzig 2-0 at home thanks to goals from Lee Jae-sung and Leandro Barriero. 

Freiburg fought back from 3-1 down to draw 3-3 at home to Borussia Moenchengladbach, Italy midfielder Vincenzo scoring a penalty in the sixth minute of injury time to level the scores. 

Cologne were held 1-1 at home to Augsburg, meaning Steffen Baumgart's side will finish the match in last place.