first reader implementation