move Reader.perform to base class