W 1980 został członkiem NSZZ „Solidarność”, a od 1989 należał do Zjednoczenia Chrześcijńsko-Narodowego, w którym pełnił funkcję wiceprezesa zarządu regionalnego. W latach 1991–1992 był dyrektorem Biura Komisji Sejmowych. Następnie do 1993 pełnił funkcję sekretarza Komitetu Ekonomicznego Rady Ministrów w randze podsekretarza stanu w Urzędzie Rady Ministrów. W wyborach parlamentarnych w 1993 bez powodzenia ubiegał się o mandat poselski w okręgu warszawskim z listy Katolickiego Komitetu Wyborczego „Ojczyzna”. W latach 1997–1998 sprawował funkcję podsekretarza stanu w Ministerstwie Spraw Wewnętrznych i Administracji. Był członkiem zespołu negocjacyjnego w sprawie członkostwa Polski w Unii Europejskiej. Od 1999 do 2001 zasiadał w Kolegium Najwyższej Izby Kontroli. W 2006 został powołany na przewodniczącego Rady Służby Cywilnej przez premiera Kazimierza Marcinkiewicza. 17 listopada tego samego roku Sejm powołał go na stanowisko sędziego Trybunału Konstytucyjnego, a jego kadencja rozpoczęła się 2 grudniaUchwała Sejmu Rzeczypospolitej Polskiej z dnia 17 listopada 2006 r. w sprawie wyboru sędziego Trybunału Konstytucyjnego ().. W 2006 wszedł także do nowo powołanej Kościelnej Komisji Historycznej. 4 grudnia 2014 został powołany przez prezydenta RP w skład Państwowej Komisji Wyborczej.