Full Refactor, still WIP