This code does not work correctly as it stores the limitstart into a session variable. So, when clicking upon the first item in your pages list, no limitstart variable is present and so the previously saved limitstart value is reused.
ie. you can go to pages 2, 3, etc. but not back down to 1.
A work around I have used is to always get the value from the Request object.
//$limitstart = $mainframe->getUserStateFromRequest($option.'.limitstart', 'limitstart', 0, 'int');
$limitstart = JRequest::getVar('limitstart',0);