improved on io so called protocol