China's Wu Peng used an impressive finishing kick to beat Michael Phelps in the 200-meter butterfly at the Charlotte UltraSwim Grand Prix meet.
Wu passed both Phelps and Sebastien Rousseau and touched the wall to win in a time of one minute, 56.69 seconds. American Phelps finished second in 1:56.87 while South Africa's Rousseau was third in 1:57.54.
Wu will be chasing his first Olympic medal in the 200 butterfly at the London Games.
"I was satisfied with my performance," Wu said. "If I just get any medal in London, I will be happy."
"Everyone wants to beat Michael because Michael is the fastest swimmer in the world. But I really just want to be top three."
Wu led Phelps at the first turn Saturday then fell behind both Rousseau and Phelps before finding another gear at the finish.
Wu broke Phelps' long winning streak in the 200 butterfly last year.
Phelps took part in just two races at the Charlotte meet, also placing second in the 200 freestyle.
"I know this is not the Olympic trials. This is not the Olympic Games," said 14-time Olympic gold medallist Phelps.
"It's a stepping stone heading in right direction for the end result. You've heard me say that so many times, but that's the truth. These are little things along the way -- I like to call them quizzes -- to really see what I need to improve on."
Phelps plans to swim a meet in Texas before competing in the US Olympic trials next month at Omaha, Nebraska.
On the women's side, Allison Schmitt edged Kathleen Ledecky to win the 400 freestyle with a time of 4:05.40. Ledecky clocked a 4:05.79.
Rebecca Soni easily won the women's 200 breaststroke with a time of 2:22.22. Runner-up Micah Lawrence was more than two seconds back in 2:24.62.