Serena Williams kept alive her hopes of a record-equalling 24th Grand Slam singles title with a 4-6 6-3 6-2 win over Tsvetana Pironkova in the US Open quarter-finals.
The American six-time champion, 38, struggled early on with the variety of shots from the unranked player who was in her first tournament in three years.
The Bulgarian, 32, broke in the fifth game en route to taking the first set.
Pironkova tired as Williams took the second and broke twice in the third.
The veteran will now play former world number one Victoria Azarenka, whom she beat in the 2012 and 2013 US Open finals.
Williams said she could not afford another sluggish start if she is to reach her fifth Grand Slam final in three years.
"I was feeling it a little in my legs and an hour in, for some reason, I got more energy. I can't do that if I want to keep winning," said the American, who last won the US Open in 2014.
"I play again on Thursday. I am used to playing back to back to back, but I need to figure out how to start a little bit faster.
"I keep fighting, I never give up. You've got to keep going."