diff --git a/ChangeLog b/ChangeLog
index 15e4681cf..9077050ee 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2005-06-08  Mike Kestner  <mkestner@novell.com>
+
+	* generator/ReturnValue.cs : improved list to array marshaling.
+	* glib/Marshaller.cs : added ListToArray ().
+	* gnomevfs/Gnomevfs.metadata : mark element_type on
+	Mime.GetAllApplications. [Fixes #71888]
+
 2005-06-06  Mike Kestner  <mkestner@novell.com>
 
 	* generator/ImportSignature.cs : fix native delegate namespacing hack.
diff --git a/doc/en/GLib/Marshaller.xml b/doc/en/GLib/Marshaller.xml
index 0150adfd3..410b04ddc 100644
--- a/doc/en/GLib/Marshaller.xml
+++ b/doc/en/GLib/Marshaller.xml
@@ -299,5 +299,23 @@
         <remarks />
       </Docs>
     </Member>
+  <Member MemberName="ListToArray">
+      <MemberSignature Language="C#" Value="public static Array ListToArray (GLib.ListBase list, Type type);" />
+      <MemberType>Method</MemberType>
+      <ReturnValue>
+        <ReturnType>System.Array</ReturnType>
+      </ReturnValue>
+      <Parameters>
+        <Parameter Name="list" Type="GLib.ListBase" />
+        <Parameter Name="type" Type="System.Type" />
+      </Parameters>
+      <Docs>
+        <param name="list">The list to be marshaled.</param>
+        <param name="type">The type of the list elements.</param>
+        <summary>Marshals a native list to a typed array.</summary>
+        <returns>An array of <paramref name="type" />.</returns>
+        <remarks />
+      </Docs>
+    </Member>
   </Members>
 </Type>
diff --git a/doc/en/Gnome.Vfs/Mime.xml b/doc/en/Gnome.Vfs/Mime.xml
index e96b6fca7..cacff63c9 100644
--- a/doc/en/Gnome.Vfs/Mime.xml
+++ b/doc/en/Gnome.Vfs/Mime.xml
@@ -231,22 +231,7 @@
         <remarks>To be added.</remarks>
       </Docs>
     </Member>
-    <Member MemberName="GetAllApplications">
-      <MemberSignature Language="C#" Value="public static GLib.List GetAllApplications (string mime_type);" />
-      <MemberType>Method</MemberType>
-      <ReturnValue>
-        <ReturnType>GLib.List</ReturnType>
-      </ReturnValue>
-      <Parameters>
-        <Parameter Name="mime_type" Type="System.String" />
-      </Parameters>
-      <Docs>
-        <param name="mime_type">To be added.</param>
-        <summary>To be added.</summary>
-        <returns>To be added.</returns>
-        <remarks>To be added.</remarks>
-      </Docs>
-    </Member>
+    
     <Member MemberName="SetRegisteredTypeKey">
       <MemberSignature Language="C#" Value="public static Gnome.Vfs.Result SetRegisteredTypeKey (string mime_type, string key, string data);" />
       <MemberType>Method</MemberType>
@@ -915,9 +900,25 @@
         <remarks>To be added.</remarks>
       </Docs>
     </Member>
+  <Member MemberName="GetAllApplications">
+      <MemberSignature Language="C#" Value="public static Gnome.Vfs.MimeApplication[] GetAllApplications (string mime_type);" />
+      <MemberType>Method</MemberType>
+      <ReturnValue>
+        <ReturnType>Gnome.Vfs.MimeApplication[]</ReturnType>
+      </ReturnValue>
+      <Parameters>
+        <Parameter Name="mime_type" Type="System.String" />
+      </Parameters>
+      <Docs>
+        <param name="mime_type">A mime type to query, for example 'text/plain'.</param>
+        <summary>Gets all the applications registered for a MIME type.</summary>
+        <returns>an array of <see cref="T:Gnome.Vfs.MimeApplication" />.</returns>
+        <remarks />
+      </Docs>
+    </Member>
   </Members>
   <Docs>
-    <summary>To be added.</summary>
-    <remarks>To be added.</remarks>
+    <summary>Mime related static methods.</summary>
+    <remarks />
   </Docs>
 </Type>
diff --git a/doc/en/Gnome/CanvasPathDef.xml b/doc/en/Gnome/CanvasPathDef.xml
index ea569681a..70e459172 100644
--- a/doc/en/Gnome/CanvasPathDef.xml
+++ b/doc/en/Gnome/CanvasPathDef.xml
@@ -160,19 +160,7 @@
         <remarks>To be added</remarks>
       </Docs>
     </Member>
-    <Member MemberName="Split">
-      <MemberSignature Language="C#" Value="public GLib.SList Split ();" />
-      <MemberType>Method</MemberType>
-      <ReturnValue>
-        <ReturnType>GLib.SList</ReturnType>
-      </ReturnValue>
-      <Parameters />
-      <Docs>
-        <summary>To be added</summary>
-        <returns>To be added: an object of type 'GLib.SList'</returns>
-        <remarks>To be added</remarks>
-      </Docs>
-    </Member>
+    
     <Member MemberName="Ref">
       <MemberSignature Language="C#" Value="public void Ref ();" />
       <MemberType>Method</MemberType>
@@ -520,5 +508,18 @@
         <remarks>To be added</remarks>
       </Docs>
     </Member>
+  <Member MemberName="Split">
+      <MemberSignature Language="C#" Value="public Gnome.CanvasPathDef[] Split ();" />
+      <MemberType>Method</MemberType>
+      <ReturnValue>
+        <ReturnType>Gnome.CanvasPathDef[]</ReturnType>
+      </ReturnValue>
+      <Parameters />
+      <Docs>
+        <summary>To be added.</summary>
+        <returns>To be added.</returns>
+        <remarks>To be added.</remarks>
+      </Docs>
+    </Member>
   </Members>
 </Type>
diff --git a/generator/ReturnValue.cs b/generator/ReturnValue.cs
index 7f0db32e0..4a05c7642 100644
--- a/generator/ReturnValue.cs
+++ b/generator/ReturnValue.cs
@@ -43,6 +43,10 @@ namespace GtkSharp.Generation {
 			get {
 				if (IGen == null)
 					return String.Empty;
+
+				if (ElementType != String.Empty)
+					return ElementType + "[]";
+
 				return IGen.QualifiedName + (IsArray ? "[]" : String.Empty);
 			}
 		}
@@ -102,8 +106,10 @@ namespace GtkSharp.Generation {
 				return String.Empty;
 			if (Owned)
 				var += ", true";
-			else if (ElementType != String.Empty)
-				var += ", typeof (" + ElementType + ")";
+			else if (ElementType != String.Empty) {
+				string type_str = "typeof (" + ElementType + ")";
+				return String.Format ("({0}[]) GLib.Marshaller.ListToArray ({1}, {2});", ElementType, IGen.FromNativeReturn (var + ", " + type_str), type_str);
+			}
 			return IGen.FromNativeReturn (var);
 		}
 			
@@ -113,6 +119,7 @@ namespace GtkSharp.Generation {
 				Console.Write("rettype: " + CType);
 				return false;
 			}
+
 			return true;
 		}
 	}
