Require returns deferred, refactor and new api options