Add more immutability to the #2 solution. Deprecate of(...) and make it private at some later date.