Tottenham Hotspur made it back-to-back Premier League victories under new manager Thomas Frank by stunning Manchester City once again at Etihad Stadium.
Spurs came here last November and inflicted a 4-0 humbling of City in a scintillating performance, and they went home once more with all three points courtesy of a resolute defensive display.
They started slowly as Omar Marmoush latched on to Pedro Porro's loose header and squeezed a shot narrowly wide of the far post before seeing a thunderous strike from range pushed away by Guglielmo Vicario.
The Egyptian was lively early on and forced another excellent save from the Spurs goalkeeper after being played through by Erling Haaland.
With their first real threat of the game, Spurs took the lead courtesy of a lightning breakaway as Richarlison's low cross was converted by Brennan Johnson.
The goal was initially ruled out for offside, but that was overturned following a review by the video assistant referee.
With seven minutes added on in the first half because of an injury to City left-back Rayan Ait-Nouri, Spurs doubled their lead through Joao Palhinha who smashed in after a loose pass from goalkeeper James Trafford inside his own area.
It capped a difficult few minutes for the City keeper who could have been dismissed for a collision on the edge of the box with Mohammed Kudus.
Haaland should have pulled one back before the break but headed over from close range, and the home side were left frustrated in the second period as Tottenham made it two clean sheets from two in the league so far this season.
Tottenham had experienced a bruising week because of a failed pursuit of winger Eberechi Eze, with the Crystal Palace player agreeing terms with Spurs' bitter rivals Arsenal instead.
The travelling supporters made their feelings known towards chairman Daniel Levy from the first whistle with loud chants of "we want Levy out" echoing around the stadium, though they were replaced by "we love you Tottenham" by full-time.
The players who do wear the Spurs shirt responded with another tremendous showing at City's ground, collecting their third victory in their last five visits.
Frank's side beat Burnley convincingly in their opening game and rode their luck as City missed opportunities, but they took full advantage when chances fell their way at the other end.
City were holding a high line and were made to pay as John Stones narrowly kept Richarlison onside, allowing the Brazilian to roll the ball across from the right, and Johnson made no mistake with his finish.
Spurs were pressing with precision and forced Trafford into an error, with the Englishman's risky ball eventually dropping into the path of Palhinha to net his first goal since joining on loan from Bayern Munich.
They could have made it a more handsome scoreline in the second half but Dominic Solanke saw his low drive pushed out by Trafford late on and Wilson Odobert was also denied from the rebound.
City started the season with an eye-catching victory at Wolves but came back down to earth with a bump as they suffered defeat in their first home game of the campaign.
Spurs are Guardiola's bogey side â the Spaniard has now lost a joint-high 10 games against them, the same number of defeats he has suffered as boss against Real Madrid and Liverpool.
They were made to pay for the gilt-edged chances missed by Marmoush and Haaland - the latter coming into the contest with an imperious record of scoring 48 Premier League goals in as many home games for the club.
A 2-0 half-time deficit proved too much for City to turn around, with Spurs defending resolutely and leaving Guardiola considering his options.
The goalkeeping situation will be at the forefront of his mind as Trafford had a jittery game and was at fault for the second, as well as being fortunate not to be dismissed.
With Ederson watching on from the bench after being heavily linked with a move to Galatasaray, Guardiola now has a decision to make with his number one.