implementing reader