do the refactor