dont recalc if unnecessary