Od 1991 należał kolejno do Unii Demokratycznej i Unii Wolności. W 2001 został działaczem Platformy Obywatelskiej. Od 2006 pełnił funkcję przewodniczącego regionu kujawsko-pomorskiego, po zmianie statutu tego ugrupowania (2010) był z tego tytułu członkiem zarządu krajowego PO.

W wyborach parlamentarnych w 2005 z listy PO został wybrany do Sejmu V kadencji w okręgu toruńskim. W wyborach w 2007 po raz drugi uzyskał mandat poselski, otrzymując 34 545 głosów. Został przewodniczącym polsko-ukraińskiej grupy parlamentarnej oraz przewodniczącym Podkomisji stałej ds. Partnerstwa Wschodniego. W wyborach w 2011 z powodzeniem ubiegał się o reelekcję, dostał 28 998 głosów. Był wiceprzewodniczącym klubu parlamentarnego PO. W 2015 został ponownie wybrany do Sejmu, otrzymując 21 323 głosy.

W 2018 był kandydatem Koalicji Obywatelskiej na prezydenta Torunia w wyborach samorządowych, zajmując 2. miejsce z wynikiem niespełna 24% głosów (wybory zakończyły się na I turze). W wyborach w 2019 z ramienia KO z powodzeniem ubiegał się o poselską reelekcję, otrzymując 26 044 głosy. W 2023 był kandydatem tej koalicji do Senatu w okręgu nr 11. Został wybrany do wyższej izby polskiego parlamentu, zdobywając 128 755 głosów.