split out Deferred from promise