    # File lib/phusion_passenger/admin_tools/server_instance.rb, line 271
            def groups
                    doc = REXML::Document.new(xml)

                    groups = []
                    doc.elements.each("info/groups/group") do |group_xml|
                            group = Group.new(group_xml.elements["app_root"].text,
                                    group_xml.elements["name"].text,
                                    group_xml.elements["environment"].text)
                            group_xml.elements.each("processes/process") do |process_xml|
                                    process = Process.new(group)
                                    process_xml.elements.each do |element|
                                            if element.name == "server_sockets"
                                                    element.elements.each("server_socket") do |server_socket|
                                                            name = server_socket.elements["name"].text.to_sym
                                                            address = server_socket.elements["address"].text
                                                            address_type = server_socket.elements["type"].text
                                                            process.server_sockets[name] = OpenStruct.new(
                                                                    :address => address,
                                                                    :address_type => address_type
                                                            )
                                                    end
                                            else
                                                    if process.respond_to?("#{element.name}=")
                                                            if Process::INT_PROPERTIES.include?(element.name.to_sym)
                                                                    value = element.text.to_i
                                                            elsif Process::BOOL_PROPERTIES.include?(element.name.to_sym)
                                                                    value = element.text == "true"
                                                            else
                                                                    value = element.text
                                                            end
                                                            process.send("#{element.name}=", value)
                                                    end
                                            end
                                    end
                                    group.processes << process
                            end
                            groups << group
                    end
                    return groups
            end