using attr readers instead of ivars