Feliciano Lopez and Stephane Robert will do battle in the SA Tennis Open final on Sunday after stunning the top two seeds at Montecasino.
Arguably the bigger upset came in Saturday's first semi-final when Robert eased past 18th-ranked David Ferrer 7-5 6-4, while Lopez battled hard to topple world No.13 Gael Monfils in three sets - 3-6 6-1 7-6 (7-1).
Ferrer, a semi-finalist last year, struggled to settle against the base-line play of a man ranked 82 places below him at 100.
Robert was particularly impressive on his first serve in the opening set, winning 19 out of 24 points.
He then wore down his second-seeded opponent in the second set with two breaks of serve to one, which helped him close out the win in one hour 36 minutes.
Top seed Monfils would have been expecting an all-French final after cruising through the first set - 11 aces clearly aiding his cause.
But Lopez had other ideas and started the second set in dominant style, dropping just one game.
The final set went on serve right through to the tie-breaker.
And Monfils, who had previously not lost a set all week in Johannesburg, looked out of it from the outset. He won just a single point as Lopez stormed into the final.
Meanwhile, top seed and home favourite Marin Cilic edged through to the final of the PBZ Zagreb Indoors event with victory over Jurgen Melzer.
Croatian Cilic, who reached the semi-finals of the Australian Open before losing to Andy Murray, had just enough in his arsenal to fend off Austrian Melzer - another Murray victim in Melbourne.
Both players claimed a break of serve in the opening set before Cilic pinched the only break in the next to clinch a popular 7-6 (7-5) 6-4 victory.
In the final he will meet experienced German Michael Berrer, who is playing some of the best tennis of his career at the age of 29.
Berrer, 65th in the world rankings, capitalised on a second serve which carried little threat to beat compatriot Philipp Petzschner 7-6 (8-6) 7-5.
Meanwhile, third seed Thomaz Bellucci ended hometown favourite Fernando Gonzalez's run at the Movistar Open in Santiago and will face Juan Monaco in the final.
The Brazilian, ranked 35th in the world, lost the first set 6-3 but came back to take the second with a decisive break in the 10th game.
And he pushed on to complete a 3-6 6-4 6-3 victory in one hour and 54 minutes.
Second seed Monaco, from Argentina, had a much easier passage to the final with a 6-1 6-4 rout of Brazilian qualifier Joao Souza.
Monaco broke twice in each set and won 68 per cent of points on his serve to seal a routine 73-minute win.