first refactor
first refactor