rework the base for io to be less hiearchical