simplified the generation structure