separate version for IO