do we need to cast this to a list, or could we leave it as a cursor/generator? There are obvious performance benefits if we can do the latter.