Sunderland defender Phil Bardsley struck for the second time in five days to condemn Manchester City to a 1-0 Barclays Premier League defeat on Wearside.
The full-back, who edged himself back into the affections of Black Cats fans with the opening goal in Wednesday night's Capital One Cup win over Southampton, did it again to secure another 1-0 home win against City, the same score as in the past three seasons.
For Manuel Pellegrini's men, it was a fourth defeat in six league outings away from the Etihad Stadium this summer, and a return of just four points from a possible 18 on the road is severely hampering their title chances.
They arrived at the Stadium of Light having scored 14 goals in their past three games in all competitions, but as Sunderland defended as if their lives depended on it, they were unable to find a way past goalkeeper Vito Mannone.
It was just a second league victory of the season for the home side, and it served to boost their survival hopes and once again justify manager Gus Poyet's approach in front of a crowd of 40,137.
The Sunderland fans arrived at the Stadium of Light in hope rather than expectation, but their dreams were still intact by the time referee Mike Dean brought an end to the opening 45 minutes.
The Black Cats, somewhat improbably, led 1-0 with Bardsley, who famously found himself on the wrong side of former boss Paolo Di Canio after a casino visit last season, the unlikely hero once again, and the encouraging thing for Poyet was that it was richly deserved.
Where City were ponderous and toothless in their approach work, Sunderland were resolute in defence and by contrast, pacy and direct on the counter.
The visitors started positively and Bardsley had to make an important header to deny Alvaro Negredo a seventh-minute header at goal from Aleksander Kolarov's cross, and Mannone plucked James Milner's long-range drive out of the air seconds later.
However, the home side might have gone ahead when Sebastian Larsson picked out lone striker Fletcher with an inviting right-wing cross, but the Scotland international mistimed his header and sent it well wide.
Larsson was perhaps fortunate to escape further punishment for a late challenge on Javier Garcia, and the City man's mood was not improved when Mr Dean cautioned him for a later challenge on Fletcher.
But by that point, the Black Cats were ahead.
Wes Brown, starting his first Barclays Premier League game since January 21, floated the ball over the top for Bardsley to shake off Milner before cutting inside and curling a shot across goalkeeper Costel Pantilimon, once again preferred to England international Joe Hart.
City's response was tepid and Sunderland created a series of half-chances to increase their lead, although Ki Sung-yueng overhit a through-ball to the unmarked Fletcher and defender Martin Demichelis got to Emanuele Giaccherini's 36th-minute cross marginally ahead of the Scot.
But Mannone did not have any further saves of note to make as Poyet's 4-1-4-1 formation and instructions to keep possession paid off handsomely.
Pellegrini decided enough was enough and replaced defensive midfielder Javi Garcia with winger Jesus Navas after the break, and the newcomer almost made an immediate impact, slipping past Johnson and crossing for Negredo to send a looping header over.
Navas might have equalised himself within five minutes of his arrival when Sergio Aguero out-paced John O'Shea and pulled the ball back to him, but Bardsley made a vital block.
The Spain international steered a 54th-minute cross across Mannone's goal, but it was Ki who came closest at the other end four minutes later when he blasted a right-foot shot just wide.
Navas aside, it was simply not happening for the visitors as they probed without any real menace with Sunderland defending deep and in numbers.
Indeed, it was full-back Micah Richards who became the first man for some time to test Mannone with a skidding 66th-minute shot from the edge of the box.
But the Italian had to palm away Aguero's dipping effort three minutes later and as time ran down, Pellegrini replaced Negredo with Edin Dzeko and Richards with Pablo Zabaleta.
Dzeko almost did the trick within seconds when he forced a flying save from Mannone with Aguero unable to make the most of the rebound.
Poyet's men were forced to weather a relentless assault as the final whistle approach, but with Brown marshalling his forces outstandingly at the back there was simply no way through for City.