always recalc