And some other small fixes
Protocol
This is an error I introduced in #10630 because I didn't know protocols need to be explicitly inherited from in other protocol subclasses. The added test shows the change. Basically these protocols were unusable.