Bayer Leverkusen played the final 23 minutes a man down but held on to beat Schalke 2-1 at home and defend their lead atop the Bundesliga.
Stefan Kiessling gave Leverkusen the lead after 30 minutes and Patrick Helmes made it 2-0 just before the break.
Leverkusen went down to 10 men when Gonzalo Castro was shown a second yellow card after 67 minutes.
Kevin Kuranyi pulled a goal back with five minutes to play and the guests had a goal disallowed in the 90th minute.
Leverkusen, who last week wasted a 3-0 lead to draw 3-3 at Karlsruhe and end a four-game winning streak, remained top of the league with 28 points - level with Hoffenheim but ahead on goal difference.
Schalke nearly took the lead after 15 minutes as Halil Altintop crossed into the box where Kuranyi somehow sent his shot from four yards out over the crossbar.
The guests continued to push forward but Kuranyi missed another chance seven minutes later, sending a long ball just over the crossbar.
Leverkusen made Schalke pay for their missed chances on the half-hour mark.
Levan Kobiashvili lost a ball on the right wing to Renato Augusto who then crossed into the area where Kiessling was all alone seven yards out to volley home.
The hosts doubled their advantage four minutes before the break when Helmes was first to Renato Augusto's blocked shot.
Schalke were thrown a life-line when Castro was sent off after 67 minutes for his second warning in eight minutes.
They capitalized on their advantage with five minutes left. Christian Pander sent a free-kick from the right side into the box where Kuranyi headed home from four yards.
Then in the final minute Schalke thought they had equalized, but Gerald Asamoah was ruled offside.