Maarten Stekelenburg saved two penalties as Everton held Premier League leaders Manchester City to a 1-1 draw at the Etihad Stadium.
The Dutch keeper denied Kevin De Bruyne and Sergio Aguero from the spot in an outstanding display and was on course for victory after Romelu Lukaku gave the visitors a shock second-half lead.
City responded with substitute Nolito heading a 72nd-minute equaliser but Stekelenburg thwarted them again when he touched a late De Bruyne effort onto the woodwork.
A draw was probably the least City deserved after controlling most of the game but they have now gone three in succession without a victory having previously won their previous 10 in all competitions.
Lukaku's goal was his sixth in five Premier League games and Everton boss Ronald Koeman will be pleased to have frustrated his old Barcelona team-mate Pep Guardiola.
Guardiola named Sergio Aguero on the bench but City, flowing forward from a three-man back line and with De Bruyne and Raheem Sterling starting after recovering from injuries, looked lively from the outset.
There were danger signs in the opening minutes with Leroy Sane, making his first Premier League start, being denied a penalty after cutting inside Bryan Oviedo.
Yet despite dominating possession and piecing together numerous flowing moves, City struggled to find a way through.
Oviedo deflected a De Bruyne effort over and David Silva also shot narrowly too high. De Bruyne struck a free-kick into the wall.
An early Lukaku free-kick aside, Everton had few opportunities themselves and it seemed their resolve may finally have been broken when Phil Jagielka was penalised for tripping Silva after 42 minutes.
With no Aguero on the field, De Bruyne stepped up but Stekelenburg saved to his left.
Everton had their first shot on target early in the second half when Gerard Deulofeu, named in the side ahead of Ross Barkley, forced Claudio Bravo to save with an effort from outside the area.
City responded with a neat move that saw Sane tee up Kelechi Iheanacho at close range but Stekelenburg saved well with his feet.
After 55 minutes Guardiola decided it was time to send on Aguero but it was Everton who made the breakthrough just after the hour.
Yannick Bolasie flicked on a long ball from deep into the path of Lukaku and the Belgian stormed forward from halfway, outpaced Gael Clichy and slammed a firm low shot past Bravo.
It was a classic breakaway goal but City were offered a route back into the game when Jagielka conceded his second penalty of the game be bringing down Aguero.
Remarkably Stekelenburg saved again, this time denying Aguero, who missed two spot-kicks in one game against Steaua Bucharest earlier in the season and another for Argentina in midweek.
Stekelenburg was at it again moments later, clawing out another Aguero effort, but he was finally beaten when Nolito, on for Sane, headed home a Silva cross with his first touch after 72 minutes.
City pressed for a winner but were denied by another stunning Stekelenburg save as the Dutchman tipped a De Bruyne piledriver onto the post.
Aguero wanted another penalty after being nudged by Coleman but referee Michael Oliver was not convinced this time and Everton held on.