made callback optional since we always return a promise.