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 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."
Like in her third-round match against Sloane Stephens, Williams made a slow start which Pironkova exploited on longer rallies and with her dangerous sliced forehand. The break seemed inevitable and came in the fifth game when the Bulgarian - a semi-finalist at Wimbledon in 2010 - hit a great double-handed backhand winner.
There were signs Williams was improving towards the end of that set, and although she did go a break down early in the second set, the American levelled immediately and then had break point in the following Pironkova service game.
That was saved, but the former world number 31 lost her serve again when she was out-thought and outplayed in the eighth game, decided by an error following a phenomenal 26-shot rally. Her more decorated opponent raised her arm and let out a cry of celebration and relief inside the near empty Arthur Ashe Stadium.