updated with lazy instantiation and setter methods