construct generators with utility methods