why all this primitive vs object stuff? why not just have primitives and use default if not set?