diff --git a/ChangeLog b/ChangeLog
index 9b70e03c1..101f772da 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,60 @@
+2005-05-04  Dan Winship  <danw@novell.com>
+
+	* parser/gapi2xml.pl: make note of _get_type methods for enums
+
+	* */*-api.xml: Regen, adding gtype="..." to many enum types
+
+	* generator/EnumGen.cs (Generate): if the enum has the
+	"gtype" property, add a GTypeAttribute pointing to an internal
+	FooGType class whose GType property can be used to get the enum's
+	GType.
+
+	* generator/ObjectGen.cs:
+	s/ObjectManager.RegisterType/GType.Register/
+
+	* glib/GTypeAttribute.cs: attribute for indicating a property that
+	will return the GType of a type (particularly for enums, which
+	can't have GType properties added to them).
+
+	* glib/GType.cs: renamed from Type.cs to match the type name
+	(public static readonly GType ...): add a few missing types.
+	(Register): moved from ObjectManager.RegisterType
+	(LookupGType): moved from TypeConverter.LookupType and extended to
+	handle GTypeAttribute. Also, fix mappings for sbyte/byte/char, and
+	return specific GTypes for Object subclasses rather than always
+	returning GType.Object.	[Fixes #74699]
+	(LookupType): moved from ObjectWrapper.LookupType
+	(ToString): return the type name
+	
+	* glib/Object.cs (RegisterGType):
+	s/ObjectManager.Register/GType.Register/
+	(LookupGType): Make this protected internal so GType can access
+	it.
+
+	* glib/ObjectManager.cs (RegisterType): deprecate in favor of
+	GType.Register.
+	(LookupType): moved to GType
+	
+	* glib/TypeConverter.cs (LookupType): now a deprecated wrapper
+	around GType.LookupGType.
+
+	* glib/Value.cs: Use GType casts rather than TypeConverter
+
+	* gtk/NodeStore.cs (ScanType):
+	* gtk/ListStore.custom (ListStore): 
+	* gtk/TreeStore.custom (TreeStore): Use (GType) cast rather than
+	TypeConverter. Remove the error check and exception, since the
+	cast never returns GType.Invalid. (The check probably predates
+	GLib.ManagedValue.)
+
+	* gnome/PanelAppletFactory.cs (Register): Use a GType cast rather
+	than GLib.Object.LookupGType (which is no longer accessible after
+	an mcs bugfix)
+
+	* sample/GtkDemo/DemoIconView.cs (CreateStore): use the Type[]
+	constructor rather than the GType[] constructor, since it
+	translates typeof(Gdk.Pixbuf) correctly now.
+
 2005-05-04  Dan Winship  <danw@novell.com>
 
 	* generator/Parameters.cs (Parameters.Validate): If the parameters
diff --git a/atk/atk-api.raw b/atk/atk-api.raw
index a0cecd69e..e8751ece3 100644
--- a/atk/atk-api.raw
+++ b/atk/atk-api.raw
@@ -7,19 +7,19 @@
 
 -->
   <namespace name="Atk" library="libatk-1.0-0.dll">
-    <enum name="CoordType" cname="AtkCoordType" type="enum">
+    <enum name="CoordType" cname="AtkCoordType" gtype="atk_coord_type_get_type" type="enum">
       <member cname="ATK_XY_SCREEN" name="Screen" />
       <member cname="ATK_XY_WINDOW" name="Window" />
     </enum>
-    <enum name="HyperlinkStateFlags" cname="AtkHyperlinkStateFlags" type="flags">
+    <enum name="HyperlinkStateFlags" cname="AtkHyperlinkStateFlags" gtype="atk_hyperlink_state_flags_get_type" type="flags">
       <member cname="ATK_HYPERLINK_IS_INLINE" name="Inline" value="1 &lt;&lt; 0" />
     </enum>
-    <enum name="KeyEventType" cname="AtkKeyEventType" type="enum">
+    <enum name="KeyEventType" cname="AtkKeyEventType" gtype="atk_key_event_type_get_type" type="enum">
       <member cname="ATK_KEY_EVENT_PRESS" name="Press" />
       <member cname="ATK_KEY_EVENT_RELEASE" name="Release" />
       <member cname="ATK_KEY_EVENT_LAST_DEFINED" name="LastDefined" />
     </enum>
-    <enum name="Layer" cname="AtkLayer" type="enum">
+    <enum name="Layer" cname="AtkLayer" gtype="atk_layer_get_type" type="enum">
       <member cname="ATK_LAYER_INVALID" name="Invalid" />
       <member cname="ATK_LAYER_BACKGROUND" name="Background" />
       <member cname="ATK_LAYER_CANVAS" name="Canvas" />
@@ -29,7 +29,7 @@
       <member cname="ATK_LAYER_OVERLAY" name="Overlay" />
       <member cname="ATK_LAYER_WINDOW" name="Window" />
     </enum>
-    <enum name="RelationType" cname="AtkRelationType" type="enum">
+    <enum name="RelationType" cname="AtkRelationType" gtype="atk_relation_type_get_type" type="enum">
       <member cname="ATK_RELATION_NULL" name="Null" />
       <member cname="ATK_RELATION_CONTROLLED_BY" name="ControlledBy" />
       <member cname="ATK_RELATION_CONTROLLER_FOR" name="ControllerFor" />
@@ -46,7 +46,7 @@
       <member cname="ATK_RELATION_PARENT_WINDOW_OF" name="ParentWindowOf" />
       <member cname="ATK_RELATION_LAST_DEFINED" name="LastDefined" />
     </enum>
-    <enum name="Role" cname="AtkRole" type="enum">
+    <enum name="Role" cname="AtkRole" gtype="atk_role_get_type" type="enum">
       <member cname="ATK_ROLE_INVALID" name="Invalid" />
       <member cname="ATK_ROLE_ACCEL_LABEL" name="AccelLabel" />
       <member cname="ATK_ROLE_ALERT" name="Alert" />
@@ -126,7 +126,7 @@
       <member cname="ATK_ROLE_EMBEDDED" name="Embedded" />
       <member cname="ATK_ROLE_LAST_DEFINED" name="LastDefined" />
     </enum>
-    <enum name="StateType" cname="AtkStateType" type="enum">
+    <enum name="StateType" cname="AtkStateType" gtype="atk_state_type_get_type" type="enum">
       <member cname="ATK_STATE_INVALID" name="Invalid" />
       <member cname="ATK_STATE_ACTIVE" name="Active" />
       <member cname="ATK_STATE_ARMED" name="Armed" />
@@ -161,7 +161,7 @@
       <member cname="ATK_STATE_TRUNCATED" name="Truncated" />
       <member cname="ATK_STATE_LAST_DEFINED" name="LastDefined" />
     </enum>
-    <enum name="TextAttribute" cname="AtkTextAttribute" type="enum">
+    <enum name="TextAttribute" cname="AtkTextAttribute" gtype="atk_text_attribute_get_type" type="enum">
       <member cname="ATK_TEXT_ATTR_INVALID" name="Invalid" />
       <member cname="ATK_TEXT_ATTR_LEFT_MARGIN" name="LeftMargin" />
       <member cname="ATK_TEXT_ATTR_RIGHT_MARGIN" name="RightMargin" />
@@ -192,7 +192,7 @@
       <member cname="ATK_TEXT_ATTR_STYLE" name="Style" />
       <member cname="ATK_TEXT_ATTR_LAST_DEFINED" name="LastDefined" />
     </enum>
-    <enum name="TextBoundary" cname="AtkTextBoundary" type="enum">
+    <enum name="TextBoundary" cname="AtkTextBoundary" gtype="atk_text_boundary_get_type" type="enum">
       <member cname="ATK_TEXT_BOUNDARY_CHAR" name="Char" />
       <member cname="ATK_TEXT_BOUNDARY_WORD_START" name="WordStart" />
       <member cname="ATK_TEXT_BOUNDARY_WORD_END" name="WordEnd" />
@@ -201,7 +201,7 @@
       <member cname="ATK_TEXT_BOUNDARY_LINE_START" name="LineStart" />
       <member cname="ATK_TEXT_BOUNDARY_LINE_END" name="LineEnd" />
     </enum>
-    <enum name="TextClipType" cname="AtkTextClipType" type="enum">
+    <enum name="TextClipType" cname="AtkTextClipType" gtype="atk_text_clip_type_get_type" type="enum">
       <member cname="ATK_TEXT_CLIP_NONE" name="None" />
       <member cname="ATK_TEXT_CLIP_MIN" name="Min" />
       <member cname="ATK_TEXT_CLIP_MAX" name="Max" />
diff --git a/doc/ChangeLog b/doc/ChangeLog
index ab57970d4..311f619e4 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,10 @@
+2005-05-04  Dan Winship  <danw@novell.com>
+
+	* en/GLib/GType.xml: update, and remove a bunch of examples of how
+	not to derive types any more...
+
+	* en/GLib/GTypeAttribute.xml: add
+
 2005-05-04  Dan Winship  <danw@novell.com>
 
 	* updater/updater.cs (GetFieldVisibility, GetMethodVisibility):
diff --git a/doc/en/GLib/GType.xml b/doc/en/GLib/GType.xml
index 96629fd45..304256a05 100644
--- a/doc/en/GLib/GType.xml
+++ b/doc/en/GLib/GType.xml
@@ -10,42 +10,8 @@
   </AssemblyInfo>
   <ThreadSafetyStatement />
   <Docs>
-    <summary>The GLib Runtime type identification and management system. The GType API is the foundation of the GObject system. It provides the facilities for registering and managing all fundamental data types, user-defined object and interface types. </summary>
-    <remarks>
-      <example>
-        <code lang="C#">
-using System;
-using Gtk;
-
-public class MagrittesWindow : Window {
-	static GLib.GType gtype;
-	Button button;
-	
-	public static new GLib.GType GType
-	{
-		get
-		{
-			if (gtype == GLib.GType.Invalid)
-				gtype = RegisterGType (typeof (MagrittesWindow));
-			return gtype;
-		}
-	}
-	
-	public MagrittesWindow() : base (GType)
-	{
-		button = new Button("This is not a button");
-		button.Clicked += new EventHandler(button_Clicked);
-	
-		this.Title = "This is not a Window";
-		this.SetDefaultSize (400, 300);
-		this.DeleteEvent += new DeleteEventHandler (MagrittesWindow_Delete);
-		this.Add(button);
-		this.ShowAll ();
-	}
-	/* elided for brevity */
-  </code>
-      </example>
-    </remarks>
+    <summary>The GLib Runtime type identification and management system. The GType API is the foundation of the GObject system. It provides the facilities for registering and managing all fundamental data types, user-defined object and interface types.</summary>
+    <remarks />
   </Docs>
   <Base>
     <BaseTypeName>System.ValueType</BaseTypeName>
