redrawing only when necessary now