model update - introduce shadows and eliminate horrible self type generics