Redesign generate()