implement more generators