Serena Williams came from a break down in the opening set to produce a patchy 6-4 6-3 win over Elina Svitolina and reach the WTA final in Cincinnati on Saturday.
The top-seeded world No.1 was far from efficient, appearing to lose her way on some shots.
Nevertheless, Williams will bid for her second straight Cincinnati title on Sunday, facing either third-seeded Simona Halep of Romania or former champion Jelena Jankovic of Serbia.
The 33-year-old Williams – who will be trying to finish a rare calendar Grand Slam when the US Open begins on August 31 – offered no explanation for her patchy form.
“I don’t know how I turned the match around,” she said. “I got off to a super slow start.
“But I managed to start going for my shots and that helped me out. I just told myself to dig deep.”
Williams won her 47th match against just two defeats this season.
The 21-time Grand Slam singles champion improved to 20-4 at Cincinnati, the last major event before the start of the year’s final Grand Slam at Flushing Meadows.
She will be playing her third Cincinnati final in a row and for her fifth title this season.
She hammered nine aces but had eight double-faults on her way to victory.