OXFORD United came out on top in a Good Friday thriller against Charlton Athletic which had just about everything.

Three goals, two red cards and countless other incidents made for a terrific contest that ended with Karl Robinson’s side stretching their unbeaten run to seven games.

The promotion-chasing visitors were ahead inside five minutes through Lyle Taylor’s penalty.

But Curtis Nelson, who had been penalised for the opening goal, equalised on the volley from a corner.

Luke Garbutt had delivered the set piece and quickly found the net from a 25-yard free-kick.

United then shot themselves in the foot when Simon Eastwood handled outside the box to receive a red card.

Debutant Jack Stevens made one astonishing save to protect the lead in a game which finished ten-a-side when Chris Solly was dismissed.

United had ample chances to add a third on the break in a madcap finish, but it did not prove costly as Charlton’s challenge fizzled out.

Ahmed Kashi, available after suspension, was brought straight back in to face his former side at John Mousinho’s expense.

Top scorer James Henry also started, as a fatigued Gavin Whyte dropped out altogether.

Charlton were hoping to use the early kick-off to make up ground on their automatic promotion rivals and they came flying out of the traps.

Eastwood was called into action inside the opening minute, parrying Taylor’s shot after a free-kick fell his way in the box.

Charlton had bossed the early stages of the reverse fixture – and just like at the Valley they went ahead through a Taylor penalty.

Nelson protested his innocence after Joe Aribo went down in the box, but referee Darren Drysdale immediately pointed to the spot.

Whether the centre back had a claim or not, United had chances to snuff out the danger, which began with a Kashi slip, before it got that far.

The home side were up against it in the opening quarter of an hour, but when they finally got a foothold the response was high-quality.

Cameron Brannagan so nearly came up with an equaliser after some great work on the right from Mark Sykes, but the midfielder’s shot was headed over the crossbar by Jason Pearce.

From the corner, Garbutt’s delivery swung beyond the far post, where Nelson cushioned a volley into the net like a seasoned striker.

Within four minutes the home side were ahead with an even better finish.

Again Sykes provided a spark, latching on to a clever pass from Kashi and cutting in off the right flank before being brought down.

The free-kick was 25 yards out, but looked in the moment Garbutt made contact with a perfectly-struck effort which beat goalkeeper Dillon Phillips’s despairing dive.

Buoyed by their double, United played some excellent football up to half-time.

With Charlton needing a win to keep their hopes of a top-two finish intact, they committed men forward which left space for Robinson’s side to attack.

The Addicks remained a danger, though, especially with Taylor. He was inexplicably given space on the edge of the box just after the half-hour mark, but Nelson made an important block.

United looked just as likely to get the game’s next goal, until the 53rd minute.

Taylor chased a ball over the top, but Eastwood was always going to get to the ball first. The only question was whether he cleared the ball or allowed it to come into his area, but he did neither and caught it a yard outside the box.

The straight red card meant a debut for Stevens, who became the 100th academy product to make his senior debut.

Sykes made way, but the next substitution saw Mackie replace Kashi as United dug deep under pressure.

It was a curious swap, but Mackie’s experience was quickly in evidence as he took every opportunity to slow the game down.

He was also the player fouled 16 minutes from time by Solly, who was dismissed. It looked a harsh decision, but the referee was in a good position and reacted instantly.

Despite Charlton losing their numerical advantage, they continued to pile forward and racked up a succession of corners.

Patrick Bauer thought he had equalised 11 minutes from time with a ricocheted shot, but Stevens leapt backwards to claw the ball off the line.

The home fans roared as if they had scored a third goal, which should have arrived in the 88th minute.

As Charlton took huge risks to get back into the game they were caught out.

Rob Dickie’s pass sent Sinclair clean through, but he was brought down by George Lapslie. The referee waved play on, allowing Garbutt to go through and have his shot saved, before only cautioning Lapslie.

United had more opportunities in stoppage-time, notably in the final seconds where Josh Ruffels almost capped off an end-to-end move, but the final whistle followed seconds later.

Oxford Utd (4-2-3-1): Eastwood, Long, Nelson, Dickie, Ruffels, Kashi (Mackie 63), Brannagan, Sykes (Stevens 55), Henry (Hanson 80), Garbutt, Sinclair.

Unused subs: Mousinho, Carruthers, Graham, Napa.

Booked: Garbutt, Brannagan, Kashi.

Sent off: Eastwood.

Charlton Ath (4-3-3): Phillips, Dijksteel (Lapslie 69), Pearce, Bauer, Solly, Cullen, Bielik, Aribo, Reeves (Parker HT), Taylor, Williams.

Unused subs: Maxwell, Sarr, Pratley, Morgan.

Booked: Bielik, Lapslie.

Sent off: Solly.

Referee: Darren Drysdale (Lincolnshire).

Attendance: 8,680 (1,806 visitors).