uses a clearer syntax for delegate