Recursion might cause some extra keys to appear because the original behavior adds keys with empty string values if they don't exist. If this behavior is a bug and not a feature, we could remove it and do the whole manifest with one recursive call.