Brazil kept their nerve in a penalty shoot-out against Uruguay to clinch a Copa America final showdown against Argentina. Marcelo Sosa's header gave Uruguay a deserved lead, but some dreadful finishing proved to be their undoing.
Adriano equalised for Brazil who almost avoided penalties when Luis Fabiano went agonisingly close near the end.
Brazil converted all five of their penalties, with Julio Cesar's save from Vicente Sanchez proving decisive.
Uruguay made a lively start and nearly went ahead in the second minute when Dario Silva was given a clear run on goal but shot straight at goalkeeper Julio Cesar.
Silva was again the culprit 11 minutes later when he contrived to miss an open goal from point-blank range, somehow turning Carlos Diogo's header onto the crossbar when it seemed impossible to miss.
Uruguay, however, took the lead when Javier Delgado floated over a free kick from the left and midfielder Sosa stooped to head the ball past Julio Cesar.
Sosa and Delgado both came close to increasing Uruguay's lead before halftime, the latter seeing his swerving free kick turned away by Julio Cesar.
Uruguay goalkeeper Sebastian Viera made two good first half saves, punching over Kleberson's drive early on and then turning away a cunning Edu chip in injury time.
Brazil emerged in a different frame of mind after halftime and levelled almost straight away when Alex set Luis Fabiano away on the right and his low shot was turned in from close range by Adriano.
Adriano threatened with two left-foot shots in the next three minutes as Brazil began to take control.
The game lost momentum before bursting back into life in the final five minutes, when Luis Fabiano was agonisingly close for Brazil and Maicon was denied by Viera.
Silva, whose first-half missed was to prove costly, had another good chance but his shot was blocked by Juan.
In the penalty shoot-out, Luisao, Fabiano, Adriano and Renato all slotted home their penalty kicks for Brazil, who came to the tournament without many of theri stars such as Ronaldo and Ronaldinho.
But after Silva, Viera and Omar Pouso netted for Uruguay, Julio Cesar plunged to his left to stop Sanchez's penalty, leaving Alex to slot the decider past Viera.
Brazil: Julio Cesar; Maicon, Luisao, Juan, Gustavo Nery, Renato, Kleberson (Diego, 75), Alex, Edu (Julio Baptista, 75), Adriano, Luis Fabiano.
Uruguay: Viera, Diogo, Bizera, Montero, Dario Rodriguez, Sosa, Cristian Rodriguez (Sanchez 70), Delgado, Perez (Pouso, 81), Silva, Bueno (Forlan 62).
Referee: Marco Rodriguez (Mexico).