Init is said "The methods on the Config object operate on the defined current data and state of the Config object itself only, and that's it." That smells like bad design to me. The Config object should be responsible, well, for handling config. It should reflect an in-memory state of a named config object in a given storage. I find explicit load and even explicit save a violation of this. The caller should have no care that the config is even stored in any ways, if you get what I mean. It can be argued that for the saving to always work correctly needs to be resolved. Right now I have not removed any save methods because of this.