Syn Józefa[1]. W 1970 ukończył Szkołę Mechanizatorów Przeładunku przy Zarządzie Portu Gdańsk[2]. W latach 1970–1971 pracował w Zarządzie Portu Gdańsk jako mechanik, następnie operator sprzętu. Uczestniczył w wydarzeniach grudniowych w 1970. Od 1972 do 1981 był pracownikiem Zakładów Okrętowych Urządzeń Elektrycznych i Automatyki Elmor w Gdańsku.
W sierpniu 1980 organizował strajk w Elmorze, został członkiem Międzyzakładowego Komitetu Strajkowego i NSZZ „Solidarność” w Gdańsku, następnie był wiceprzewodniczącym zarządu Regionu Gdańskiego związku, członkiem Krajowej Komisji Porozumiewawczej i Komisji Krajowej. Brał udział w licznych negocjacjach ze stroną rządową.
13 grudnia 1981 zdołał uniknąć internowania, ukrywał się i organizował struktury podziemne „Solidarności” w regionie. W kwietniu 1982 był współorganizatorem ogólnopolskiej podziemnej Tymczasowej Komisji Koordynacyjnej NSZZ „Solidarność”, odpowiadał za koordynację współpracy z zagranicą. Został aresztowany w czerwcu 1984, oskarżony o zdradę, zwolniony po pół roku na mocy amnestii. Ponownie aresztowano go w lutym 1985, został skazany na 2 lata i 6 miesięcy pozbawienia wolności, następnie zwolniony we wrześniu 1986 również na podstawie amnestii. W 1986 wszedł w skład Tymczasowej Rady „Solidarności”, a w 1987 do Krajowej Komisji Wykonawczej – jawnych struktur kierowniczych nielegalnego związku.
Od 1988 był członkiem Komitetu Obywatelskiego przy Lechu Wałęsie, brał udział w rozmowach Okrągłego Stołu. W latach 1989–1991 zasiadał w Senacie I kadencji. Na II KZD „Solidarności” w 1990 został wybrany w skład prezydium Komisji Krajowej, gdzie odpowiadał za kontakty zagraniczne. Od 1991 nie uczestniczył w działalności politycznej, podejmując działalność w biznesie.
Od 1997 należał do Unii Wolności. W latach 1998–2002 zasiadał w sejmiku pomorskim. W czerwcu 2003 został członkiem zarządu UW, następnie Partii Demokratycznej – demokraci.pl. Kandydował bez powodzenia do Sejmu w 2001 i 2005. W wyborach parlamentarnych w 2007 wystartował z 1. miejsca komitetu wyborczego Lewica i Demokraci w okręgu gdańskim. Został wybrany na posła VI kadencji liczbą 12 468 głosów. Przystąpił do powołanego 9 kwietnia 2008 Demokratycznego Koła Poselskiego, zostając jego przewodniczącym. W czerwcu 2009 wraz Marianem Filarem opuścił Partię Demokratyczną[4]. Na początku lipca tego samego roku przystąpił wraz z innymi posłami DKP do Stronnictwa Demokratycznego, w wyniku czego 16 lipca 2009 zostało ono przemianowane na DKP SD. W październiku tegoż roku na kongresie części SD uznającej przywództwo Pawła Piskorskiego został wybrany na wiceprzewodniczącego tej partii. DKP SD przestało istnieć w czerwcu 2011, w wyniku czego został posłem niezrzeszonym. W tym samym roku bezskutecznie kandydował na senatora jako kandydat Obywateli do Senatu. Na kongresie z kwietnia 2013 utrzymał funkcję wiceprzewodniczącego SD. Po kongresie z kwietnia 2016 nie znalazł się ponownie we władzach partii.