Jest absolwentem studiów z edukacji muzycznej na Wydziale Pedagogicznym Wyższej Szkoły Pedagogicznej w Bydgoszczy. Na Uniwersytecie Warszawskim ukończył studia podyplomowe w zakresie dziennikarstwa i nauk politycznych. W 1980 wstąpił do PZPR. Pracował jako dziennikarz. Był redaktorem naczelnym studenckiej gazety „Meritum”, kierował bydgoskim oddziałem „Kuriera Studenckiego”, był też dziennikarzem „Gazety Pomorskiej”, a także redaktorem naczelnym „Tygodnika Telewizyjnego”. W 1993, 1997, 2001 i 2005 uzyskiwał mandat posła na Sejm kolejnych kadencji z listy Sojuszu Lewicy Demokratycznej. W 2004 bez powodzenia kandydował do Parlamentu Europejskiego (wcześniej od maja do lipca tegoż roku wykonywał mandat europosła V kadencji w ramach delegacji krajowej[1]). Pełnił m.in. funkcję rzecznika prasowego SLD. Napisał książkę Jak zostać ministrem?.
W wyborach parlamentarnych w 2007 po raz piąty został posłem, kandydując z listy koalicji Lewica i Demokraci w okręgu toruńskim i otrzymując 11 825 głosów. W kwietniu 2008 zasiadł w Klubie Poselskim Lewica, który we wrześniu 2010 przekształcono w KP SLD. 8 lipca 2010 został wicemarszałkiem Sejmu VI kadencji[2].
W wyborach parlamentarnych w 2011 został ponownie liderem listy SLD do Sejmu w okręgu toruńskim i uzyskał ponownie mandat poselski (otrzymał 19 078 głosów)[3]. 8 listopada 2011 wybrany na wicemarszałka Sejmu VII kadencji. We wrześniu 2014 i w czerwcu 2015, po rezygnacjach Ewy Kopacz i Radosława Sikorskiego z funkcji marszałka Sejmu, jako najstarszy członek Prezydium Sejmu przejmował regulaminowe obowiązki marszałka Sejmu do czasu wyboru następcy[4][5]. W 2015 nie uzyskał poselskiej reelekcji (dostał 25 365 głosów).
W 2016 wystartował w wyborach na przewodniczącego SLD. W I turze głosowania wśród członków partii zajął drugie miejsce. W drugiej turze z 23 stycznia 2016, w której wzięli udział delegaci na kongres SLD, przegrał z Włodzimierzem Czarzastym stosunkiem głosów 428 do 305[6]. Został natomiast wybrany na wiceprzewodniczącego SLD[7]. W wyborach samorządowych w 2018 bezskutecznie kandydował do sejmiku kujawsko-pomorskiego[8]. W 2019 bez powodzenia kandydował natomiast do Senatu[9]. Zrezygnował potem z zasiadania we władzach SLD.
W kwietniu 2020 został członkiem rady nadzorczej Agencji Rozwoju Miasta Krakowa[10].