public String saveConfigSectionWithComments(ConfigurationSection section, boolean depth) {
        StringBuilder builder = new StringBuilder();
        for (Iterator<Map.Entry<String, Object>> i = section.getValues(false).entrySet().iterator(); i.hasNext();) {
            Map.Entry<String, Object> entry = i.next();

            // Output comment, if present
            String comment = this.getComment(entry.getKey());
            if (comment != null) {
                builder.append(buildComment(comment));
            }
            
            if (entry.getValue() instanceof ConfigurationSection) {
                // output new line before ConfigurationSection. Pretier.
                builder.append('\n');
                // If it's a section, get it's string representation and append it to our builder.
                // If the first character isn't alphanumeric, quote it !
                if (Character.isLetterOrDigit(entry.getKey().codePointAt(0)))
                   builder.append(entry.getKey());
                else
                    builder.append("'" + entry.getKey() + "'");
                builder.append(":" + yamlOptions.getLineBreak().getString());
                builder.append(saveConfigSectionWithComments((ConfigurationSection) entry.getValue(), true));
                // output new line after ConfigurationSection. Prettier.
                builder.append('\n');
            } else {
                // If it's not a configuration section, just let yaml do it's stuff.
                builder.append(yaml.dump(Collections.singletonMap(entry.getKey(), entry.getValue())));
            }
        }
        String dump = builder.toString();
        
        // Prepend the indentation if we aren't the root configuration.
        if (depth) {
            String[] lines = dump.split(Pattern.quote(yamlOptions.getLineBreak().getString()));
            StringBuilder indented = new StringBuilder();
            for (int i = 0;i<lines.length;i++) {
                for (int indent = 0;indent<yamlOptions.getIndent();indent++) {
                    indented.append(" ");
                }
                indented.append(lines[i] + yamlOptions.getLineBreak().getString());
            }
            return indented.toString();
        } else {
            return dump;
        }
    }