Okay, I think that answer gets right to the point... something that seemed a bit confusing about all of this but that I wasn't able to describe until now: the name of the class that is dealing with "metadata" should be called ModuleOptionsMetadata. However, it seems like the better approach would be to always generate a ModuleOptions instance for any module. If metadata is available, it enhances that instance, but in any case that there are property placeholders in the module definition, we would at least provide the ModuleOption for each placeholder, even if it only provided the "name" and a default value if available.