separate the contexts of input and output protocols.