Match ends, Ukraine 0, Northern Ireland 2.
Northern Ireland beat Ukraine to earn their first win at a European Championship and remain in contention for a place in the last 16.
West Brom defender Gareth McAuley headed in Oliver Norwood's perfectly delivered free-kick before a hailstorm in Lyon forced the players off for two minutes.
When they returned, Niall McGinn finished a rebound in stoppage time to give Northern Ireland their first victory at a major tournament finals in 34 years.
Germany's 0-0 draw with Poland later on Thursday eliminated Ukraine, meaning Northern Ireland will finish at least third in Group C. A win against Germany in Paris on Tuesday in their final match would guarantee their place in the last 16, while they might already have done enough to qualify as one of the best third-placed teams.
O'Neill's tactical masterclass
O'Neill gambled by making five changes, including relegating top scorer Kyle Lafferty to the substitutes' bench.
Lafferty's place went to 24-year-old Conor Washington, the QPR striker who was working as a postman and playing for St Ives in the ninth tier of English football the last time the Euros were staged in 2012.
But it paid off fantastically as Northern Ireland clinched their first win at a major tournament since famously beating hosts Spain at the 1982 World Cup.
Washington and Jamie Ward proved a handful for a Ukraine team who had kept 21 clean sheets in their previous 39 games.
Northern Ireland's strength from set-pieces told again as McAuley, 36, brilliantly got on the end of Norwood's well-taken free-kick for the first goal.
After a hail shower that saw the players withdrawn and substitutions, six minutes of stoppage time were added on.
But Northern Ireland's nervousness disappeared when Aberdeen winger McGinn pounced to seal victory.
Kings of Lyon make history
It was a night on which Northern Ireland made footballing history on several fronts.
As well as winning for the first time at the European finals, McAuley became the second-oldest scorer at the Euros and McGinn netted the latest ever goal at the tournament.
Once again, the green-shirted fans really got behind their team with loud vocal support.
They also remembered 24-year-old Darren Rodgers, who died in an accidental fall in Nice after the Poland match, with respectful applause in the 24th minute.
The green and white army will celebrate long into the night in Lyon before turning their thoughts to Tuesday's meeting with the world champions.
Defeat would have seen NI's great Euro 2016 adventure fall flat, now they go to Paris with hope in their hearts and buoyed by one of the greatest results in their history.
Man of the match - Gareth McAuley
'Everything good about Northern Ireland was in that stadium'
Northern Ireland boss Michael O'Neill: "We have given ourselves a great chance. It will take various permutations for us not to finish third. That gives us a shout at least. What we need to do is try to nick a point [against Germany]. We will let the players enjoy this and then the minds will switch to the Germans.
"It's hard to put into words and absorb it all at this time. Everything good about Northern Ireland was in that stadium today."
Goalscorer Gareth McAuley: "Nobody has given us a chance. Lots of people said we wouldn't get a point.
"We weren't at it against Poland - to our standards, the intensity we wanted to play at - but tonight was a lot better.
"It's special to score, it'll sink in probably over the next few days. We've got a tough game to look forward to now, and we've got something to play for - that's what we wanted."
Stats you need to know
- Gareth McAuley is the first Northern Ireland player to score at a major tournament since Colin Clarke in the 1986 World Cup against Spain.
- Six of McAuley's eight goals for Northern Ireland have been headers.
- Niall McGinn netted his first goal for Northern Ireland since September 2014 (v Hungary).
- Ukraine have now gone 389 minutes since scoring in a European finals game, last scoring (twice) v Sweden on June 11, 2012.
Northern Ireland will face Germany on Tuesday at Parc des Princes in Paris, while Ukraine will look for their first Euro 2016 point against Poland in Marseille.
- 16SydorchukBooked at 67minsSubstituted forGarmashat 76'minutes
- 9KovalenkoSubstituted forZinchenkoat 83'minutes
- 11SeleznyovBooked at 40minsSubstituted forZozulyaat 72'minutes
- 5EvansBooked at 90mins
- 19WardBooked at 63minsSubstituted forMcGinnat 69'minutes
- 13EvansSubstituted forMcNairat 90+3'minutes
- 14DallasBooked at 87mins
- 11WashingtonSubstituted forMagennisat 84'minutes
- Pavel Kralovec
- Shots on Target
Second Half ends, Ukraine 0, Northern Ireland 2.
Goal! Ukraine 0, Northern Ireland 2. Niall McGinn (Northern Ireland) right footed shot from the centre of the box to the bottom right corner.
Attempt saved. Stuart Dallas (Northern Ireland) right footed shot from outside the box is saved in the bottom right corner. Assisted by Josh Magennis.
Jonny Evans (Northern Ireland) is shown the yellow card.
Foul by Roman Zozulya (Ukraine).
Jonny Evans (Northern Ireland) wins a free kick in the defensive half.
Andriy Yarmolenko (Ukraine) wins a free kick in the defensive half.
Foul by Stuart Dallas (Northern Ireland).
Substitution, Northern Ireland. Patrick McNair replaces Corry Evans.
Foul by Denys Garmash (Ukraine).
Oliver Norwood (Northern Ireland) wins a free kick in the defensive half.
Attempt missed. Yevhen Konoplyanka (Ukraine) right footed shot from outside the box is close, but misses to the left. Assisted by Yaroslav Rakitskiy.
Attempt blocked. Yevhen Konoplyanka (Ukraine) right footed shot from outside the box is blocked. Assisted by Oleksandr Zinchenko.
Andriy Yarmolenko (Ukraine) wins a free kick on the right wing.
Foul by Jonny Evans (Northern Ireland).
Attempt saved. Andriy Yarmolenko (Ukraine) left footed shot from outside the box is saved in the bottom right corner. Assisted by Oleksandr Zinchenko.
Attempt missed. Viacheslav Shevchuk (Ukraine) right footed shot from outside the box misses to the left.
Artem Fedetskiy (Ukraine) wins a free kick on the right wing.
Foul by Steven Davis (Northern Ireland).