Shouldn't return deferred, but deferred.promise to client code.