Rework the way zoom is implemented