The reason for the new branch
big refactor