W latach 1989–1993 sprawował mandat posła na Sejm X i I kadencji z ramienia Komitetu Obywatelskiego i Kongresu Liberalno-Demokratycznego. W wyborach parlamentarnych w 1993 bez powodzenia ubiegał się o reelekcję z listy KLD. Wstąpił do Unii Wolności, z listy której bezskutecznie kandydował do Sejmu w wyborach w 1997. Od 1998 do 2000 był radnym sejmiku śląskiego I kadencji i członkiem zarządu województwa. 1 marca 2000 został posłem III kadencji, zastępując w Sejmie Irenę Lipowicz. W 2001 wstąpił do Platformy Obywatelskiej, ponownie uzyskiwał mandat poselski w kolejnych wyborach w 2001 i 2005. W parlamencie był m.in. przewodniczącym Komisji Ochrony Środowiska, Zasobów Naturalnych i Leśnictwa i polsko-niemieckiej grupy parlamentarnej oraz deputowanym do Zgromadzenia Parlamentarnego Rady Europy. Pełnił też funkcję asystenta Pata Coksa. W 2004 bez powodzenia kandydował do Parlamentu Europejskiego. W wyborach parlamentarnych w 2007 po raz szósty został posłem, otrzymując w okręgu katowickim 8958 głosów. W wyborach w 2011 bezskutecznie ubiegał się o mandat poselski na kolejną kadencję (otrzymał 7821 głosów), jednak objął go 5 czerwca 2014 w miejsce wybranego do Europarlamentu Marka Plury.