refactor with better super() and init methods. redone generator