Match ends, Stoke City 1, Swansea City 2.
Andre Ayew's last-gasp penalty gave Swansea City a contentious 2-1 victory at Stoke and saw them close the gap on the automatic promotion places to a point.
Ayew converted in the 96th minute after Jack Clarke was adjudged to have tripped Kyle Naughton.
Stoke had gone ahead through Nick Powell's measured finish before Connor Roberts levelled with a fine volley.
Potters boss Michael O'Neill was left fuming over the late spot-kick.
But opposite number Steve Cooper celebrated with his staff after seeing Swansea snatch a welcome win following two defeats in their previous three games.
They stay fourth in the table but have two games in hand on the three sides above, while Stoke - who hit the woodwork twice - remain 11th.
Stoke came into this contest on the back of defeats at Brentford and Barnsley last week, though they had won their previous two home fixtures to lift spirits after an 11-game winless streak.
And they were soon on the front foot here, pressing Swansea high and - just as they had done at Brentford last weekend - forcing an error which led to an early opener.
Swansea were caught trying to play out from the back, with Steven Fletcher intercepting Marc Guehi's square pass and touching the ball expertly into the path of Powell.
With time and space on the edge of the area, Powell accepted the gift as he guided a low shot beyond the helpless Freddie Woodman.
This was a test of character for Swansea given their recent struggles, yet they responded with a stylish leveller.
Ayew sent Ryan Manning into space down the left and he whipped in a cross which was clinically finished by Wales international Roberts.
Not for the first time this season, Swansea's wing-backs had made a telling contribution in the final third.
Stoke wing-back Smith almost followed suit with a 25-yard drive which hit the outside of the post, before Manning - who was one of four changes made by Cooper following their defeat to Bristol City last time out - threatened with two efforts from distance.
The hosts came again before the break, with Harry Souttar's half-volley forcing a smart Woodman save after a corner was half-cleared.
Stoke should have restored the lead early in the second period when Fletcher, with the goal at his mercy, could only steer Smith's inviting centre on to the upright from point-blank range, and another big chance went begging as James Chester blazed the rebound over the bar.
Opportunities were hard to come by at both ends from that point on, although Roberts came close to a scoring a second spectacular volley but this time he was denied by Angus Gunn.
With time almost up, Korey Smith sent Naughton scampering into the box and, after he got across Jack Clarke and tumbled to the ground, referee David Webb pointed to the spot.
When Stoke's protests had died down, Ayew ambled up to convert his second spot-kick in as many games and hand Swansea what prove to be a crucial win in the race for the Premier League.
Stoke manager Michael O'Neill:
"(The penalty) is a big call, an incorrect call in my opinion having seen the incident back.
"The referee acknowledged there was a foul on James Chester leading up to it as Andre Ayew runs into James Chester and throws himself to the ground to try to win a free-kick. The referee decides to not give that then within seconds gives a penalty for what he alleges was a foul on Naughton.
"I think the contact was the Swansea player on his own leg. I think he inadvertently tripped himself up. Only the player can tell you whether he dived or not.
"Jack Clarke is trying not to make contact. I have seen it from three angles and I don't think there is any contact.
"I am disappointed as a whole because we didn't deserve not to take something from the game."
Swansea head coach Steve Cooper:
"I'll be honest, I haven't seen it back on the TV. I thought it was a penalty at the time, particularity with it being Kyle Naughton and him being a defender, he's usually defending those situations.
"You never give up and you keep going. That's what happened. We got a chance with the penalty in the end.
"We're up against one of the strongest squads, regardless of league position or form. You come up against Stoke at any time, it's going to be a really tough game.
"But we played well tonight. We had a difficult start to the game with a goal that can sometimes happen with the way we play, but we stuck to the plan, got back in the game and scored an excellent goal with a fantastic cross from Ryan and just as good a finish from Connor."
- 6BatthSubstituted forClarkeat 45'minutes
- 25PowellSubstituted forThompsonat 86'minutes
- 3ManningBooked at 71mins
- 10A Ayew
- 9LoweSubstituted forHourihaneat 70'minutes
- David Webb
- Shots on Target
Second Half ends, Stoke City 1, Swansea City 2.
Goal! Stoke City 1, Swansea City 2. André Ayew (Swansea City) converts the penalty with a left footed shot to the bottom left corner.
Penalty conceded by Jack Clarke (Stoke City) after a foul in the penalty area.
Penalty Swansea City. Kyle Naughton draws a foul in the penalty area.
Attempt missed. Joe Allen (Stoke City) left footed shot from the centre of the box misses to the left. Assisted by Jacob Brown.
Substitution, Stoke City. Jordan Thompson replaces Nick Powell.
Attempt saved. Conor Hourihane (Swansea City) left footed shot from outside the box is saved in the centre of the goal.
Foul by Joe Allen (Stoke City).
Ryan Manning (Swansea City) wins a free kick in the attacking half.
Attempt saved. Connor Roberts (Swansea City) right footed shot from the centre of the box is saved in the centre of the goal. Assisted by Matt Grimes with a cross.
Jack Clarke (Stoke City) wins a free kick in the attacking half.
Foul by Matt Grimes (Swansea City).
Corner, Swansea City. Conceded by Rhys Norrington-Davies.
Corner, Swansea City. Conceded by James Chester.
Offside, Swansea City. Conor Hourihane tries a through ball, but André Ayew is caught offside.
Ryan Manning (Swansea City) is shown the yellow card for a bad foul.
Jacob Brown (Stoke City) wins a free kick in the defensive half.
Foul by Ryan Manning (Swansea City).
Substitution, Swansea City. Conor Hourihane replaces Jamal Lowe.