Refactoring
Refactor a lot