Pablo Zabaleta scored a late winner to seal Manchester City's route to the FA Cup fifth round with victory at Stoke.
The visitors could not capitalise on long spells of pressure as David Silva hit the post with Carlos Tevez also drawing saves from Thomas Sorenson.
Stoke's chances were limited and Robert Huth went closest with a header.
But just as the game looked like ending goalless, Zabaleta arrived at the back post to steer in Sergio Aguero's cross with five minutes remaining.
Substitute Cameron Jerome could have forced a replay but fired over from 12 yards in stoppage time, while Peter Crouch also headed over late on.
It was a largely forgettable game, with Stoke failing to fire, but the win was Manchester City's first at the Potters since 1999 when both teams were in Football League Division Two.
And it continues a surge in form from Roberto Mancini's side, with this result their sixth consecutive win since losing to Sunderland on Boxing Day.
Conversely for Stoke, they have won just once in the same period and in a repeat of the 2011 FA Cup final, where Manchester City also triumphed 1-0, Glenn Whelan was fortunate not to be dismissed after a two-footed tackle on Javi Garcia.
Although there were exciting moments in the game, neither Sorensen nor Costel Pantilimon were tested too often. That was largely down to a combination of Manchester City lacking sharpness in front of goal and some good Stoke defending.
But, having warned his side about conceding "silly goals" after shipping 14 in their last five games, Tony Pulis's side were slow to react to quick Manchester City set-pieces in the opening period.
David Silva, who had scored twice in his team's last game against Fulham, fired over in the first minute from a short corner and then went even closer after 20 minutes when he hit the post from close to the corner of the penalty area.
Tevez was a bright spark and drew a save from Sorensen before mis-cuing from eight yards and it was clear that Mancini's side were on top before the interval.
Stoke were only threatening from set-pieces, with Huth off-target with a header, but a solidly-built Manchester City side coped with the Potters aerial threat. And the flow of the game was summed up when Mancini took a remarkably relaxed approach to Vincent Kompany's substitution after the half-hour mark.
The Manchester City skipper went off with a calf injury, but it took seven minutes for Mancini and his assistant David Platt to introduce Gael Clichy, switching their defence to a back three.
Stoke improved after the break with Whelan testing Pantilimon, but the Potters midfielder was lucky to be on the field by that stage after jumping two-footed into a tackle with Garcia. Referee Howard Webb was less than 10 yards away but chose only to award a free-kick.
With the game in a relative lull, Mancini shuffled his pack once more with Garcia moving into the defence to accommodate the introduction of Aguero and the Argentine injected some urgency into the Premier League champions' play.
But it was Zabaleta, who has been a model of consistency this season, who made the breakthrough. He started and ended the attack by dispossessing Ryan Shotton near the halfway line and then latched onto Aguero's centre once Dzeko had mis-controlled the cross, to seal a hard-fought win.
Stoke manager Tony Pulis:
"We played more open than we normally do at home. In a cup tie you want to catch them and have a go at them.
"You have got to give City a lot of credit, their attitude and approach was first class. By playing as open as we did, against the best teams, it always gives them a chance to attack and create chances and I thought they did that well.
"Although we are disappointed to have lost the game, and lost it in the last few minutes, you have got to give City a lot of credit. Unfortunately when you come up against the best teams, they need to be a little below par, you need to be right on top of your game and we weren't right on top of our game today."
Manchester City first-team coach David Platt:
"The pleasing thing is we battled hard, defended well and kept another clean sheet. It is pleasing from that perspective and it is also pleasing to go through.
"We knew it was going to be difficult here, you know the ball is going to come in the box and you're going to have to compete for first balls, second balls all day. It is the way it is going to be and I thought we did it well.
"We get players into advanced areas, it is not by luck [goalscorer Pablo] Zabaleta gets into those positions. The way we play we get a lot of players forward, Zaba has been in those positions many times, and he tucked it away nicely."