Needed to clone the paginator as it was setting the page name for all instances.
Added an attribute to the location which allows us to check if it allows sub pages.
Updated the page query to allow the page to be passed as an optional second parameter to the paginate method. The default is still to try and look in the request for the get variable.
Tidied up this code.