full reengenerd class structure