Pierre-Emerick Aubameyang netted his 30th goal of the season as Borussia Dortmund progressed to the semi-finals of the DFB-Pokal with a 3-1 win at Stuttgart on Tuesday.
The clash was set against a backdrop of fan discontent as Dortmund supporters staged a boycott for the opening 20 minutes of play at the Mercedes-Benz Arena in protest against ticket prices.
The travelling support also threw tennis balls onto the pitch but Dortmund made the sure the trip was worth the cost as they moved within one game of a return to the final.
Dortmund - beaten in the showpiece in each of the past two seasons - took the lead in the fifth minute as Marco Reus scored his second goal in three games, with Aubameyang involved in the build-up.
Stuttgart went into the game unbeaten in seven and on the back of five straight wins and levelled courtesy of a Lukas Rupp strike from just outside the 18-yard box in the 21st minute.
But 10 minutes later Aubameyang made it 30 goals in 31 games in 2015-16 with a fierce effort, before laying on a late third for Henrikh Mkhitaryan as Dortmund joined Werder Bremen in the last four by extending their unbeaten run against Stuttgart to 12 games in all competitions.
Reus opened the scoring with the first real chance of the game, the Germany international firing into the roof of the net at the far post after Mkhitaryan had failed to connect with Aubameyang's ball across goal.
Dortmund fans who had stayed away from their seats for the opening 20 minutes were soon disappointed as, shortly after the end of their boycott, Stuttgart levelled matters through Rupp.
The attacking midfielder found the net with a deflected strike from the edge of the area after Daniel Didavi's initial effort had been blocked by Mats Hummels.
Play was then briefly stopped as Dortmund fans threw a plethora of tennis balls on to the pitch, with the visiting players clearing them from the field while Hummels pleaded with the supporters to stop.
But Dortmund were soon celebrating again thanks to talisman Aubameyang, who latched on to a Reus pass and rifled a fierce low strike beyond the despairing dive of Mitchell Langerak.
Aubameyang would have made it 3-1 if not for former team-mate Langerak, the Australian doing well to turn the Gabon international's close-range effort over the bar following an excellent ball from Reus 11 minutes after the restart.
Mkhitaryan, Aubameyang and Reus all failed to take advantage of more sloppy Stuttgart defending in a chaotic scramble in the area in the 70th minute.
Georg Niedermeier then did brilliantly to prevent Mkhitaryan from converting an Aubameyang cross before Filip Kostic and Christian Gentner went close at the other end as Stuttgart pushed for an equaliser.
But the hosts were caught on the break late on, Aubameyang winning the ball in midfield and racing clear to square for Mkhitaryan to tap into an empty net and seal a safe passage for Dortmund.