implement promises for remote operations