make io interface polymorphic