</xsd:complexType>
        <xsd:element name="{@name}List" type="{/service/@typePrefix}:{@name}List"/>
 </xsl:template>
--->
 
 <xsl:template match="list">
        <xsd:complexType name="{@name}List">
                </xsd:sequence>
        </xsd:complexType>
 </xsl:template>
-
+-->
 
 <xsl:template match="enum">
        <xsd:simpleType name="{@name}">
                        <xsl:for-each select="val"><xsd:enumeration value="{@name}"/></xsl:for-each>
                </xsd:restriction>
        </xsd:simpleType>
-       <xsd:element name="{@name}" type="{/service/@typePrefix}:{@name}"/>
+<!--   <xsd:element name="{@name}" type="{/service/@typePrefix}:{@name}"/> -->
 </xsl:template>
 
 <xsl:template match="flags">
                        <xsd:element name="flag" type="{/service/@typePrefix}:{@name}Value" minOccurs="0" maxOccurs="unbounded"/>
                </xsd:sequence>
        </xsd:complexType>
-       <xsd:element name="{@name}" type="{/service/@typePrefix}:{@name}"/>
+<!--   <xsd:element name="{@name}" type="{/service/@typePrefix}:{@name}"/> -->
 </xsl:template>
 
 <xsl:template match="struct">
                        </xsl:for-each>
                </xsd:sequence>
        </xsd:complexType>
+<!--
        <xsd:complexType name="{@name}List">
                <xsd:sequence>
                        <xsd:element name="{@name}" type="{/service/@typePrefix}:{@name}" minOccurs="0" maxOccurs="unbounded"></xsd:element>
        </xsd:complexType>
        <xsd:element name="{@name}" type="{/service/@typePrefix}:{@name}"/>
        <xsd:element name="{@name}List" type="{/service/@typePrefix}:{@name}List"/>
+-->
 </xsl:template>
 
 <xsl:template match="op" mode="message">
        <wsdl:message name="{@name}Request">
-               <xsl:for-each select="input">
-<!--
-                       <xsl:variable name="suffix">
-                               <xsl:choose>
-                                       <xsl:when test="@list='yes'">List</xsl:when>
-                               </xsl:choose>
-                       </xsl:variable>
--->
-                       <wsdl:part name="{@name}" element="{/service/@elemPrefix}:{@name}{../@name}">
-                               <wsdl:documentation><xsl:value-of select="text()"/></wsdl:documentation>
-                       </wsdl:part>
-               </xsl:for-each>
+               <wsdl:part name="input" element="{/service/@elemPrefix}:{@name}Input">
+                       <wsdl:documentation><xsl:value-of select="text()"/></wsdl:documentation>
+               </wsdl:part>
        </wsdl:message>
        <wsdl:message name="{@name}Response">
-               <xsl:for-each select="output">
-<!--
-                       <xsl:variable name="suffix">
-                               <xsl:choose>
-                                       <xsl:when test="@list='yes'">List</xsl:when>
-                               </xsl:choose>
-                       </xsl:variable>
--->
-                       <wsdl:part name="{@name}" element="{/service/@elemPrefix}:{@name}{../@name}">
-                               <wsdl:documentation><xsl:value-of select="text()"/></wsdl:documentation>
-                       </wsdl:part>
-               </xsl:for-each>
+               <wsdl:part name="output" element="{/service/@elemPrefix}:{@name}Output">
+                       <wsdl:documentation><xsl:value-of select="text()"/></wsdl:documentation>
+               </wsdl:part>
        </wsdl:message>
 </xsl:template>
 
 <xsl:template match="op" mode="element">
