Matt Taylor made one goal and scored the other as Bristol City dumped Stoke out of the Carabao Cup with a deserved 2-0 victory at Ashton Gate.
The hosts took a 50th minute lead when Taylor ran onto an Aden Flint header. His low shot came back off a post, but Famara Diedhiou was on hand to net the rebound.
The same two players combined again 10 minutes later, Taylor racing onto Diedhiou's flick-on and firing low past Lee Grant with his left foot.
It took some fine Grant saves to prevent a heavier defeat for the Premier League side, who were second best for most of the game.
City head coach Lee Johnson made nine changes from the side that romped to a 4-1 Championship victory over Derby on Saturday, while Mark Hughes made six changes for Stoke.
The visitors had Grant to thank for not falling behind in the first minute. Taylor put pressure on a Stoke defender and the ball ran to Diedhiou, who was denied by a brave save by the goalkeeper, advancing to meet the striker.
Grant was the busier keeper in the first half, tipping over a Josh Brownhill shot and a Hordur Magnusson header as City enjoyed the majority of possession.
But Stoke began to threaten as the interval approached. Erik Maxim Choupo-Moting forced a diving save from Luke Steele after getting in behind Callum O'Dowda to produce a fierce shot from a narrow angle.
Within seconds City were striking at the other end, Taylor moving onto a Diedhiou pass to fire narrowly wide with his left foot.
Centre-back Flint produced two goal-line clearances seconds before the break to deny Bruno Martins-Indi and Kevin Wimmer as a Stoke corner ended with pinball around City's six-yard box.
But the Championship side had given as good as they got in the opening 45 minutes, O'Dowda catching the eye with a number of incisive runs.
Stoke made a change at half-time, sending on Saido Berahino for Josh Tymon. But it was City who deservedly made the breakthrough with Diedhiou's goal.
Stoke responded to the setback and Charlie Adam's low 20-yard shot brought a diving save from Steele on his line.
In the 57th minute Berahino made room to shoot from 10 yards in a crowded box, but only found the side-netting, then Ramadan Sobhi broke clear - only to try to lift the ball over Steele but send it tamely wide.
It proved an expensive miss as Taylor's goal followed within a minute. Hughes sent on Xherdan Shaqiri in a bid to pep up his side and Steele had to make another save from Choupo-Moting.
Peter Crouch received a rousing ovation from both sets of fans when replaced by Mame Biram Diouf with nine minutes remaining.
City almost extended their lead late on when Grant saved well from Taylor and substitute Joe Bryan fired inches wide.