Milan trimmed Inter's lead at the top of Serie A to a single point with a comfortable 3-1 win over Jose Mourinho's Roma.
The Rossoneri came into the game without a host of key players due to injury, Covid-19 and international duty, but they still managed to secure all three points without too much trouble.
The game got off to an eventful start when Milan were awarded a penalty inside seven minutes. Tammy Abraham was the guilty party, throwing his arm out to block Theo Hernandez's well-struck volley.
After a VAR review a spot kick was awarded and Olivier Giroud made no mistake, sending Rui Patricio the wrong way from 12 yards.
Soon after it was 2-0 and again Roma were the architects of their own destruction. Roger Ibanez underhit a back pass, allowing Giroud to steal the ball away and roll an effort onto the post. Luckily for the hosts Junior Messias was there to sweep home the rebound.
Roma were clunky for most of the first half but just before the break they managed to pull one back against the run of play.
Abraham redeemed himself for his earlier misstep, poking his foot out to divert Lorenzo Pellegrini's effort past Mike Maignan, who had produced a stunning stop to deny the former Chelsea man just seconds earlier.
A bad tempered end to the first period followed with play having to be stopped twice as players clashed after a pair of poor tackles.
The second half was more even. The first chance fell to Milan with Brahim Diaz riding a few tackles before curling an effort onto the bar. Roma fired a warning shot before the hour mark though, with Abraham turning sharply in the box before seeing his low shot kept out by Maignan.
The sides continued to trade blows until Roma's hopes were dealt a hammer blow by Rick Karsdorp receiving a second yellow card with 16 minutes left to play.
The Giallorossi continued to press for an equaliser with 10 men and they were eventually punished for committing too many men forward when two Milan substitutes, Zlatan Ibrahimovic and Rafael Leao, combined to put the game beyond all doubt.
Things got worse for Roma before full time too with Gianluca Mancini also seeing red for hauling down Leao in the box - his second yellow-card offence. Unfortunately for Milan there would be no fourth goal with Ibrahimovic seeing his penalty saved by Rui Patricio.
Here are your player ratings...
Milan player ratings
1. Goalkeeper & defenders
Mike Maignan (GK) - 7/10 - Made a top-class save to deny Abraham just before the break, though he conceded a flukey goal soon after. Continued his fine form throughout. Such a good signing.
Alessandro Florenzi (RB) - 8/10 - An assured display. His experience and leadership was vital in guiding this misshaped backline to victory.
Pierre Kalulu (CB) - 7/10 - Unflappable in an unfamiliar role. Read the game superbly and rarely surrendered possession.
Matteo Gabbia (CB) - 7/10 - His display defied his status as a back-up option. Will need to continue his form as Milan remain drastically short-staffed at centre-back.
Theo Hernandez (LB) - 7/10 - Provided his usual dangerous runs forward and fired away several fine efforts from range.
Sandro Tonali (CM) - 7/10 - All over the place mopping up possession. Drew a lot of fouls with his quick feet.
Rade Krunic (CM) - 4/10 - A bit too casual in his tracking at times. Played Abraham onside for his first-half strike. Booked for a poor tackle and missed a great chance after the break.
Brahim Diaz (AM) - 6/10 - Fairly tidy without being overly threatening. Struck the bar in the second half.
Junior Messias (RW) - 8/10 - A real bright spark. Netted another goal and made some intelligent runs. His remarkable story continues.
Olivier Giroud (ST) - 7/10 - Took his penalty excellently and showed quick-thinking to 'set-up' the second. At least that's what he'll say he was doing.
Alexis Saelemaekers (LW) - 6/10 - Made several probing runs and passes. Drifted in and out of proceedings.
Rafael Leao (LW) - 7/10 - Netted the third for his side.
Tiemoue Bakayoko (CM) - 6/10 - Always busy.
Andrea Conti (RB) - 6/10 - Steady.
Zlatan Ibrahimovic (ST) - 7/10 - Still influencing games at the ripe old age of 58.
Daniel Maldini (CM) - N/A
Roma player ratings
5. Goalkeeper & defenders
Rui Patricio (GK) - 6/10 - Made one important save in the first half but beaten twice and then bettered again after the break. Good penalty save.
Gianluca Mancini (CB) - 3/10 - Did a decent job of containing Saelemaekers but why oh why would you get yourself sent off with seconds to play in a game that was already over?
Chris Smalling (CB) - 5/10 - Did not do anything too damaging for his side.
Roger Ibanez (CB) - 3/10 - Made a horrific mistake, gifting Milan their second goal. Shaky throughout.
6. Wing-back & midfielders
Jordan Veretout (DM) - 4/10 - A couple of shocking passes. Failed to pull the strings from deep.
Rick Karsdorp (RWB) - 5/10 - Provided his side with a much-needed progressive outlet at wide...until he got sent off. Oh dear.
Lorenzo Pellegrini (CM) - 5/10 - Not as influential as we know he can be. Tried his best to sway the referee.
Henrikh Mkhitaryan (CM) - 5/10 - A couple of nice evasive manoeuvres early on but he found less space as things progressed.
Matias Vina (LWB) - 4/10 - Never afraid to get stuck into Messias, though his physical approach was not always successful. Barely anything to report going forward.
Tammy Abraham (ST) - 6/10 - Pretty brainless to concede a penalty in the first half. Redeemed himself with a clever finish and looked sharp throughout.
Nicolo Zaniolo (ST) - 5/10 - A couple of darting runs in behind but Milan largely dealt with him easily.
Bryan Cristante (CM) - 5/10 - Did not change the tide.
Felix Afena-Gyan (DM) - 5/10 - As above.
Stephan El Shaarawy (CM) - N/A
Eldor Shomurodov (ST) - N/A
Carles Perez (ST) - N/A
For more from Matt O’Connor-Simpson, follow him on Twitter!