refactor reader interface