refactor and make it awesome