refactor. restructure