make better use of read