seperated out read operation