class ConfigDescriptionRegistry {

    public Collection<ConfigDescription> getConfigDescriptions(@Nullable Locale locale) {
        Map<URI, ConfigDescription> configMap = new HashMap<>();

        // Loop over all providers
        for (ConfigDescriptionProvider configDescriptionProvider : configDescriptionProviders) {
            // And for each provider, loop over all their config descriptions
            for (ConfigDescription configDescription : configDescriptionProvider.getConfigDescriptions(locale)) {
                // See if there already exists a configuration for this URI in the map
                ConfigDescription configFromMap = configMap.get(configDescription.getUID());
                if (configFromMap != null) {
                    // Yes - Merge the groups and parameters
                    List<ConfigDescriptionParameter> parameters = new ArrayList<>();
                    parameters.addAll(configFromMap.getParameters());
                    parameters.addAll(configDescription.getParameters());

                    List<ConfigDescriptionParameterGroup> parameterGroups = new ArrayList<>();
                    parameterGroups.addAll(configFromMap.getParameterGroups());
                    parameterGroups.addAll(configDescription.getParameterGroups());

                    // And add the combined configuration to the map
                    configMap.put(configDescription.getUID(),
                            ConfigDescriptionBuilder.create(configDescription.getUID()).withParameters(parameters)
                                    .withParameterGroups(parameterGroups).build());
                } else {
                    // No - Just add the new configuration to the map
                    configMap.put(configDescription.getUID(), configDescription);
                }
            }
        }

        // Now convert the map into the collection
        Collection<ConfigDescription> configDescriptions = new ArrayList<>(configMap.size());
        for (ConfigDescription configDescription : configMap.values()) {
            configDescriptions.add(configDescription);
        }

        return Collections.unmodifiableCollection(configDescriptions);
    }

}