refactoring :3