Po studiach należał do zespołu scen warszawskich: Teatru Narodowego (1982–1983) oraz Teatru Polskiego (1983–1984). Od 1984 do 1989 roku był aktorem Teatru im. Słowackiego w Krakowie, a w 1989 związał się z Teatrem Starym. W 2006 powrócił do Teatru Narodowego w Warszawie. W 2007 zagrał tragikomiczną postać Iwana Nikołajewicza Zachedryńskiego w Miłości na Krymie Sławomira Mrożka w reżyserii Jerzego Jarockiego. Reżyser, za zgodą autora sztuki, nieco zmodyfikował dramat konkretnie pod tę inscenizację. Od 2018 grał rolę Antonia w Burzy Williama Szekspira, w reżyserii Pawła Miśkiewicza.

W swoim bogatym dorobku miał wiele ról z rosyjskiej klasyki, m.in. Pieriedonowa w Małym biesie Sołoguba (1985), Astrowa w Wujaszce Wani (1993) i Wierszynina w Trzech siostrach (2001) Antona Czechowa, Pozdnyszewa w Sonacie kreutzerowskiej Lwa Tołstoja (1998). U Krystiana Lupy zagrał Iwana w Braciach Karamazow Fiodora Dostojewskiego (1990 i 1999), Poncjusza Piłata w Mistrzu i Małgorzacie Michaiła Bułhakowa (2002) oraz aktora Teatru Narodowego w Wycince Bernharda (2014).