refactor / restructure