Millwall maintained their strong finish to the Championship season with a final-day win at Swansea City.
With both teams safely mid-table and nothing riding on the match, the first half represented an archetypal end-of-season encounter of little intensity and precious few scoring opportunities.
But the second period offered more excitement with Millwall missing a handful of chances before Swansea captain Matt Grimes had a penalty saved by Matija Sarkic.
Substitute Casper De Norre then fired in a low first-time shot to give the visitors a fifth successive victory and leapfrog the Swans into 13th place.
Both sides ended the game with 10 men as Swansea substitute Jerry Yates and Millwall centre-back Japhet Tanganga were sent off for clashing off the ball.
Millwall had been mired in a battle to avoid relegation when their legendary former striker Neil Harris returned in February for a second spell in charge, but the ex-Cardiff City boss had already steered the London club to safety long before this trip to south Wales.
Swansea were enjoying a similarly productive end to their campaign, with three wins and a draw from their past four games.
With so little at stake for either side, the first half was a bit of a non-event.
Swansea winger Ronald hit a tricky first-time effort over from Liam Cullen’s whipped cross and Jamie Paterson glanced a header over from Ollie Cooper’s clipped ball in.
But the game’s first shot on target did not arrive until two minutes before the break, with Millwall’s Ryan Longman firing straight at Carl Rushworth.
The second followed early in the second half as Rushworth caught Jake Cooper’s header, while Danny McNamara shot narrowly wide.
Ronald brought the home crowd to their feet with a dangerous run into the Millwall penalty area and, after turning Cooper one way then twisting the other, the Brazilian was brought down by the centre-back and referee Geoff Eltringham pointed to the spot.
Sarkic dived to his right to save Grimes’ penalty and, six minutes later, Millwall were ahead.
Ronald lost possession in his own half and McNamara teed up De Norre, who timed his run into the box to score his first goal for Millwall.
With five minutes left, the game took an unexpectedly aggressive turn when Yates and Tanganga were both shown red cards after tangling off the ball.
It was unclear what sparked the incident but, seemingly reacting to something Tanganga said, Swansea striker Yates grabbed hold of the Millwall centre-back and appeared to throw a punch.
Swansea head coach Luke Williams: “Very disappointing. I think there wasn’t too much in the game in terms of goalmouth stuff. It’s obvious we dominate the game with the ball but we didn’t cause enough issues with the ball.
“When the opposition are so far from your goal, you should be able to concede less shots against. It’s not a good performance and unfortunately we miss a penalty and I think at that point the game hinges on who scores first.
“It’s a disappointing way to end but we have to move forward, draw a line under this season and move on to next season.”
Millwall manager Neil Harris: “I felt comfortable all game. They've done well recently but we were comfortable.
“Swansea had the ball exactly where we wanted them to have the ball. Two touches in the penalty area in the first 45 minutes. They didn't have shot on our goal until the penalty.
“After the penalty our game went up another level. I thought we had three or four good chances to win the game before the goal and thought we deserved to win the game.”