Swansea City recorded a third home win in a row as Matt Grimes scored the only goal of the game to see off Rotherham United at the Liberty Stadium.
The Swans’ skipper netted his first goal for the club in 19 months with a controlled volley from a half-cleared corner just before the half-hour mark.
The ultimate margin of victory could, and perhaps should, have been greater with Jamal Lowe, Liam Cullen and Jake Bidwell among those to be denied.
But, in the end, head coach Steve Cooper will surely be happy with another home win, and another clean sheet in SA1 as his side climbed to fourth in the Championship table.
Cullen made his first start for the Swans as one of four changes from the defeat at Norwich.
Yan Dhanda, captain Grimes and Ben Cabango also came into the side as Korey Smith and Kasey Palmer dropped to the bench, while Andre Ayew and Marc Guehi missed out through injury.
The Swans made a bright start, nice movement from Cullen at a throw-in allowing the hosts to test the Rotherham rearguard early.
Jay Fulton made a key covering tackle to deny Jamie Lindsay a chance after the Millers had escaped into space down the left, but the Swans responded as Dhanda freed Connor Roberts and his cross was deflected wide.
From the resulting corner Cullen met Grimes’ excellent corner, with Jamal Blackman getting down sharply to keep out the striker’s low header.
Cullen then nearly got on the end of sharp counter led by Dhanda and Lowe, but Blackman was alert to cut out the final pass.
But the keeper could not prevent the Swans taking the lead on 28 minutes. Blackman punched a Roberts corner to the edge of the area, where Grimes took aim to fire a low volley through a host of bodies into the net.
It was the midfielder’s first goal since April 2019, and his first from open play for the Swans since August 2015.
It was nearly 2-0 in the 34th minute as Dhanda spun away from three defenders to find Cullen who, in turn, fed Bidwell.
The wing-back’s cross to the far post was a beauty, but Lowe could not quite control as he stretched to try and convert.
Lowe had his head in his hands again a few minutes later when Blackman got himself in a terrible mess dealing with a cross and was well out of his net as the forward’s shot clipped the outside of the post.
Swansea were playing with some real zip and invention and deserved their half-time advantage.
Millers’ boss Paul Warne turned to his bench and sent on Mickel Miller and Trevor Clarke for Jamie Lindsay and Matthew Olosunde at the start of the second half.
But the Swans continued to threaten, Cullen firing straight at Blackman after linking nicely with Lowe, before taking just too long to get away an effort when Roberts nodded the ball down to him.
Dhanda’s guile and inventiveness was causing the visitors problems, and the midfielder came close to a goal when his low curling free-kick beat the wall, but not the fingertips of Blackman.
The lack of a second goal kept Rotherham in contention, and they forced a succession of set-pieces without ever troubling Freddie Woodman.
Instead the Swans spurned another gilt-edged chance when Lowe muscled his way past his marker to tee up Bidwell, who was denied by a brilliant block from Wes Harding.
Opportunities kept coming, Bidwell heading wide from a Dhanda cross, before Ryan Bennett just failed to connect cleanly with a Roberts corner.
Swansea nearly paid for being unable to kill the game off when Kyle Vassell picked out Michael Smith at the far post. The latter's header was scrambled off the line by Bennett and Roberts, with the Millers furious not to get a penalty as they appealed for handball against the Swansea centre-back.
Korey Smith then made a clearance on the line after Woodman had spilled a corner, but the Swans held on.
Swansea City: Freddie Woodman; Ben Cabango, Ryan Bennett, Kyle Naughton; Connor Roberts, Jay Fulton, Matt Grimes (captain), Jake Bidwell; Yan Dhanda (Kasey Palmer 77); Liam Cullen (Wayne Routledge 73), Jamal Lowe (Korey Smith 87).
Unused Substitutes: Steven Benda, Joel Latibeaudiere, Ryan Manning, Tivonge Rushesha, Oli Cooper, Daniel Williams.
Rotherham United: Jamal Blackman; Matt Olosunde (Trevor Clarke 46), Michael Ihiekwe (captain), Angus MacDonald, Wes Harding; Jamie Lindsay (Mickel Miller 46), Dan Barlaser, Matt Crooks; Florian Jozefzoon (Kyle Vassell), George Hirst (Michael Smith 54), Ben Wiles.
Unused Substitutes: Viktor Johansson, Adam Thompson, Billy Jones.
Referee: Matthew Donohue