Swansea City returned to winning ways and ended Oxford United’s unbeaten home record as Žan Vipotnik and Florian Bianchini got the goals at the Kassam Stadium.
The Slovenian striker turned in his second goal for the Swans seven minutes before the interval, meeting Ronald’s cross after an outstanding run by Josh Key had carried play from one end of the field to the other.
The visitors had chances to extend their lead, with Myles Peart-Harris hitting the crossbar, Gonçalo Franco being denied by the keeper and Viptonik going agonisingly close to his second of the game.
But they took one late on when substitute Bianchini raced onto a through ball and sent a low right-footed effort across the keeper and into the net for his first goal for the club.
Dane Scarlett pulled one back for Oxford with two minutes to play but the Swans saw out the game to claim victory.
The win was no less than the Swans deserved, and head coach Luke Williams will have been pleased to see his side get the full reward for their dominance after recent frustrations.
The Swans had shown one change from the defeat to Millwall as Joe Allen came in for Liam Cullen, while Cyrus Christie was named among the substitutes having joined on Friday.
Ollie Cooper and Jay Fulton were absent through injury for the visitors.
The Swans started smartly, captain Matt Grimes driving forward to find Key, whose final cross was gathered in by Jamie Cumming in the Oxford goal.
Grimes then saw his low shot cannon wide off Josh Key after a well-worked short corner routine, before Harry Darling’s header from a corner was blocked.
Swansea went closer still, a near-post corner delivery was flicked goalward by Peart-Harris and onto the crossbar.
The visitors were in control, and Franco saw a cross cut out after running on to a Peart-Harris pass, before the Portuguese midfielder fired a fizzing effort over the bar.
Still Swansea pressed, with Vipotnik unable to reach a Grimes ball to the far post. Oxford could barely get out of their own half and their frustrations were summed up when Tyler Goodrham saw yellow for a late lunge on the visiting skipper.
The Swans dominance deserved a goal and they got it in the 38th minute. Key was the architect, getting himself out of bother deep in his own half to surge forward.
His pass found Ronald’s run into the box, and the Brazilian laid the ball on for Vipotnik to turn in at the far post.
Franco missed a fine chance to double their lead by sending a tame shot into the arms of Cumming after a defensive mix-up had caught the keeper out of position.
Oxford sought a response, Darling diverting a Goodrham effort over the bar, before Ruben Rodrigues’ saw his header cannon off the bar from the resulting corner as the Swans ended the half with the lead.
The visitors enjoyed a prolonged period of possession early in the second half that ended with Vipotnik and Peart-Harris getting in each other’s way as they looked to meet Ronald’s drifted cross.
But they had a let-off when Mark Harris was unable to turn home an inviting cross from close range.
Vipotnik nearly had a second moments later, but Cumming made a superb reaction save to deny the striker as he met Darling’s knockdown.
Peart-Harris dragged an effort narrowly wide from just outside the area and Cumming gathered in Vipotnik’s volley from a Josh Tymon cross as the hour mark neared.
The game settled again after that frantic period, with Franco narrowly off target as he set his sights from distance.
Vipotnik had a shot blocked after Darling had thundered into win the ball and sent substitute Liam Cullen careering forward.
At the other end Malcolm Ebiowei fired wastefully over for the hosts inside the final 20 minutes, and Grimes made an unbelievable block to deny Scarlett.
And it proved an important moment as the Swans struck from their next attack with Bianchini sweeping home from Franco's through ball.
Scarlett found the far corner for the hosts to set up a frantic finale, but the Swans took the spoils.
Swansea City: Lawrence Vigouroux, Josh Key, Ben Cabango, Harry Darling, Josh Tymon (Kyle Naughton 84); Matt Grimes (captain), Joe Allen (Liam Cullen 55), Gonçalo Franco (Cyrus Christie 84); Ronald, Myles-Peart-Harris (Azeem Abdulai 84), Žan Vipotnik (Florian Bianchini 71).
Unused Substitutes: Jon McLaughlin, Nathan Tjoe-A-On, Nelson Abbey, Aimar Govea.
Oxford United: Jamie Cumming, Ciaron Brown, Elliott Moore (captain), Josh McEachran (Will Vaulks 60), Mark Harris (Dane Scarlett 60), Louie Sibley (Idris El Mizouni 46), Ben Nelson, Owen Dale (Malcolm Ebiowei 60), Tyler Goodrham, Ruben Rodrigues (Greg Leigh 82), Peter Kioso.
Unused Substitutes: Mat Ingram, Sam Long, Hidde Ter Avest, Will Goodwin.
Referee: Michael Salisbury
Attendance: 11,454