Marcus Rashford and Anthony Martial struck in the first half as Manchester United dealt Manchester City's title hopes another blow in a thrilling but at times ugly derby.
Nicolas Otamendi pulled one back for the champions but United held on for a 2-1 win at the Etihad Stadium that left City 14 points behind Premier League leaders Liverpool.
There was controversy in the second half as a supporter appeared to make a monkey gesture towards a United player, an incident the PA news agency understands both clubs have been made aware of.
That occurred during a fiery period as tempers boiled over in the stands, with further reports of missiles being thrown.
Those incidents took the shine off what had otherwise been a compelling encounter which began at an electrifying pace.
City started with their usual high tempo but United, trailing their rivals by 11 points coming into the game, were determined to give as good as they got.
The visitors were rapid and dangerous on the counter-attack, repeatedly exposing the continuing vulnerabilities in City's midfield and defence.
Daniel James was the first to draw a save from Ederson before Jesse Lingard and Martial tested City's Brazilian goalkeeper.
At the other end David Silva had a shot blocked and City had the first of two first-half penalty appeals turned down after the ball struck Victor Lindelof's hand at close range.
United were awarded a spot-kick after Bernardo Silva clumsily took down Rashford. Referee Anthony Taylor failed to spot the offence but VAR overturned his decision and City could have no complaints as Rashford slotted home with 23 minutes gone.
United should quickly have doubled their lead as they broke again through Lingard and James but Rashford put a great chance wide. Rashford then hit the bar as City struggled to limit United's lightning raids.
United did make their dominance count after 29 minutes as Martial turned and squeezed a low shot under Ederson and in at the near post.
City were stunned but finally mustered an effort on target when David Silva shot at David De Gea from long range.
The champions spurned another chance to pull one back when Kevin De Bruyne picked out Gabriel Jesus with a brilliant cross but the Brazilian headed wide.
De Bruyne fired a free-kick just over and City screamed for another penalty before the break after a Kyle Walker cross hit Fred's hand but, again, nothing was given.
City pushed again after the break with De Bruyne having an effort deflected over and Rodri having a strike tipped over by James.
United also still threatened but there were some unsavoury scenes as Fred appeared to be hit by an object thrown from the crowd as the visitors prepared to take a corner.
City gave themselves a lifeline with five minutes remaining as substitute Otamendi rose to head home from a corner.
They pushed until the final whistle but United held on, desperately clearing their lines in an injury-time goalmouth scramble.