simplified API by hiding the executor