Toronto - Serena Williams withstood the determined challenge of Czech qualifier Marie Bouzkova on Saturday, rallying for a 1-6, 6-3, 6-3 victory to reach the WTA Toronto final.
Williams, seeded eighth in a tournament she has won three times, will take on home hope Bianca Andreescu in the championship match on Sunday.
Williams will be seeking her first title since she won her 23rd Grand Slam title at the 2017 Australian Open - and her first since the birth of her daughter Olympia on September 1 of that year.
Meanwhile 19-year-old Andreescu will be trying to become the first Canadian in 50 years to lift the trophy.
Bouzkova, 21 and ranked 91st in the world, had said it was a dream come true to take on 37-year-old US superstar Williams, and she made a dream start - breaking Williams three times to take the first set in less than half an hour.
But Williams rallied, slashing her unforced errors in a second set that saw her win the last four games to force the decider.
"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," Williams said. "In the first set, I was going for a little too much, so I just had to just play a different game."
The hard work wasn't over, as Williams had to fight off three break points in the third game of the third set.
She broke Bouzkova in the next game to finally take control and end the Czech's breakout week.
Bouzkova departs Toronto having beaten three straight Grand Slam winners in Sloane Stephens, Jelena Ostapenko and, in the quarter-finals, reigning Wimbledon champion Simona Halep - who retired injured after dropping the first to Bouzkova on Friday night.
Williams said she was looking forward to taking on Andreescu, whose run to the final has electrified Toronto crowds.
"I've never faced her, but I've kind of become a fan with everyone rooting and cheering so hard," Williams said.
"It's kind of been contagious, the 'Bianca Effect.'"
Kenin admitted the raucous support of Andreescu affected her.
"I don't play in those kind of conditions, so it's not like I can practice," Kenin said.
"I tried to just block it out and do the best I can."
Andreescu shot to prominence with a victory at Indian Wells in March, but this week marks her first tournament since she was forced out of the French Open with a shoulder injury.
"I've been through so much the last two months," Andreescu said.
"All I can say is that I'm just so happy to be back on court right now. My shoulder's good. I'm in the finals of the Rogers Cup. Life's freaking amazing."
Williams is getting the kind of physical test - matches five days in a row - that she hasn't had since she last reached a non-Grand Slam WTA final - at the 2016 Italian Open.
"It's definitely different for me," said Williams, who has been limited by injuries this season but said this week she was "pain free".
"I definitely feel more grooved in. I feel good still. So I've been doing a lot of training and all the right things - so we'll see how I feel (Sunday)."
Results from Saturday's matches at the WTA Toronto tournament (x denotes seeding):
Bianca Andreescu (CAN) bt Sofia Kenin (USA) 6-4, 7-6 (7/5)
Serena Williams (USA x8) bt Marie Bouzkova (CZE) 1-6, 6-3, 6-3