Integrate instrument and staff type changes
This is critical relative to the staff-type change functionality itself. Changing staff types is almost useless at this time because it does not integrate with the instrument change function.
For example, to get to the number of strings from a tablature Staff pointer it would look like this:
All of the advanced style properties are stored as Instrument and InstrumentTemplate class members, not class Staff or StaffType. In 99% of all real world staff type changes, the reason for changing staff types is a simultaneous instrument change.
The staff-type change functionality must be integrated with the instrument change functionality for it to make sense - from a design perspective, forget about the low level code details. I am not proposing a specific design, but this issue can be used as the place to discuss a new design.