Return promises instead of $.Deferreds