big refactor time