added text input/output as its own class