Manchester United and Ajax both lived dangerously despite first-leg leads to secure a Europa League final meeting in Stockholm on May 24. Both sides went in front on Thursday but both came close to throwing it away.
Manchester United 1-1 Celta Vigo (agg. 2-1)
(Fellaini 17' - Roncaglia 85')
Jose Mourinho's decision to prioritize the Europa League over his side's Premier League campaign moved a step closer to vindication as United saw off the threat of Celta Vigo - but not without some late drama.
The hosts took the lead early. Marcus Rashford, whose free kick in the first leg gave United an aggregate lead, teased in a deep cross to the back post where Marouane Fellaini had peeled free off his marker and nodded in at the front post to ease any nerves around Old Trafford.
Henrikh Mkhitaryan went close for United soon after, as the hosts looked to settle the tie before the break. But Celta rallied somewhat - Pione Sisto testing Sergio Romero with a curler from distance before Daniel Wass glanced a header just wide.
The men in red looked comfortable for most of the second period before the game exploded in to life late on. First, Facundo Roncaglia headed home to leave Celta suddenly a goal away from the final. Then three minutes later, the Argentinian was leaving the pitch after both he and United's Eric Bailly were dismissed for their part in a mass brawl that erupted suddenly in the middle of the pitch. The pushing and shoving between the two men continued as they made their way towards the tunnel.
Celta had one last golden chance in injury time but former Manchester City frontman John Guidetti couldn't find a finish with the keeper stranded.
Lyon 3-1 Ajax (agg. 4-5)
(Lacazette 45', 45+1', Ghezzal 81' - Dolberg 27')
Thursday's other semifinal also produced a thrilling finale as Ajax clung on against a Lyon side who kept their belief despite falling 5-1 behind on aggregate early on.
Both sides had decent chances in the opening skirmishes but it was Ajax's Kasper Dolberg who made the breakthrough. The highly-rated Dane, 19, picked up a loose ball before exchanging passes with German winger Amin Younes. Showing poise beyond his years, Dolberg then dinked a chip over Anthony Lopes.
Lyon looked in real trouble but were thrown a lifeline on the stroke of halftime. Alexandre Lacazette tumbled in the box under a challenge from Matthijs de Ligt to win a somewhat dubious penalty that he tucked away himself.
Seconds later it was two for Lyon and two for Lacazette, who got on the end of a low cross from the right to tap home just before the halftime whistle blew. The French crowd were dreaming of a comeback to rival Barcelona's in the Champions League earlier this season.
The Ligue Un side pressed hard for a third goal as the game became increasingly stretched and littered with bookings. They got their wish with just under ten minutes remaining, as a young Dutch side began to show signs of their inexperince. Rachid Ghezzal's far-post header looked weak but took a huge deflection to wrong-foot Andre Onana, though the Ajax keeper should have done better.
Their hopes were given a further boost just a few minutes later when Nick Viergever received a second yellow card following a clumsy challenge on the edge of the box. But Ajax held on to reach their first European final since they lifted the Champions League in 1995.