more promises, less events