API overhaul

Can we enforce that the `collect` attribute is present