improved delegate API