Rafa Nadal had to dig deep after coming under heavy fire from Colombia's Santiago Giraldo in a brutal 7-6, 6-3 quarter-final victory at the Japan Open on Friday.
While never in serious danger of losing his Tokyo title, the top seed survived a barrage before unleashing a late salvo of his own to come through in a shade over two hours.
"I played too short today -- two or three, sometimes four metres behind the baseline," said Nadal, who faces fourth seed Mardy Fish in the semi-finals.
"That's something I need to improve tomorrow. I have to be more aggressive with my forehand. If I don't it's impossible for me to be in the final."
Giraldo, the World No. 53, went down swinging, sticking with his strategy of going for broke on almost every shot in a pulsating match on centre court.
Nadal, resplendent in his new-look purple T-shirt, secured the first set tiebreak 8-6 with a heavily sliced first serve which tied Giraldo up in knots.
The Spaniard then broke early in the second, but Giraldo had clearly not read the script and threatened to climb off the canvas and strike back at 5-3 down by forcing a break point.
Nadal looked rattled but responded with a superb running forehand which nibbled the edge of the line before striking a gunslinger's pose and letting out a yell of "Vamos!"
"For sure I was worried when he had break point," said the 10-times grand slam champion. "The match can change. But I made a mistake at 7-6, 2-0 and 30-0 and lost that game.
"At 3-0 you can play more relaxed and aggressive for the rest of the match. But I let him back in and then it was hard to be calm."
A packed crowd, wrapped in coats and blankets against the late afternoon chill, erupted when Nadal finished the job after his opponent went for too much and hit a wild forehand wide.
Fish, who has won 20 of his last 24 matches, awaits Nadal after the American fought back to beat 18-year-old Australian Bernard Tomic 6-7, 6-4, 6-1.
Second seed Andy Murray of Britain was facing Argentine David Nalbandian in Friday's last quarter-final after third seed David Ferrer's match against Czech Radek Stepanek.