finish callback refactor