decouple inputreader and output sender