add recalculate method