If a modification does not change the struct the same object is returned from the setter (no longer instantiates a new object). Also added a flag to the constructor that bypasses the validation steps - meant to be used internally after a modification, when we have full control over the hash so there is no concern of something invalid being passed in. This can also be used externally when speed is more of a concern.