Manchester City had to be patient against a determined Stoke side but ran out comfortable winners to stay seven points behind Premier League leaders Manchester United.
The Potters visited the Etihad Stadium on the back of a 10-game unbeaten run and with a game-plan of frustrating the champions.
It was a tactic that worked for most of the first half until Pablo Zabaleta broke the deadlock and, from then on, the hosts were comfortable.
Edin Dzeko gave Roberto Mancini's men breathing space after the break and Sergio Aguero sealed a one-sided win from a penalty awarded after Steven Nzonzi had fouled David Silva outside the box.
The margin of victory was a welcome boost for Manchester City's goal difference, although United outscored them in their win at Wigan.
But in a week where he bemoaned his inability to sign Robin van Persie in the summer, Mancini will be cheered by the fact that, with his side scoring seven goals in their last two games, his strikers appear to be firing again.
Only a late hamstring injury to Aguero, who was by far the home side's most effective attacking force from the first whistle, took the shine off their day.
The game was barely a minute old when the Argentine striker met a James Milner cross but saw his shot blocked by Asmir Begovic at his near post.
City on the spot
Manchester City have now taken 22 penalties in the Premier League since August 2010, and 21 have them have come at the Etihad Stadium.
That set the tone for a first half that turned into an almost endless exercise of attack versus defence, with the champions unable to take their chances when they found a way through Stoke's massed defence.
Aguero was wasteful when he fired over after running on to Gareth Barry's clipped pass but went a lot closer when he shaved the post with a header from another Barry delivery and saw a fizzing shot clawed away by Begovic.
With the score still goalless, frustration among the home fans inside the Etihad Stadium was growing, although it was directed at Stoke's perceived time-wasting tactics rather than their own side's shortcomings in front of goal.
It was Zabaleta who put the latter right just before half-time, taking advantage of some uncharacteristically poor Stoke defending to advance unchallenged from the right touchline with Milner, and tuck away the loose ball after Begovic blocked Milner's cross.
The pattern of the game did not change after the break, with the title contenders still the only side who looked like scoring, and they did not take long to put the game beyond Stoke's reach.
Stoke City have lost every time they have visited Manchester City in the Premier League, they have yet to score a goal on this ground in the Premier League, so it was business as usual to start the new year.
Dzeko, who had already crashed a dipping first-time shot over the bar, was in the right place to slot home when Begovic spilled Aguero's angled shot.
Stoke, at last, ventured forward with intent and Joe Hart was forced into his first meaningful action of the game when he clawed away Charlie Adam's free-kick, before Jon Walters skewed a shot over from close range.
The Potters' chances of a comeback still looked remote, however, and they were ended completely when Aguero made it 3-0 from the spot.
There was still time for Glenn Whelan to force a late diving save from Hart, with the England keeper pushing his shot on to a post.
But the only late drama at the Etihad Stadium was the injury to Aguero, who limped off late on. The champions can ill-afford to be without one of their most potent strikers for much of 2013.
Manchester City manager Roberto Mancini: "We played very well, like we played against Norwich and Sunderland, but sometimes it's not enough to play very well, it's important to score.
"In the first half we deserved to score two or three goals, but it was difficult because Stoke is the best defence in the Premier League.
"It was important to keep a clean sheet, because if we start to score and don't concede a goal we can have a chance to recover these points."
Stoke City manager Tony Pulis: "We've come here and played right at our maximum, and they've played below par. We didn't play as well as we can play, and they played well.
"Sometimes you have to be a little bit grounded, not get carried away and look at facts and figures. When you have spent that much money on the quality they have, it's always difficult.
"We've played Tottenham, Liverpool then Southampton with 10 men for the last 25 minutes so it's been tough. Coming here, against one of the best teams in the Premier League, the lads looked tired in the second half. They kept going, they had great spirit, great commitment and I'm not criticising them at all."
Live Text Commentary
Full Time The referee blows for the end of the match.90:00 +1:53
Gareth Barry challenges Steven Nzonzi unfairly and gives away a free kick. Glenn Whelan takes the free kick.90:00 +0:59 Substitution
Substitution Abdul Razak comes on in place of Edin Dzeko.90:00 +0:41
The ball is swung over by James Milner.85:41
Glenn Whelan takes a shot. Save by Joe Hart. Matthew Etherington takes a inswinging corner to the near post, clearance made by Joleon Lescott.83:35
Ryan Shawcross concedes a free kick for a foul on Carlos Tevez. Carlos Tevez restarts play with the free kick.81:39 Substitution
Substitution Scott Sinclair replaces David Silva.81:12
The ball is delivered by Carlos Tevez, save made by Asmir Begovic.79:44
Carlos Tevez takes a shot. Robert Huth gets a block in.79:19
Edin Dzeko takes a shot. Ryan Shawcross gets a block in.78:44
James Milner decides to take a short corner.77:24
Shot on goal by David Silva from just inside the area clears the crossbar.75:31
Joe Hart restarts play with the free kick.75:31 Substitution
Substitution Carlos Tevez is brought on as a substitute for Sergio Aguero.75:31
The referee blows for offside against Jonathan Walters.73:29
Assist on the goal came from David Silva.73:29 Goal scored
Goal! - Sergio Aguero - Man City 3 - 0 Stoke Sergio Aguero scores a placed penalty. Man City 3-0 Stoke.72:11 Booking
Booking Steven Nzonzi goes into the book.72:04
Penalty awarded for an unfair challenge on David Silva by Steven Nzonzi.66:56
Asmir Begovic takes the free kick.
Substitution Dean Whitehead is brought on as a substitute for Charlie Adam.66:56
Free kick awarded for an unfair challenge on Andy Wilkinson by Edin Dzeko.66:03
Corner taken by David Silva played to the near post, clearance made by Ryan Shawcross.65:49
The ball is swung over by Sergio Aguero, clearance by Andy Wilkinson.64:49
Glenn Whelan takes a shot. Blocked by Joleon Lescott. Free kick awarded for an unfair challenge on Sergio Aguero by Robert Huth. Free kick taken by David Silva.61:12
Andy Wilkinson produces a cross, Pablo Zabaleta gets a block in. Corner taken by Glenn Whelan, Close range effort by Jonathan Walters goes over the bar.59:58
Jonathan Walters takes a shot. Vincent Kompany gets a block in.58:06
The free kick is swung in left-footed by Charlie Adam, save made by Joe Hart.58:06 Booking
Booking Joleon Lescott goes into the referee's book.58:01
Joleon Lescott concedes a free kick for a foul on Cameron Jerome.56:45 Booking
Booking Booking for Edin Dzeko.55:25
Assist on the goal came from Sergio Aguero.55:25 Goal scored
Goal! - Edin Dzeko - Man City 2 - 0 Stoke Edin Dzeko scores a goal from inside the six-yard box to the bottom left corner of the goal. Man City 2-0 Stoke.55:12
David Silva fouled by Steven Nzonzi, the ref awards a free kick. Yaya Toure takes the direct free kick. Sergio Aguero takes a shot. Save by Asmir Begovic.52:43
Inswinging corner taken by James Milner, save by Asmir Begovic.52:01
Outswinging corner taken from the right by-line by James Milner.49:32 Substitution
Substitution Matthew Etherington replaces Kenwyne Jones.48:33
Shot from just outside the box by Edin Dzeko goes over the bar.47:25
Foul by Andy Wilkinson on James Milner, free kick awarded. Pablo Zabaleta restarts play with the free kick.46:12
The free kick is delivered right-footed by James Milner from right channel.46:12 Booking
Booking Robert Huth is given a yellow card.46:05
Free kick awarded for a foul by Robert Huth on Sergio Aguero.45:01
The referee starts the second half.45:00 +1:03 Half time
Half Time It is the end of the first-half.44:27
James Milner challenges Andy Wilkinson unfairly and gives away a free kick. Glenn Whelan takes the direct free kick.42:04
Assist on the goal came from James Milner.42:04 Goal scored
Goal! - Pablo Zabaleta - Man City 1 - 0 Stoke Goal scored by Pablo Zabaleta from inside the six-yard box to the bottom left corner of the goal. Man City 1-0 Stoke.41:35
James Milner sends in a cross, clearance made by Ryan Shawcross.39:40
Free kick awarded for an unfair challenge on Steven Nzonzi by James Milner. Asmir Begovic restarts play with the free kick.38:28
Free kick awarded for a foul by Ryan Shawcross on Edin Dzeko. Yaya Toure produces a strike on goal direct from the free kick, Cameron Jerome manages to make a clearance.37:31
Free kick awarded for an unfair challenge on Vincent Kompany by Cameron Jerome. Yaya Toure takes the direct free kick.34:49
Foul by Yaya Toure on Steven Nzonzi, free kick awarded. Asmir Begovic takes the direct free kick.34:10
James Milner crosses the ball.32:13
Centre by James Milner, Sergio Aguero produces a header from close range which bounces off the post.27:36
Edin Dzeko produces a right-footed shot from deep inside the penalty area which goes wide of the right-hand post.24:56
Andy Wilkinson crosses the ball.24:03
David Silva takes a shot. Clearance made by Glenn Whelan.21:55
Sergio Aguero takes a shot. Asmir Begovic makes a save.19:43
James Milner crosses the ball.18:28
Cameron Jerome challenges James Milner unfairly and gives away a free kick. James Milner produces a cross, David Silva produces a header from inside the area that goes over the bar.16:48
The ball is sent over by Gael Clichy, Glenn Whelan manages to make a clearance.13:50
Effort on goal by Yaya Toure from long range goes over the bar.13:26
Centre by James Milner.11:15
Inswinging corner taken left-footed by David Silva from the right by-line, Asmir Begovic makes a save.8:20
Shot from inside the area by Sergio Aguero clears the bar.7:15
Shot by Yaya Toure from outside the area goes high over the crossbar.6:30
Edin Dzeko delivers the ball, Robert Huth makes a clearance.2:27
James Milner takes a short corner.1:03
Sergio Aguero takes a shot. Asmir Begovic makes a save. Corner taken left-footed by David Silva to the near post, clearance by Glenn Whelan.0:00
The ref blows the whistle to start the match.
Live data and text provided by our data suppliers