Southampton protected an early lead with the help of a string of Alex McCarthy saves as Manchester City were surprisingly beaten.
Che Adams ended his wait for a first Premier League goal with an incredible long-range strike to see Southampton to a shock 1-0 win over Manchester City.
Adams was making his 25th top-flight appearance for Saints since his £15million signing just over a year ago, but he picked a fine time to break his duck.
City rested Kevin De Bruyne and Phil Foden, among others, after crushing champions Liverpool in midweek and lacked fluency from the outset at St Mary’s, although Adams’ wonderful finish preceded a flurry of chances for Pep Guardiola’s men.
Goalkeeper Alex McCarthy was in inspired form, however, and the hosts held on to hand City their ninth league defeat of the season and their third in a row away from home.
The second-placed side were made to pay for their sloppy start when Stuart Armstrong stole possession from Oleksandr Zinchenko on halfway and the ball ran for Adams – without a goal since April 2019 – to sweep a stunning 40-yard effort over the stranded Ederson and into a gaping net.
Pressure subsequently built on the Southampton goal, where McCarthy watched Gabriel Jesus miss the target from close range before getting to work.
In a frantic spell, McCarthy parried from Raheem Sterling, dived after a Fernandinho shot that bounced away off the post and then sprang back to his feet to brilliantly repel David Silva’s header.
Riyad Mahrez was next to find the insoured keeper blocking his path, before a stretching Danny Ings volleyed over when he might have doubled Saints’ lead just before half-time.
McCarthy was at it again following the interval, keeping out Jesus’ header and then smothering from Silva after a pinpoint Zinchenko pass.
De Bruyne and Foden soon arrived from the bench, but the withdrawals of Mahrez and Sterling only seemed to hurt City further and Ederson had to stop an Armstrong blast as his side stuttered to a surprise loss despite applying plenty of late pressure.