Personnel and tactics
Julian Nagelsmann made seven changes to the side that drew 1-1 with Werder Bremen. After his absence through injury, club captain Kevin Vogt made his return to the heart of defence. Playing alongside him at the back were Stefan Posch and Benjamin Hübner, who was also making his return to the starting line-up. Joshua Brenet rounded out the defensive complement, moving in to right-back to replace Pavel Kaderabek.
Vogt regularly moved forward to play in the centre of the park, but on paper at least it was Kerem Demirbay and Florian Grilltisch who occupied the central midfield positions, the latter taking the place of Leonardo Bittencourt. There were also changes aplenty up-front, with Steven Zuber (right-forward), Ishak Belfodil (centre-forward) and Vincenzo Grifo (left-forward) all returning to the first XI. On more or less the hour mark, Julian Nagelsmann brought on Adam Szalai to replace Nico Schulz. The Hungarian took up the centre-forward role, with Belfodil shifting out to the right and Zuber slotting into Schulz's position on the left.
In the 73rd minute, Nagelsmann brought on Pavel Kaderabek to replace Brenet. The Czech national player took over at right-back. Nagelsmann made his last change in the 79th minute: Reiss Nelson came on to bolster the attack, taking Zuber's place on the left-hand side.
Moment of the match
Injury time: Grifo found space to shoot inside the box, but the ball ended up hitting the woodwork for the fourth time in the game. This was the 13th time that TSG have hit the bar or the post in the first-half of the season - more than any other team.
Number of the game: 10
The 1-1 draw with Mainz means that TSG have now gone ten games unbeaten in the Bundesliga: an impressive run to close out the year.
Stefan Posch does well to play Steven Zuber into space on the right-hand side. The man from Switzerland plays a low cross into the penalty area, where Kerem Demirbay is on-hand to finish with aplomb.
After a messy scramble in the box, the ball falls to Mateta, who fires home to draw the two teams level at 1-1.
Once again it's the man from Switzerland at the heart of the action. He fires a wicked long-range shot towards goal which ends up crashing against the upright.
Oli Baumann punches away a Quaison header. The ball lands at the feet of Latza, whose effort hits the side-netting.
Benjamin Hübner leaps majestically to get on the end of a corner, but his headed effort can only find the outside of the post.
He has only just come on as a substitute, but Szalai is already causing problems for the Mainz defense. The Hungarian pokes the ball past Mainz goalkeeper Zentner, but Aaron gets back in time to make the clearance.
Hoffenheim hit the woodwork for the third time: Belfodil shoots from a tight angle, but Zentner is on-hand to deflect the ball onto the post.
The woodwork comes to Mainz's rescue once more. This time it's Grifo who rattles the upright.