some minor beautifulizations
missing const
proper separation of protocol families