-                       <xsl:for-each select="input|output">
-                               <xsl:variable name="prefix">
-                                       <xsl:choose>
-                                               <xsl:when test="starts-with(@type,'xsd:')"/>
-                                               <xsl:otherwise><xsl:value-of select="/service/@typePrefix"/>:</xsl:otherwise>
-                                       </xsl:choose>
-                               </xsl:variable>
-                               <xsl:variable name="suffix">
-                                       <xsl:choose>
-                                               <xsl:when test="@list='yes'">List</xsl:when>
-                                       </xsl:choose>
-                               </xsl:variable>
-                               <xsd:element name="{@name}{../@name}" type="{$prefix}{@type}{$suffix}"/>
-                       </xsl:for-each>
+       <xsd:element name="{@name}Input">
+               <xsd:complexType>
+                       <xsd:sequence>
+                               <xsl:for-each select="input">
+                                       <xsl:variable name="prefix">
+                                               <xsl:choose>
+                                                       <xsl:when test="starts-with(@type,'xsd:')"/>
+                                                       <xsl:otherwise><xsl:value-of select="/service/@typePrefix"/>:</xsl:otherwise>
+                                               </xsl:choose>
+                                       </xsl:variable>
+                                       <xsl:variable name="max">
+                                               <xsl:choose>
+                                                       <xsl:when test="@list='yes'">unbounded</xsl:when>
+                                                       <xsl:otherwise>1</xsl:otherwise>
+                                               </xsl:choose>
+                                       </xsl:variable>
+                                       <xsd:element name="{@name}" type="{$prefix}{@type}" minOccurs="1" maxOccurs="{$max}"/>
+                               </xsl:for-each>
+                       </xsd:sequence>
+               </xsd:complexType>
+       </xsd:element>
+       <xsd:element name="{@name}Output">
+               <xsd:complexType>
+                       <xsd:sequence>
+                               <xsl:for-each select="output">
+                                       <xsl:variable name="prefix">
+                                               <xsl:choose>
+                                                       <xsl:when test="starts-with(@type,'xsd:')"/>
+                                                       <xsl:otherwise><xsl:value-of select="/service/@typePrefix"/>:</xsl:otherwise>
+                                               </xsl:choose>
+                                       </xsl:variable>
+                                       <xsl:variable name="max">
+                                               <xsl:choose>
+                                                       <xsl:when test="@list='yes'">unbounded</xsl:when>
+                                                       <xsl:otherwise>1</xsl:otherwise>
+                                               </xsl:choose>
+                                       </xsl:variable>
+                                       <xsd:element name="{@name}" type="{$prefix}{@type}" minOccurs="1" maxOccurs="{$max}"/>
+                               </xsl:for-each>
+                       </xsd:sequence>
+               </xsd:complexType>
+       </xsd:element>
 </xsl:template>
 
+
 <xsl:template match="struct[@fault='yes']" mode="message">
        <wsdl:message name="{@name}">
                <wsdl:part name="{@name}" element="{/service/@typePrefix}:{@name}">
 
 <xsl:template match="op" mode="binding">
        <wsdl:operation name="{@name}">
-               <soap:operation style="rpc"/>
+               <soap:operation style="document"/>
                <wsdl:input name="i">
-                       <soap:body use="literal" namespace="{/service/@ns}"/>
+                       <soap:body use="literal"/>
                </wsdl:input>
                <wsdl:output name="o">
-                       <soap:body use="literal" namespace="{/service/@ns}"/>
+                       <soap:body use="literal"/>
                </wsdl:output>
                <wsdl:fault name="f">
                        <soap:fault use="literal"/>
                        attributeFormDefault="unqualified">
 
                        <xsl:apply-templates select="op" mode="element"/>
+
+                       <xsl:for-each select="/service/fault">
+                               <xsd:element name="{@name}" type="{/service/@typePrefix}:{@name}"/>
+                       </xsl:for-each>
                </schema>
        </wsdl:types>
 
                </wsdl:portType>
 
                <binding name="{/service/@name}" type="{/service/@prefix}:{/service/@name}PortType">
-                       <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
+                       <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
                        <xsl:apply-templates select="op" mode="binding"/>
                </binding>
 
 
 <xsl:template match="fault">
        <wsdl:message name="{@name}">
-               <wsdl:part name="{@name}" element="{/service/@typePrefix}:{@name}" />
+               <wsdl:part name="{@name}" element="{/service/@elemPrefix}:{@name}" />
        </wsdl:message>
 </xsl:template>