Esordisce nella classe 250 del motomondiale nel 1996, correndo i Gran Premi d'Italia e Imola a bordo di un'Aprilia, senza ottenere punti. Nel 1998 diventa pilota titolare con la Scuderia AGV Carrizosa, andando a guidare una TSR-Honda, con compagno di squadra Luca Boscoscuro, ottenendo come miglior risultato un quinto posto in Argentina e termina la stagione al 12º posto con 61 punti.
Nel 1999 passa all'Aprilia nel team Vasco Rossi Racing, ottenendo come miglior risultato un quinto posto in Catalogna e terminando la stagione al 14º posto con 62 punti. In questa stagione è costretto a saltare i GP di Gran Bretagna, Australia e Sudafrica per due infortuni.
Nel 2000 passa alla TSR-Honda nel team Tino Villa Racing; corre però solo i primi quattro Gran Premi, in quanto viene sostituito da Sébastien Gimbert. Corre però i Gran Premi di Catalogna, Olanda, Gran Bretagna, Germania, Pacifico e Australia in sostituzione dell'infortunato Alex Hofmann su Aprilia. Ottiene come miglior risultato un sesto posto in Germania e termina la stagione al 16º posto con 26 punti.
Nel 2001 passa al team Safilo Oxydo Race, ottenendo due secondi posti (Italia e Gran Bretagna) e due terzi posti (Catalogna e Australia) e terminando la stagione al 4º posto con 177 punti. Nel 2002 passa alla Honda nel team Fortuna Honda Gresini, con compagno di squadra Emilio Alzamora, ottenendo cinque secondi posti (Spagna, Catalogna, Germania, Brasile e Comunità Valenciana) e due terzi posti (Olanda e Malesia) e terminando la stagione al 3º posto con 219 punti.
Nel 2003 ottiene due vittorie (Germania e Australia), tre secondi posti (Spagna, Brasile e Pacifico) e un terzo posto in Francia e termina la stagione al 2º posto con 235 punti. Nel 2004 ottiene una vittoria in Spagna e termina la stagione all'8º posto con 116 punti. In questa stagione è stato costretto a saltare il GP di Gran Bretagna a causa di una slogatura a una spalla rimediata nelle qualifiche del GP. Nel 2005 passa in MotoGP con la Ducati Desmosedici del team D'Antin Pramac, ottenendo come miglior risultato un decimo posto in Gran Bretagna e terminando la stagione al 18º posto con 25 punti.
Nel 2006 passa al campionato mondiale Superbike, gareggiando a bordo di una Ducati 999 F05 del team Ducati SC - Caracchi. Nel 2007 viene ingaggiato dal team Hannspree Ten Kate Honda a bordo di una Honda CBR1000RR. Per il 2008 cambia squadra passando al team Hannspree Honda Althea. Nel 2009 ancora un cambio, con l'approdo al team Stiggy Racing Honda. Dopo avere disputato le prime due prove del mondiale viene però sostituito da John Hopkins.
Nel 2010 è stato ingaggiato dal team Italtrans S.T.R. per gareggiare con una Suter MMX nella neonata classe del motomondiale, la Moto2.[2] Ottiene un terzo posto in Germania ed una vittoria in Malesia e termina la stagione al 14º posto con 75 punti. Nel 2011 ritorna nel mondiale Superbike, questa volta alla guida di una Kawasaki ZX-10R del team Pedercini, con la quale vince anche la tappa di Misano Adriatico del campionato Italiano Velocità partecipando come wild card.[3][4]
Nel 2012 torna in Moto2 ingaggiato dal team Technomag-CIP, anche se dopo il Gran Premio della Repubblica Ceca viene sostituito da Tomoyoshi Koyama. Nella stessa stagione trova un altro ingaggio, tornando in Moto GP a distanza di sette anni dalla sua ultima partecipazione in questa classe, correndo le ultime quattro gare della stagione con la ART del team Speed Master in sostituzione di Mattia Pasini. In Moto2 ottiene un punto con il quindicesimo posto in Francia, in MotoGP nessuno. Nel 2013 partecipa per la prima volta al mondiale Supersport, in sella alla MV Agusta F3 675 del team ParkinGo MV Agusta Corse. Il 26 maggio, in occasione del Gran Premio di Gran Bretagna sulla pista di Donington Park, porta alla MV Agusta il primo podio nel campionato Supersport, giungendo terzo.[5] Ottiene un altro podio nell'ultima gara stagionale a Jerez, chiudendo la stagione d'esordio in questa categoria al sesto posto con 78 punti.
Nel 2014 rimane nel mondiale Supersport cambiando moto, guida infatti una Kawasaki ZX-6R del team Go Eleven. Ottiene come miglior risultato stagionale un terzo posto nel Gran Premio di Francia sulla pista di Magny Cours. Chiude la stagione andando a punti in tutte e undici le gare in calendario, totalizzando 97 punti e il settimo posto in classifica finale. In questa stagione prende parte alle ultime due gare del motomondiale in sella ad una Suter MMX del team Tasca Racing. Ottiene due punti chiudendo ventinovesimo in classifica finale. Nel 2015 rimane nel mondiale Supersport utilizzando la terza moto diversa in tre anni. Partecipa infatti come pilota titolare in sella ad una Honda CBR600RR del team Lorini. Durante questa stagione non riesce a salire sul podio ma termina un altro campionato senza ritiri, andando a punti in tutte le gare in programma. Chiude la stagione al settimo posto con 88 punti all'attivo.
Nel 2016 viene confermato nel mondiale Supersport e torna ad utilizzare la moto con cui esordì in questo campionato, la MV Agusta F3 675 portata in pista dal team Factory Vamag. Chiude la stagione al ventiquattresimo posto in classifica piloti con quindici punti all'attivo. Nel 2017 continua nel mondiale Supersport, sempre con la MV Agusta F3 675 come moto e con il Factory Vamag come squadra. Vince la sua prima gara nel mondiale Supersport in occasione del GP d'Australia.[6] Il 13 luglio 2017 viene annunciato il suo licenziamento da parte del team, a causa degli scarsi risultati nelle ultime gare. Il suo posto in squadra viene preso da Lorenzo Zanetti.[7] Torna a disputare il Gran Premio di Francia a Magny-Cours in sella ad una Honda CBR600RR del GEMAR Team Lorini in sostituzione dell'infortunato Giuseppe Scarcella.[8] Viene inoltre chiamato, sempre in questa stagione, a sostituire l'infortunato Ayrton Badovini in sella ad una Kawasaki ZX-10R del Team Grillini nel Campionato mondiale Superbike in occasione della gara finale in Qatar. Ottiene quattro punti e chiude la stagione al trentatreesimo posto in classifica piloti.[9]
Nel 2018 è pilota titolare nel mondiale Endurance, categoria Stock, con una Yamaha R1 gestita dal team Moto Ain.[10] Nel 2019 continua a correre nel mondiale Endurance oltre a partecipare ai Gran Premi d'Italia a Misano nel mondiale Supersport e nel campionato Italiano Velocità con il Team Green Speed.[11]