@@ -62,28 +28,8 @@ public class MagrittesWindow : Window {
       <Parameters>
       </Parameters>
       <Docs>
-        <summary>A field of type GType.Invalid
-</summary>
-        <remarks>
-          <example>
-            <code lang="C#">
-      public class MyWindow : Window {
-     static GLib.GType gtype;
-     Button button;
-     
-     public static new GLib.GType GType
-     {
-          get
-          {
-               if (gtype == GLib.GType.Invalid)
-                    gtype = RegisterGType (typeof (MyWindow));
-               return gtype;
-          }
-     }
-/* Rest elided for clarity */
-  </code>
-          </example>
-        </remarks>
+        <summary>An invalid <see cref="T:GLib.GType" />.</summary>
+        <remarks />
       </Docs>
     </Member>
     <Member MemberName="None">
@@ -95,8 +41,8 @@ public class MagrittesWindow : Window {
       <Parameters>
       </Parameters>
       <Docs>
-        <summary>A field of type GType.None</summary>
-        <remarks>Sample see: GLib.GType.Invalid.</remarks>
+        <summary>A <see cref="T:GLib.GType" /> corresponding to <see langword="void" />.</summary>
+        <remarks />
       </Docs>
     </Member>
     <Member MemberName="String">
@@ -108,8 +54,8 @@ public class MagrittesWindow : Window {
       <Parameters>
       </Parameters>
       <Docs>
-        <summary>A field of type GType.String</summary>
-        <remarks>Sample see: GLib.GType.Invalid.</remarks>
+        <summary>The <see cref="T:GLib.GType" /> for <see langword="string" /> values.</summary>
+        <remarks />
       </Docs>
     </Member>
     <Member MemberName="Boolean">
@@ -121,8 +67,8 @@ public class MagrittesWindow : Window {
       <Parameters>
       </Parameters>
       <Docs>
-        <summary>A field of type GType.Boolean.</summary>
-        <remarks>Sample see: GLib.GType.Invalid.</remarks>
+        <summary>The <see cref="T:GLib.GType" /> for <see langword="bool" /> values.</summary>
+        <remarks />
       </Docs>
     </Member>
     <Member MemberName="Int">
@@ -134,8 +80,8 @@ public class MagrittesWindow : Window {
       <Parameters>
       </Parameters>
       <Docs>
-        <summary>A field of type GType.Int</summary>
-        <remarks>Sample see: GLib.GType.Invalid.</remarks>
+        <summary>The <see cref="T:GLib.GType" /> for <see langword="int" /> values.</summary>
+        <remarks />
       </Docs>
     </Member>
     <Member MemberName="Double">
@@ -147,8 +93,8 @@ public class MagrittesWindow : Window {
       <Parameters>
       </Parameters>
       <Docs>
-        <summary>A field of type GType.Double</summary>
-        <remarks>Sample see: GLib.GType.Invalid.</remarks>
+        <summary>The <see cref="T:GLib.GType" /> for <see langword="double" /> values.</summary>
+        <remarks />
       </Docs>
     </Member>
     <Member MemberName="Float">
@@ -160,8 +106,8 @@ public class MagrittesWindow : Window {
       <Parameters>
       </Parameters>
       <Docs>
-        <summary>A field of type GType.Float</summary>
-        <remarks>Sample see: GLib.GType.Invalid.</remarks>
+        <summary>The <see cref="T:GLib.GType" /> for <see langword="float" /> values.</summary>
+        <remarks />
       </Docs>
     </Member>
     <Member MemberName="Char">
@@ -173,8 +119,8 @@ public class MagrittesWindow : Window {
       <Parameters>
       </Parameters>
       <Docs>
-        <summary>A field of type GType.Char</summary>
-        <remarks>Sample see: GLib.GType.Invalid.</remarks>
+        <summary>The <see cref="T:GLib.GType" /> for <see langword="sbyte" /> values.</summary>
+        <remarks />
       </Docs>
     </Member>
     <Member MemberName="UInt">
@@ -186,8 +132,8 @@ public class MagrittesWindow : Window {
       <Parameters>
       </Parameters>
       <Docs>
-        <summary>A field of type GType.UInt</summary>
-        <remarks>Sample see: GLib.GType.Invalid.</remarks>
+        <summary>The <see cref="T:GLib.GType" /> for <see langword="uint" /> values.</summary>
+        <remarks />
       </Docs>
     </Member>
     <Member MemberName="Object">
@@ -199,8 +145,8 @@ public class MagrittesWindow : Window {
       <Parameters>
       </Parameters>
       <Docs>
-        <summary>A field of type GType.Object</summary>
-        <remarks>Sample see: GLib.GType.Invalid.</remarks>
+        <summary>The <see cref="T:GLib.GType" /> for <see cref="T:GLib.Object" /> values.</summary>
+        <remarks />
       </Docs>
     </Member>
     <Member MemberName="Pointer">
@@ -212,8 +158,8 @@ public class MagrittesWindow : Window {
       <Parameters>
       </Parameters>
       <Docs>
-        <summary>A field of type GType.Pointer</summary>
-        <remarks>Sample see: GLib.GType.Invalid.</remarks>
+        <summary>The <see cref="T:GLib.GType" /> for pointer values.</summary>
+        <remarks />
       </Docs>
     </Member>
     <Member MemberName="Boxed">
@@ -225,8 +171,86 @@ public class MagrittesWindow : Window {
       <Parameters>
       </Parameters>
       <Docs>
-        <summary>A field of type GType.Boxed</summary>
-        <remarks>Sample see: GLib.GType.Invalid.</remarks>
+        <summary>The <see cref="T:GLib.GType" /> for "boxed" struct values.</summary>
+        <remarks />
+      </Docs>
+    </Member>
+    <Member MemberName="Int64">
+      <MemberSignature Language="C#" Value="public static GLib.GType Int64;" />
+      <MemberType>Field</MemberType>
+      <ReturnValue>
+        <ReturnType>GLib.GType</ReturnType>
+      </ReturnValue>
+      <Parameters>
+      </Parameters>
+      <Docs>
+        <summary>The <see cref="T:GLib.GType" /> for <see langword="long" /> values.</summary>
+        <remarks />
+      </Docs>
+    </Member>
+    <Member MemberName="UInt64">
+      <MemberSignature Language="C#" Value="public static GLib.GType UInt64;" />
+      <MemberType>Field</MemberType>
+      <ReturnValue>
+        <ReturnType>GLib.GType</ReturnType>
+      </ReturnValue>
+      <Parameters>
+      </Parameters>
+      <Docs>
+        <summary>The <see cref="T:GLib.GType" /> for <see langword="ulong" /> values.</summary>
+        <remarks />
+      </Docs>
+    </Member>
+    <Member MemberName="Interface">
+      <MemberSignature Language="C#" Value="public static GLib.GType Interface;" />
+      <MemberType>Field</MemberType>
+      <ReturnValue>
+        <ReturnType>GLib.GType</ReturnType>
+      </ReturnValue>
+      <Parameters>
+      </Parameters>
+      <Docs>
+        <summary>The <see cref="T:GLib.GType" /> for unmanaged interface values.</summary>
+        <remarks />
+      </Docs>
+    </Member>
+    <Member MemberName="UChar">
+      <MemberSignature Language="C#" Value="public static GLib.GType UChar;" />
+      <MemberType>Field</MemberType>
+      <ReturnValue>
+        <ReturnType>GLib.GType</ReturnType>
+      </ReturnValue>
+      <Parameters>
+      </Parameters>
+      <Docs>
+        <summary>The <see cref="T:GLib.GType" /> for <see langword="byte" /> values.</summary>
+        <remarks />
+      </Docs>
+    </Member>
+    <Member MemberName="Enum">
+      <MemberSignature Language="C#" Value="public static GLib.GType Enum;" />
+      <MemberType>Field</MemberType>
+      <ReturnValue>
+        <ReturnType>GLib.GType</ReturnType>
+      </ReturnValue>
+      <Parameters>
+      </Parameters>
+      <Docs>
+        <summary>The <see cref="T:GLib.GType" /> for GType-registered enum values.</summary>
+        <remarks />
+      </Docs>
+    </Member>
+    <Member MemberName="Flags">
+      <MemberSignature Language="C#" Value="public static GLib.GType Flags;" />
+      <MemberType>Field</MemberType>
+      <ReturnValue>
+        <ReturnType>GLib.GType</ReturnType>
+      </ReturnValue>
+      <Parameters>
+      </Parameters>
+      <Docs>
+        <summary>The <see cref="T:GLib.GType" /> for GType-registered flag values.</summary>
+        <remarks />
       </Docs>
     </Member>
     <Member MemberName="Equals">
@@ -317,31 +341,38 @@ public class MagrittesWindow : Window {
         <remarks />
       </Docs>
     </Member>
-    <Member MemberName="Int64">
-      <MemberSignature Language="C#" Value="public static GLib.GType Int64;" />
-      <MemberType>Field</MemberType>
+    <Member MemberName="Register">
+      <MemberSignature Language="C#" Value="public static void Register (GLib.GType native_type, Type type);" />
+      <MemberType>Method</MemberType>
       <ReturnValue>
-        <ReturnType>GLib.GType</ReturnType>
+        <ReturnType>System.Void</ReturnType>
       </ReturnValue>
       <Parameters>
+        <Parameter Name="native_type" Type="GLib.GType" />
+        <Parameter Name="type" Type="System.Type" />
       </Parameters>
       <Docs>
-        <summary>64 bit integer type.</summary>
+        <summary>Registers a <see cref="T:GLib.GType" /> to <see cref="T:System.Type" /> mapping.</summary>
+        <param name="native_type">a <see cref="T:GLib.GType" /></param>
+        <param name="type">a <see cref="T:System.Type" /></param>
         <remarks />
       </Docs>
     </Member>
-    <Member MemberName="UInt64">
-      <MemberSignature Language="C#" Value="public static GLib.GType UInt64;" />
-      <MemberType>Field</MemberType>
+    <Member MemberName="LookupType">
+      <MemberSignature Language="C#" Value="public static Type LookupType (IntPtr typeid);" />
+      <MemberType>Method</MemberType>
       <ReturnValue>
-        <ReturnType>GLib.GType</ReturnType>
+        <ReturnType>System.Type</ReturnType>
       </ReturnValue>
       <Parameters>
+        <Parameter Name="typeid" Type="System.IntPtr" />
       </Parameters>
       <Docs>
-        <summary>64 bit unsigned integer type.</summary>
+        <summary>Looks up the <see cref="T:System.Type" /> corresponding to an unmanaged GType</summary>
+        <param name="typeid">a <see cref="T:System.IntPtr" /></param>
+        <returns>a <see cref="T:System.Type" /></returns>
         <remarks />
       </Docs>
     </Member>
   </Members>
-</Type>
+</Type>
\ No newline at end of file
diff --git a/doc/en/GLib/GTypeAttribute.xml b/doc/en/GLib/GTypeAttribute.xml
new file mode 100644
index 000000000..7eb5f2b64
--- /dev/null
+++ b/doc/en/GLib/GTypeAttribute.xml
@@ -0,0 +1,53 @@
+<Type Name="GTypeAttribute" FullName="GLib.GTypeAttribute">
+  <TypeSignature Language="C#" Value="public sealed class GTypeAttribute : System.Attribute" Maintainer="auto" />
+  <AssemblyInfo>
+    <AssemblyName>glib-sharp</AssemblyName>
+    <AssemblyPublicKey>[00 24 00 00 04 80 00 00 94 00 00 00 06 02 00 00 00 24 00 00 52 53 41 31 00 04 00 00 01 00 01 00 71 EB 6C 55 75 52 9C BF 72 44 F7 A6 EA 05 62 84 F9 EA E0 3B CF F2 CC 13 2C 9C 49 0A B3 09 EA B0 B5 6B CE 44 9D F5 03 D9 C0 A8 1E 52 05 85 CD BE 70 E2 FB 90 43 4B AC 04 FA 62 22 A8 00 98 B7 A1 A7 B3 AF 99 1A 41 23 24 BB 43 25 F6 B8 65 BB 64 EB F6 D1 C2 06 D5 73 2D DF BC 70 A7 38 9E E5 3E 0C 24 6E 32 79 74 1A D0 05 03 E4 98 42 E1 9B F3 7B 19 8B 40 21 26 CB 36 89 C2 EA 64 96 A4 7C B4]</AssemblyPublicKey>
+    <AssemblyVersion>2.0.0.0</AssemblyVersion>
+    <AssemblyCulture>neutral</AssemblyCulture>
+    <Attributes />
+  </AssemblyInfo>
+  <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
+  <Docs>
+    <summary>Identifies a property that can be read to find the GType of a managed type</summary>
+    <remarks />
+  </Docs>
+  <Base>
+    <BaseTypeName>System.Attribute</BaseTypeName>
+  </Base>
+  <Interfaces />
+  <Attributes>
+    <Attribute>
+      <AttributeName>System.AttributeUsageAttribute</AttributeName>
+    </Attribute>
+  </Attributes>
+  <Members>
+    <Member MemberName=".ctor">
+      <MemberSignature Language="C#" Value="public GTypeAttribute (Type wrapper_type);" />
+      <MemberType>Constructor</MemberType>
+      <ReturnValue />
+      <Parameters>
+        <Parameter Name="wrapper_type" Type="System.Type" />
+      </Parameters>
+      <Docs>
+        <summary>Creates an attribute.</summary>
+        <param name="wrapper_type">the <see cref="T:System.Type" /> containing the GType property</param>
+        <returns>a <see cref="T:GLib.GTypeAttribute" /></returns>
+        <remarks />
+      </Docs>
+    </Member>
+    <Member MemberName="WrapperType">
+      <MemberSignature Language="C#" Value="public Type WrapperType { set; get; };" />
+      <MemberType>Property</MemberType>
+      <ReturnValue>
+        <ReturnType>System.Type</ReturnType>
+      </ReturnValue>
+      <Parameters />
+      <Docs>
+        <summary>The class containing the GType property</summary>
+        <returns>a <see cref="T:System.Type" /></returns>
+        <remarks />
+      </Docs>
+    </Member>
+  </Members>
+</Type>
\ No newline at end of file
diff --git a/doc/en/GLib/ObjectManager.xml b/doc/en/GLib/ObjectManager.xml
index 1e2bd77e3..c548f5ea1 100644
--- a/doc/en/GLib/ObjectManager.xml
+++ b/doc/en/GLib/ObjectManager.xml
@@ -93,7 +93,7 @@
         <Parameter Name="type" Type="System.Type" />
       </Parameters>
       <Docs>
-        <summary>Registers a GType to System.Type mapping.</summary>
+        <summary>Obsolete. Replaced by <see cref="M:GLib.GType.Register" />.</summary>
         <param name="native_type">a <see cref="T:GLib.GType" /></param>
         <param name="type">a <see cref="T:System.Type" /></param>
         <remarks />
diff --git a/doc/en/GLib/TypeConverter.xml b/doc/en/GLib/TypeConverter.xml
index 9e13db6bb..30c25c01a 100644
--- a/doc/en/GLib/TypeConverter.xml
+++ b/doc/en/GLib/TypeConverter.xml
@@ -29,10 +29,10 @@
         <Parameter Name="type" Type="System.Type" />
       </Parameters>
       <Docs>
-        <summary>To be added</summary>
+        <summary>Obsolete: Replaced by <see cref="T:GLib.GType" /> cast.</summary>
         <param name="type">a <see cref="T:System.Type" /></param>
         <returns>a <see cref="T:GLib.GType" /></returns>
-        <remarks>To be added</remarks>
+        <remarks />
       </Docs>
     </Member>
   </Members>
diff --git a/gdk/gdk-api.raw b/gdk/gdk-api.raw
index 03bb22935..328ada1bb 100644
--- a/gdk/gdk-api.raw
+++ b/gdk/gdk-api.raw
@@ -7,7 +7,7 @@
 
 -->
   <namespace name="Gdk" library="libgdk-win32-2.0-0.dll">
-    <enum name="AxisUse" cname="GdkAxisUse" type="enum">
+    <enum name="AxisUse" cname="GdkAxisUse" gtype="gdk_axis_use_get_type" type="enum">
       <member cname="GDK_AXIS_IGNORE" name="Ignore" />
       <member cname="GDK_AXIS_X" name="X" />
       <member cname="GDK_AXIS_Y" name="Y" />
@@ -17,22 +17,22 @@
       <member cname="GDK_AXIS_WHEEL" name="Wheel" />
       <member cname="GDK_AXIS_LAST" name="Last" />
     </enum>
-    <enum name="ByteOrder" cname="GdkByteOrder" type="enum">
+    <enum name="ByteOrder" cname="GdkByteOrder" gtype="gdk_byte_order_get_type" type="enum">
       <member cname="GDK_LSB_FIRST" name="LsbFirst" />
       <member cname="GDK_MSB_FIRST" name="MsbFirst" />
     </enum>
-    <enum name="CapStyle" cname="GdkCapStyle" type="enum">
+    <enum name="CapStyle" cname="GdkCapStyle" gtype="gdk_cap_style_get_type" type="enum">
       <member cname="GDK_CAP_NOT_LAST" name="NotLast" />
       <member cname="GDK_CAP_BUTT" name="Butt" />
       <member cname="GDK_CAP_ROUND" name="Round" />
       <member cname="GDK_CAP_PROJECTING" name="Projecting" />
     </enum>
-    <enum name="CrossingMode" cname="GdkCrossingMode" type="enum">
+    <enum name="CrossingMode" cname="GdkCrossingMode" gtype="gdk_crossing_mode_get_type" type="enum">
       <member cname="GDK_CROSSING_NORMAL" name="Normal" />
       <member cname="GDK_CROSSING_GRAB" name="Grab" />
       <member cname="GDK_CROSSING_UNGRAB" name="Ungrab" />
     </enum>
-    <enum name="CursorType" cname="GdkCursorType" type="enum">
+    <enum name="CursorType" cname="GdkCursorType" gtype="gdk_cursor_type_get_type" type="enum">
       <member cname="GDK_X_CURSOR" name="XCursor" />
       <member cname="GDK_ARROW" name="Arrow" value="2" />
       <member cname="GDK_BASED_ARROW_DOWN" name="BasedArrowDown" value="4" />
@@ -113,7 +113,7 @@
       <member cname="GDK_LAST_CURSOR" name="LastCursor" />
       <member cname="GDK_CURSOR_IS_PIXMAP" name="CursorIsPixmap" value="-1" />
     </enum>
-    <enum name="DragAction" cname="GdkDragAction" type="flags">
+    <enum name="DragAction" cname="GdkDragAction" gtype="gdk_drag_action_get_type" type="flags">
       <member cname="GDK_ACTION_DEFAULT" name="Default" value="1 &lt;&lt; 0" />
       <member cname="GDK_ACTION_COPY" name="Copy" value="1 &lt;&lt; 1" />
       <member cname="GDK_ACTION_MOVE" name="Move" value="1 &lt;&lt; 2" />
@@ -121,7 +121,7 @@
       <member cname="GDK_ACTION_PRIVATE" name="Private" value="1 &lt;&lt; 4" />
       <member cname="GDK_ACTION_ASK" name="Ask" value="1 &lt;&lt; 5" />
     </enum>
-    <enum name="DragProtocol" cname="GdkDragProtocol" type="enum">
+    <enum name="DragProtocol" cname="GdkDragProtocol" gtype="gdk_drag_protocol_get_type" type="enum">
       <member cname="GDK_DRAG_PROTO_MOTIF" name="Motif" />
       <member cname="GDK_DRAG_PROTO_XDND" name="Xdnd" />
       <member cname="GDK_DRAG_PROTO_ROOTWIN" name="Rootwin" />
@@ -130,7 +130,7 @@
       <member cname="GDK_DRAG_PROTO_OLE2" name="Ole2" />
       <member cname="GDK_DRAG_PROTO_LOCAL" name="Local" />
     </enum>
-    <enum name="EventMask" cname="GdkEventMask" type="flags">
+    <enum name="EventMask" cname="GdkEventMask" gtype="gdk_event_mask_get_type" type="flags">
       <member cname="GDK_EXPOSURE_MASK" name="ExposureMask" value="1 &lt;&lt; 1" />
       <member cname="GDK_POINTER_MOTION_MASK" name="PointerMotionMask" value="1 &lt;&lt; 2" />
       <member cname="GDK_POINTER_MOTION_HINT_MASK" name="PointerMotionHintMask" value="1 &lt;&lt; 3" />
@@ -154,7 +154,7 @@
       <member cname="GDK_SCROLL_MASK" name="ScrollMask" value="1 &lt;&lt; 21" />
       <member cname="GDK_ALL_EVENTS_MASK" name="AllEventsMask" value="0x3FFFFE" />
     </enum>
-    <enum name="EventType" cname="GdkEventType" type="enum">
+    <enum name="EventType" cname="GdkEventType" gtype="gdk_event_type_get_type" type="enum">
       <member cname="GDK_NOTHING" name="Nothing" value="-1" />
       <member cname="GDK_DELETE" name="Delete" />
       <member cname="GDK_DESTROY" name="Destroy" value="1" />
@@ -192,31 +192,31 @@
       <member cname="GDK_SETTING" name="Setting" value="33" />
       <member cname="GDK_OWNER_CHANGE" name="OwnerChange" value="34" />
     </enum>
-    <enum name="ExtensionMode" cname="GdkExtensionMode" type="enum">
+    <enum name="ExtensionMode" cname="GdkExtensionMode" gtype="gdk_extension_mode_get_type" type="enum">
       <member cname="GDK_EXTENSION_EVENTS_NONE" name="None" />
       <member cname="GDK_EXTENSION_EVENTS_ALL" name="All" />
       <member cname="GDK_EXTENSION_EVENTS_CURSOR" name="Cursor" />
     </enum>
-    <enum name="Fill" cname="GdkFill" type="enum">
+    <enum name="Fill" cname="GdkFill" gtype="gdk_fill_get_type" type="enum">
       <member cname="GDK_SOLID" name="Solid" />
       <member cname="GDK_TILED" name="Tiled" />
       <member cname="GDK_STIPPLED" name="Stippled" />
       <member cname="GDK_OPAQUE_STIPPLED" name="OpaqueStippled" />
     </enum>
-    <enum name="FillRule" cname="GdkFillRule" type="enum">
+    <enum name="FillRule" cname="GdkFillRule" gtype="gdk_fill_rule_get_type" type="enum">
       <member cname="GDK_EVEN_ODD_RULE" name="EvenOddRule" />
       <member cname="GDK_WINDING_RULE" name="WindingRule" />
     </enum>
-    <enum name="FilterReturn" cname="GdkFilterReturn" type="enum">
+    <enum name="FilterReturn" cname="GdkFilterReturn" gtype="gdk_filter_return_get_type" type="enum">
       <member cname="GDK_FILTER_CONTINUE" name="Continue" />
       <member cname="GDK_FILTER_TRANSLATE" name="Translate" />
       <member cname="GDK_FILTER_REMOVE" name="Remove" />
     </enum>
-    <enum name="FontType" cname="GdkFontType" deprecated="1" type="enum">
+    <enum name="FontType" cname="GdkFontType" deprecated="1" gtype="gdk_font_type_get_type" type="enum">
       <member cname="GDK_FONT_FONT" name="Font" />
       <member cname="GDK_FONT_FONTSET" name="Fontset" />
     </enum>
-    <enum name="Function" cname="GdkFunction" type="enum">
+    <enum name="Function" cname="GdkFunction" gtype="gdk_function_get_type" type="enum">
       <member cname="GDK_COPY" name="Copy" />
       <member cname="GDK_INVERT" name="Invert" />
       <member cname="GDK_XOR" name="Xor" />
@@ -254,14 +254,14 @@
       <member cname="GDK_GC_CAP_STYLE" name="CapStyle" value="1 &lt;&lt; 16" />
       <member cname="GDK_GC_JOIN_STYLE" name="JoinStyle" value="1 &lt;&lt; 17" />
     </enum>
-    <enum name="GrabStatus" cname="GdkGrabStatus" type="enum">
+    <enum name="GrabStatus" cname="GdkGrabStatus" gtype="gdk_grab_status_get_type" type="enum">
       <member cname="GDK_GRAB_SUCCESS" name="Success" />
       <member cname="GDK_GRAB_ALREADY_GRABBED" name="AlreadyGrabbed" value="1" />
       <member cname="GDK_GRAB_INVALID_TIME" name="InvalidTime" value="2" />
       <member cname="GDK_GRAB_NOT_VIEWABLE" name="NotViewable" value="3" />
       <member cname="GDK_GRAB_FROZEN" name="Frozen" value="4" />
     </enum>
-    <enum name="Gravity" cname="GdkGravity" type="enum">
+    <enum name="Gravity" cname="GdkGravity" gtype="gdk_gravity_get_type" type="enum">
       <member cname="GDK_GRAVITY_NORTH_WEST" name="NorthWest" value="1" />
       <member cname="GDK_GRAVITY_NORTH" name="North" />
       <member cname="GDK_GRAVITY_NORTH_EAST" name="NorthEast" />
@@ -273,38 +273,38 @@
       <member cname="GDK_GRAVITY_SOUTH_EAST" name="SouthEast" />
       <member cname="GDK_GRAVITY_STATIC" name="Static" />
     </enum>
-    <enum name="ImageType" cname="GdkImageType" type="enum">
+    <enum name="ImageType" cname="GdkImageType" gtype="gdk_image_type_get_type" type="enum">
       <member cname="GDK_IMAGE_NORMAL" name="Normal" />
       <member cname="GDK_IMAGE_SHARED" name="Shared" />
       <member cname="GDK_IMAGE_FASTEST" name="Fastest" />
     </enum>
-    <enum name="InputCondition" cname="GdkInputCondition" type="flags">
+    <enum name="InputCondition" cname="GdkInputCondition" gtype="gdk_input_condition_get_type" type="flags">
       <member cname="GDK_INPUT_READ" name="Read" value="1 &lt;&lt; 0" />
       <member cname="GDK_INPUT_WRITE" name="Write" value="1 &lt;&lt; 1" />
       <member cname="GDK_INPUT_EXCEPTION" name="Exception" value="1 &lt;&lt; 2" />
     </enum>
-    <enum name="InputMode" cname="GdkInputMode" type="enum">
+    <enum name="InputMode" cname="GdkInputMode" gtype="gdk_input_mode_get_type" type="enum">
       <member cname="GDK_MODE_DISABLED" name="Disabled" />
       <member cname="GDK_MODE_SCREEN" name="Screen" />
       <member cname="GDK_MODE_WINDOW" name="Window" />
     </enum>
-    <enum name="InputSource" cname="GdkInputSource" type="enum">
+    <enum name="InputSource" cname="GdkInputSource" gtype="gdk_input_source_get_type" type="enum">
       <member cname="GDK_SOURCE_MOUSE" name="Mouse" />
       <member cname="GDK_SOURCE_PEN" name="Pen" />
       <member cname="GDK_SOURCE_ERASER" name="Eraser" />
       <member cname="GDK_SOURCE_CURSOR" name="Cursor" />
     </enum>
-    <enum name="JoinStyle" cname="GdkJoinStyle" type="enum">
+    <enum name="JoinStyle" cname="GdkJoinStyle" gtype="gdk_join_style_get_type" type="enum">
       <member cname="GDK_JOIN_MITER" name="Miter" />
       <member cname="GDK_JOIN_ROUND" name="Round" />
       <member cname="GDK_JOIN_BEVEL" name="Bevel" />
     </enum>
-    <enum name="LineStyle" cname="GdkLineStyle" type="enum">
+    <enum name="LineStyle" cname="GdkLineStyle" gtype="gdk_line_style_get_type" type="enum">
       <member cname="GDK_LINE_SOLID" name="Solid" />
       <member cname="GDK_LINE_ON_OFF_DASH" name="OnOffDash" />
       <member cname="GDK_LINE_DOUBLE_DASH" name="DoubleDash" />
     </enum>
-    <enum name="ModifierType" cname="GdkModifierType" type="flags">
+    <enum name="ModifierType" cname="GdkModifierType" gtype="gdk_modifier_type_get_type" type="flags">
       <member cname="GDK_SHIFT_MASK" name="ShiftMask" value="1 &lt;&lt; 0" />
       <member cname="GDK_LOCK_MASK" name="LockMask" value="1 &lt;&lt; 1" />
       <member cname="GDK_CONTROL_MASK" name="ControlMask" value="1 &lt;&lt; 2" />
@@ -321,7 +321,7 @@
       <member cname="GDK_RELEASE_MASK" name="ReleaseMask" value="1 &lt;&lt; 30" />
       <member cname="GDK_MODIFIER_MASK" name="ModifierMask" />
     </enum>
-    <enum name="NotifyType" cname="GdkNotifyType" type="enum">
+    <enum name="NotifyType" cname="GdkNotifyType" gtype="gdk_notify_type_get_type" type="enum">
       <member cname="GDK_NOTIFY_ANCESTOR" name="Ancestor" />
       <member cname="GDK_NOTIFY_VIRTUAL" name="Virtual" value="1" />
       <member cname="GDK_NOTIFY_INFERIOR" name="Inferior" value="2" />
@@ -329,58 +329,58 @@
       <member cname="GDK_NOTIFY_NONLINEAR_VIRTUAL" name="NonlinearVirtual" value="4" />
       <member cname="GDK_NOTIFY_UNKNOWN" name="Unknown" value="5" />
     </enum>
-    <enum name="OverlapType" cname="GdkOverlapType" type="enum">
+    <enum name="OverlapType" cname="GdkOverlapType" gtype="gdk_overlap_type_get_type" type="enum">
       <member cname="GDK_OVERLAP_RECTANGLE_IN" name="In" />
       <member cname="GDK_OVERLAP_RECTANGLE_OUT" name="Out" />
       <member cname="GDK_OVERLAP_RECTANGLE_PART" name="Part" />
     </enum>
-    <enum name="OwnerChange" cname="GdkOwnerChange" type="enum">
+    <enum name="OwnerChange" cname="GdkOwnerChange" gtype="gdk_owner_change_get_type" type="enum">
       <member cname="GDK_OWNER_CHANGE_NEW_OWNER" name="NewOwner" />
       <member cname="GDK_OWNER_CHANGE_DESTROY" name="Destroy" />
       <member cname="GDK_OWNER_CHANGE_CLOSE" name="Close" />
     </enum>
-    <enum name="PropMode" cname="GdkPropMode" type="enum">
+    <enum name="PropMode" cname="GdkPropMode" gtype="gdk_prop_mode_get_type" type="enum">
       <member cname="GDK_PROP_MODE_REPLACE" name="Replace" />
       <member cname="GDK_PROP_MODE_PREPEND" name="Prepend" />
       <member cname="GDK_PROP_MODE_APPEND" name="Append" />
     </enum>
-    <enum name="PropertyState" cname="GdkPropertyState" type="enum">
+    <enum name="PropertyState" cname="GdkPropertyState" gtype="gdk_property_state_get_type" type="enum">
       <member cname="GDK_PROPERTY_NEW_VALUE" name="NewValue" />
       <member cname="GDK_PROPERTY_DELETE" name="Delete" />
     </enum>
-    <enum name="RgbDither" cname="GdkRgbDither" type="enum">
+    <enum name="RgbDither" cname="GdkRgbDither" gtype="gdk_rgb_dither_get_type" type="enum">
       <member cname="GDK_RGB_DITHER_NONE" name="None" />
       <member cname="GDK_RGB_DITHER_NORMAL" name="Normal" />
       <member cname="GDK_RGB_DITHER_MAX" name="Max" />
     </enum>
-    <enum name="ScrollDirection" cname="GdkScrollDirection" type="enum">
+    <enum name="ScrollDirection" cname="GdkScrollDirection" gtype="gdk_scroll_direction_get_type" type="enum">
       <member cname="GDK_SCROLL_UP" name="Up" />
       <member cname="GDK_SCROLL_DOWN" name="Down" />
       <member cname="GDK_SCROLL_LEFT" name="Left" />
       <member cname="GDK_SCROLL_RIGHT" name="Right" />
     </enum>
-    <enum name="SettingAction" cname="GdkSettingAction" type="enum">
+    <enum name="SettingAction" cname="GdkSettingAction" gtype="gdk_setting_action_get_type" type="enum">
       <member cname="GDK_SETTING_ACTION_NEW" name="New" />
       <member cname="GDK_SETTING_ACTION_CHANGED" name="Changed" />
       <member cname="GDK_SETTING_ACTION_DELETED" name="Deleted" />
     </enum>
-    <enum name="Status" cname="GdkStatus" type="enum">
+    <enum name="Status" cname="GdkStatus" gtype="gdk_status_get_type" type="enum">
       <member cname="GDK_OK" name="Ok" />
       <member cname="GDK_ERROR" name="Error" value="-1" />
       <member cname="GDK_ERROR_PARAM" name="ErrorParam" value="-2" />
       <member cname="GDK_ERROR_FILE" name="ErrorFile" value="-3" />
       <member cname="GDK_ERROR_MEM" name="ErrorMem" value="-4" />
     </enum>
-    <enum name="SubwindowMode" cname="GdkSubwindowMode" type="enum">
+    <enum name="SubwindowMode" cname="GdkSubwindowMode" gtype="gdk_subwindow_mode_get_type" type="enum">
       <member cname="GDK_CLIP_BY_CHILDREN" name="ClipByChildren" />
       <member cname="GDK_INCLUDE_INFERIORS" name="IncludeInferiors" value="1" />
     </enum>
-    <enum name="VisibilityState" cname="GdkVisibilityState" type="enum">
+    <enum name="VisibilityState" cname="GdkVisibilityState" gtype="gdk_visibility_state_get_type" type="enum">
       <member cname="GDK_VISIBILITY_UNOBSCURED" name="Unobscured" />
       <member cname="GDK_VISIBILITY_PARTIAL" name="Partial" />
       <member cname="GDK_VISIBILITY_FULLY_OBSCURED" name="FullyObscured" />
     </enum>
-    <enum name="VisualType" cname="GdkVisualType" type="enum">
+    <enum name="VisualType" cname="GdkVisualType" gtype="gdk_visual_type_get_type" type="enum">
       <member cname="GDK_VISUAL_STATIC_GRAY" name="StaticGray" />
       <member cname="GDK_VISUAL_GRAYSCALE" name="Grayscale" />
       <member cname="GDK_VISUAL_STATIC_COLOR" name="StaticColor" />
@@ -405,7 +405,7 @@
       <member cname="GDK_FUNC_MAXIMIZE" name="Maximize" value="1 &lt;&lt; 4" />
       <member cname="GDK_FUNC_CLOSE" name="Close" value="1 &lt;&lt; 5" />
     </enum>
-    <enum name="WindowAttributesType" cname="GdkWindowAttributesType" type="flags">
+    <enum name="WindowAttributesType" cname="GdkWindowAttributesType" gtype="gdk_window_attributes_type_get_type" type="flags">
       <member cname="GDK_WA_TITLE" name="Title" value="1 &lt;&lt; 1" />
       <member cname="GDK_WA_X" name="X" value="1 &lt;&lt; 2" />
       <member cname="GDK_WA_Y" name="Y" value="1 &lt;&lt; 3" />
@@ -415,11 +415,11 @@
       <member cname="GDK_WA_WMCLASS" name="Wmclass" value="1 &lt;&lt; 7" />
       <member cname="GDK_WA_NOREDIR" name="Noredir" value="1 &lt;&lt; 8" />
     </enum>
-    <enum name="WindowClass" cname="GdkWindowClass" type="enum">
+    <enum name="WindowClass" cname="GdkWindowClass" gtype="gdk_window_class_get_type" type="enum">
       <member cname="GDK_INPUT_OUTPUT" name="Output" />
       <member cname="GDK_INPUT_ONLY" name="Only" />
     </enum>
-    <enum name="WindowEdge" cname="GdkWindowEdge" type="enum">
+    <enum name="WindowEdge" cname="GdkWindowEdge" gtype="gdk_window_edge_get_type" type="enum">
       <member cname="GDK_WINDOW_EDGE_NORTH_WEST" name="NorthWest" />
       <member cname="GDK_WINDOW_EDGE_NORTH" name="North" />
       <member cname="GDK_WINDOW_EDGE_NORTH_EAST" name="NorthEast" />
@@ -429,7 +429,7 @@
       <member cname="GDK_WINDOW_EDGE_SOUTH" name="South" />
       <member cname="GDK_WINDOW_EDGE_SOUTH_EAST" name="SouthEast" />
     </enum>
-    <enum name="WindowHints" cname="GdkWindowHints" type="flags">
+    <enum name="WindowHints" cname="GdkWindowHints" gtype="gdk_window_hints_get_type" type="flags">
       <member cname="GDK_HINT_POS" name="Pos" value="1 &lt;&lt; 0" />
       <member cname="GDK_HINT_MIN_SIZE" name="MinSize" value="1 &lt;&lt; 1" />
       <member cname="GDK_HINT_MAX_SIZE" name="MaxSize" value="1 &lt;&lt; 2" />
@@ -440,7 +440,7 @@
       <member cname="GDK_HINT_USER_POS" name="UserPos" value="1 &lt;&lt; 7" />
       <member cname="GDK_HINT_USER_SIZE" name="UserSize" value="1 &lt;&lt; 8" />
     </enum>
-    <enum name="WindowState" cname="GdkWindowState" type="flags">
+    <enum name="WindowState" cname="GdkWindowState" gtype="gdk_window_state_get_type" type="flags">
       <member cname="GDK_WINDOW_STATE_WITHDRAWN" name="Withdrawn" value="1 &lt;&lt; 0" />
       <member cname="GDK_WINDOW_STATE_ICONIFIED" name="Iconified" value="1 &lt;&lt; 1" />
       <member cname="GDK_WINDOW_STATE_MAXIMIZED" name="Maximized" value="1 &lt;&lt; 2" />
@@ -449,7 +449,7 @@
       <member cname="GDK_WINDOW_STATE_ABOVE" name="Above" value="1 &lt;&lt; 5" />
       <member cname="GDK_WINDOW_STATE_BELOW" name="Below" value="1 &lt;&lt; 6" />
     </enum>
-    <enum name="WindowType" cname="GdkWindowType" type="enum">
+    <enum name="WindowType" cname="GdkWindowType" gtype="gdk_window_type_get_type" type="enum">
       <member cname="GDK_WINDOW_ROOT" name="Root" />
       <member cname="GDK_WINDOW_TOPLEVEL" name="Toplevel" />
       <member cname="GDK_WINDOW_CHILD" name="Child" />
@@ -457,7 +457,7 @@
       <member cname="GDK_WINDOW_TEMP" name="Temp" />
       <member cname="GDK_WINDOW_FOREIGN" name="Foreign" />
     </enum>
-    <enum name="WindowTypeHint" cname="GdkWindowTypeHint" type="enum">
+    <enum name="WindowTypeHint" cname="GdkWindowTypeHint" gtype="gdk_window_type_hint_get_type" type="enum">
       <member cname="GDK_WINDOW_TYPE_HINT_NORMAL" name="Normal" />
       <member cname="GDK_WINDOW_TYPE_HINT_DIALOG" name="Dialog" />
       <member cname="GDK_WINDOW_TYPE_HINT_MENU" name="Menu" />
@@ -4593,20 +4593,20 @@
     </class>
   </namespace>
   <namespace name="Gdk" library="libgdk_pixbuf-2.0-0.dll">
-    <enum name="Colorspace" cname="GdkColorspace" type="enum">
+    <enum name="Colorspace" cname="GdkColorspace" gtype="gdk_colorspace_get_type" type="enum">
       <member cname="GDK_COLORSPACE_RGB" name="Rgb" />
     </enum>
-    <enum name="InterpType" cname="GdkInterpType" type="enum">
+    <enum name="InterpType" cname="GdkInterpType" gtype="gdk_interp_type_get_type" type="enum">
       <member cname="GDK_INTERP_NEAREST" name="Nearest" />
       <member cname="GDK_INTERP_TILES" name="Tiles" />
       <member cname="GDK_INTERP_BILINEAR" name="Bilinear" />
       <member cname="GDK_INTERP_HYPER" name="Hyper" />
     </enum>
-    <enum name="PixbufAlphaMode" cname="GdkPixbufAlphaMode" type="enum">
+    <enum name="PixbufAlphaMode" cname="GdkPixbufAlphaMode" gtype="gdk_pixbuf_alpha_mode_get_type" type="enum">
       <member cname="GDK_PIXBUF_ALPHA_BILEVEL" name="Bilevel" />
       <member cname="GDK_PIXBUF_ALPHA_FULL" name="Full" />
     </enum>
-    <enum name="PixbufError" cname="GdkPixbufError" type="enum">
+    <enum name="PixbufError" cname="GdkPixbufError" gtype="gdk_pixbuf_error_get_type" type="enum">
       <member cname="GDK_PIXBUF_ERROR_CORRUPT_IMAGE" name="CorruptImage" />
       <member cname="GDK_PIXBUF_ERROR_INSUFFICIENT_MEMORY" name="InsufficientMemory" />
       <member cname="GDK_PIXBUF_ERROR_BAD_OPTION" name="BadOption" />
@@ -4619,7 +4619,7 @@
       <member cname="GDK_PIXBUF_FRAME_DISPOSE" name="Dispose" />
       <member cname="GDK_PIXBUF_FRAME_REVERT" name="Revert" />
     </enum>
-    <enum name="PixbufRotation" cname="GdkPixbufRotation" type="enum">
+    <enum name="PixbufRotation" cname="GdkPixbufRotation" gtype="gdk_pixbuf_rotation_get_type" type="enum">
       <member cname="GDK_PIXBUF_ROTATE_NONE" name="None" />
       <member cname="GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE" name="Counterclockwise" value="90" />
       <member cname="GDK_PIXBUF_ROTATE_UPSIDEDOWN" name="Upsidedown" value="180" />
diff --git a/generator/EnumGen.cs b/generator/EnumGen.cs
index b075f36f8..0151cbd9d 100644
--- a/generator/EnumGen.cs
+++ b/generator/EnumGen.cs
@@ -74,15 +74,16 @@ namespace GtkSharp.Generation {
 			sw.WriteLine ("namespace " + NS + " {");
 			sw.WriteLine ();
 			sw.WriteLine ("\tusing System;");
+			sw.WriteLine ("\tusing System.Runtime.InteropServices;");
 			sw.WriteLine ();
 
-			if (Elem.GetAttribute("type") == "flags") {
-				sw.WriteLine ();
-				sw.WriteLine ("\t[Flags]");
-			}
-
 			sw.WriteLine ("#region Autogenerated code");
 					
+			if (Elem.GetAttribute("type") == "flags")
+				sw.WriteLine ("\t[Flags]");
+			if (Elem.HasAttribute("gtype"))
+				sw.WriteLine ("\t[GLib.GType (typeof (" + NS + "." + Name + "GType))]");
+
 			sw.WriteLine ("\tpublic enum " + Name + enum_type + " {");
 			sw.WriteLine ();
 				
@@ -90,12 +91,26 @@ namespace GtkSharp.Generation {
 				sw.WriteLine (member);
 
 			sw.WriteLine ("\t}");
+
+			if (Elem.HasAttribute ("gtype")) {
+				sw.WriteLine ();
+				sw.WriteLine ("\tinternal class " + Name + "GType {");
+				sw.WriteLine ("\t\t[DllImport (\"" + LibraryName + "\")]");
+				sw.WriteLine ("\t\tstatic extern IntPtr " + Elem.GetAttribute ("gtype") + " ();");
+				sw.WriteLine ();
+				sw.WriteLine ("\t\tpublic static GLib.GType GType {");
+				sw.WriteLine ("\t\t\tget {");
+				sw.WriteLine ("\t\t\t\treturn new GLib.GType (" + Elem.GetAttribute ("gtype") + " ());");
+				sw.WriteLine ("\t\t\t}");
+				sw.WriteLine ("\t\t}");
+				sw.WriteLine ("\t}");
+			}
+
 			sw.WriteLine ("#endregion");
 			sw.WriteLine ("}");
 			sw.Close ();
 			Statistics.EnumCount++;
 		}
-		
 	}
 }
 
diff --git a/generator/ObjectGen.cs b/generator/ObjectGen.cs
index 55ccb68d9..b8c1e83ea 100644
--- a/generator/ObjectGen.cs
+++ b/generator/ObjectGen.cs
@@ -324,7 +324,7 @@ namespace GtkSharp.Generation {
 			}
 		}
 
-		/* Keep this in sync with the one in glib/ObjectManager.cs */
+		/* Keep this in sync with the one in glib/GType.cs */
 		private static string GetExpected (string cname)
 		{
 			for (int i = 1; i < cname.Length; i++) {
@@ -393,7 +393,7 @@ namespace GtkSharp.Generation {
 	
 			foreach (string key in dir_info.objects.Keys) {
 				if (GetExpected(key) != ((string) dir_info.objects[key]))
-					sw.WriteLine ("\t\t\tGLib.ObjectManager.RegisterType({0}.GType, typeof ({0}));", dir_info.objects [key]);
+					sw.WriteLine ("\t\t\tGLib.GType.Register ({0}.GType, typeof ({0}));", dir_info.objects [key]);
 			}
 					
 			sw.WriteLine ("\t\t}");
diff --git a/glib/GType.cs b/glib/GType.cs
new file mode 100755
index 000000000..5f598d5ee
--- /dev/null
+++ b/glib/GType.cs
@@ -0,0 +1,191 @@
+// GLib.Type.cs - GLib GType class implementation
+//
+// Author: Mike Kestner <mkestner@speakeasy.net>
+//
+// Copyright (c) 2003 Mike Kestner
+// Copyright (c) 2003 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the Lesser GNU General 
+// Public License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GLib {
+
+	using System;
+	using System.Collections;
+	using System.Reflection;
+	using System.Runtime.InteropServices;
+
+	[StructLayout(LayoutKind.Sequential)]
+	public struct GType {
+
+		IntPtr val;
+
+		public GType (IntPtr val)
+		{
+			this.val = val;
+		}
+
+		public static readonly GType Invalid = new GType ((IntPtr) TypeFundamentals.TypeInvalid);
+		public static readonly GType None = new GType ((IntPtr) TypeFundamentals.TypeNone);
+		public static readonly GType Interface = new GType ((IntPtr) TypeFundamentals.TypeInterface);
+		public static readonly GType Char = new GType ((IntPtr) TypeFundamentals.TypeChar);
+		public static readonly GType UChar = new GType ((IntPtr) TypeFundamentals.TypeUChar);
+		public static readonly GType Boolean = new GType ((IntPtr) TypeFundamentals.TypeBoolean);
+		public static readonly GType Int = new GType ((IntPtr) TypeFundamentals.TypeInt);
+		public static readonly GType UInt = new GType ((IntPtr) TypeFundamentals.TypeUInt);
+		public static readonly GType Int64 = new GType ((IntPtr) TypeFundamentals.TypeInt64);
+		public static readonly GType UInt64 = new GType ((IntPtr) TypeFundamentals.TypeUInt64);
+		public static readonly GType Enum = new GType ((IntPtr) TypeFundamentals.TypeEnum);
+		public static readonly GType Flags = new GType ((IntPtr) TypeFundamentals.TypeFlags);
+		public static readonly GType Float = new GType ((IntPtr) TypeFundamentals.TypeFloat);
+		public static readonly GType Double = new GType ((IntPtr) TypeFundamentals.TypeDouble);
+		public static readonly GType String = new GType ((IntPtr) TypeFundamentals.TypeString);
+		public static readonly GType Pointer = new GType ((IntPtr) TypeFundamentals.TypePointer);
+		public static readonly GType Boxed = new GType ((IntPtr) TypeFundamentals.TypeBoxed);
+		public static readonly GType Object = new GType ((IntPtr) TypeFundamentals.TypeObject);
+
+		static Hashtable types = new Hashtable ();
+		static Hashtable gtypes = new Hashtable ();
+
+		public static void Register (GType native_type, System.Type type)
+		{
+			if (native_type != GType.Pointer && native_type != GType.Boxed && native_type != ManagedValue.GType)
+				types[native_type.Val] = type;
+			if (type != null)
+				gtypes[type] = native_type;
+		}
+
+		static GType ()
+		{
+			Register (GType.Char, typeof (sbyte));
+			Register (GType.UChar, typeof (byte));
+			Register (GType.Boolean, typeof (bool));
+			Register (GType.Int, typeof (int));
+			Register (GType.UInt, typeof (uint));
+			Register (GType.Int64, typeof (long));
+			Register (GType.UInt64, typeof (ulong));
+			Register (GType.Float, typeof (float));
+			Register (GType.Double, typeof (double));
+			Register (GType.String, typeof (string));
+			Register (GType.Object, typeof (GLib.Object));
+
+			// One-way mapping
+			gtypes[typeof (char)] = GType.UInt;
+		}
+
+		public static explicit operator GType (System.Type type)
+		{
+			GType gtype;
+
+			if (gtypes.Contains (type))
+				return (GType)gtypes[type];
+
+			if (type.IsSubclassOf (typeof (GLib.Object))) {
+				gtype = GLib.Object.LookupGType (type);
+				Register (gtype, type);
+				return gtype;
+			}
+
+			PropertyInfo pi = type.GetProperty ("GType", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.FlattenHierarchy);
+			if (pi != null)
+				gtype = (GType) pi.GetValue (null, null);
+			else if (type.IsDefined (typeof (GTypeAttribute), false)) {
+				GTypeAttribute gattr = (GTypeAttribute)Attribute.GetCustomAttribute (type, typeof (GTypeAttribute), false);
+				pi = gattr.WrapperType.GetProperty ("GType", BindingFlags.Public | BindingFlags.Static);
+				gtype = (GType) pi.GetValue (null, null);
+			} else if (type.IsSubclassOf (typeof (GLib.Opaque)))
+				gtype = GType.Pointer;
+			else
+				gtype = ManagedValue.GType;
+
+			Register (gtype, type);
+			return gtype;
+		}
+
+		static string GetQualifiedName (string cname)
+		{
+			for (int i = 1; i < cname.Length; i++) {
+				if (System.Char.IsUpper (cname[i])) {
+					if (i == 1 && cname [0] == 'G')
+						return "GLib." + cname.Substring (1);
+					else
+						return cname.Substring (0, i) + "." + cname.Substring (i);
+				}
+			}
+
+			throw new ArgumentException ("cname is not in NamespaceType format. GType.Register should be called directly for " + cname);
+		}
+
+		public static explicit operator Type (GType gtype)
+		{
+			return LookupType (gtype.Val);
+		}
+
+		public static Type LookupType (IntPtr typeid)
+		{
+			if (types.Contains (typeid))
+				return (Type)types[typeid];
+
+			string native_name = Marshaller.Utf8PtrToString (g_type_name (typeid));
+			string type_name = GetQualifiedName (native_name);
+			Type result = null;
+			foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies ()) {
+				result = asm.GetType (type_name);
+				if (result != null)
+					break;
+			}
+
+			Register (new GType (typeid), result);
+			return result;
+		}
+
+		public IntPtr Val {
+			get {
+				return val;
+			}
+		}
+
+		public override bool Equals (object o)
+		{
+			if (!(o is GType))
+				return false;
+
+			return ((GType) o) == this;
+		}
+
+		public static bool operator == (GType a, GType b)
+		{
+			return a.Val == b.Val;
+		}
+
+		public static bool operator != (GType a, GType b)
+		{
+			return a.Val != b.Val;
+		}
+
+		public override int GetHashCode ()
+		{
+			return val.GetHashCode ();
+		}
+
+		[DllImport("libgobject-2.0-0.dll")]
+		static extern IntPtr g_type_name (IntPtr raw);
+
+		public override string ToString ()
+		{
+			return Marshaller.Utf8PtrToString (g_type_name (val));
+		}
+	}
+}
diff --git a/glib/GTypeAttribute.cs b/glib/GTypeAttribute.cs
new file mode 100644
index 000000000..7a2e14f00
--- /dev/null
+++ b/glib/GTypeAttribute.cs
@@ -0,0 +1,42 @@
+// GTypeAttribute.cs
+//
+// Copyright (c) 2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the Lesser GNU General 
+// Public License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GLib {
+
+	using System;
+
+	[AttributeUsage (AttributeTargets.Enum)]
+	public sealed class GTypeAttribute : Attribute {
+		Type wrapper_type;
+
+		public GTypeAttribute (Type wrapper_type)
+		{
+			this.wrapper_type = wrapper_type;
+		}
+
+		public Type WrapperType {
+			get {
+				return wrapper_type;
+			}
+			set {
+				wrapper_type = value;
+			}
+		}
+	}
+}
diff --git a/glib/Makefile.am b/glib/Makefile.am
index 74c768f1e..fe5e6db3e 100644
--- a/glib/Makefile.am
+++ b/glib/Makefile.am
@@ -22,6 +22,8 @@ sources =		 			\
 	FileUtils.cs				\
 	GException.cs				\
 	GString.cs				\
+	GType.cs				\
+	GTypeAttribute.cs			\
 	Idle.cs					\
 	IWrapper.cs				\
 	ListBase.cs				\
@@ -47,7 +49,6 @@ sources =		 			\
 	Thread.cs				\
 	Timeout.cs				\
 	TypeConverter.cs			\
-	Type.cs					\
 	TypeFundamentals.cs			\
 	UnwrappedObject.cs			\
 	ValueArray.cs				\
diff --git a/glib/Object.cs b/glib/Object.cs
index 02d793485..e9152c8a7 100644
--- a/glib/Object.cs
+++ b/glib/Object.cs
@@ -156,7 +156,7 @@ namespace GLib {
 			IntPtr native_name = GLib.Marshaller.StringToPtrGStrdup (name);
 			GType gtype = new GType (gtksharp_register_type (native_name, parent_gtype.Val));
 			GLib.Marshaller.Free (native_name);
-			GLib.ObjectManager.RegisterType (gtype, t);
+			GLib.GType.Register (gtype, t);
 			ConnectDefaultHandlers (gtype, t);
 			InvokeClassInitializers (gtype, t);
 			g_types[t] = gtype;
@@ -171,7 +171,7 @@ namespace GLib {
 			return LookupGType (GetType ());
 		}
 
-		protected static GType LookupGType (System.Type t)
+		protected internal static GType LookupGType (System.Type t)
 		{
 			if (g_types.Contains (t))
 				return (GType) g_types [t];
diff --git a/glib/ObjectManager.cs b/glib/ObjectManager.cs
index 673b65a89..8cb91582f 100644
--- a/glib/ObjectManager.cs
+++ b/glib/ObjectManager.cs
@@ -23,15 +23,11 @@
 namespace GLib {
 
 	using System;
-	using System.Collections;
 	using System.Runtime.InteropServices;
 	using System.Reflection;
-	using System.Text;
 
 	public class ObjectManager {
 
-		private static Hashtable types = new Hashtable ();
-
 		static BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.CreateInstance;
 
 		public static GLib.Object CreateObject (IntPtr raw)
@@ -53,76 +49,45 @@ namespace GLib {
 			return obj;
 		}
 
-		[Obsolete ("Use the (GType, Type) overload instead")]
+		[Obsolete ("Replaced by GType.Register (GType, Type)")]
 		public static void RegisterType (string native_name, string managed_name, string assembly)
 		{
 			RegisterType (native_name, managed_name + "," + assembly);
 		}
 
-		[Obsolete ("Use the (GType, Type) overload instead")]
+		[Obsolete ("Replaced by GType.Register (GType, Type)")]
 		public static void RegisterType (string native_name, string mangled)
 		{
-			types [native_name] = mangled;
+			RegisterType (new GType (g_type_from_name (native_name)), Type.GetType (mangled));
 		}
 
+		[Obsolete ("Replaced by GType.Register (GType, Type)")]
 		public static void RegisterType (GType native_type, System.Type type)
 		{
-			types [native_type.Val] = type;
-		}
-
-		static string GetQualifiedName (string cname)
-		{
-			for (int i = 1; i < cname.Length; i++) {
-				if (Char.IsUpper (cname[i])) {
-					if (i == 1 && cname [0] == 'G')
-						return "GLib." + cname.Substring (1);
-					else
-						return cname.Substring (0, i) + "." + cname.Substring (i);
-				}
-			}
-
-			throw new ArgumentException ("cname is not in NamespaceType format. RegisterType should be called directly for " + cname);
+			GType.Register (native_type, type);
 		}
 
 		static Type GetTypeOrParent (IntPtr obj)
 		{
 			IntPtr typeid = gtksharp_get_type_id (obj);
 
-			Type result = LookupType (typeid);
+			Type result = GType.LookupType (typeid);
 			while (result == null) {
-				typeid = gtksharp_get_parent_type (typeid);
+				typeid = g_type_parent (typeid);
 				if (typeid == IntPtr.Zero)
 					return null;
-				result = LookupType (typeid);
+				result = GType.LookupType (typeid);
 			}
 			return result;
 		}
 
-		static Type LookupType (IntPtr typeid)
-		{
-			if (types.Contains (typeid))
-				return types [typeid] as Type;
-
-			string native_name = Marshaller.Utf8PtrToString (gtksharp_get_type_name_for_id (typeid));
-			string type_name = GetQualifiedName (native_name);
-			Type result = null;
-			foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies ()) {
-				result = asm.GetType (type_name);
-				if (result != null)
-					break;
-			}
-
-			types [typeid] = result;
-			return result;
-		}
-
 		[DllImport("glibsharpglue-2")]
 		static extern IntPtr gtksharp_get_type_id (IntPtr raw);
 
-		[DllImport("glibsharpglue-2")]
-		static extern IntPtr gtksharp_get_parent_type (IntPtr typ);
+		[DllImport("libgobject-2.0-0.dll")]
+		static extern IntPtr g_type_parent (IntPtr typ);
 
-		[DllImport("glibsharpglue-2")]
-		static extern IntPtr gtksharp_get_type_name_for_id (IntPtr typ);
+		[DllImport("libgobject-2.0-0.dll")]
+		static extern IntPtr g_type_from_name (string name);
 	}
 }
diff --git a/glib/Type.cs b/glib/Type.cs
deleted file mode 100755
index 9c12d3a00..000000000
--- a/glib/Type.cs
+++ /dev/null
@@ -1,86 +0,0 @@
-// GLib.Type.cs - GLib GType class implementation
-//
-// Author: Mike Kestner <mkestner@speakeasy.net>
-//
-// Copyright (c) 2003 Mike Kestner
-// Copyright (c) 2003 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the Lesser GNU General 
-// Public License as published by the Free Software Foundation.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GLib {
-
-	using System;
-	using System.Runtime.InteropServices;
-
-	[StructLayout(LayoutKind.Sequential)]
-	public struct GType {
-
-		IntPtr val;
-
-		public GType (IntPtr val) {
-			this.val = val;
-		}
-
-		public static readonly GType Invalid = new GType ((IntPtr) TypeFundamentals.TypeInvalid);
-		public static readonly GType None = new GType ((IntPtr) TypeFundamentals.TypeNone);
-		public static readonly GType Char = new GType ((IntPtr) TypeFundamentals.TypeChar);
-		public static readonly GType Boolean = new GType ((IntPtr) TypeFundamentals.TypeBoolean);
-		public static readonly GType Int = new GType ((IntPtr) TypeFundamentals.TypeInt);
-		public static readonly GType UInt = new GType ((IntPtr) TypeFundamentals.TypeUInt);
-		public static readonly GType Int64 = new GType ((IntPtr) TypeFundamentals.TypeInt64);
-		public static readonly GType UInt64 = new GType ((IntPtr) TypeFundamentals.TypeUInt64);
-		public static readonly GType Float = new GType ((IntPtr) TypeFundamentals.TypeFloat);
-		public static readonly GType Double = new GType ((IntPtr) TypeFundamentals.TypeDouble);
-		public static readonly GType String = new GType ((IntPtr) TypeFundamentals.TypeString);
-		public static readonly GType Pointer = new GType ((IntPtr) TypeFundamentals.TypePointer);
-		public static readonly GType Boxed = new GType ((IntPtr) TypeFundamentals.TypeBoxed);
-		public static readonly GType Object = new GType ((IntPtr) TypeFundamentals.TypeObject);
-
-		public IntPtr Val {
-			get {
-				return val;
-			}
-		}
-
-		public override bool Equals (object o)
-		{
-			if (!(o is GType))
-				return false;
-
-			return ((GType) o) == this;
-		}
-
-		public static bool operator == (GType a, GType b)
-		{
-			return a.Val == b.Val;
-		}
-
-		public static bool operator != (GType a, GType b)
-		{
-			return a.Val != b.Val;
-		}
-
-		public override int GetHashCode ()
-		{
-			return val.GetHashCode ();
-		}
-
-		public override string ToString ()
-		{
-			return val.ToString();
-		}
-	}
-}
diff --git a/glib/TypeConverter.cs b/glib/TypeConverter.cs
index dc65b3486..0115d9d1e 100644
--- a/glib/TypeConverter.cs
+++ b/glib/TypeConverter.cs
@@ -21,42 +21,15 @@
 
 namespace GLib {
 	using System;
-	using System.Collections;
-	using System.Reflection;
 
 	public class TypeConverter {
 
 		private TypeConverter () {}
 		
+		[Obsolete ("Replaced by explicit (GType) cast")]
 		public static GType LookupType (System.Type type)
 		{
-			if (type.Equals (typeof (char)))
-				return GType.Char;
-			if (type.Equals (typeof (bool)))
-				return GType.Boolean;
-			if (type.Equals (typeof (int)))
-				return GType.Int;
-			if (type.Equals (typeof (uint)))
-				return GType.UInt;
-			if (type.Equals (typeof (long)))
-				return GType.Int64;
-			if (type.Equals (typeof (ulong)))
-				return GType.UInt64;
-			if (type.Equals (typeof (float)))
-				return GType.Float;
-			if (type.Equals (typeof (double)))
-				return GType.Double;
-			if (type.Equals (typeof (string)))
-				return GType.String;
-			if (type.IsSubclassOf (typeof (GLib.Object)))
-				return GType.Object;
-			PropertyInfo pi = type.GetProperty ("GType", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.FlattenHierarchy);
-			if (pi != null)
-				return (GType) pi.GetValue (null, null); 
-			if (type.IsSubclassOf (typeof (GLib.Opaque)))
-				return GType.Pointer;
-
-			return ManagedValue.GType;
+			return (GType) type;
 		}
 	}
 }
diff --git a/glib/Value.cs b/glib/Value.cs
index 3984063b0..2380e081a 100755
--- a/glib/Value.cs
+++ b/glib/Value.cs
@@ -47,13 +47,8 @@ namespace GLib {
 			type = IntPtr.Zero;
 			pad_1 = pad_2 = 0;
 
-			GType gtype = TypeConverter.LookupType (obj.GetType ());
-			if (gtype == GType.Object) {
-				g_value_init (ref this, ((GLib.Object) obj).NativeType.Val);
-			} else {
-				g_value_init (ref this, gtype.Val);
-			}
-
+			GType gtype = (GType) obj.GetType ();
+			g_value_init (ref this, gtype.Val);
 			Val = obj;
 		}
 
@@ -295,7 +290,7 @@ namespace GLib {
 			}
 			set {
 				IntPtr buf;
-				GType type = TypeConverter.LookupType (value.GetType());
+				GType type = (GType) value.GetType();
 				if (type == GType.Char)
 					g_value_set_char (ref this, (char) value);
 				else if (type == GType.Boolean)
@@ -335,7 +330,7 @@ namespace GLib {
 					Marshal.StructureToPtr (value, buf, false);
 					g_value_set_boxed (ref this, buf);
 					Marshal.FreeHGlobal (buf);
-				} else if (type == GType.Object)
+				} else if (g_type_is_a (type.Val, GType.Object.Val))
 					g_value_set_object (ref this, ((GLib.Object) value).Handle);
 				else
 					throw new Exception ("Unknown type");
diff --git a/gnome/PanelAppletFactory.cs b/gnome/PanelAppletFactory.cs
index 395c9eb42..af0dcb41b 100644
--- a/gnome/PanelAppletFactory.cs
+++ b/gnome/PanelAppletFactory.cs
@@ -42,7 +42,7 @@ namespace Gnome
 			_IID = applet.IID;
 			_factoryIID = applet.FactoryIID;
 			IntPtr native_iid = GLib.Marshaller.StringToPtrGStrdup (_factoryIID);
-			panel_applet_factory_main (native_iid, GLib.Object.LookupGType (applet_type).Val, cb_wrapper.NativeDelegate, IntPtr.Zero);
+			panel_applet_factory_main (native_iid, ((GLib.GType) applet_type).Val, cb_wrapper.NativeDelegate, IntPtr.Zero);
 			GLib.Marshaller.Free (native_iid);
 		}
 
diff --git a/gnome/gnome-api.raw b/gnome/gnome-api.raw
index d1b16f039..d84bfc1cf 100644
--- a/gnome/gnome-api.raw
+++ b/gnome/gnome-api.raw
@@ -7,7 +7,7 @@
 
 -->
   <namespace name="Gnome" library="gnome-2">
-    <enum name="FileDomain" cname="GnomeFileDomain" type="enum">
+    <enum name="FileDomain" cname="GnomeFileDomain" gtype="gnome_file_domain_get_type" type="enum">
       <member cname="GNOME_FILE_DOMAIN_UNKNOWN" name="Unknown" />
       <member cname="GNOME_FILE_DOMAIN_LIBDIR" name="Libdir" />
       <member cname="GNOME_FILE_DOMAIN_DATADIR" name="Datadir" />
@@ -22,11 +22,11 @@
       <member cname="GNOME_FILE_DOMAIN_APP_CONFIG" name="AppConfig" />
       <member cname="GNOME_FILE_DOMAIN_APP_HELP" name="AppHelp" />
     </enum>
-    <enum name="HelpError" cname="GnomeHelpError" type="enum">
+    <enum name="HelpError" cname="GnomeHelpError" gtype="gnome_help_error_get_type" type="enum">
       <member cname="GNOME_HELP_ERROR_INTERNAL" name="Internal" />
       <member cname="GNOME_HELP_ERROR_NOT_FOUND" name="NotFound" />
     </enum>
-    <enum name="TriggerType" cname="GnomeTriggerType" type="enum">
+    <enum name="TriggerType" cname="GnomeTriggerType" gtype="gnome_trigger_type_get_type" type="enum">
       <member cname="GTRIG_NONE" name="None" />
       <member cname="GTRIG_FUNCTION" name="Function" />
       <member cname="GTRIG_COMMAND" name="Command" />
@@ -1757,12 +1757,12 @@
     <struct name="CanvasShapePriv" cname="GnomeCanvasShapePriv" opaque="true" />
   </namespace>
   <namespace name="Gnome" library="gnomeui-2">
-    <enum name="ClientFlags" cname="GnomeClientFlags" type="flags">
+    <enum name="ClientFlags" cname="GnomeClientFlags" gtype="gnome_client_flags_get_type" type="flags">
       <member cname="GNOME_CLIENT_IS_CONNECTED" name="IsConnected" value="1 &lt;&lt; 0" />
       <member cname="GNOME_CLIENT_RESTARTED" name="Restarted" value="1 &lt;&lt; 1" />
       <member cname="GNOME_CLIENT_RESTORED" name="Restored" value="1 &lt;&lt; 2" />
     </enum>
-    <enum name="ClientState" cname="GnomeClientState" type="enum">
+    <enum name="ClientState" cname="GnomeClientState" gtype="gnome_client_state_get_type" type="enum">
       <member cname="GNOME_CLIENT_IDLE" name="Idle" />
       <member cname="GNOME_CLIENT_SAVING_PHASE_1" name="SavingPhase1" />
       <member cname="GNOME_CLIENT_WAITING_FOR_PHASE_2" name="WaitingForPhase2" />
@@ -1771,64 +1771,64 @@
       <member cname="GNOME_CLIENT_DISCONNECTED" name="Disconnected" />
       <member cname="GNOME_CLIENT_REGISTERING" name="Registering" />
     </enum>
-    <enum name="DateEditFlags" cname="GnomeDateEditFlags" type="flags">
+    <enum name="DateEditFlags" cname="GnomeDateEditFlags" gtype="gnome_date_edit_flags_get_type" type="flags">
       <member cname="GNOME_DATE_EDIT_SHOW_TIME" name="ShowTime" value="1 &lt;&lt; 0" />
       <member cname="GNOME_DATE_EDIT_24_HR" name="Two4Hr" value="1 &lt;&lt; 1" />
       <member cname="GNOME_DATE_EDIT_WEEK_STARTS_ON_MONDAY" name="WeekStartsOnMonday" value="1 &lt;&lt; 2" />
     </enum>
-    <enum name="DialogType" cname="GnomeDialogType" type="enum">
+    <enum name="DialogType" cname="GnomeDialogType" gtype="gnome_dialog_type_get_type" type="enum">
       <member cname="GNOME_DIALOG_ERROR" name="Error" />
       <member cname="GNOME_DIALOG_NORMAL" name="Normal" />
     </enum>
-    <enum name="EdgePosition" cname="GnomeEdgePosition" type="enum">
+    <enum name="EdgePosition" cname="GnomeEdgePosition" gtype="gnome_edge_position_get_type" type="enum">
       <member cname="GNOME_EDGE_START" name="Start" />
       <member cname="GNOME_EDGE_FINISH" name="Finish" />
       <member cname="GNOME_EDGE_OTHER" name="Other" />
       <member cname="GNOME_EDGE_LAST" name="Last" />
     </enum>
-    <enum name="FontPickerMode" cname="GnomeFontPickerMode" deprecated="1" type="enum">
+    <enum name="FontPickerMode" cname="GnomeFontPickerMode" deprecated="1" gtype="gnome_font_picker_mode_get_type" type="enum">
       <member cname="GNOME_FONT_PICKER_MODE_PIXMAP" name="Pixmap" />
       <member cname="GNOME_FONT_PICKER_MODE_FONT_INFO" name="FontInfo" />
       <member cname="GNOME_FONT_PICKER_MODE_USER_WIDGET" name="UserWidget" />
       <member cname="GNOME_FONT_PICKER_MODE_UNKNOWN" name="Unknown" />
     </enum>
-    <enum name="IconListMode" cname="GnomeIconListMode" type="enum">
+    <enum name="IconListMode" cname="GnomeIconListMode" gtype="gnome_icon_list_mode_get_type" type="enum">
       <member cname="GNOME_ICON_LIST_ICONS" name="Icons" />
       <member cname="GNOME_ICON_LIST_TEXT_BELOW" name="TextBelow" />
       <member cname="GNOME_ICON_LIST_TEXT_RIGHT" name="TextRight" />
     </enum>
-    <enum name="IconLookupFlags" cname="GnomeIconLookupFlags" type="flags">
+    <enum name="IconLookupFlags" cname="GnomeIconLookupFlags" gtype="gnome_icon_lookup_flags_get_type" type="flags">
       <member cname="GNOME_ICON_LOOKUP_FLAGS_NONE" name="None" />
       <member cname="GNOME_ICON_LOOKUP_FLAGS_EMBEDDING_TEXT" name="EmbeddingText" value="1 &lt;&lt; 0" />
       <member cname="GNOME_ICON_LOOKUP_FLAGS_SHOW_SMALL_IMAGES_AS_THEMSELVES" name="ShowSmallImagesAsThemselves" value="1 &lt;&lt; 1" />
       <member cname="GNOME_ICON_LOOKUP_FLAGS_ALLOW_SVG_AS_THEMSELVES" name="AllowSvgAsThemselves" value="1 &lt;&lt; 2" />
     </enum>
-    <enum name="IconLookupResultFlags" cname="GnomeIconLookupResultFlags" type="flags">
+    <enum name="IconLookupResultFlags" cname="GnomeIconLookupResultFlags" gtype="gnome_icon_lookup_result_flags_get_type" type="flags">
       <member cname="GNOME_ICON_LOOKUP_RESULT_FLAGS_NONE" name="None" />
       <member cname="GNOME_ICON_LOOKUP_RESULT_FLAGS_THUMBNAIL" name="Thumbnail" value="1 &lt;&lt; 0" />
     </enum>
-    <enum name="InteractStyle" cname="GnomeInteractStyle" type="enum">
+    <enum name="InteractStyle" cname="GnomeInteractStyle" gtype="gnome_interact_style_get_type" type="enum">
       <member cname="GNOME_INTERACT_NONE" name="None" />
       <member cname="GNOME_INTERACT_ERRORS" name="Errors" />
       <member cname="GNOME_INTERACT_ANY" name="Any" />
     </enum>
-    <enum name="PasswordDialogRemember" cname="GnomePasswordDialogRemember" type="enum">
+    <enum name="PasswordDialogRemember" cname="GnomePasswordDialogRemember" gtype="gnome_password_dialog_remember_get_type" type="enum">
       <member cname="GNOME_PASSWORD_DIALOG_REMEMBER_NOTHING" name="Nothing" />
       <member cname="GNOME_PASSWORD_DIALOG_REMEMBER_SESSION" name="Session" />
       <member cname="GNOME_PASSWORD_DIALOG_REMEMBER_FOREVER" name="Forever" />
     </enum>
-    <enum name="PreferencesType" cname="GnomePreferencesType" type="enum">
+    <enum name="PreferencesType" cname="GnomePreferencesType" gtype="gnome_preferences_type_get_type" type="enum">
       <member cname="GNOME_PREFERENCES_NEVER" name="Never" />
       <member cname="GNOME_PREFERENCES_USER" name="User" />
       <member cname="GNOME_PREFERENCES_ALWAYS" name="Always" />
     </enum>
-    <enum name="RestartStyle" cname="GnomeRestartStyle" type="enum">
+    <enum name="RestartStyle" cname="GnomeRestartStyle" gtype="gnome_restart_style_get_type" type="enum">
       <member cname="GNOME_RESTART_IF_RUNNING" name="IfRunning" />
       <member cname="GNOME_RESTART_ANYWAY" name="Anyway" />
       <member cname="GNOME_RESTART_IMMEDIATELY" name="Immediately" />
       <member cname="GNOME_RESTART_NEVER" name="Never" />
     </enum>
-    <enum name="SaveStyle" cname="GnomeSaveStyle" type="enum">
+    <enum name="SaveStyle" cname="GnomeSaveStyle" gtype="gnome_save_style_get_type" type="enum">
       <member cname="GNOME_SAVE_GLOBAL" name="Global" />
       <member cname="GNOME_SAVE_LOCAL" name="Local" />
       <member cname="GNOME_SAVE_BOTH" name="Both" />
@@ -1838,7 +1838,7 @@
       <member cname="GNOME_THEME_FILE_PARSE_ERROR_INVALID_ESCAPES" name="Escapes" />
       <member cname="GNOME_THEME_FILE_PARSE_ERROR_INVALID_CHARS" name="Chars" />
     </enum>
-    <enum name="ThumbnailSize" cname="GnomeThumbnailSize" type="enum">
+    <enum name="ThumbnailSize" cname="GnomeThumbnailSize" gtype="gnome_thumbnail_size_get_type" type="enum">
       <member cname="GNOME_THUMBNAIL_SIZE_NORMAL" name="Normal" />
       <member cname="GNOME_THUMBNAIL_SIZE_LARGE" name="Large" />
     </enum>
diff --git a/gtk/ListStore.custom b/gtk/ListStore.custom
index 6c5cc6eff..4c8f2d1ed 100644
--- a/gtk/ListStore.custom
+++ b/gtk/ListStore.custom
@@ -130,10 +130,7 @@
 			GLib.GType[] gtypes = new GLib.GType[types.Length];
 			int i = 0;
 			foreach (Type type in types) {
-				GLib.GType ctype = GLib.TypeConverter.LookupType (type);
-				if (ctype == GLib.GType.Invalid)
-					throw new Exception ("Unknown type");
-				gtypes[i] = ctype;
+				gtypes[i] = (GLib.GType) type;
 				i++;
 			}
 			
diff --git a/gtk/NodeStore.cs b/gtk/NodeStore.cs
index ead8f91f3..8e0c52cf8 100644
--- a/gtk/NodeStore.cs
+++ b/gtk/NodeStore.cs
@@ -305,10 +305,7 @@ namespace Gtk {
 				foreach (TreeNodeValueAttribute attr in pi.GetCustomAttributes (typeof (TreeNodeValueAttribute), false)) {
 					int col = attr.Column;
 					getters [col] = pi;
-					GLib.GType ctype = GLib.TypeConverter.LookupType (pi.PropertyType);
-                                	if (ctype == GLib.GType.Invalid)
-                                        	throw new Exception ("Unknown type");
-                                        ctypes[col] = ctype;
+                                        ctypes[col] = (GLib.GType) pi.PropertyType;
 				}
 			}
 		}
diff --git a/gtk/TreeStore.custom b/gtk/TreeStore.custom
index 5b439a993..50062ddfc 100644
--- a/gtk/TreeStore.custom
+++ b/gtk/TreeStore.custom
@@ -306,10 +306,7 @@
 			GLib.GType[] gtypes = new GLib.GType[types.Length];
 			int i = 0;
 			foreach (Type type in types) {
-				GLib.GType ctype = GLib.TypeConverter.LookupType (type);
-				if (ctype == GLib.GType.Invalid)
-					throw new Exception ("Unknown type");
-				gtypes[i] = ctype;
+				gtypes[i] = (GLib.GType) type;
 				i++;
 			}
 			
diff --git a/gtk/gtk-api.raw b/gtk/gtk-api.raw
index 006e2677e..677161309 100644
--- a/gtk/gtk-api.raw
+++ b/gtk/gtk-api.raw
@@ -7,12 +7,12 @@
 
 -->
   <namespace name="Gtk" library="libgtk-win32-2.0-0.dll">
-    <enum name="AccelFlags" cname="GtkAccelFlags" type="flags">
+    <enum name="AccelFlags" cname="GtkAccelFlags" gtype="gtk_accel_flags_get_type" type="flags">
       <member cname="GTK_ACCEL_VISIBLE" name="Visible" value="1 &lt;&lt; 0" />
       <member cname="GTK_ACCEL_LOCKED" name="Locked" value="1 &lt;&lt; 1" />
       <member cname="GTK_ACCEL_MASK" name="Mask" value="0x07" />
     </enum>
-    <enum name="AnchorType" cname="GtkAnchorType" type="enum">
+    <enum name="AnchorType" cname="GtkAnchorType" gtype="gtk_anchor_type_get_type" type="enum">
       <member cname="GTK_ANCHOR_CENTER" name="Center" />
       <member cname="GTK_ANCHOR_NORTH" name="North" />
       <member cname="GTK_ANCHOR_NORTH_WEST" name="NorthWest" />
@@ -31,32 +31,32 @@
       <member cname="GTK_ANCHOR_W" name="W" />
       <member cname="GTK_ANCHOR_E" name="E" />
     </enum>
-    <enum name="ArgFlags" cname="GtkArgFlags" deprecated="1" type="flags">
+    <enum name="ArgFlags" cname="GtkArgFlags" deprecated="1" gtype="gtk_arg_flags_get_type" type="flags">
       <member cname="GTK_ARG_READABLE" name="Readable" />
       <member cname="GTK_ARG_WRITABLE" name="Writable" />
       <member cname="GTK_ARG_CONSTRUCT" name="Construct" />
       <member cname="GTK_ARG_CONSTRUCT_ONLY" name="ConstructOnly" />
       <member cname="GTK_ARG_CHILD_ARG" name="ChildArg" value="1 &lt;&lt; 4" />
     </enum>
-    <enum name="ArrowType" cname="GtkArrowType" type="enum">
+    <enum name="ArrowType" cname="GtkArrowType" gtype="gtk_arrow_type_get_type" type="enum">
       <member cname="GTK_ARROW_UP" name="Up" />
       <member cname="GTK_ARROW_DOWN" name="Down" />
       <member cname="GTK_ARROW_LEFT" name="Left" />
       <member cname="GTK_ARROW_RIGHT" name="Right" />
     </enum>
-    <enum name="AttachOptions" cname="GtkAttachOptions" type="flags">
+    <enum name="AttachOptions" cname="GtkAttachOptions" gtype="gtk_attach_options_get_type" type="flags">
       <member cname="GTK_EXPAND" name="Expand" value="1 &lt;&lt; 0" />
       <member cname="GTK_SHRINK" name="Shrink" value="1 &lt;&lt; 1" />
       <member cname="GTK_FILL" name="Fill" value="1 &lt;&lt; 2" />
     </enum>
-    <enum name="ButtonBoxStyle" cname="GtkButtonBoxStyle" type="enum">
+    <enum name="ButtonBoxStyle" cname="GtkButtonBoxStyle" gtype="gtk_button_box_style_get_type" type="enum">
       <member cname="GTK_BUTTONBOX_DEFAULT_STYLE" name="DefaultStyle" />
       <member cname="GTK_BUTTONBOX_SPREAD" name="Spread" />
       <member cname="GTK_BUTTONBOX_EDGE" name="Edge" />
       <member cname="GTK_BUTTONBOX_START" name="Start" />
       <member cname="GTK_BUTTONBOX_END" name="End" />
     </enum>
-    <enum name="ButtonsType" cname="GtkButtonsType" type="enum">
+    <enum name="ButtonsType" cname="GtkButtonsType" gtype="gtk_buttons_type_get_type" type="enum">
       <member cname="GTK_BUTTONS_NONE" name="None" />
       <member cname="GTK_BUTTONS_OK" name="Ok" />
       <member cname="GTK_BUTTONS_CLOSE" name="Close" />
@@ -64,37 +64,37 @@
       <member cname="GTK_BUTTONS_YES_NO" name="YesNo" />
       <member cname="GTK_BUTTONS_OK_CANCEL" name="OkCancel" />
     </enum>
-    <enum name="CalendarDisplayOptions" cname="GtkCalendarDisplayOptions" type="flags">
+    <enum name="CalendarDisplayOptions" cname="GtkCalendarDisplayOptions" gtype="gtk_calendar_display_options_get_type" type="flags">
       <member cname="GTK_CALENDAR_SHOW_HEADING" name="ShowHeading" value="1 &lt;&lt; 0" />
       <member cname="GTK_CALENDAR_SHOW_DAY_NAMES" name="ShowDayNames" value="1 &lt;&lt; 1" />
       <member cname="GTK_CALENDAR_NO_MONTH_CHANGE" name="NoMonthChange" value="1 &lt;&lt; 2" />
       <member cname="GTK_CALENDAR_SHOW_WEEK_NUMBERS" name="ShowWeekNumbers" value="1 &lt;&lt; 3" />
       <member cname="GTK_CALENDAR_WEEK_START_MONDAY" name="WeekStartMonday" value="1 &lt;&lt; 4" />
     </enum>
-    <enum name="CellRendererMode" cname="GtkCellRendererMode" type="enum">
+    <enum name="CellRendererMode" cname="GtkCellRendererMode" gtype="gtk_cell_renderer_mode_get_type" type="enum">
       <member cname="GTK_CELL_RENDERER_MODE_INERT" name="Inert" />
       <member cname="GTK_CELL_RENDERER_MODE_ACTIVATABLE" name="Activatable" />
       <member cname="GTK_CELL_RENDERER_MODE_EDITABLE" name="Editable" />
     </enum>
-    <enum name="CellRendererState" cname="GtkCellRendererState" type="flags">
+    <enum name="CellRendererState" cname="GtkCellRendererState" gtype="gtk_cell_renderer_state_get_type" type="flags">
       <member cname="GTK_CELL_RENDERER_SELECTED" name="Selected" value="1 &lt;&lt; 0" />
       <member cname="GTK_CELL_RENDERER_PRELIT" name="Prelit" value="1 &lt;&lt; 1" />
       <member cname="GTK_CELL_RENDERER_INSENSITIVE" name="Insensitive" value="1 &lt;&lt; 2" />
       <member cname="GTK_CELL_RENDERER_SORTED" name="Sorted" value="1 &lt;&lt; 3" />
       <member cname="GTK_CELL_RENDERER_FOCUSED" name="Focused" value="1 &lt;&lt; 4" />
     </enum>
-    <enum name="CornerType" cname="GtkCornerType" type="enum">
+    <enum name="CornerType" cname="GtkCornerType" gtype="gtk_corner_type_get_type" type="enum">
       <member cname="GTK_CORNER_TOP_LEFT" name="TopLeft" />
       <member cname="GTK_CORNER_BOTTOM_LEFT" name="BottomLeft" />
       <member cname="GTK_CORNER_TOP_RIGHT" name="TopRight" />
       <member cname="GTK_CORNER_BOTTOM_RIGHT" name="BottomRight" />
     </enum>
-    <enum name="CurveType" cname="GtkCurveType" type="enum">
+    <enum name="CurveType" cname="GtkCurveType" gtype="gtk_curve_type_get_type" type="enum">
       <member cname="GTK_CURVE_TYPE_LINEAR" name="Linear" />
       <member cname="GTK_CURVE_TYPE_SPLINE" name="Spline" />
       <member cname="GTK_CURVE_TYPE_FREE" name="Free" />
     </enum>
-    <enum name="DeleteType" cname="GtkDeleteType" type="enum">
+    <enum name="DeleteType" cname="GtkDeleteType" gtype="gtk_delete_type_get_type" type="enum">
       <member cname="GTK_DELETE_CHARS" name="Chars" />
       <member cname="GTK_DELETE_WORD_ENDS" name="WordEnds" />
       <member cname="GTK_DELETE_WORDS" name="Words" />
@@ -104,18 +104,18 @@
       <member cname="GTK_DELETE_PARAGRAPHS" name="Paragraphs" />
       <member cname="GTK_DELETE_WHITESPACE" name="Whitespace" />
     </enum>
-    <enum name="DestDefaults" cname="GtkDestDefaults" type="flags">
+    <enum name="DestDefaults" cname="GtkDestDefaults" gtype="gtk_dest_defaults_get_type" type="flags">
       <member cname="GTK_DEST_DEFAULT_MOTION" name="Motion" value="1 &lt;&lt; 0" />
       <member cname="GTK_DEST_DEFAULT_HIGHLIGHT" name="Highlight" value="1 &lt;&lt; 1" />
       <member cname="GTK_DEST_DEFAULT_DROP" name="Drop" value="1 &lt;&lt; 2" />
       <member cname="GTK_DEST_DEFAULT_ALL" name="All" value="0x07" />
     </enum>
-    <enum name="DialogFlags" cname="GtkDialogFlags" type="flags">
+    <enum name="DialogFlags" cname="GtkDialogFlags" gtype="gtk_dialog_flags_get_type" type="flags">
       <member cname="GTK_DIALOG_MODAL" name="Modal" value="1 &lt;&lt; 0" />
       <member cname="GTK_DIALOG_DESTROY_WITH_PARENT" name="DestroyWithParent" value="1 &lt;&lt; 1" />
       <member cname="GTK_DIALOG_NO_SEPARATOR" name="NoSeparator" value="1 &lt;&lt; 2" />
     </enum>
-    <enum name="DirectionType" cname="GtkDirectionType" type="enum">
+    <enum name="DirectionType" cname="GtkDirectionType" gtype="gtk_direction_type_get_type" type="enum">
       <member cname="GTK_DIR_TAB_FORWARD" name="TabForward" />
       <member cname="GTK_DIR_TAB_BACKWARD" name="TabBackward" />
       <member cname="GTK_DIR_UP" name="Up" />
@@ -123,23 +123,23 @@
       <member cname="GTK_DIR_LEFT" name="Left" />
       <member cname="GTK_DIR_RIGHT" name="Right" />
     </enum>
-    <enum name="ExpanderStyle" cname="GtkExpanderStyle" type="enum">
+    <enum name="ExpanderStyle" cname="GtkExpanderStyle" gtype="gtk_expander_style_get_type" type="enum">
       <member cname="GTK_EXPANDER_COLLAPSED" name="Collapsed" />
       <member cname="GTK_EXPANDER_SEMI_COLLAPSED" name="SemiCollapsed" />
       <member cname="GTK_EXPANDER_SEMI_EXPANDED" name="SemiExpanded" />
       <member cname="GTK_EXPANDER_EXPANDED" name="Expanded" />
     </enum>
-    <enum name="FileChooserAction" cname="GtkFileChooserAction" type="enum">
+    <enum name="FileChooserAction" cname="GtkFileChooserAction" gtype="gtk_file_chooser_action_get_type" type="enum">
       <member cname="GTK_FILE_CHOOSER_ACTION_OPEN" name="Open" />
       <member cname="GTK_FILE_CHOOSER_ACTION_SAVE" name="Save" />
       <member cname="GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER" name="SelectFolder" />
       <member cname="GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER" name="CreateFolder" />
     </enum>
-    <enum name="FileChooserError" cname="GtkFileChooserError" type="enum">
+    <enum name="FileChooserError" cname="GtkFileChooserError" gtype="gtk_file_chooser_error_get_type" type="enum">
       <member cname="GTK_FILE_CHOOSER_ERROR_NONEXISTENT" name="Nonexistent" />
       <member cname="GTK_FILE_CHOOSER_ERROR_BAD_FILENAME" name="BadFilename" />
     </enum>
-    <enum name="FileFilterFlags" cname="GtkFileFilterFlags" type="flags">
+    <enum name="FileFilterFlags" cname="GtkFileFilterFlags" gtype="gtk_file_filter_flags_get_type" type="flags">
       <member cname="GTK_FILE_FILTER_FILENAME" name="Filename" value="1 &lt;&lt; 0" />
       <member cname="GTK_FILE_FILTER_URI" name="Uri" value="1 &lt;&lt; 1" />
       <member cname="GTK_FILE_FILTER_DISPLAY_NAME" name="DisplayName" value="1 &lt;&lt; 2" />
@@ -155,12 +155,12 @@
       <member cname="GTK_IM_STATUS_CALLBACK" name="Callback" />
       <member cname="GTK_IM_STATUS_NONE" name="None" />
     </enum>
-    <enum name="IconLookupFlags" cname="GtkIconLookupFlags" type="flags">
+    <enum name="IconLookupFlags" cname="GtkIconLookupFlags" gtype="gtk_icon_lookup_flags_get_type" type="flags">
       <member cname="GTK_ICON_LOOKUP_NO_SVG" name="NoSvg" value="1 &lt;&lt; 0" />
       <member cname="GTK_ICON_LOOKUP_FORCE_SVG" name="ForceSvg" value="1 &lt;&lt; 1" />
       <member cname="GTK_ICON_LOOKUP_USE_BUILTIN" name="UseBuiltin" value="1 &lt;&lt; 2" />
     </enum>
-    <enum name="IconSize" cname="GtkIconSize" type="enum">
+    <enum name="IconSize" cname="GtkIconSize" gtype="gtk_icon_size_get_type" type="enum">
       <member cname="GTK_ICON_SIZE_INVALID" name="Invalid" />
       <member cname="GTK_ICON_SIZE_MENU" name="Menu" />
       <member cname="GTK_ICON_SIZE_SMALL_TOOLBAR" name="SmallToolbar" />
@@ -169,11 +169,11 @@
       <member cname="GTK_ICON_SIZE_DND" name="Dnd" />
       <member cname="GTK_ICON_SIZE_DIALOG" name="Dialog" />
     </enum>
-    <enum name="IconThemeError" cname="GtkIconThemeError" type="enum">
+    <enum name="IconThemeError" cname="GtkIconThemeError" gtype="gtk_icon_theme_error_get_type" type="enum">
       <member cname="GTK_ICON_THEME_NOT_FOUND" name="NotFound" />
       <member cname="GTK_ICON_THEME_FAILED" name="Failed" />
     </enum>
-    <enum name="ImageType" cname="GtkImageType" type="enum">
+    <enum name="ImageType" cname="GtkImageType" gtype="gtk_image_type_get_type" type="enum">
       <member cname="GTK_IMAGE_EMPTY" name="Empty" />
       <member cname="GTK_IMAGE_PIXMAP" name="Pixmap" />
       <member cname="GTK_IMAGE_IMAGE" name="Image" />
@@ -183,13 +183,13 @@
       <member cname="GTK_IMAGE_ANIMATION" name="Animation" />
       <member cname="GTK_IMAGE_ICON_NAME" name="IconName" />
     </enum>
-    <enum name="Justification" cname="GtkJustification" type="enum">
+    <enum name="Justification" cname="GtkJustification" gtype="gtk_justification_get_type" type="enum">
       <member cname="GTK_JUSTIFY_LEFT" name="Left" />
       <member cname="GTK_JUSTIFY_RIGHT" name="Right" />
       <member cname="GTK_JUSTIFY_CENTER" name="Center" />
       <member cname="GTK_JUSTIFY_FILL" name="Fill" />
     </enum>
-    <enum name="MatchType" cname="GtkMatchType" deprecated="1" type="enum">
+    <enum name="MatchType" cname="GtkMatchType" deprecated="1" gtype="gtk_match_type_get_type" type="enum">
       <member cname="GTK_MATCH_ALL" name="All" />
       <member cname="GTK_MATCH_ALL_TAIL" name="AllTail" />
       <member cname="GTK_MATCH_HEAD" name="Head" />
@@ -197,24 +197,24 @@
       <member cname="GTK_MATCH_EXACT" name="Exact" />
       <member cname="GTK_MATCH_LAST" name="Last" />
     </enum>
-    <enum name="MenuDirectionType" cname="GtkMenuDirectionType" type="enum">
+    <enum name="MenuDirectionType" cname="GtkMenuDirectionType" gtype="gtk_menu_direction_type_get_type" type="enum">
       <member cname="GTK_MENU_DIR_PARENT" name="Parent" />
       <member cname="GTK_MENU_DIR_CHILD" name="Child" />
       <member cname="GTK_MENU_DIR_NEXT" name="Next" />
       <member cname="GTK_MENU_DIR_PREV" name="Prev" />
     </enum>
-    <enum name="MessageType" cname="GtkMessageType" type="enum">
+    <enum name="MessageType" cname="GtkMessageType" gtype="gtk_message_type_get_type" type="enum">
       <member cname="GTK_MESSAGE_INFO" name="Info" />
       <member cname="GTK_MESSAGE_WARNING" name="Warning" />
       <member cname="GTK_MESSAGE_QUESTION" name="Question" />
       <member cname="GTK_MESSAGE_ERROR" name="Error" />
     </enum>
-    <enum name="MetricType" cname="GtkMetricType" type="enum">
+    <enum name="MetricType" cname="GtkMetricType" gtype="gtk_metric_type_get_type" type="enum">
       <member cname="GTK_PIXELS" name="Pixels" />
       <member cname="GTK_INCHES" name="Inches" />
       <member cname="GTK_CENTIMETERS" name="Centimeters" />
     </enum>
-    <enum name="MovementStep" cname="GtkMovementStep" type="enum">
+    <enum name="MovementStep" cname="GtkMovementStep" gtype="gtk_movement_step_get_type" type="enum">
       <member cname="GTK_MOVEMENT_LOGICAL_POSITIONS" name="LogicalPositions" />
       <member cname="GTK_MOVEMENT_VISUAL_POSITIONS" name="VisualPositions" />
       <member cname="GTK_MOVEMENT_WORDS" name="Words" />
@@ -226,25 +226,25 @@
       <member cname="GTK_MOVEMENT_BUFFER_ENDS" name="BufferEnds" />
       <member cname="GTK_MOVEMENT_HORIZONTAL_PAGES" name="HorizontalPages" />
     </enum>
-    <enum name="NotebookTab" cname="GtkNotebookTab" type="enum">
+    <enum name="NotebookTab" cname="GtkNotebookTab" gtype="gtk_notebook_tab_get_type" type="enum">
       <member cname="GTK_NOTEBOOK_TAB_FIRST" name="First" />
       <member cname="GTK_NOTEBOOK_TAB_LAST" name="Last" />
     </enum>
-    <enum name="ObjectFlags" cname="GtkObjectFlags" type="flags">
+    <enum name="ObjectFlags" cname="GtkObjectFlags" gtype="gtk_object_flags_get_type" type="flags">
       <member cname="GTK_IN_DESTRUCTION" name="InDestruction" value="1 &lt;&lt; 0" />
       <member cname="GTK_FLOATING" name="Floating" value="1 &lt;&lt; 1" />
       <member cname="GTK_RESERVED_1" name="Reserved1" value="1 &lt;&lt; 2" />
       <member cname="GTK_RESERVED_2" name="Reserved2" value="1 &lt;&lt; 3" />
     </enum>
-    <enum name="Orientation" cname="GtkOrientation" type="enum">
+    <enum name="Orientation" cname="GtkOrientation" gtype="gtk_orientation_get_type" type="enum">
       <member cname="GTK_ORIENTATION_HORIZONTAL" name="Horizontal" />
       <member cname="GTK_ORIENTATION_VERTICAL" name="Vertical" />
     </enum>
-    <enum name="PackType" cname="GtkPackType" type="enum">
+    <enum name="PackType" cname="GtkPackType" gtype="gtk_pack_type_get_type" type="enum">
       <member cname="GTK_PACK_START" name="Start" />
       <member cname="GTK_PACK_END" name="End" />
     </enum>
-    <enum name="PathPriorityType" cname="GtkPathPriorityType" type="enum">
+    <enum name="PathPriorityType" cname="GtkPathPriorityType" gtype="gtk_path_priority_type_get_type" type="enum">
       <member cname="GTK_PATH_PRIO_LOWEST" name="Lowest" />
       <member cname="GTK_PATH_PRIO_GTK" name="Gtk" value="4" />
       <member cname="GTK_PATH_PRIO_APPLICATION" name="Application" value="8" />
@@ -252,43 +252,43 @@
       <member cname="GTK_PATH_PRIO_RC" name="Rc" value="12" />
       <member cname="GTK_PATH_PRIO_HIGHEST" name="Highest" value="15" />
     </enum>
-    <enum name="PathType" cname="GtkPathType" type="enum">
+    <enum name="PathType" cname="GtkPathType" gtype="gtk_path_type_get_type" type="enum">
       <member cname="GTK_PATH_WIDGET" name="Widget" />
       <member cname="GTK_PATH_WIDGET_CLASS" name="WidgetClass" />
       <member cname="GTK_PATH_CLASS" name="Class" />
     </enum>
-    <enum name="PolicyType" cname="GtkPolicyType" type="enum">
+    <enum name="PolicyType" cname="GtkPolicyType" gtype="gtk_policy_type_get_type" type="enum">
       <member cname="GTK_POLICY_ALWAYS" name="Always" />
       <member cname="GTK_POLICY_AUTOMATIC" name="Automatic" />
       <member cname="GTK_POLICY_NEVER" name="Never" />
     </enum>
-    <enum name="PositionType" cname="GtkPositionType" type="enum">
+    <enum name="PositionType" cname="GtkPositionType" gtype="gtk_position_type_get_type" type="enum">
       <member cname="GTK_POS_LEFT" name="Left" />
       <member cname="GTK_POS_RIGHT" name="Right" />
       <member cname="GTK_POS_TOP" name="Top" />
       <member cname="GTK_POS_BOTTOM" name="Bottom" />
     </enum>
-    <enum name="PreviewType" cname="GtkPreviewType" deprecated="1" type="enum">
+    <enum name="PreviewType" cname="GtkPreviewType" deprecated="1" gtype="gtk_preview_type_get_type" type="enum">
       <member cname="GTK_PREVIEW_COLOR" name="Color" />
       <member cname="GTK_PREVIEW_GRAYSCALE" name="Grayscale" />
     </enum>
-    <enum name="ProgressBarOrientation" cname="GtkProgressBarOrientation" type="enum">
+    <enum name="ProgressBarOrientation" cname="GtkProgressBarOrientation" gtype="gtk_progress_bar_orientation_get_type" type="enum">
       <member cname="GTK_PROGRESS_LEFT_TO_RIGHT" name="LeftToRight" />
       <member cname="GTK_PROGRESS_RIGHT_TO_LEFT" name="RightToLeft" />
       <member cname="GTK_PROGRESS_BOTTOM_TO_TOP" name="BottomToTop" />
       <member cname="GTK_PROGRESS_TOP_TO_BOTTOM" name="TopToBottom" />
     </enum>
-    <enum name="ProgressBarStyle" cname="GtkProgressBarStyle" type="enum">
+    <enum name="ProgressBarStyle" cname="GtkProgressBarStyle" gtype="gtk_progress_bar_style_get_type" type="enum">
       <member cname="GTK_PROGRESS_CONTINUOUS" name="Continuous" />
       <member cname="GTK_PROGRESS_DISCRETE" name="Discrete" />
     </enum>
-    <enum name="RcFlags" cname="GtkRcFlags" type="flags">
+    <enum name="RcFlags" cname="GtkRcFlags" gtype="gtk_rc_flags_get_type" type="flags">
       <member cname="GTK_RC_FG" name="Fg" value="1 &lt;&lt; 0" />
       <member cname="GTK_RC_BG" name="Bg" value="1 &lt;&lt; 1" />
       <member cname="GTK_RC_TEXT" name="Text" value="1 &lt;&lt; 2" />
       <member cname="GTK_RC_BASE" name="Base" value="1 &lt;&lt; 3" />
     </enum>
-    <enum name="RcTokenType" cname="GtkRcTokenType" type="enum">
+    <enum name="RcTokenType" cname="GtkRcTokenType" gtype="gtk_rc_token_type_get_type" type="enum">
       <member cname="GTK_RC_TOKEN_INVALID" name="Invalid" />
       <member cname="GTK_RC_TOKEN_INCLUDE" name="Include" />
       <member cname="GTK_RC_TOKEN_NORMAL" name="Normal" />
@@ -328,17 +328,17 @@
       <member cname="GTK_RC_TOKEN_RTL" name="Rtl" />
       <member cname="GTK_RC_TOKEN_LAST" name="Last" />
     </enum>
-    <enum name="ReliefStyle" cname="GtkReliefStyle" type="enum">
+    <enum name="ReliefStyle" cname="GtkReliefStyle" gtype="gtk_relief_style_get_type" type="enum">
       <member cname="GTK_RELIEF_NORMAL" name="Normal" />
       <member cname="GTK_RELIEF_HALF" name="Half" />
       <member cname="GTK_RELIEF_NONE" name="None" />
     </enum>
-    <enum name="ResizeMode" cname="GtkResizeMode" type="enum">
+    <enum name="ResizeMode" cname="GtkResizeMode" gtype="gtk_resize_mode_get_type" type="enum">
       <member cname="GTK_RESIZE_PARENT" name="Parent" />
       <member cname="GTK_RESIZE_QUEUE" name="Queue" />
       <member cname="GTK_RESIZE_IMMEDIATE" name="Immediate" />
     </enum>
-    <enum name="ResponseType" cname="GtkResponseType" type="enum">
+    <enum name="ResponseType" cname="GtkResponseType" gtype="gtk_response_type_get_type" type="enum">
       <member cname="GTK_RESPONSE_NONE" name="None" value="-1" />
       <member cname="GTK_RESPONSE_REJECT" name="Reject" value="-2" />
       <member cname="GTK_RESPONSE_ACCEPT" name="Accept" value="-3" />
@@ -351,7 +351,7 @@
       <member cname="GTK_RESPONSE_APPLY" name="Apply" value="-10" />
       <member cname="GTK_RESPONSE_HELP" name="Help" value="-11" />
     </enum>
-    <enum name="ScrollStep" cname="GtkScrollStep" type="enum">
+    <enum name="ScrollStep" cname="GtkScrollStep" gtype="gtk_scroll_step_get_type" type="enum">
       <member cname="GTK_SCROLL_STEPS" name="Steps" />
       <member cname="GTK_SCROLL_PAGES" name="Pages" />
       <member cname="GTK_SCROLL_ENDS" name="Ends" />
@@ -359,7 +359,7 @@
       <member cname="GTK_SCROLL_HORIZONTAL_PAGES" name="HorizontalPages" />
       <member cname="GTK_SCROLL_HORIZONTAL_ENDS" name="HorizontalEnds" />
     </enum>
-    <enum name="ScrollType" cname="GtkScrollType" type="enum">
+    <enum name="ScrollType" cname="GtkScrollType" gtype="gtk_scroll_type_get_type" type="enum">
       <member cname="GTK_SCROLL_NONE" name="None" />
       <member cname="GTK_SCROLL_JUMP" name="Jump" />
       <member cname="GTK_SCROLL_STEP_BACKWARD" name="StepBackward" />
@@ -377,27 +377,27 @@
       <member cname="GTK_SCROLL_START" name="Start" />
       <member cname="GTK_SCROLL_END" name="End" />
     </enum>
-    <enum name="SelectionMode" cname="GtkSelectionMode" type="enum">
+    <enum name="SelectionMode" cname="GtkSelectionMode" gtype="gtk_selection_mode_get_type" type="enum">
       <member cname="GTK_SELECTION_NONE" name="None" />
       <member cname="GTK_SELECTION_SINGLE" name="Single" />
       <member cname="GTK_SELECTION_BROWSE" name="Browse" />
       <member cname="GTK_SELECTION_MULTIPLE" name="Multiple" />
       <member cname="GTK_SELECTION_EXTENDED" name="Extended" />
     </enum>
-    <enum name="ShadowType" cname="GtkShadowType" type="enum">
+    <enum name="ShadowType" cname="GtkShadowType" gtype="gtk_shadow_type_get_type" type="enum">
       <member cname="GTK_SHADOW_NONE" name="None" />
       <member cname="GTK_SHADOW_IN" name="In" />
       <member cname="GTK_SHADOW_OUT" name="Out" />
       <member cname="GTK_SHADOW_ETCHED_IN" name="EtchedIn" />
       <member cname="GTK_SHADOW_ETCHED_OUT" name="EtchedOut" />
     </enum>
-    <enum name="SideType" cname="GtkSideType" deprecated="1" type="enum">
+    <enum name="SideType" cname="GtkSideType" deprecated="1" gtype="gtk_side_type_get_type" type="enum">
       <member cname="GTK_SIDE_TOP" name="Top" />
       <member cname="GTK_SIDE_BOTTOM" name="Bottom" />
       <member cname="GTK_SIDE_LEFT" name="Left" />
       <member cname="GTK_SIDE_RIGHT" name="Right" />
     </enum>
-    <enum name="SignalRunType" cname="GtkSignalRunType" deprecated="1" type="enum">
+    <enum name="SignalRunType" cname="GtkSignalRunType" deprecated="1" gtype="gtk_signal_run_type_get_type" type="enum">
       <member cname="GTK_RUN_FIRST" name="First" />
       <member cname="GTK_RUN_LAST" name="Last" />
       <member cname="GTK_RUN_BOTH" name="Both" />
@@ -405,21 +405,21 @@
       <member cname="GTK_RUN_ACTION" name="Action" />
       <member cname="GTK_RUN_NO_HOOKS" name="NoHooks" />
     </enum>
-    <enum name="SizeGroupMode" cname="GtkSizeGroupMode" type="enum">
+    <enum name="SizeGroupMode" cname="GtkSizeGroupMode" gtype="gtk_size_group_mode_get_type" type="enum">
       <member cname="GTK_SIZE_GROUP_NONE" name="None" />
       <member cname="GTK_SIZE_GROUP_HORIZONTAL" name="Horizontal" />
       <member cname="GTK_SIZE_GROUP_VERTICAL" name="Vertical" />
       <member cname="GTK_SIZE_GROUP_BOTH" name="Both" />
     </enum>
-    <enum name="SortType" cname="GtkSortType" type="enum">
+    <enum name="SortType" cname="GtkSortType" gtype="gtk_sort_type_get_type" type="enum">
       <member cname="GTK_SORT_ASCENDING" name="Ascending" />
       <member cname="GTK_SORT_DESCENDING" name="Descending" />
     </enum>
-    <enum name="SpinButtonUpdatePolicy" cname="GtkSpinButtonUpdatePolicy" type="enum">
+    <enum name="SpinButtonUpdatePolicy" cname="GtkSpinButtonUpdatePolicy" gtype="gtk_spin_button_update_policy_get_type" type="enum">
       <member cname="GTK_UPDATE_ALWAYS" name="Always" />
       <member cname="GTK_UPDATE_IF_VALID" name="IfValid" />
     </enum>
-    <enum name="SpinType" cname="GtkSpinType" type="enum">
+    <enum name="SpinType" cname="GtkSpinType" gtype="gtk_spin_type_get_type" type="enum">
       <member cname="GTK_SPIN_STEP_FORWARD" name="StepForward" />
       <member cname="GTK_SPIN_STEP_BACKWARD" name="StepBackward" />
       <member cname="GTK_SPIN_PAGE_FORWARD" name="PageForward" />
@@ -428,35 +428,35 @@
       <member cname="GTK_SPIN_END" name="End" />
       <member cname="GTK_SPIN_USER_DEFINED" name="UserDefined" />
     </enum>
-    <enum name="StateType" cname="GtkStateType" type="enum">
+    <enum name="StateType" cname="GtkStateType" gtype="gtk_state_type_get_type" type="enum">
       <member cname="GTK_STATE_NORMAL" name="Normal" />
       <member cname="GTK_STATE_ACTIVE" name="Active" />
       <member cname="GTK_STATE_PRELIGHT" name="Prelight" />
       <member cname="GTK_STATE_SELECTED" name="Selected" />
       <member cname="GTK_STATE_INSENSITIVE" name="Insensitive" />
     </enum>
-    <enum name="SubmenuDirection" cname="GtkSubmenuDirection" deprecated="1" type="enum">
+    <enum name="SubmenuDirection" cname="GtkSubmenuDirection" deprecated="1" gtype="gtk_submenu_direction_get_type" type="enum">
       <member cname="GTK_DIRECTION_LEFT" name="Left" />
       <member cname="GTK_DIRECTION_RIGHT" name="Right" />
     </enum>
-    <enum name="SubmenuPlacement" cname="GtkSubmenuPlacement" deprecated="1" type="enum">
+    <enum name="SubmenuPlacement" cname="GtkSubmenuPlacement" deprecated="1" gtype="gtk_submenu_placement_get_type" type="enum">
       <member cname="GTK_TOP_BOTTOM" name="TopBottom" />
       <member cname="GTK_LEFT_RIGHT" name="LeftRight" />
     </enum>
-    <enum name="TargetFlags" cname="GtkTargetFlags" type="flags">
+    <enum name="TargetFlags" cname="GtkTargetFlags" gtype="gtk_target_flags_get_type" type="flags">
       <member cname="GTK_TARGET_SAME_APP" name="App" value="1 &lt;&lt; 0" />
       <member cname="GTK_TARGET_SAME_WIDGET" name="Widget" value="1 &lt;&lt; 1" />
     </enum>
-    <enum name="TextDirection" cname="GtkTextDirection" type="enum">
+    <enum name="TextDirection" cname="GtkTextDirection" gtype="gtk_text_direction_get_type" type="enum">
       <member cname="GTK_TEXT_DIR_NONE" name="None" />
       <member cname="GTK_TEXT_DIR_LTR" name="Ltr" />
       <member cname="GTK_TEXT_DIR_RTL" name="Rtl" />
     </enum>
-    <enum name="TextSearchFlags" cname="GtkTextSearchFlags" type="flags">
+    <enum name="TextSearchFlags" cname="GtkTextSearchFlags" gtype="gtk_text_search_flags_get_type" type="flags">
       <member cname="GTK_TEXT_SEARCH_VISIBLE_ONLY" name="VisibleOnly" value="1 &lt;&lt; 0" />
       <member cname="GTK_TEXT_SEARCH_TEXT_ONLY" name="TextOnly" value="1 &lt;&lt; 1" />
     </enum>
-    <enum name="TextWindowType" cname="GtkTextWindowType" type="enum">
+    <enum name="TextWindowType" cname="GtkTextWindowType" gtype="gtk_text_window_type_get_type" type="enum">
       <member cname="GTK_TEXT_WINDOW_PRIVATE" name="Private" />
       <member cname="GTK_TEXT_WINDOW_WIDGET" name="Widget" />
       <member cname="GTK_TEXT_WINDOW_TEXT" name="Text" />
@@ -465,33 +465,33 @@
       <member cname="GTK_TEXT_WINDOW_TOP" name="Top" />
       <member cname="GTK_TEXT_WINDOW_BOTTOM" name="Bottom" />
     </enum>
-    <enum name="ToolbarChildType" cname="GtkToolbarChildType" deprecated="1" type="enum">
+    <enum name="ToolbarChildType" cname="GtkToolbarChildType" deprecated="1" gtype="gtk_toolbar_child_type_get_type" type="enum">
       <member cname="GTK_TOOLBAR_CHILD_SPACE" name="Space" />
       <member cname="GTK_TOOLBAR_CHILD_BUTTON" name="Button" />
       <member cname="GTK_TOOLBAR_CHILD_TOGGLEBUTTON" name="Togglebutton" />
       <member cname="GTK_TOOLBAR_CHILD_RADIOBUTTON" name="Radiobutton" />
       <member cname="GTK_TOOLBAR_CHILD_WIDGET" name="Widget" />
     </enum>
-    <enum name="ToolbarSpaceStyle" cname="GtkToolbarSpaceStyle" type="enum">
+    <enum name="ToolbarSpaceStyle" cname="GtkToolbarSpaceStyle" gtype="gtk_toolbar_space_style_get_type" type="enum">
       <member cname="GTK_TOOLBAR_SPACE_EMPTY" name="Empty" />
       <member cname="GTK_TOOLBAR_SPACE_LINE" name="Line" />
     </enum>
-    <enum name="ToolbarStyle" cname="GtkToolbarStyle" type="enum">
+    <enum name="ToolbarStyle" cname="GtkToolbarStyle" gtype="gtk_toolbar_style_get_type" type="enum">
       <member cname="GTK_TOOLBAR_ICONS" name="Icons" />
       <member cname="GTK_TOOLBAR_TEXT" name="Text" />
       <member cname="GTK_TOOLBAR_BOTH" name="Both" />
       <member cname="GTK_TOOLBAR_BOTH_HORIZ" name="BothHoriz" />
     </enum>
-    <enum name="TreeModelFlags" cname="GtkTreeModelFlags" type="flags">
+    <enum name="TreeModelFlags" cname="GtkTreeModelFlags" gtype="gtk_tree_model_flags_get_type" type="flags">
       <member cname="GTK_TREE_MODEL_ITERS_PERSIST" name="ItersPersist" value="1 &lt;&lt; 0" />
       <member cname="GTK_TREE_MODEL_LIST_ONLY" name="ListOnly" value="1 &lt;&lt; 1" />
     </enum>
-    <enum name="TreeViewColumnSizing" cname="GtkTreeViewColumnSizing" type="enum">
+    <enum name="TreeViewColumnSizing" cname="GtkTreeViewColumnSizing" gtype="gtk_tree_view_column_sizing_get_type" type="enum">
       <member cname="GTK_TREE_VIEW_COLUMN_GROW_ONLY" name="GrowOnly" />
       <member cname="GTK_TREE_VIEW_COLUMN_AUTOSIZE" name="Autosize" />
       <member cname="GTK_TREE_VIEW_COLUMN_FIXED" name="Fixed" />
     </enum>
-    <enum name="TreeViewDropPosition" cname="GtkTreeViewDropPosition" type="enum">
+    <enum name="TreeViewDropPosition" cname="GtkTreeViewDropPosition" gtype="gtk_tree_view_drop_position_get_type" type="enum">
       <member cname="GTK_TREE_VIEW_DROP_BEFORE" name="Before" />
       <member cname="GTK_TREE_VIEW_DROP_AFTER" name="After" />
       <member cname="GTK_TREE_VIEW_DROP_INTO_OR_BEFORE" name="IntoOrBefore" />
@@ -509,17 +509,17 @@
       <member cname="GTK_UI_MANAGER_SEPARATOR" name="Separator" value="1 &lt;&lt; 7" />
       <member cname="GTK_UI_MANAGER_ACCELERATOR" name="Accelerator" value="1 &lt;&lt; 8" />
     </enum>
-    <enum name="UpdateType" cname="GtkUpdateType" type="enum">
+    <enum name="UpdateType" cname="GtkUpdateType" gtype="gtk_update_type_get_type" type="enum">
       <member cname="GTK_UPDATE_CONTINUOUS" name="Continuous" />
       <member cname="GTK_UPDATE_DISCONTINUOUS" name="Discontinuous" />
       <member cname="GTK_UPDATE_DELAYED" name="Delayed" />
     </enum>
-    <enum name="Visibility" cname="GtkVisibility" type="enum">
+    <enum name="Visibility" cname="GtkVisibility" gtype="gtk_visibility_get_type" type="enum">
       <member cname="GTK_VISIBILITY_NONE" name="None" />
       <member cname="GTK_VISIBILITY_PARTIAL" name="Partial" />
       <member cname="GTK_VISIBILITY_FULL" name="Full" />
     </enum>
-    <enum name="WidgetFlags" cname="GtkWidgetFlags" type="flags">
+    <enum name="WidgetFlags" cname="GtkWidgetFlags" gtype="gtk_widget_flags_get_type" type="flags">
       <member cname="GTK_TOPLEVEL" name="Toplevel" value="1 &lt;&lt; 4" />
       <member cname="GTK_NO_WINDOW" name="NoWindow" value="1 &lt;&lt; 5" />
       <member cname="GTK_REALIZED" name="Realized" value="1 &lt;&lt; 6" />
@@ -540,22 +540,22 @@
       <member cname="GTK_DOUBLE_BUFFERED" name="DoubleBuffered" value="1 &lt;&lt; 21" />
       <member cname="GTK_NO_SHOW_ALL" name="NoShowAll" value="1 &lt;&lt; 22" />
     </enum>
-    <enum name="WidgetHelpType" cname="GtkWidgetHelpType" type="enum">
+    <enum name="WidgetHelpType" cname="GtkWidgetHelpType" gtype="gtk_widget_help_type_get_type" type="enum">
       <member cname="GTK_WIDGET_HELP_TOOLTIP" name="Tooltip" />
       <member cname="GTK_WIDGET_HELP_WHATS_THIS" name="WhatsThis" />
     </enum>
-    <enum name="WindowPosition" cname="GtkWindowPosition" type="enum">
+    <enum name="WindowPosition" cname="GtkWindowPosition" gtype="gtk_window_position_get_type" type="enum">
       <member cname="GTK_WIN_POS_NONE" name="None" />
       <member cname="GTK_WIN_POS_CENTER" name="Center" />
       <member cname="GTK_WIN_POS_MOUSE" name="Mouse" />
       <member cname="GTK_WIN_POS_CENTER_ALWAYS" name="CenterAlways" />
       <member cname="GTK_WIN_POS_CENTER_ON_PARENT" name="CenterOnParent" />
     </enum>
-    <enum name="WindowType" cname="GtkWindowType" type="enum">
+    <enum name="WindowType" cname="GtkWindowType" gtype="gtk_window_type_get_type" type="enum">
       <member cname="GTK_WINDOW_TOPLEVEL" name="Toplevel" />
       <member cname="GTK_WINDOW_POPUP" name="Popup" />
     </enum>
-    <enum name="WrapMode" cname="GtkWrapMode" type="enum">
+    <enum name="WrapMode" cname="GtkWrapMode" gtype="gtk_wrap_mode_get_type" type="enum">
       <member cname="GTK_WRAP_NONE" name="None" />
       <member cname="GTK_WRAP_CHAR" name="Char" />
       <member cname="GTK_WRAP_WORD" name="Word" />
diff --git a/pango/pango-api.raw b/pango/pango-api.raw
index b4fe4537f..aaa0dce95 100644
--- a/pango/pango-api.raw
+++ b/pango/pango-api.raw
@@ -7,12 +7,12 @@
 
 -->
   <namespace name="Pango" library="libpango-1.0-0.dll">
-    <enum name="Alignment" cname="PangoAlignment" type="enum">
+    <enum name="Alignment" cname="PangoAlignment" gtype="pango_alignment_get_type" type="enum">
       <member cname="PANGO_ALIGN_LEFT" name="Left" />
       <member cname="PANGO_ALIGN_CENTER" name="Center" />
       <member cname="PANGO_ALIGN_RIGHT" name="Right" />
     </enum>
-    <enum name="AttrType" cname="PangoAttrType" type="enum">
+    <enum name="AttrType" cname="PangoAttrType" gtype="pango_attr_type_get_type" type="enum">
       <member cname="PANGO_ATTR_INVALID" name="Invalid" />
       <member cname="PANGO_ATTR_LANGUAGE" name="Language" />
       <member cname="PANGO_ATTR_FAMILY" name="Family" />
@@ -34,13 +34,13 @@
       <member cname="PANGO_ATTR_UNDERLINE_COLOR" name="UnderlineColor" />
       <member cname="PANGO_ATTR_STRIKETHROUGH_COLOR" name="StrikethroughColor" />
     </enum>
-    <enum name="CoverageLevel" cname="PangoCoverageLevel" type="enum">
+    <enum name="CoverageLevel" cname="PangoCoverageLevel" gtype="pango_coverage_level_get_type" type="enum">
       <member cname="PANGO_COVERAGE_NONE" name="None" />
       <member cname="PANGO_COVERAGE_FALLBACK" name="Fallback" />
       <member cname="PANGO_COVERAGE_APPROXIMATE" name="Approximate" />
       <member cname="PANGO_COVERAGE_EXACT" name="Exact" />
     </enum>
-    <enum name="Direction" cname="PangoDirection" type="enum">
+    <enum name="Direction" cname="PangoDirection" gtype="pango_direction_get_type" type="enum">
       <member cname="PANGO_DIRECTION_LTR" name="Ltr" />
       <member cname="PANGO_DIRECTION_RTL" name="Rtl" />
       <member cname="PANGO_DIRECTION_TTB_LTR" name="TtbLtr" />
@@ -49,13 +49,13 @@
       <member cname="PANGO_DIRECTION_WEAK_RTL" name="WeakRtl" />
       <member cname="PANGO_DIRECTION_NEUTRAL" name="Neutral" />
     </enum>
-    <enum name="EllipsizeMode" cname="PangoEllipsizeMode" type="enum">
+    <enum name="EllipsizeMode" cname="PangoEllipsizeMode" gtype="pango_ellipsize_mode_get_type" type="enum">
       <member cname="PANGO_ELLIPSIZE_NONE" name="None" />
       <member cname="PANGO_ELLIPSIZE_START" name="Start" />
       <member cname="PANGO_ELLIPSIZE_MIDDLE" name="Middle" />
       <member cname="PANGO_ELLIPSIZE_END" name="End" />
     </enum>
-    <enum name="FontMask" cname="PangoFontMask" type="flags">
+    <enum name="FontMask" cname="PangoFontMask" gtype="pango_font_mask_get_type" type="flags">
       <member cname="PANGO_FONT_MASK_FAMILY" name="Family" value="1 &lt;&lt; 0" />
       <member cname="PANGO_FONT_MASK_STYLE" name="Style" value="1 &lt;&lt; 1" />
       <member cname="PANGO_FONT_MASK_VARIANT" name="Variant" value="1 &lt;&lt; 2" />
@@ -63,13 +63,13 @@
       <member cname="PANGO_FONT_MASK_STRETCH" name="Stretch" value="1 &lt;&lt; 4" />
       <member cname="PANGO_FONT_MASK_SIZE" name="Size" value="1 &lt;&lt; 5" />
     </enum>
-    <enum name="RenderPart" cname="PangoRenderPart" type="enum">
+    <enum name="RenderPart" cname="PangoRenderPart" gtype="pango_render_part_get_type" type="enum">
       <member cname="PANGO_RENDER_PART_FOREGROUND" name="Foreground" />
       <member cname="PANGO_RENDER_PART_BACKGROUND" name="Background" />
       <member cname="PANGO_RENDER_PART_UNDERLINE" name="Underline" />
       <member cname="PANGO_RENDER_PART_STRIKETHROUGH" name="Strikethrough" />
     </enum>
-    <enum name="Script" cname="PangoScript" type="enum">
+    <enum name="Script" cname="PangoScript" gtype="pango_script_get_type" type="enum">
       <member cname="PANGO_SCRIPT_INVALID_CODE" name="InvalidCode" value="-1" />
       <member cname="PANGO_SCRIPT_COMMON" name="Common" />
       <member cname="PANGO_SCRIPT_INHERITED" name="Inherited" />
@@ -126,7 +126,7 @@
       <member cname="PANGO_SCRIPT_TAI_LE" name="TaiLe" />
       <member cname="PANGO_SCRIPT_UGARITIC" name="Ugaritic" />
     </enum>
-    <enum name="Stretch" cname="PangoStretch" type="enum">
+    <enum name="Stretch" cname="PangoStretch" gtype="pango_stretch_get_type" type="enum">
       <member cname="PANGO_STRETCH_ULTRA_CONDENSED" name="UltraCondensed" />
       <member cname="PANGO_STRETCH_EXTRA_CONDENSED" name="ExtraCondensed" />
       <member cname="PANGO_STRETCH_CONDENSED" name="Condensed" />
@@ -137,26 +137,26 @@
       <member cname="PANGO_STRETCH_EXTRA_EXPANDED" name="ExtraExpanded" />
       <member cname="PANGO_STRETCH_ULTRA_EXPANDED" name="UltraExpanded" />
     </enum>
-    <enum name="Style" cname="PangoStyle" type="enum">
+    <enum name="Style" cname="PangoStyle" gtype="pango_style_get_type" type="enum">
       <member cname="PANGO_STYLE_NORMAL" name="Normal" />
       <member cname="PANGO_STYLE_OBLIQUE" name="Oblique" />
       <member cname="PANGO_STYLE_ITALIC" name="Italic" />
     </enum>
-    <enum name="TabAlign" cname="PangoTabAlign" type="enum">
+    <enum name="TabAlign" cname="PangoTabAlign" gtype="pango_tab_align_get_type" type="enum">
       <member cname="PANGO_TAB_LEFT" name="Left" />
     </enum>
-    <enum name="Underline" cname="PangoUnderline" type="enum">
+    <enum name="Underline" cname="PangoUnderline" gtype="pango_underline_get_type" type="enum">
       <member cname="PANGO_UNDERLINE_NONE" name="None" />
       <member cname="PANGO_UNDERLINE_SINGLE" name="Single" />
       <member cname="PANGO_UNDERLINE_DOUBLE" name="Double" />
       <member cname="PANGO_UNDERLINE_LOW" name="Low" />
       <member cname="PANGO_UNDERLINE_ERROR" name="Error" />
     </enum>
-    <enum name="Variant" cname="PangoVariant" type="enum">
+    <enum name="Variant" cname="PangoVariant" gtype="pango_variant_get_type" type="enum">
       <member cname="PANGO_VARIANT_NORMAL" name="Normal" />
       <member cname="PANGO_VARIANT_SMALL_CAPS" name="SmallCaps" />
     </enum>
-    <enum name="Weight" cname="PangoWeight" type="enum">
+    <enum name="Weight" cname="PangoWeight" gtype="pango_weight_get_type" type="enum">
       <member cname="PANGO_WEIGHT_ULTRALIGHT" name="Ultralight" value="200" />
       <member cname="PANGO_WEIGHT_LIGHT" name="Light" value="300" />
       <member cname="PANGO_WEIGHT_NORMAL" name="Normal" value="400" />
@@ -165,7 +165,7 @@
       <member cname="PANGO_WEIGHT_ULTRABOLD" name="Ultrabold" value="800" />
       <member cname="PANGO_WEIGHT_HEAVY" name="Heavy" value="900" />
     </enum>
-    <enum name="WrapMode" cname="PangoWrapMode" type="enum">
+    <enum name="WrapMode" cname="PangoWrapMode" gtype="pango_wrap_mode_get_type" type="enum">
       <member cname="PANGO_WRAP_WORD" name="Word" />
       <member cname="PANGO_WRAP_CHAR" name="Char" />
       <member cname="PANGO_WRAP_WORD_CHAR" name="WordChar" />
diff --git a/parser/gapi2xml.pl b/parser/gapi2xml.pl
index c08495d1d..0b50f570d 100755
--- a/parser/gapi2xml.pl
+++ b/parser/gapi2xml.pl
@@ -145,6 +145,9 @@ while ($line = <STDIN>) {
 				my $boxtype = $1;
 				$boxtype =~ s/($ns)Type(\w+)/$ns$2/;
 				$boxdefs{$boxtype} = $boxdef;
+			} elsif ($line =~ /g_(enum|flags)_register_static/) {
+				$pedef =~ /^(\w+_get_type)/;
+				$enum_gtype{$class} = $1;
 			}
 			last if ($line =~ /^}/);
 		}
@@ -222,6 +225,9 @@ foreach $cname (sort(keys(%edefs))) {
 		$enum_elem->setAttribute("deprecated", "1");
 		$def =~ s/deprecated//g;
 	}
+	if ($enum_gtype{$cname}) {
+		$enum_elem->setAttribute("gtype", $enum_gtype{$cname});
+	}
 	if ($def =~ /=\s*1\s*<<\s*\d+/) {
 		$enum_elem->setAttribute('type', "flags");
 	} else {
diff --git a/sample/GtkDemo/DemoIconView.cs b/sample/GtkDemo/DemoIconView.cs
index 457e17380..cc0717893 100644
--- a/sample/GtkDemo/DemoIconView.cs
+++ b/sample/GtkDemo/DemoIconView.cs
@@ -73,7 +73,7 @@ namespace GtkDemo
 		ListStore CreateStore ()
 		{
 			// path, name, pixbuf, is_dir
-			ListStore store = new ListStore (GLib.GType.String, GLib.GType.String, Gdk.Pixbuf.GType, GLib.GType.Boolean);
+			ListStore store = new ListStore (typeof (string), typeof (string), typeof (Gdk.Pixbuf), typeof (bool));
 
 			// Set sort column and function
 			store.DefaultSortFunc = SortFunc;
diff --git a/vte/vte-api.raw b/vte/vte-api.raw
index 528974417..499d7df54 100644
--- a/vte/vte-api.raw
+++ b/vte/vte-api.raw
@@ -28,7 +28,7 @@
       <member cname="VTE_DEBUG_KEYBOARD" name="Keyboard" value="1 &lt;&lt; 11" />
       <member cname="VTE_DEBUG_LIFECYCLE" name="Lifecycle" value="1 &lt;&lt; 12" />
     </enum>
-    <enum name="TerminalEraseBinding" cname="VteTerminalEraseBinding" type="enum">
+    <enum name="TerminalEraseBinding" cname="VteTerminalEraseBinding" gtype="vte_terminal_erase_binding_get_type" type="enum">
       <member cname="VTE_ERASE_AUTO" name="Auto" />
       <member cname="VTE_ERASE_ASCII_BACKSPACE" name="AsciiBackspace" />
       <member cname="VTE_ERASE_ASCII_DELETE" name="AsciiDelete" />