hooks added to DataReader to avoid duplicate ID problem