diff --git a/cairo-appbase.cabal b/cairo-appbase.cabal
--- a/cairo-appbase.cabal
+++ b/cairo-appbase.cabal
@@ -1,8 +1,8 @@
 Name:                cairo-appbase
 
-Version:             0.3
+Version:             0.4
 
-Synopsis:            A template for building new GUI applications using GTK, Glade and Cairo.
+Synopsis:            A template for building new GUI applications using GTK and Cairo.
 
 Description:
     This template includes working callbacks to handle the File and Help
@@ -18,12 +18,12 @@
     >   git clone git://github.com/kfish/cairo-appbase.git
     .
     To add widgets, install glade from your distro system and run
-    @glade data/main.glade@
+    @glade data/main.ui@. Save the resulting file in GtkBuilder format.
     .
-    Note that you must run @cabal install@ to put the glade file in the correct
+    Note that you must run @cabal install@ to put the UI file in the correct
     place for your application to pick it up. To modify the code, edit
     @src/cairo-appbase.hs@. Hooking up functions to widgets is very simple: get
-    a widget by name (which you set in glade file), and hook one of its
+    a widget by name (which you set in ui file), and hook one of its
     signals (which you found in the Signals tab in glade) to an @IO ()@ action:
     .
     > cut1 <- get G.castToMenuItem "cut1"
@@ -62,7 +62,7 @@
 
 Cabal-Version:       >= 1.8
 Build-type:          Simple
-Data-Files:          data/main.glade
+Data-Files:          data/main.ui
 
 flag splitBase
   description: Use the split-up base package.
@@ -77,7 +77,7 @@
 
   Main-Is:             cairo-appbase.hs
   Hs-Source-Dirs:      src
-  Build-Depends:       glib, gtk, glade, cairo
+  Build-Depends:       glib, gtk, cairo
 
 ------------------------------------------------------------------------
 -- Git repo
