Refactor, added permissions, added Recoverable