refactor
refactor
working version
working
cleanup