Uses enumerators for everything