diff --git a/data/main.glade b/data/main.glade
deleted file mode 100644
--- a/data/main.glade
+++ /dev/null
@@ -1,358 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkWindow" id="window1">
-  <property name="visible">True</property>
-  <property name="title" translatable="yes">window1</property>
-  <property name="type">GTK_WINDOW_TOPLEVEL</property>
-  <property name="window_position">GTK_WIN_POS_NONE</property>
-  <property name="modal">False</property>
-  <property name="resizable">True</property>
-  <property name="destroy_with_parent">False</property>
-  <property name="decorated">True</property>
-  <property name="skip_taskbar_hint">False</property>
-  <property name="skip_pager_hint">False</property>
-  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
-  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
-  <property name="focus_on_map">True</property>
-  <property name="urgency_hint">False</property>
-
-  <child>
-    <widget class="GtkVBox" id="vbox1">
-      <property name="visible">True</property>
-      <property name="homogeneous">False</property>
-      <property name="spacing">0</property>
-
-      <child>
-	<widget class="GtkMenuBar" id="menubar1">
-	  <property name="visible">True</property>
-	  <property name="pack_direction">GTK_PACK_DIRECTION_LTR</property>
-	  <property name="child_pack_direction">GTK_PACK_DIRECTION_LTR</property>
-
-	  <child>
-	    <widget class="GtkMenuItem" id="menuitem1">
-	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">_File</property>
-	      <property name="use_underline">True</property>
-
-	      <child>
-		<widget class="GtkMenu" id="menu1">
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="new1">
-		      <property name="visible">True</property>
-		      <property name="label">gtk-new</property>
-		      <property name="use_stock">True</property>
-		      <signal name="activate" handler="on_new1_activate" last_modification_time="Sat, 05 Aug 2006 08:27:01 GMT"/>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="open1">
-		      <property name="visible">True</property>
-		      <property name="label">gtk-open</property>
-		      <property name="use_stock">True</property>
-		      <signal name="activate" handler="on_open1_activate" last_modification_time="Sat, 05 Aug 2006 08:27:01 GMT"/>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="save1">
-		      <property name="visible">True</property>
-		      <property name="label">gtk-save</property>
-		      <property name="use_stock">True</property>
-		      <signal name="activate" handler="on_save1_activate" last_modification_time="Sat, 05 Aug 2006 08:27:01 GMT"/>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="save_as1">
-		      <property name="visible">True</property>
-		      <property name="label">gtk-save-as</property>
-		      <property name="use_stock">True</property>
-		      <signal name="activate" handler="on_save_as1_activate" last_modification_time="Sat, 05 Aug 2006 08:27:01 GMT"/>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkSeparatorMenuItem" id="separatormenuitem1">
-		      <property name="visible">True</property>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="quit1">
-		      <property name="visible">True</property>
-		      <property name="label">gtk-quit</property>
-		      <property name="use_stock">True</property>
-		      <signal name="activate" handler="on_quit1_activate" last_modification_time="Sat, 05 Aug 2006 08:27:01 GMT"/>
-		    </widget>
-		  </child>
-		</widget>
-	      </child>
-	    </widget>
-	  </child>
-
-	  <child>
-	    <widget class="GtkMenuItem" id="menuitem2">
-	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">_Edit</property>
-	      <property name="use_underline">True</property>
-
-	      <child>
-		<widget class="GtkMenu" id="menu2">
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="cut1">
-		      <property name="visible">True</property>
-		      <property name="label">gtk-cut</property>
-		      <property name="use_stock">True</property>
-		      <signal name="activate" handler="on_cut1_activate" last_modification_time="Sat, 05 Aug 2006 08:27:01 GMT"/>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="copy1">
-		      <property name="visible">True</property>
-		      <property name="label">gtk-copy</property>
-		      <property name="use_stock">True</property>
-		      <signal name="activate" handler="on_copy1_activate" last_modification_time="Sat, 05 Aug 2006 08:27:01 GMT"/>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="paste1">
-		      <property name="visible">True</property>
-		      <property name="label">gtk-paste</property>
-		      <property name="use_stock">True</property>
-		      <signal name="activate" handler="on_paste1_activate" last_modification_time="Sat, 05 Aug 2006 08:27:01 GMT"/>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="delete1">
-		      <property name="visible">True</property>
-		      <property name="label">gtk-delete</property>
-		      <property name="use_stock">True</property>
-		      <signal name="activate" handler="on_delete1_activate" last_modification_time="Sat, 05 Aug 2006 08:27:01 GMT"/>
-		    </widget>
-		  </child>
-		</widget>
-	      </child>
-	    </widget>
-	  </child>
-
-	  <child>
-	    <widget class="GtkMenuItem" id="menuitem3">
-	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">_View</property>
-	      <property name="use_underline">True</property>
-
-	      <child>
-		<widget class="GtkMenu" id="menu3">
-		</widget>
-	      </child>
-	    </widget>
-	  </child>
-
-	  <child>
-	    <widget class="GtkMenuItem" id="menuitem4">
-	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">_Help</property>
-	      <property name="use_underline">True</property>
-
-	      <child>
-		<widget class="GtkMenu" id="menu4">
-
-		  <child>
-		    <widget class="GtkMenuItem" id="about1">
-		      <property name="visible">True</property>
-		      <property name="label" translatable="yes">_About</property>
-		      <property name="use_underline">True</property>
-		      <signal name="activate" handler="on_about1_activate" last_modification_time="Sat, 05 Aug 2006 08:27:01 GMT"/>
-		    </widget>
-		  </child>
-		</widget>
-	      </child>
-	    </widget>
-	  </child>
-	</widget>
-	<packing>
-	  <property name="padding">0</property>
-	  <property name="expand">False</property>
-	  <property name="fill">False</property>
-	</packing>
-      </child>
-
-      <child>
-	<widget class="GtkDrawingArea" id="drawingarea1">
-	  <property name="visible">True</property>
-	</widget>
-	<packing>
-	  <property name="padding">0</property>
-	  <property name="expand">True</property>
-	  <property name="fill">True</property>
-	</packing>
-      </child>
-
-      <child>
-	<widget class="GtkStatusbar" id="statusbar1">
-	  <property name="visible">True</property>
-	  <property name="has_resize_grip">True</property>
-	</widget>
-	<packing>
-	  <property name="padding">0</property>
-	  <property name="expand">False</property>
-	  <property name="fill">False</property>
-	</packing>
-      </child>
-    </widget>
-  </child>
-</widget>
-
-<widget class="GtkAboutDialog" id="aboutdialog1">
-  <property name="destroy_with_parent">False</property>
-  <property name="name" translatable="yes">Application Name</property>
-  <property name="wrap_license">False</property>
-  <property name="translator_credits" translatable="yes" comments="TRANSLATORS: Replace this string with your names, one name per line.">translator-credits</property>
-</widget>
-
-<widget class="GtkFileChooserDialog" id="opendialog">
-  <property name="action">GTK_FILE_CHOOSER_ACTION_OPEN</property>
-  <property name="local_only">True</property>
-  <property name="select_multiple">False</property>
-  <property name="show_hidden">False</property>
-  <property name="do_overwrite_confirmation">False</property>
-  <property name="type">GTK_WINDOW_TOPLEVEL</property>
-  <property name="window_position">GTK_WIN_POS_NONE</property>
-  <property name="modal">False</property>
-  <property name="resizable">True</property>
-  <property name="destroy_with_parent">False</property>
-  <property name="decorated">True</property>
-  <property name="skip_taskbar_hint">False</property>
-  <property name="skip_pager_hint">False</property>
-  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
-  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
-  <property name="focus_on_map">True</property>
-  <property name="urgency_hint">False</property>
-
-  <child internal-child="vbox">
-    <widget class="GtkVBox" id="dialog-vbox1">
-      <property name="visible">True</property>
-      <property name="homogeneous">False</property>
-      <property name="spacing">24</property>
-
-      <child internal-child="action_area">
-	<widget class="GtkHButtonBox" id="dialog-action_area1">
-	  <property name="visible">True</property>
-	  <property name="layout_style">GTK_BUTTONBOX_END</property>
-
-	  <child>
-	    <widget class="GtkButton" id="button1">
-	      <property name="visible">True</property>
-	      <property name="can_default">True</property>
-	      <property name="can_focus">True</property>
-	      <property name="label">gtk-cancel</property>
-	      <property name="use_stock">True</property>
-	      <property name="relief">GTK_RELIEF_NORMAL</property>
-	      <property name="focus_on_click">True</property>
-	      <property name="response_id">-6</property>
-	    </widget>
-	  </child>
-
-	  <child>
-	    <widget class="GtkButton" id="opendialog-Open-button">
-	      <property name="visible">True</property>
-	      <property name="can_default">True</property>
-	      <property name="has_default">True</property>
-	      <property name="can_focus">True</property>
-	      <property name="label">gtk-open</property>
-	      <property name="use_stock">True</property>
-	      <property name="relief">GTK_RELIEF_NORMAL</property>
-	      <property name="focus_on_click">True</property>
-	      <property name="response_id">-5</property>
-	    </widget>
-	  </child>
-	</widget>
-	<packing>
-	  <property name="padding">0</property>
-	  <property name="expand">False</property>
-	  <property name="fill">True</property>
-	  <property name="pack_type">GTK_PACK_END</property>
-	</packing>
-      </child>
-    </widget>
-  </child>
-</widget>
-
-<widget class="GtkFileChooserDialog" id="savedialog">
-  <property name="action">GTK_FILE_CHOOSER_ACTION_SAVE</property>
-  <property name="local_only">True</property>
-  <property name="select_multiple">False</property>
-  <property name="show_hidden">False</property>
-  <property name="do_overwrite_confirmation">False</property>
-  <property name="type">GTK_WINDOW_TOPLEVEL</property>
-  <property name="window_position">GTK_WIN_POS_NONE</property>
-  <property name="modal">False</property>
-  <property name="resizable">True</property>
-  <property name="destroy_with_parent">False</property>
-  <property name="decorated">True</property>
-  <property name="skip_taskbar_hint">False</property>
-  <property name="skip_pager_hint">False</property>
-  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
-  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
-  <property name="focus_on_map">True</property>
-  <property name="urgency_hint">False</property>
-
-  <child internal-child="vbox">
-    <widget class="GtkVBox" id="dialog-vbox2">
-      <property name="visible">True</property>
-      <property name="homogeneous">False</property>
-      <property name="spacing">24</property>
-
-      <child internal-child="action_area">
-	<widget class="GtkHButtonBox" id="dialog-action_area2">
-	  <property name="visible">True</property>
-	  <property name="layout_style">GTK_BUTTONBOX_END</property>
-
-	  <child>
-	    <widget class="GtkButton" id="button2">
-	      <property name="visible">True</property>
-	      <property name="can_default">True</property>
-	      <property name="can_focus">True</property>
-	      <property name="label">gtk-cancel</property>
-	      <property name="use_stock">True</property>
-	      <property name="relief">GTK_RELIEF_NORMAL</property>
-	      <property name="focus_on_click">True</property>
-	      <property name="response_id">-6</property>
-	    </widget>
-	  </child>
-
-	  <child>
-	    <widget class="GtkButton" id="button3">
-	      <property name="visible">True</property>
-	      <property name="can_default">True</property>
-	      <property name="has_default">True</property>
-	      <property name="can_focus">True</property>
-	      <property name="label">gtk-save</property>
-	      <property name="use_stock">True</property>
-	      <property name="relief">GTK_RELIEF_NORMAL</property>
-	      <property name="focus_on_click">True</property>
-	      <property name="response_id">-5</property>
-	    </widget>
-	  </child>
-	</widget>
-	<packing>
-	  <property name="padding">0</property>
-	  <property name="expand">False</property>
-	  <property name="fill">True</property>
-	  <property name="pack_type">GTK_PACK_END</property>
-	</packing>
-      </child>
-    </widget>
-  </child>
-</widget>
-
-</glade-interface>
diff --git a/data/main.ui b/data/main.ui
new file mode 100644
--- /dev/null
+++ b/data/main.ui
@@ -0,0 +1,318 @@
+<?xml version="1.0"?>
+<!--*- mode: xml -*-->
+<interface>
+  <object class="GtkUIManager" id="uimanager1">
+    <child>
+      <object class="GtkActionGroup" id="actiongroup1">
+        <child>
+          <object class="GtkAction" id="menuitem1">
+            <property name="name">menuitem1</property>
+            <property name="label" translatable="yes">_File</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkAction" id="new1">
+            <property name="stock_id">gtk-new</property>
+            <property name="name">new1</property>
+            <signal handler="on_new1_activate" last_modification_time="Sat, 05 Aug 2006 08:27:01 GMT" name="activate"/>
+          </object>
+        </child>
+        <child>
+          <object class="GtkAction" id="open1">
+            <property name="stock_id">gtk-open</property>
+            <property name="name">open1</property>
+            <signal handler="on_open1_activate" last_modification_time="Sat, 05 Aug 2006 08:27:01 GMT" name="activate"/>
+          </object>
+        </child>
+        <child>
+          <object class="GtkAction" id="save1">
+            <property name="stock_id">gtk-save</property>
+            <property name="name">save1</property>
+            <signal handler="on_save1_activate" last_modification_time="Sat, 05 Aug 2006 08:27:01 GMT" name="activate"/>
+          </object>
+        </child>
+        <child>
+          <object class="GtkAction" id="save_as1">
+            <property name="stock_id">gtk-save-as</property>
+            <property name="name">save_as1</property>
+            <signal handler="on_save_as1_activate" last_modification_time="Sat, 05 Aug 2006 08:27:01 GMT" name="activate"/>
+          </object>
+        </child>
+        <child>
+          <object class="GtkAction" id="quit1">
+            <property name="stock_id">gtk-quit</property>
+            <property name="name">quit1</property>
+            <signal handler="on_quit1_activate" last_modification_time="Sat, 05 Aug 2006 08:27:01 GMT" name="activate"/>
+          </object>
+        </child>
+        <child>
+          <object class="GtkAction" id="menuitem2">
+            <property name="name">menuitem2</property>
+            <property name="label" translatable="yes">_Edit</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkAction" id="cut1">
+            <property name="stock_id">gtk-cut</property>
+            <property name="name">cut1</property>
+            <signal handler="on_cut1_activate" last_modification_time="Sat, 05 Aug 2006 08:27:01 GMT" name="activate"/>
+          </object>
+        </child>
+        <child>
+          <object class="GtkAction" id="copy1">
+            <property name="stock_id">gtk-copy</property>
+            <property name="name">copy1</property>
+            <signal handler="on_copy1_activate" last_modification_time="Sat, 05 Aug 2006 08:27:01 GMT" name="activate"/>
+          </object>
+        </child>
+        <child>
+          <object class="GtkAction" id="paste1">
+            <property name="stock_id">gtk-paste</property>
+            <property name="name">paste1</property>
+            <signal handler="on_paste1_activate" last_modification_time="Sat, 05 Aug 2006 08:27:01 GMT" name="activate"/>
+          </object>
+        </child>
+        <child>
+          <object class="GtkAction" id="delete1">
+            <property name="stock_id">gtk-delete</property>
+            <property name="name">delete1</property>
+            <signal handler="on_delete1_activate" last_modification_time="Sat, 05 Aug 2006 08:27:01 GMT" name="activate"/>
+          </object>
+        </child>
+        <child>
+          <object class="GtkAction" id="menuitem3">
+            <property name="name">menuitem3</property>
+            <property name="label" translatable="yes">_View</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkAction" id="menuitem4">
+            <property name="name">menuitem4</property>
+            <property name="label" translatable="yes">_Help</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkAction" id="about1">
+            <property name="name">about1</property>
+            <property name="label" translatable="yes">_About</property>
+            <signal handler="on_about1_activate" last_modification_time="Sat, 05 Aug 2006 08:27:01 GMT" name="activate"/>
+          </object>
+        </child>
+      </object>
+    </child>
+    <ui>
+      <menubar name="menubar1">
+        <menu action="menuitem1">
+          <menuitem action="new1"/>
+          <menuitem action="open1"/>
+          <menuitem action="save1"/>
+          <menuitem action="save_as1"/>
+          <separator/>
+          <menuitem action="quit1"/>
+        </menu>
+        <menu action="menuitem2">
+          <menuitem action="cut1"/>
+          <menuitem action="copy1"/>
+          <menuitem action="paste1"/>
+          <menuitem action="delete1"/>
+        </menu>
+        <menu action="menuitem3"/>
+        <menu action="menuitem4">
+          <menuitem action="about1"/>
+        </menu>
+      </menubar>
+    </ui>
+  </object>
+  <object class="GtkWindow" id="window1">
+    <property name="visible">True</property>
+    <property name="title" translatable="yes">window1</property>
+    <property name="type">GTK_WINDOW_TOPLEVEL</property>
+    <property name="window_position">GTK_WIN_POS_NONE</property>
+    <property name="modal">False</property>
+    <property name="resizable">True</property>
+    <property name="destroy_with_parent">False</property>
+    <property name="decorated">True</property>
+    <property name="skip_taskbar_hint">False</property>
+    <property name="skip_pager_hint">False</property>
+    <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+    <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+    <property name="focus_on_map">True</property>
+    <property name="urgency_hint">False</property>
+    <child>
+      <object class="GtkVBox" id="vbox1">
+        <property name="visible">True</property>
+        <property name="homogeneous">False</property>
+        <property name="spacing">0</property>
+        <child>
+          <object class="GtkMenuBar" constructor="uimanager1" id="menubar1">
+            <property name="visible">True</property>
+            <property name="pack_direction">GTK_PACK_DIRECTION_LTR</property>
+            <property name="child_pack_direction">GTK_PACK_DIRECTION_LTR</property>
+          </object>
+          <packing>
+            <property name="padding">0</property>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkDrawingArea" id="drawingarea1">
+            <property name="visible">True</property>
+          </object>
+          <packing>
+            <property name="padding">0</property>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkStatusbar" id="statusbar1">
+            <property name="visible">True</property>
+            <property name="has_resize_grip">True</property>
+          </object>
+          <packing>
+            <property name="padding">0</property>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+  <object class="GtkAboutDialog" id="aboutdialog1">
+    <property name="destroy_with_parent">False</property>
+    <property name="name" translatable="yes">Application Name</property>
+    <property name="wrap_license">False</property>
+    <property comments="TRANSLATORS: Replace this string with your names, one name per line." name="translator_credits" translatable="yes">translator-credits</property>
+  </object>
+  <object class="GtkFileChooserDialog" id="opendialog">
+    <property name="action">GTK_FILE_CHOOSER_ACTION_OPEN</property>
+    <property name="local_only">True</property>
+    <property name="select_multiple">False</property>
+    <property name="show_hidden">False</property>
+    <property name="do_overwrite_confirmation">False</property>
+    <property name="type">GTK_WINDOW_TOPLEVEL</property>
+    <property name="window_position">GTK_WIN_POS_NONE</property>
+    <property name="modal">False</property>
+    <property name="resizable">True</property>
+    <property name="destroy_with_parent">False</property>
+    <property name="decorated">True</property>
+    <property name="skip_taskbar_hint">False</property>
+    <property name="skip_pager_hint">False</property>
+    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+    <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+    <property name="focus_on_map">True</property>
+    <property name="urgency_hint">False</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox1">
+        <property name="visible">True</property>
+        <property name="homogeneous">False</property>
+        <property name="spacing">24</property>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="layout_style">GTK_BUTTONBOX_END</property>
+            <child>
+              <object class="GtkButton" id="button1">
+                <property name="visible">True</property>
+                <property name="can_default">True</property>
+                <property name="can_focus">True</property>
+                <property name="label">gtk-cancel</property>
+                <property name="use_stock">True</property>
+                <property name="relief">GTK_RELIEF_NORMAL</property>
+                <property name="focus_on_click">True</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkButton" id="opendialog-Open-button">
+                <property name="visible">True</property>
+                <property name="can_default">True</property>
+                <property name="has_default">True</property>
+                <property name="can_focus">True</property>
+                <property name="label">gtk-open</property>
+                <property name="use_stock">True</property>
+                <property name="relief">GTK_RELIEF_NORMAL</property>
+                <property name="focus_on_click">True</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="padding">0</property>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">GTK_PACK_END</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="-6">button1</action-widget>
+      <action-widget response="-5">opendialog-Open-button</action-widget>
+    </action-widgets>
+  </object>
+  <object class="GtkFileChooserDialog" id="savedialog">
+    <property name="action">GTK_FILE_CHOOSER_ACTION_SAVE</property>
+    <property name="local_only">True</property>
+    <property name="select_multiple">False</property>
+    <property name="show_hidden">False</property>
+    <property name="do_overwrite_confirmation">False</property>
+    <property name="type">GTK_WINDOW_TOPLEVEL</property>
+    <property name="window_position">GTK_WIN_POS_NONE</property>
+    <property name="modal">False</property>
+    <property name="resizable">True</property>
+    <property name="destroy_with_parent">False</property>
+    <property name="decorated">True</property>
+    <property name="skip_taskbar_hint">False</property>
+    <property name="skip_pager_hint">False</property>
+    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+    <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+    <property name="focus_on_map">True</property>
+    <property name="urgency_hint">False</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox2">
+        <property name="visible">True</property>
+        <property name="homogeneous">False</property>
+        <property name="spacing">24</property>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area2">
+            <property name="visible">True</property>
+            <property name="layout_style">GTK_BUTTONBOX_END</property>
+            <child>
+              <object class="GtkButton" id="button2">
+                <property name="visible">True</property>
+                <property name="can_default">True</property>
+                <property name="can_focus">True</property>
+                <property name="label">gtk-cancel</property>
+                <property name="use_stock">True</property>
+                <property name="relief">GTK_RELIEF_NORMAL</property>
+                <property name="focus_on_click">True</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkButton" id="button3">
+                <property name="visible">True</property>
+                <property name="can_default">True</property>
+                <property name="has_default">True</property>
+                <property name="can_focus">True</property>
+                <property name="label">gtk-save</property>
+                <property name="use_stock">True</property>
+                <property name="relief">GTK_RELIEF_NORMAL</property>
+                <property name="focus_on_click">True</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="padding">0</property>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">GTK_PACK_END</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="-6">button2</action-widget>
+      <action-widget response="-5">button3</action-widget>
+    </action-widgets>
+  </object>
+</interface>
diff --git a/src/cairo-appbase.hs b/src/cairo-appbase.hs
--- a/src/cairo-appbase.hs
+++ b/src/cairo-appbase.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE RankNTypes #-}
 {-# OPTIONS -Wall #-}
 --
 -- Based on Gtk2Hs/demo/cairo/Drawing2.hs 
@@ -7,9 +8,7 @@
 --
 
 import Control.Monad (replicateM_)
-import qualified System.Glib.Types as GTypes
 import qualified Graphics.UI.Gtk as G
-import qualified Graphics.UI.Gtk.Glade as Glade
 import qualified Graphics.Rendering.Cairo as C
 import qualified Graphics.Rendering.Cairo.Matrix as M
 
@@ -33,50 +32,56 @@
 main = do
   _ <- G.initGUI
 
-  -- load up the glade file
-  filename <- My.getDataFileName "data/main.glade"
-  windowXmlM <- Glade.xmlNew filename
+  -- load up the gtk-builder file
+  filename <- My.getDataFileName "data/main.ui"
+  builder <- G.builderNew
+  G.builderAddFromFile builder filename
+{-
   let windowXml = case windowXmlM of
         (Just wX) -> wX
         Nothing -> error ("can't find the glade file " ++ filename)
-      get :: (G.WidgetClass widget) => (GTypes.GObject -> widget) -> String -> IO widget
-      get = Glade.xmlGetWidget windowXml
+-}
+  let get :: forall cls . G.GObjectClass cls
+          => (G.GObject -> cls)
+          -> String
+          -> IO cls
+      get = G.builderGetObject builder
 
   -- get a handle on widgets from the glade file
   window <- get G.castToWindow "window1"
 
   -- set up File->New
-  new1 <- get G.castToMenuItem "new1"
-  _ <- G.onActivateLeaf new1 $ myNew
+  new1 <- get G.castToAction "new1"
+  _ <- G.onActionActivate new1 $ myNew
 
   -- set up the File->Open dialog
-  open1 <- get G.castToMenuItem "open1"
+  open1 <- get G.castToAction "open1"
   openDialog <- get G.castToFileChooserDialog "opendialog"
-  _ <- G.onActivateLeaf open1 $ G.widgetShow openDialog
+  _ <- G.onActionActivate open1 $ G.widgetShow openDialog
   _ <- G.onResponse openDialog $ myFileOpen openDialog
 
   -- set up the File->Save_As dialog
-  save1 <- get G.castToMenuItem "save1"
-  save_as1 <- get G.castToMenuItem "save_as1"
+  save1 <- get G.castToAction "save1"
+  save_as1 <- get G.castToAction "save_as1"
   saveDialog <- get G.castToFileChooserDialog "savedialog"
-  _ <- G.onActivateLeaf save_as1 $ G.widgetShow saveDialog
-  _ <- G.onActivateLeaf save1 $ G.widgetShow saveDialog
+  _ <- G.onActionActivate save_as1 $ G.widgetShow saveDialog
+  _ <- G.onActionActivate save1 $ G.widgetShow saveDialog
   _ <- G.onResponse saveDialog $ myFileSave saveDialog
 
   -- set up Edit menu
-  cut1 <- get G.castToMenuItem "cut1"
-  _ <- G.onActivateLeaf cut1 $ myCut
-  copy1 <- get G.castToMenuItem "copy1"
-  _ <- G.onActivateLeaf copy1 $ myCopy
-  paste1 <- get G.castToMenuItem "paste1"
-  _ <- G.onActivateLeaf paste1 $ myPaste
-  delete1 <- get G.castToMenuItem "delete1"
-  _ <- G.onActivateLeaf delete1 $ myDelete
+  cut1 <- get G.castToAction "cut1"
+  _ <- G.onActionActivate cut1 $ myCut
+  copy1 <- get G.castToAction "copy1"
+  _ <- G.onActionActivate copy1 $ myCopy
+  paste1 <- get G.castToAction "paste1"
+  _ <- G.onActionActivate paste1 $ myPaste
+  delete1 <- get G.castToAction "delete1"
+  _ <- G.onActionActivate delete1 $ myDelete
 
   -- set up the Help->About dialog
-  about1 <- get G.castToMenuItem "about1"
+  about1 <- get G.castToAction "about1"
   aboutdialog1 <- get G.castToAboutDialog "aboutdialog1"
-  _ <- G.onActivateLeaf about1 $ G.widgetShow aboutdialog1
+  _ <- G.onActionActivate about1 $ G.widgetShow aboutdialog1
   _ <- G.onResponse aboutdialog1 $ const $ G.widgetHide aboutdialog1
 
   -- fix size
@@ -84,8 +89,8 @@
   G.widgetSetSizeRequest window windowWidth windowHeight
 
   -- quit on File->Quit menu selection
-  quit1 <- get G.castToMenuItem "quit1"
-  _ <- G.onActivateLeaf quit1 $ G.widgetDestroy window
+  quit1 <- get G.castToAction "quit1"
+  _ <- G.onActionActivate quit1 $ G.widgetDestroy window
   _ <- G.onDestroy window G.mainQuit
 
   -- set up the canvas
