Lot's of changes, I promise I will have better commit messages in the future