It's true I do see these attributes as 'read only', but that can just be a matter of usage:  I don't see a need here for a watertight solution that means you can never by any means create an 'invalid' version object.