Uses attr_readers instead of accessors