improved list scroll calculation