better design for  immutable class.  will fix tests later