recalc on any attribute changes