refactor
change design