Swansea City recorded three wins in a row for the first time this season as they eased past nine-man Stoke at the Liberty.
The Swans had surged into a 2-0 lead thanks to a superb strike from Daniel James and Mike van der Hoorn’s close-range finish.
They were pegged back by James McClean on the stroke of half-time, but the visitors saw Bruno Martins Indi and Tom Edwards sent off – with all their cards coming for fouls on James – to end their hopes of a comeback.
And Oli McBurnie made sure of the three points by heading in his 19th goal of the season in the closing stages.
The last time Swansea won three league games in a row was at the tail-end of the 2016-17, and this also ended Stoke’s run of six games without conceding a goal.
It keeps Swansea’s outside chances of a play-off berth alive, but once more it was the manner of the victory that was most pleasing as Graham Potter’s men picked up where they had left off against Brentford and Middlesbrough.
Potter had kept alterations to a minimum had making just the one enforced change from the weekend win over Middlesbrough as McBurnie came in for the injured Bersant Celina.
Stoke, meanwhile, fielded their three-strong contingent of former Swans as Ashley Williams, Joe Allen and Sam Clucas all started.
The Swans were brimming with confidence and they signalled their intent with a fast counter as Matt Grimes sent James speeding away from Tom Edwards.
The winger found Nathan Dyer, but his left-footed shot was held by Jack Butland.
Seconds later and it was McBurnie driving at the opposition, but the recalled striker was just unable to take a Wayne Routledge flick in his stride.
Swansea nearly took the lead in the 13th minute, harrying Stoke into an error at the back for Routledge to tee up McBurnie, who saw his low strike superbly saved by Butland.
It was all Swansea and they took the lead in the 23rd minute with a stunning strike from James.
In front of the watching Wales manager Ryan Giggs, he cut in onto his right foot and curled a wonderful strike beyond Butland’s grasp to find the net via the far post.
It was the first goal Stoke had conceded in nearly 10 hours of football and they nearly had an immediate response as Sam Vokes steered wide from a threatening cross to the near post from which the striker ought to have done better.
But the hosts were soon back on the front foot, with Dyer flashing an angled effort just wide of Butland’s far post.
It was no exaggeration to say it was one-way traffic, with the Swans having nearly 75 per cent of possession and they went close again as McBurnie’s strike was deflected over the bar after lovely movement by Dyer.
It proved a brief respite for the visitors as the Swans doubled their lead on 40 minutes as Van der Hoorn steered home Routledge’s driven cross from close range.
It was no more than the home side deserved but they were pegged back on the stroke of half-time by McClean.
The winger was given time to drive forward and he unleashed a powerful drive that flew through Kristoffer Nordfeldt into the far corner.
The Swans looked to restore the two-goal cushion upon the resumption, putting further pressure on an overworked Potters’ rearguard.
The visitors’ task got more difficult seven minutes into the half when Martins Indi saw red after bringing down James as the winger cut inside the defender to head towards goal.
Referee James Linington took his time before making the decision, ultimately feeling there was no cover to deny James a shot on goal.
From the resulting free-kick George Byers hit the outside of the post with Butland beaten.
Swansea then had a penalty appeal turned down as Dyer went down under pressure from Clucas but Lingington waved the appeals away.
But the official soon had his cards in his hand again as Edwards, having previously been booked picked up a second yellow after hauling James down once more.
Down to nine, Stoke were being stretched by Swansea’s movement and the pace of James, with the winger and McBurnie both flashing efforts wide of goal as the hour mark arrived.
The striker then volleyed over from a fantastic Connor Roberts cross as Swansea continued to strive for that additional cushion.
Dyer turned Clucas inside and out to force Butland to parry the ball around his near post.
Short on numbers, Stoke were finding it difficult to get out of their own half, and only good defending prevented Roberts finding the net from Dyer’s smart pass.
With eight minutes to go substitute Barrie McKay sent James racing away again, but the winger fired at goal when he had McBurnie in support.
But the striker got his chance three minutes later as a lovely McKay cross saw McBurnie nod past Butland.
Swansea City: Kristoffer Nordfeldt; Connor Roberts, Mike van der Hoorn (capt), Cameron Carter-Vickers, Kyle Naughton (Barrie McKay 77); George Byers, Matt Grimes; Nathan Dyer, Wayne Routledge (Jay Fulton 68), Daniel James (Joel Asoro 87); Oli McBurnie.
Subs not used: Steven Benda, Joe Rodon, Luciano Narsingh, Courtney Baker-Richardson.
Stoke City: Jack Butland, Joe Allen, Ashley Williams, Peter Etebo Charlie Adam 90), Benik Afobe (Nathan Collins 64), Sam Vokes (Mame Diouf 79), James McClean, Danny Batth (capt), Bruno Martins Indi, Sam Clucas, Tom Edwards.
Subs not used: Adam Federici, Bojan, Thibaud Verlinden, Ryan Woods.