pass by name to avoid evaluation if we dont need it