1st Refactor: separate classes by its responsibility