implemented io