use methods instead of attr_reader to make more subclass friendly