Michael Phelps is his own worst critic, even after a victory.
The 14-time Olympic gold medalist held off a late charge by his rivals to win the 400-meter freestyle Saturday at the Santa Clara International Grand Prix.
Phelps cruised to an early lead, but he had to dig in over the final 100 meters to win in 3 minutes, 48.05 seconds under sunny, windy conditions at the outdoor pool.
It was his second victory of the meet, having won the 200 butterfly by a margin of 5.67 seconds on Friday.
"I was really happy with that swim last night," he said.
Not so much this time.
Ryan Cochrane of Canada pushed Phelps in the closing meters only to settle for second in 3:48.40. Robert Hurley of Australia was third in 3:48.49.
"I felt awesome the first 250, then I turned with 150 to go and I was second-guessing why I ever asked to swim that event," he said.
Phelps hasn't swum the event in the last few years, and he didn't advance to the 400 free final at the 2005 world championships in Montreal, a failure that still bothers him.
"I don't think I've ever hurt that bad after a race. I'm not in enough shape to swim a good 400," he said. "That's more of a wake-up call then Bob telling me."
Wearing a long black body suit, Phelps swam in lane 7 after qualifying fourth-fastest in the morning. He owned an easy lead until the last two laps.
That's when the chase was on.
Cochrane, who won a bronze medal in the 1,500 free in Beijing, came edging up on Phelps, who was breathing on his right and didn't see the Canadian on his left.
But the athlete announced as the greatest swimmer in history didn't let go. He got to the wall 0.35 seconds ahead of Cochrane.
"That's how not to swim a 400 free," Phelps said. "Bob said go out after it and see what happens. I went out after it and barely hung on."
His coach, Bob Bowman, enjoyed seeing Phelps challenged.
"It's good for him," he said. "It reminds him it's not easy to win races. That's a race where he really pushed himself to the limit."
Phelps rested on the yellow lane line as the nearly full grandstand exploded in cheers. Later, with his suit peeled down to his hips, he strolled to the podium to accept his winner's medal trailed by two security guards.
When it was announced Phelps would sign autographs after his warm down, a long line of adults and kids quickly formed and snaked its way nearly halfway down the grandstand.
Cameras were trained on Phelps' every move as he made his way around the deck. He's vowing not to shave his Fu Manchu 'stash or cut his hair until the U.S. nationals in Indianapolis begin July 7.
He will compete next weekend in Montreal, his third meet since returning from a three-month suspension handed down by USA Swimming after a photo of Phelps using a marijuana pipe surfaced.
Phelps' Olympic teammate Ryan Lochte had an easier time. The Olympic and world record-holder won the 200 backstroke over Aussie Ashley Delaney by 1.77 seconds. Lochte touched in 1:56.83 and Delaney in 1:58.60, making them the only men in the nine-swimmer field under 2 minutes.
Lochte finished second to Masayuki Kishida of Japan in the 100 butterfly by 0.41 seconds. Kishida, who trains in Tucson, Ariz., won in 52.43 seconds. Lochte clocked 52.84 a night after he won the 400 individual medley.
Phelps and Lochte will go head-to-head twice Sunday on the final day in the 100 backstroke and 100 freestyle.
Kirsty Coventry of Zimbabwe swam to two victories.
She scored a dominating victory in the 400 individual medley, winning by 3.87 seconds over rising American teenager Dagny Knutson.
Coventry's time of 4:32.15 lowered last year's meet record of 4:36.75 set by 16-year-old Olympian Elizabeth Beisel, who finished third this year. Coventry earned $100 for the record. Knutson, a 17-year-old from Minot, N.D., also went under the old meet record, clocking 4:36.02.
Those three beat Olympic champion Stephanie Rice of Australia, who finished fourth, well off her world record of 4:29.45 set in Beijing.
Coventry returned later to win the 100 backstroke in 1:00.68, not even close to her world-record time of 58.77 set at the Beijing Olympics, where she took silver behind American Natalie Coughlin.
Leisel Jones of Australia, the Olympic champion and world record-holder, completed a sweep of the breaststroke events, winning the 100 in 1:07.11 to go with her 200 title Friday night. She defeated 17-year-old Kasey Carlson of nearby Walnut Creek by 1.22 seconds in the shorter race.
Dana Vollmer, who failed to make the U.S. Olympic team last year, earned her third win of the meet in the 200 free. She won in 1:57.46 adding to her victories in the 100 free and 100 fly on Friday.
"Last summer was a really disappointing one for me," she said. "I found new reasons why I love racing and I love practice. I'm more focused and determined to get back on the world stage."