Ballymena kept alive their top six hopes with a fine win at Dungannon in the Danske Bank Premiership.
The Sky Blues moved within five points of Glentoran after edging out the Swifts in a Stangmore thriller.
David Jeffrey’s men, who have two games in hand on the Glens, scored early through Jonathan McMurray, only to be pegged back.
Two more goals took the game away from Dungannon, who finished with 10 men.
Ballymena went in front in the 12th minute.
McMurray did brilliantly to control a raking pass, easing away from a defender and scoring with a low drive at the near post.
But Dungannon hit back two minutes later - and what a strike it was.
Daniel Hughes picked the ball up in the box and hit an audacious right-foot effort that looped over the goalkeeper and into the net.
It was some way for the January signing to score his first goal for his new club.
Ballymena, though, were quick to retake the lead.
A foul on Conor McCloskey led to a free-kick just outside the penalty area, and Tony Kane sent a fine free-kick racing into the net.
Dungannon put together some nice moves as they sought to get level again.
Ryan Harpur steered a header wide after a fabulous cross while Ryan Mayse drove a shot from 20 yards just over.
Ballymena scored again eight minutes into the second half.
Kane delivered a pinpoint cross to pick out Leroy Millar, who headed home, opening up a two-goal advantage for the Sky Blues.
However, back came the Swifts.
They made it 3-2 when Harpur’s free-kick into the box was turned back across goal, and Hughes netted from close range.
It was all happening at Stangmore, and a red card was next to follow.
McElroy was sent off after appearing to kick out, an incident which saw players from both sides come together.
Ballymena’s Andrew Burns and Swifts goalkeeper Andrew Coleman were also booked for their part in the scuffle, which was more handbags than anything sinister.
The visitors, with the extra man, held out to secure what could be a crucial win.
DUNGANNON: Coleman, Lowe, Armstrong, Wilson (Teggart, 81), O’Rourke, Hutchinson (Clucas, 40), Harpur, Mayse (Burke, 72), Patton, McElroy, Hughes
Subs not used: Addis, Fitzpatrick
BALLYMENA UTD: Glendinning, Burns, Ervin, Owens, Kane, McCloskey, Millar, Quigley, McCullough, Friel, McMurray (Shevlin, 71)
Subs not used: Faulkner, Weir, McCaffrey, McKinney
Referee: Tony Clarke