improve so that we return a list