Bianca Andreescu will become the first Canadian to play for the singles title at the Rogers Cup after winning her semi-final in Toronto against American Sofia Kenin 6-4 7-6 (5).
After leading 5-2 in the second set the world number 27 needed five match points to progress to her third final of the season.
She said tearfully after the match: "I've been through so much the past two months, and all I can say is I'm so happy to be back on court... I'm in the final of the Rogers Cup."
— Bianca (@Bandreescu_) August 11, 2019
"I'm glad it was two sets today, but it wasn't easy. I was so, so nervous, and I just felt like crying after because I'm just so happy. I'd say this is even bigger than winning Indian Wells."
The Canadian will face world number 10 Serena Williams, a three-time winner of the event, in the final.
Williams was forced to rally from a set down in her 1-6 6-3 6-3 victory over Czech qualifier Marie Bouzkova.
The world number 91 had won seven matches in Toronto and challenged Williams over the course of almost two hours.
Serena Williams credits her mental focus for tonight's win — and says her experience over the years will help her when she faces a pro-Andreescu Canadian crowd tomorrow #RC19 pic.twitter.com/L7uJ7xruId — Rogers Cup (@rogerscup) August 11, 2019
But the 23-time major champion fought hard after making 18 unforced errors in the first set, finishing with 11 aces in her 500th career WTA win on hard courts.
Williams said: "I just needed to be more consistent and not make so many errors and just mentally be ready to hit a thousand balls if I needed to."
She paid tribute to upcoming opponent Andreescu, who she noted had "won a lot".
"The crowd will obviously be for her ... Luckily, I've had some tough crowds in my career, so hopefully I will be used to it."