Added composition to IODevices to reduce code base and eliminates duplicate struct code