Rework and improve scroll()