read() improved