add .subscribe() and jQuery Deferred/promise API