One important feature of STREAMS is the ability to write multiplexing drivers and modules. There are advantages to this, and disadvantages (see the Previous Work section). A multiplexing driver can accept STREAMS messages from multiple sources and route them to the appropriate place. Multiplexing is most commonly used in applications like graphical windowing systems and internetworking protocols (e.g. IP). A multiplexor can be of three types: many-to-one, one-to-many, or many-to-many.