refector wip
refactor