Refactor *Reader classes into GenericReader