tighten up error checking for Read()