diff --git a/glib/Marshaller.cs b/glib/Marshaller.cs
index f45eb3aec..e8dc9b0c8 100644
--- a/glib/Marshaller.cs
+++ b/glib/Marshaller.cs
@@ -278,6 +278,13 @@ namespace GLib {
 			Marshal.StructureToPtr (o, result, false);
 			return result;
 		}
+
+		public static Array ListToArray (ListBase list, System.Type type)
+		{
+			Array result = Array.CreateInstance (type, list.Count);
+			list.CopyTo (result, 0);
+			return result;
+		}
 	}
 }
 
diff --git a/gnomevfs/Gnomevfs.metadata b/gnomevfs/Gnomevfs.metadata
index 7fe09df6c..1f2b9490d 100644
--- a/gnomevfs/Gnomevfs.metadata
+++ b/gnomevfs/Gnomevfs.metadata
@@ -16,6 +16,7 @@
   <remove-node path="/api/namespace/callback[@cname='GnomeVFSXferProgressCallback']" />
   <remove-node path="/api/namespace/class[@cname='GnomeVfsAsync_']" />
   <remove-node path="/api/namespace/class[@cname='GnomeVfsDirectory_']" />
+  <attr path="/api/namespace/class[@cname='GnomeVfsMime_']/method[@name='GetAllApplications']/return-type" name="element_type">Gnome.Vfs.MimeApplication</attr>
   <remove-node path="/api/namespace/class[@cname='GnomeVfsMonitor_']" />
   <remove-node path="/api/namespace/class[@cname='GnomeVfsXfer_']" />
   <attr path="/api/namespace/enum[@cname='GnomeVFSDirectoryVisitOptions']" name="hidden">1</attr>