Stuttgart returned to winning ways to dent Hertha Berlin's title hopes with victory at the Mercedes-Benz Arena.
Two goals early in the second half from Cacau and Sami Khedira lifted Stuttgart back into contention for a place in Europe next season and ended the league leaders' three-game winning streak.
To make matters worse for Berlin, they lost their captain Arne Friedrich to injury midway through the first half, while results elsewhere reduced their lead at the top of the Bundesliga to just one point.
Stuttgart had been unbeaten in nine games under coach Markus Babbel until last weekend's 4-0 defeat at Werder Bremen.
They seemed desperate to return to winning ways with striker Mario Gomez getting three good chances inside the opening 20 minutes.
First, he dribbled his way around two Berlin defenders before shooting weakly in the 11th minute.
Three minutes later he did manage to get some power behind a shot, but this time he lacked direction as he pulled his effort across the face of goal.
Gomez missed the goal to the other side in the 20th minute with Berlin goalkeeper Jaroslav Drobny beaten by his low shot which flashed wide.
The league leaders were certainly struggling and the sight of Friedrich limping from the field holding his hamstring in the 25th minute would not have encouraged coach Lucien Favre.
He brought Kaka on and Berlin held on until the interval.
Stuttgart caught Berlin cold at the start of the second half with two goals in four minutes.
Cacau scored the first in the 47th minute. It was route-one stuff as a long kick forward from goalkeeper Jens Lehmann was flicked on by Gomez to his strike partner, who beat Drobny from 10 yards out.
Khedira then added a second in the 51st minute, beating Josip Simunic in the air to reach a Thomas Hitzlsperger free-kick and nod it down into the bottom corner.
Favre reacted by bringing Marco Pantelic on as an extra striker for his side and the Serbian, who has been sidelined by injury for over a month, looked keen to make an impact.
He was claiming a penalty within minutes of coming on when he fell under the challenge of Khalid Boulahrouz inside the area, but referee Thorsten Kinhofer waved play-on.
Cacau missed the chance to make it three in the 76th minute as the home side looked to hit Berlin on the break, but two goals proved to be enough to earn Babbel's side all three points.