An 81st-minute header from substitute Marley Watkins gave Bristol City a 1-0 Championship victory over Sheffield United at Ashton Gate in a match that did credit to both teams.
Watkins cleverly directed a glancing header from fellow substitute Callum O'Dowda's right-wing cross inside the far post to give Lee Johnson's men their fourth successive win.
The goal ended a similar run by the visitors, who lost nothing in defeat at the end of a closely-fought game.
United had the better of a first half full of attacking intent. But it was City who almost struck first on four minutes when Niclas Eliasson's shot was parried by Dean Henderson and Jay Dasilva volleyed wide from the rebound.
As the visitors got into their stride, Billy Sharp teed up David McGoldrick on the edge of the box for a shot that was badly miscued wide.
An Oliver Norwood free-kick from a narrow angle flashed across City's goal on 25 minutes, with a defender deflecting it out for a corner.
The best chances were falling to McGoldrick who shot wide again following a Tomas Kalas error and then glanced a header the wrong side of a post from another Norwood free-kick.
City finished the first half as they had begun it, with Famara Diedhiou heading over from Dasilva's far-post cross. It had been 45 minutes of high-tempo football, both sides getting men forward at every opportunity.
United came out firing again for the second period and some poor defending allowed John Lundstram to get in a right-footed curling shot, which did not carry enough pace to beat Niki Maenpaa.
By the hour mark home boss Johnson had seen enough and made a double change, sending on Watkins and O'Dowda for Dasilva and Eliasson.
Blades manager Chris Wilder quickly responded with two substitutions of his own as Marvin Johnson and Conor Washington took over from Mark Duffy and Sharp.
City created their best chance to date on 70 minutes when Diedhiou for once escaped the attentions of United's impressive back line only to mishit his right-footed volley wide.
There was an even better opportunity moments later as Watkins rose unmarked to meet a Lloyd Kelly cross, only to mistime his header.
Andreas Weimann had a shot blocked in a crowded penalty area as City enjoyed their best spell of the match. Marlon Pack appealed vainly for a penalty when his 20-yard drive hit a defender.
Watkins made no mistake with his second headed chance and Wilder swiftly sent on Leon Clarke to try and rescue the game.
Washington put a header wide as United poured forward. But at the other end it took a desperate Jack O'Connell foul, at the expense of a yellow card, to stop O'Dowda breaking clear.