refactoring :D