position/zoom refactor