abstract interface for input/out added