more on protocols and types