W rządzie Tadeusza Mazowieckiego został podsekretarzem stanu, a w lipcu 1990 ministrem spraw wewnętrznych (urząd ten sprawował do stycznia 1991). Zajmował stanowiska przewodniczącego komisji weryfikującej funkcjonariuszy Służby Bezpieczeństwa, a później pierwszego szefa Urzędu Ochrony Państwa (od 11 maja do 31 lipca 1990).

W latach 1989–2001 sprawował mandat senatora I kadencji z ramienia Komitetu Obywatelskiego, II i III kadencji z listy Unii Demokratycznej oraz I kadencji z listy Unii Wolności. W Senacie reprezentował województwo krakowskie. W 2001 bez powodzenia ubiegał się o reelekcję z ramienia Bloku Senat 2001, po czym zrezygnował z bieżącej działalności politycznej. W 2008 wszedł w skład nowo powołanej rady konsultacyjnej przy Agencji Bezpieczeństwa Wewnętrznego.