--- lib/OpenLayers/Format/GML/Base.js	2008-11-17 11:51:36.000000000 +0100
+++ lib/OpenLayers/Format/GML/Base.js	2008-11-17 14:29:03.000000000 +0100
@@ -40,10 +40,10 @@
     
     /**
      * APIProperty: featureType
-     * {String} The local (without prefix) feature typeName.
+     * {Array(String) or String} The local (without prefix) feature typeName(s).
      */
     featureType: null,
-    
+
     /**
      * APIProperty: featureNS
      * {String} The feature namespace.  Must be set in the options at
@@ -80,6 +80,13 @@
     xy: true,
 
     /**
+     * Property: singleFeatureType
+     * {Boolean} True if there is only 1 featureType, and not an array
+     *    of featuretypes
+    */
+    singleFeatureType: null,
+
+    /**
      * Property: regExes
      * Compiled regular expressions for manipulating strings.
      */
@@ -101,13 +108,14 @@
      *     this instance.
      *
      * Valid options properties:
-     * featureType - {String} Local (without prefix) feature typeName (required).
+     * featureType - {Array(String) or String} Local (without prefix) feature typeName(s) (required).
      * featureNS - {String} Feature namespace (required).
      * geometryName - {String} Geometry element name.
      */
     initialize: function(options) {
         OpenLayers.Format.XML.prototype.initialize.apply(this, [options]);
         this.setNamespace("feature", options.featureNS);
+        this.singleFeatureType = (typeof options.featureType == "string");
     },
     
     /**
@@ -294,8 +302,9 @@
                 // geometry or attributes.
                 var name;
                 var local = node.localName || node.nodeName.split(":").pop();
-                if(local == this.featureType) {
-                    name = "_typeName";
+                if ((this.singleFeatureType && (local == this.featureType)) || 
+                    (this.featureType.indexOf(local) != -1)) {
+                        name = "_typeName";
                 } else {
                     // Assume attribute elements have one child node and that the child
                     // is a text node.  Otherwise assume it is a geometry node.
@@ -317,6 +326,13 @@
                 var feature = new OpenLayers.Feature.Vector(
                     container.components[0], container.attributes
                 );
+                if (!this.singleFeatureType) {
+                    feature.gml = { 
+                        featureType: node.nodeName.split(":")[1], 
+                        featureNS: node.namespaceURI, 
+                        featureNSPrefix: node.prefix 
+                    }; 
+                }
                 var fid = node.getAttribute("fid") ||
                     this.getAttributeNS(node, this.namespaces["gml"], "id");
                 if(fid) {
