All streams shall have a common ancestor IIO, which is subclasses by IInput and IOutput. Existing I/O facilities shall inherit from these (e.g. "class ITextInput : public virtual IInput", etc.) In addition, all base interfaces (e.g. "class FileInputStream : public IByteInput") shall be made virtual bases (i.e. "class FileInputStream : public virtual IByteInput"), as these are interfaces we're talking about.