Remo Freuler’s 48th minute winner saw Switzerland beat Serbia in a 3-2 thriller to advance to the Last 16 as Group G runners-up.
Xherdan Shaqiri fired Switzerland ahead after 20 minutes from a short pass, but goals from Aleksandar Mitrovic and Dusan Vlahovic saw Serbia fight back to lead 2-1 in the 35th minute.
Breel Embolo then pulled the Swiss level just one minute before the break with a close-range strike.
Freuler eventually found a crucial 48th minute winner from close-range in the 48th minute to send Switzerland through as Group G runners-up.
Switzerland will now meet Portugal in the Round of 16 whilst Brazil will face South Korea for a place in the Quarter-Finals, having topped Group G despite suffering an injury time defeat against Cameroon.
With just one point likely to see Switzerland qualify for the Last 16, they had to make do without Yann Sommer and Nico Elvedi due to illness who were replaced by Gregor Kobel and Fabian Schar, whilst Xherdan Shaqiri replaced Fabian Rieder in a tactical change.
Serbia meanwhile know that only victory could see them advance if Cameroon lose elsewhere and opted to make just one tactical change, as Dusan Vlahovic came in for Nemanja Maksimovic who dropped to the bench.
Switzerland though enjoyed a quick start as Granit Xhaka, Shaqiri and Breel Embolo all saw shots denied by Vanja Milinkovic-Savic within the opening 40 seconds, which led to trading of chances between both teams in the opening 19 minutes.
Rodriguez though broke the deadlock in the 20th minute as he unleashed a quick one-two move up the left with Ruben Vargas, before he found Djibril Sow via a deflection but the latter opted to pass towards Shaqiri and the ex Liverpool player smashed into the near-right corner.
Shaqiri’s goal therefore put Switzerland on course to qualify for the Round of 16 and set up a tie against Portugal, yet Aleksandar Mitrovic nodded Serbia level six minutes later from Dusan Tadic’s cross despite the Swiss still holding their fate in their own hands.
Serbia though refused to sit back as Vlahovic latched onto Tadic’s pass into the box nine minutes later and calmly fired into the far right corner, beyond Gregor Kobel’s reach to put the Serbians on course for the Last 16 whilst Cameroon held Brazil.
Vargas quickly set about trying to immediately pull Switzerland level but his 38th minute shot was denied by Strahinja Pavlovic.
Serbia’s defence eventually failed to hold out until half-time as Silvan Widmer on the overlap up his right flank, swept a low cross across goal for Embolo to roll into the net to restore parity and put Switzerland’s fate back in their own hands at half-time in second place in the group.
Just minutes after the break, Switzerland ensured that their fate was firmly in their own hands as a neat piece of passive play saw Freuler fire in from Vargas’ flicked side-pass just three minutes into the second-half.
The high-intensity of this match though wasn’t sucked out by Freuler’s goal as Serbia proceeded to try and claw their way back into the game, whilst Switzerland remained resolute in their gameplan as both teams constantly traded chances.
Serbia’s bench meanwhile had their own ideas and encroached the pitch in the 65th minute to cause disruption to the flow of play, which led to arguments and referee – Fernando Rapallini served Serbian substitute – Predrag Rajkovic a yellow card amidst the chaos.
Following various substitutions by both teams in the closing stages, Switzerland clung on to snatch the win and a place in the Last 16 for a third consecutive World Cup.
Switzerland will now meet Portugal in the final Round of 16 clash at Lusail Iconic Stadium on Tuesday 6 December at 10pm AST local time, whilst Brazil host South Korea 24 hours earlier at Stadium 974 on Monday 5 December.
Serbia: Vanja Milinkovic-Savic, Milos Veljkovic (Gudelj 55′), Nikola Milenkovic, Strahinja Pavlovic, Andrija Zivkovic (Radonjic 78′), Sergej Milinkovic-Savic (Maksimovic 68′), Sasa Lukic, Filip Kostic, Dusan Tadic (Duricic 78′), Aleksandar Mitrovic, Dusan Vlahovic (Jovic 55′)
Substitutes: Marko Dmitrovic, Strahinja Erakovic, Nemanja Maksimovic, Nemanja Radonjic, Nemanja Gudelj, Luka Jovic, Predrag Rajkovic, Stefan Mitrovic, Srdan Babic, Uros Racic, Filip Djuricic, Darko Lazovic, Ivan Ilic, Filip Mladenovic, Marko Grujic
Switzerland: Gregor Kobel, Silvan Widmer, Manuel Akanji, Fabian Schar, Ricardo Rodriguez, Remo Freuler, Granit Xhaka, Xherdan Shaqiri (Zakaria 69′), Djibril Sow (Fernandes 69′), Ruben Vargas (Fassnacht 83′), Breel Embolo (Okafor 90+6′)
Substitutes: Edimilson Fernandes, Denis Zakaria, Haris Seferovic, Renato Steffen, Jonas Omlin, Michel Aebischer, Christian Fassnacht, Eray Cömert, Noah Okafor, Fabian Frei, Fabian Rieder, Ardon Jashari
Referee: Fernando Rapallini (Argentina)