using delegate to avoid law of demeter violations