Is there any particular reason this takes `self` and returns a new school rather than taking `&mut self` and modifying it in-place?