Vikram Solanki missed out on a century by seven runs but helped Surrey reach 289 for a first-innings lead of 70 over relegation rivals Derbyshire on day two of the LV= County Championship Division One contest at the Kia Oval.
Solanki faced 141 balls and hit 14 fours and a six as he shared a crucial fourth-wicket stand of 96 with Zander de Bruyn.
But on a pitch offering encouragement to the bowlers, David Wainwright took 3-46 and Mark Footitt 4-50 to help polish off the Surrey tail before the day ended with the visitors 13 without loss in their second innings, a deficit of 57.
Following the departure of Arun Harinath, who was lbw to Footitt in the second over of the day, Rory Burns and Hashim Amla took advantage of anything short and wide of off stump before the latter edged a drive to third slip for 16.
Solanki hit five boundaries in as many overs from Alex Hughes, who was also pulled for four by Burns.
Peter Burgoyne replaced Hughes and struck with his ninth delivery as Burns, playing back, fell lbw for 24.
Without looking completely at ease, Solanki and De Bruyn registered the first 50-run alliance of the match.
De Bruyn hit two successive fours in the first over after lunch before retreating back into his shell. But the afternoon session saw Solanki play with increasing conviction.
The former Worcestershire captain moved to 40 with a cut four off Burgoyne, then soon hit the same bowler for a six to bring up an 89-ball half-century.
Just when looked as if De Bruyn had also got to grips with the bowling, he chose the wrong delivery to pull and was lbw to Wainwright for 40.
Steven Davies was fortunate to survive a chance at short extra-cover on four, but Solanki continued to dictate terms until he drove at Wainwright and the ball rolled on to his stumps via a boot.
Wainwright struck again shortly after tea when Davies was caught at short midwicket for 29.
But with Zafar Ansari playing second fiddle to Gareth Batty, 47 runs were added for the seventh wicket before Surrey slipped from 287 for six to 289 all out in the space of 13 deliveries.
Batty secured a second batting point for his side by lifting Burgoyne over wide mid-on for four. But having just driven Matt Higginbottom straight down the ground, the Surrey captain was lbw for 35.
Chris Tremlett, pushing forward, was caught behind off Footitt, who then removed Tim Linley's middle stump. With George Edwards bowled shouldering arms to Higginbottom, Ansari was left stranded on 18.