1. implement reader