custom io with success/failure conditions