start big refactor