initial reader implementation