abstract models with traits