Bristol City made it four wins in a row as they cemented themselves in second place in the Championship.
A stunning long-range shot from ex-Millwall midfielder Marvin Elliott separated them from Stoke, but they always looked the better equipped side.
There was a distinct edge to the game with Stoke boss Tony Pulis returning to the club he walked away from after just 33 games in charge, eight years ago.
But until Elliott gave it a sense of purpose this game had more pace then vision.
It was a goal to savour, but almost brought him a card for over-celebrating after he had driven the ball from Ivan Sproule into Steve Simonsen's top-right-hand corner, from all of 30 yards.
Pulis was livid with his keeper for seeing no danger and reacting far too late.
Galvanised by his success, Elliott tried a couple more long shots, but wasn't going to catch out Simonsen again.
Bristol recalled Lee Trundle after two games on the bench, but set out with him as a sole striker supported by David Noble.
That scheme didn't last long. Noble was soon limping and went off inside a quarter-of-an-hour and when Darren Byfield replaced him manager Gary Johnson used him as an orthodox second striker.
Stoke always pulled eight men back around the box at the first hint of danger and looked to the speed of six-goal Ricardo Fuller to fuel their attacks.
He had a lively 20 minutes, his best chance coming when Louis Carey, selected despite two operations in the week on a broken nose, slipped to let him in on the right.
Fuller was clear, but racing in aimed his shot wide of the far post.
In the first hour Adriano Basso, in the home goal, touched the ball in anger only once to punch away a corner.
With Fuller fading, Stoke never put him under pressure, while Simonson partially redeemed himself with a great close-in save from Trundle.