* refactored everything :P