improved serial read