It took Borussia Dortmund a while to match the warm temperatures of the afternoon, but when they did their attack looked as good as it has all season. Their American winger got it all started against Stuttgart.
Borussia Dortmund 3-0 Stuttgart
(Pulisic 38', Batshuayi 48', Philipp 59')
Signal Iduna Park, Dortmund
A cross from Christian Pulisic that crept in at the back post changed the game in Dortmund's favor and left Stuttgart stunned.
In the first half, Dortmund were largely slow to react and Stuttgart looked good for the point they were heading towards. Then Pulisic drifted a cross to the far post that went over Ron-Robert Zieler and clipped the post before going in.
Stuttgart never really recovered, and that much was clear even after the break. Michy Batshuayi's flick and spin started a move that the Belgian neatly finished off in the box, meeting Nuri Sahin's low cross for his seventh goal of the season.
Read more: Hamburg stun Schalke, Bayern win title
Not long afterwards, Maximilian Philipp scored a rebound after his initial effort had been parried as Dortmund's attack started to shine as brightly as the sun.
Pulisic might have added a fourth late on but was denied by Zieler as Stuttgart fell to their first defeat under head coach Tayfun Korkut. The win draws BVB within one point of second-placed Schalke, who they will face in an eagerly anticipated Ruhr derby next weekend.
Re-live the action here:
FULLTIME Borussia Dortmund 3-0 Stuttgart
90' — SAVE! Zieler makes a strong parry to his left to deny Sahin's header from making it a heavy final score.
88' — Bundesliga debut for 17-year-old winger Sergio Gomez. What a moment for him. This one is all but done.
86' — Gomez cracks the bar with a shot out of nowhere. Stuttgart certainly deserve a consolation goal for their efforts today.
84' — In relative terms, Dortmund have been good today. That's not to say Stuttgart have been bad, they've actually been in control for a lot of this one, but that touch of fortune in the first half seems to have injected life into Dortmund's attack. Good timing too. Next weekend's opponent? Schalke in the derby.
78' — Philipp comes off, as Jadon Sancho takes his place for the final 10 minutes. Good chance for the Englishman to get in on the act. Oh, and Pulisic is climbing that US scorer table (see below).
76' — Batshuayi nearly adds a second, but puts it just wide. Then Dortmund break again, Philipp tries to square it but Stuttgart clear. Turning into quite the performance from BVB.
71' — An incredible driven ball cuts through Beck at the back for Stuttgart and puts Pulisic in, who cuts back and shoots only for Zieler to deny the American a second and Dortmund a fourth. Would perhaps be a bit harsh.
65' — Seven thousand Stuttgart fans watching their highest defeat of the season, currently. They were left a bit stunned after Pulisic's fluke and never recovered after the break either. Tough.
59' — GOAL! Borussia Dortmund 3-0 Stuttgart (Philipp) The attacker doesn't need to worry anymore. Pulisic heads a cross back into the box and although Philipp's first effort is saved, he bundles home the rebound. Stuttgart's first defeat under Tayfun Korkut incoming, but this also makes next weekend's Ruhr derby even tastier. Just the one point between second-placed Schalke and third-placed Dortmund now.
55' — Philipp has his head in his hands after hitting a pass beyond Reus rather than to him. Had it been just in front of his teammate, who was on the edge of the box at the time, it might have been 3-0 and contest over.
48' — GOAL! Borussia Dortmund 2-0 Stuttgart (Batshuayi) Another fantastic goal from the Belgian striker. He starts with a flick and a spin and at the end of it he's there to meet Sahin's low cross, steering the ball into the far corner. Just gorgeous, and number seven on the season for Batshuayi.
46' — Second half has started. Pulisic with a smile on his way out to former teammate Jacob Bruun Larsen, who is currently on loan at Stuttgart. Words exchanged, perhaps something like: "You didn't mean that, did you?"
HALFTIME - Borussia Dortmund 1-0 Stuttgart (Pulisic)
Undeserved but ahead, Dortmund go into the break the happier of the two. Stuttgart, on the other hand, will be scratching their heads as to how they're behind.
41' — Sahin plays a neat one-two with Reus, who hammers a half volley towards goal. Just wide. Dortmund suddenly alive.
38' — GOAL! Borussia Dortmund 1-0 Stuttgart (Pulisic) Well, the game needed a goal but I don't think Christian Pulisic meant that. Lovely play out wide on the right sees Pulisic get into a little space and the American sends a ball into the box intended for Batshuayi. Instead, it drifts goalwards, goes over Zieler and hits the post and goes in. An unintentional goal if ever there was one, but Dortmund will take it.
36' — A lovely gesture from the Stuttgarts fans after the horrible events in Münster yesterday.
33' — Moment of the game right there. Sokratis with a superb sliding tackle. Then the attack fails before it starts, somewhat typically of the game so far.
31' — Andi Beck gets booked for a late clip on Reus. Dirty that, really. Free kick gets to Pulisic, but he blazes high and wide.
29' — Christian Gentner sends a low ball across the area, but no one is there to connect. Gomez isn't where he should be, too often the striker is crossing the ball into the area where he should himself should be.
27' — Mario Gomez flicks a header wide after a drifting ball in from Dennis Aogo. Then Pulisic does the same at the other end but Stuttgart clear after a dangerous delivery from the American.
24' — Peter Stöger is gesticulating on the sidelines. He wants more, and he's probably not alone.
19' — Daniel Ginczek tries to control the ball but his swinging elbow hits Marcel Schmelzer in the face. Ouch. Dortmund battered and bruised a bit so far, and with little to show in attack either.
16' — Stuttgart are in full control of this one, which naturally means Dortmund have their best attack but Maximilian Philipp opts for the tougher pass to Batshuayi and Ron-Robert Zieler can claim. Perhaps more space to the right there...
12' — Dortmund looking a little bit desperate clearing the ball here. Almost like they're defending the lead in the final 10 minutes of a cup final. They're fans might be thinking: "If only."
10' — Poor communication between Roman Bürki and Sokratis means the Greek defender clears for a corner at the same time as his keeper came to claim. The first corner is cleared, the second leads to a third as Stuttgart start to build pressure.
8' — Reus gets the ball on the edge of the box but forces the pass to Michy Batshuayi and it's cleared. Not enough movement from anyone in yellow and black so far.
6' — The pitch at the Signal Iduna is split by sun and shade. Stuttgart fans in good voice despite sitting in the part of the Signal Iduna Park basked in sun. The visitors are trying to control the early stages here, Dortmund without the ball more than with it so far.
1' — Off we go!
— The Yellow Wall is singing loud and proud in the yellow sun of Sunday. Is there anything better than football in the sun on Sunday? Kick-off close now!
— Mario Götze is on the bench today, but has come in for some criticism from BVB boss Hans-Joachim Watzke. Fair or not?
— The teams are in. Borussia Dortmund welcome back Marco Reus to the starting line-up, but have lost Manuel Akanji to injury. Nuri Sahin also returns to the XI. Stuttgart look solid, and will hope the double G strike force can cause a troubled Dortmund problems.
Borussia Dortmund: Bürki - Piszczek, Sokratis, Toprak, Schmelzer - Sahin, Dahoud - Pulisic, Reus, Philipp - Batshuayi
Stuttgart: Zieler - Beck, Pavard, Badstuber, Insua - Gentner, Ascacibar, Aogo, Thommy - Gomez, Ginczek
— Welcome to Sunday's Bundesliga action! Borussia Dortmund host Stuttgart before Frankfurt take on Hoffenheim later. Tomorrow night, RB Leipzig play Bayer Leverkusen. In short, it could well be a decisive Matchday for the top eight.Join us here or on Twitter @dw_sports.