add input buffering