[network-manager-applet] core: fix GtkBuilder-related performance issues



commit 0f4fedc5c1fff35724ea2275fe565c21575ee6e1
Author: Dan Williams <dcbw redhat com>
Date:   Sun Dec 5 11:07:33 2010 -0600

    core: fix GtkBuilder-related performance issues
    
    GtkBuilder isn't as quick as libglade when building the widget
    tree from the XML file, so the previous handling of wireless
    security and EAP methods caused connection editor display times
    of 4 seconds or more on slower machines (like 1.7GHz Pentium M).
    
    Previously, all security and EAP UI was stored in one glade/builder
    file which was re-read from multiple places.  With glade that was
    fine, but GtkBuilder's gtk_builder_add_from_file() takes quite a
    bit longer than glade did.
    
    So split each piece security and EAP UI description out into a
    separate file, and consolidated handling of UI building into the
    EAPMethod and WirelessSecurity classes instead of doing it in
    the subclasses.

 po/POTFILES.in                                 |   11 +
 src/applet.c                                   |    2 +-
 src/applet.ui                                  | 1510 ------------------------
 src/connection-editor/ce-page.c                |   42 +-
 src/connection-editor/ce-page.h                |   11 +-
 src/connection-editor/nm-connection-editor.c   |   27 +-
 src/connection-editor/nm-connection-editor.h   |    1 +
 src/connection-editor/nm-connection-list.c     |    2 +-
 src/connection-editor/page-dsl.c               |   33 +-
 src/connection-editor/page-ip4.c               |   31 +-
 src/connection-editor/page-ip6.c               |   31 +-
 src/connection-editor/page-mobile.c            |   31 +-
 src/connection-editor/page-ppp.c               |   33 +-
 src/connection-editor/page-vpn.c               |   21 +-
 src/connection-editor/page-wired-security.c    |   23 +-
 src/connection-editor/page-wired.c             |   32 +-
 src/connection-editor/page-wireless-security.c |   47 +-
 src/connection-editor/page-wireless.c          |   31 +-
 src/wired-dialog.c                             |   27 +-
 src/wireless-dialog.c                          |   19 +-
 src/wireless-security/Makefile.am              |   18 +
 src/wireless-security/eap-method-leap.c        |   77 +-
 src/wireless-security/eap-method-leap.h        |   12 +-
 src/wireless-security/eap-method-leap.ui       |  107 ++
 src/wireless-security/eap-method-peap.c        |   96 +-
 src/wireless-security/eap-method-peap.h        |   17 +-
 src/wireless-security/eap-method-peap.ui       |  196 +++
 src/wireless-security/eap-method-simple.c      |   77 +-
 src/wireless-security/eap-method-simple.h      |   18 +-
 src/wireless-security/eap-method-simple.ui     |  135 +++
 src/wireless-security/eap-method-tls.c         |   92 +-
 src/wireless-security/eap-method-tls.h         |   15 +-
 src/wireless-security/eap-method-tls.ui        |  191 +++
 src/wireless-security/eap-method-ttls.c        |   90 +-
 src/wireless-security/eap-method-ttls.h        |   17 +-
 src/wireless-security/eap-method-ttls.ui       |  146 +++
 src/wireless-security/eap-method.c             |   88 +-
 src/wireless-security/eap-method.h             |   25 +-
 src/wireless-security/nag-user-dialog.ui       |  192 +++
 src/wireless-security/wireless-security.c      |   66 +-
 src/wireless-security/wireless-security.h      |   22 +-
 src/wireless-security/ws-dynamic-wep.c         |   64 +-
 src/wireless-security/ws-dynamic-wep.h         |   13 +-
 src/wireless-security/ws-dynamic-wep.ui        |   95 ++
 src/wireless-security/ws-leap.c                |   65 +-
 src/wireless-security/ws-leap.h                |   10 +-
 src/wireless-security/ws-leap.ui               |  108 ++
 src/wireless-security/ws-wep-key.c             |   70 +-
 src/wireless-security/ws-wep-key.h             |   19 +-
 src/wireless-security/ws-wep-key.ui            |  192 +++
 src/wireless-security/ws-wpa-eap.c             |   65 +-
 src/wireless-security/ws-wpa-eap.h             |   11 +-
 src/wireless-security/ws-wpa-eap.ui            |   88 ++
 src/wireless-security/ws-wpa-psk.c             |   66 +-
 src/wireless-security/ws-wpa-psk.h             |   10 +-
 src/wireless-security/ws-wpa-psk.ui            |  117 ++
 56 files changed, 2239 insertions(+), 2416 deletions(-)
---
diff --git a/po/POTFILES.in b/po/POTFILES.in
index a9c24f2..bb91a9b 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -51,8 +51,19 @@ src/vpn-password-dialog.h
 src/wired-dialog.c
 src/wireless-dialog.c
 src/wireless-security/eap-method.c
+[type: gettext/glade]src/wireless-security/eap-method-leap.ui
 src/wireless-security/eap-method-peap.c
+[type: gettext/glade]src/wireless-security/eap-method-peap.ui
+[type: gettext/glade]src/wireless-security/eap-method-simple.ui
 src/wireless-security/eap-method-tls.c
+[type: gettext/glade]src/wireless-security/eap-method-tls.ui
 src/wireless-security/eap-method-ttls.c
+[type: gettext/glade]src/wireless-security/eap-method-ttls.ui
+[type: gettext/glade]src/wireless-security/nag-user-dialog.ui
 src/wireless-security/wireless-security.c
+[type: gettext/glade]src/wireless-security/ws-dynamic-wep.ui
+[type: gettext/glade]src/wireless-security/ws-leap.ui
+[type: gettext/glade]src/wireless-security/ws-wep-key.ui
+[type: gettext/glade]src/wireless-security/ws-wpa-eap.ui
+[type: gettext/glade]src/wireless-security/ws-wpa-psk.ui
 
diff --git a/src/applet.c b/src/applet.c
index 4e0ae77..7f52f1d 100644
--- a/src/applet.c
+++ b/src/applet.c
@@ -3011,7 +3011,7 @@ constructor (GType type,
 	g_set_application_name (_("NetworkManager Applet"));
 	gtk_window_set_default_icon_name (GTK_STOCK_NETWORK);
 
-	applet->ui_file = g_build_filename (UIDIR, "applet.ui", NULL);
+	applet->ui_file = g_build_filename (UIDIR, "/applet.ui", NULL);
 	if (!applet->ui_file || !g_file_test (applet->ui_file, G_FILE_TEST_IS_REGULAR)) {
 		GtkWidget *dialog;
 		dialog = applet_warning_dialog_show (_("The NetworkManager Applet could not find some required resources (the .ui file was not found)."));
diff --git a/src/applet.ui b/src/applet.ui
index 09d8241..c39a0e4 100644
--- a/src/applet.ui
+++ b/src/applet.ui
@@ -20,94 +20,6 @@
       </row>
     </data>
   </object>
-  <object class="GtkListStore" id="model3">
-    <columns>
-      <column type="gchararray"/>
-    </columns>
-    <data>
-      <row>
-        <col id="0" translatable="yes">Open System</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes">Shared Key</col>
-      </row>
-    </data>
-  </object>
-  <object class="GtkListStore" id="model4">
-    <columns>
-      <column type="gchararray"/>
-    </columns>
-    <data>
-      <row>
-        <col id="0" translatable="yes">1 (Default)</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes">2</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes">3</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes">4</col>
-      </row>
-    </data>
-  </object>
-  <object class="GtkListStore" id="model5">
-    <columns>
-      <column type="gchararray"/>
-    </columns>
-    <data>
-      <row>
-        <col id="0" translatable="yes"> </col>
-      </row>
-    </data>
-  </object>
-  <object class="GtkListStore" id="model6">
-    <columns>
-      <column type="gchararray"/>
-    </columns>
-    <data>
-      <row>
-        <col id="0" translatable="yes"> </col>
-      </row>
-    </data>
-  </object>
-  <object class="GtkListStore" id="model7">
-    <columns>
-      <column type="gchararray"/>
-    </columns>
-    <data>
-      <row>
-        <col id="0" translatable="yes"> </col>
-      </row>
-    </data>
-  </object>
-  <object class="GtkListStore" id="model8">
-    <columns>
-      <column type="gchararray"/>
-    </columns>
-    <data>
-      <row>
-        <col id="0" translatable="yes"> </col>
-      </row>
-    </data>
-  </object>
-  <object class="GtkListStore" id="model9">
-    <columns>
-      <column type="gchararray"/>
-    </columns>
-    <data>
-      <row>
-        <col id="0" translatable="yes">Automatic</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes">Version 0</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes">Version 1</col>
-      </row>
-    </data>
-  </object>
   <!-- interface-requires gtk+ 2.6 -->
   <!-- interface-naming-policy toplevel-contextual -->
   <object class="GtkDialog" id="wireless_dialog">
@@ -527,1428 +439,6 @@
       <action-widget response="-7">closebutton1</action-widget>
     </action-widgets>
   </object>
-  <object class="GtkWindow" id="wep_key_widget">
-    <property name="visible">False</property>
-    <property name="title">wep_key_widget</property>
-    <child>
-      <object class="GtkNotebook" id="wep_key_notebook">
-        <property name="visible">True</property>
-        <property name="show_tabs">False</property>
-        <property name="show_border">False</property>
-        <child>
-          <object class="GtkTable" id="table6">
-            <property name="visible">True</property>
-            <property name="n_rows">4</property>
-            <property name="n_columns">2</property>
-            <property name="column_spacing">12</property>
-            <property name="row_spacing">6</property>
-            <child>
-              <object class="GtkLabel" id="wep_key_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">_Key:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">wep_key_entry</property>
-              </object>
-              <packing>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="wep_key_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="visibility">False</property>
-                <property name="activates_default">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label31">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-              </object>
-              <packing>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkCheckButton" id="show_checkbutton_wep">
-                <property name="label" translatable="yes">Sho_w key</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_underline">True</property>
-                <property name="draw_indicator">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="auth_method_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">_Authentication:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">auth_method_combo</property>
-              </object>
-              <packing>
-                <property name="top_attach">3</property>
-                <property name="bottom_attach">4</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkComboBox" id="auth_method_combo">
-                <property name="visible">True</property>
-                <property name="model">model3</property>
-                <child>
-                  <object class="GtkCellRendererText" id="renderer3"/>
-                  <attributes>
-                    <attribute name="text">0</attribute>
-                  </attributes>
-                </child>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">3</property>
-                <property name="bottom_attach">4</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options">GTK_FILL</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="key_index_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">WEP inde_x:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">key_index_combo</property>
-              </object>
-              <packing>
-                <property name="top_attach">2</property>
-                <property name="bottom_attach">3</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkComboBox" id="key_index_combo">
-                <property name="visible">True</property>
-                <property name="model">model4</property>
-                <child>
-                  <object class="GtkCellRendererText" id="renderer4"/>
-                  <attributes>
-                    <attribute name="text">0</attribute>
-                  </attributes>
-                </child>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">2</property>
-                <property name="bottom_attach">3</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options">GTK_FILL</property>
-              </packing>
-            </child>
-          </object>
-        </child>
-        <child type="tab">
-          <object class="GtkLabel" id="label23">
-            <property name="visible">True</property>
-          </object>
-          <packing>
-            <property name="tab_fill">False</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-  </object>
-  <object class="GtkWindow" id="leap_widget">
-    <property name="visible">False</property>
-    <property name="title">leap_widget</property>
-    <child>
-      <object class="GtkNotebook" id="leap_notebook">
-        <property name="visible">True</property>
-        <property name="show_tabs">False</property>
-        <property name="show_border">False</property>
-        <child>
-          <object class="GtkTable" id="table5">
-            <property name="visible">True</property>
-            <property name="n_rows">3</property>
-            <property name="n_columns">2</property>
-            <property name="column_spacing">12</property>
-            <property name="row_spacing">6</property>
-            <child>
-              <object class="GtkLabel" id="leap_username_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">_Username:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">leap_username_entry</property>
-              </object>
-              <packing>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="leap_password_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">_Password:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">leap_password_entry</property>
-              </object>
-              <packing>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="leap_password_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="visibility">False</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkCheckButton" id="show_checkbutton_leap">
-                <property name="label" translatable="yes">Sho_w password</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_underline">True</property>
-                <property name="draw_indicator">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">2</property>
-                <property name="bottom_attach">3</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="leap_username_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-          </object>
-        </child>
-        <child type="tab">
-          <object class="GtkLabel" id="GtkLabel1">
-            <property name="visible">True</property>
-          </object>
-          <packing>
-            <property name="tab_fill">False</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-  </object>
-  <object class="GtkWindow" id="wpa_psk_widget">
-    <property name="visible">False</property>
-    <property name="title">wpa_psk_widget</property>
-    <child>
-      <object class="GtkNotebook" id="wpa_psk_notebook">
-        <property name="visible">True</property>
-        <property name="show_tabs">False</property>
-        <property name="show_border">False</property>
-        <child>
-          <object class="GtkTable" id="wpa_psk_table">
-            <property name="visible">True</property>
-            <property name="n_rows">3</property>
-            <property name="n_columns">2</property>
-            <property name="column_spacing">12</property>
-            <property name="row_spacing">6</property>
-            <child>
-              <object class="GtkLabel" id="wpa_psk_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">_Password:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">wpa_psk_entry</property>
-              </object>
-              <packing>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="wpa_psk_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="max_length">64</property>
-                <property name="visibility">False</property>
-                <property name="activates_default">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="wpa_psk_type_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">_Type:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">wpa_psk_type_combo</property>
-              </object>
-              <packing>
-                <property name="top_attach">2</property>
-                <property name="bottom_attach">3</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label32">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-              </object>
-              <packing>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkCheckButton" id="show_checkbutton_wpa">
-                <property name="label" translatable="yes">Sho_w password</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_underline">True</property>
-                <property name="draw_indicator">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkComboBox" id="wpa_psk_type_combo">
-                <property name="visible">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">2</property>
-                <property name="bottom_attach">3</property>
-                <property name="y_options">GTK_FILL</property>
-              </packing>
-            </child>
-          </object>
-        </child>
-        <child type="tab">
-          <object class="GtkLabel" id="GtkLabel2">
-            <property name="visible">True</property>
-          </object>
-          <packing>
-            <property name="tab_fill">False</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-  </object>
-  <object class="GtkWindow" id="wpa_eap_widget">
-    <property name="visible">False</property>
-    <property name="title">wpa_eap_widget</property>
-    <child>
-      <object class="GtkNotebook" id="wpa_eap_notebook">
-        <property name="visible">True</property>
-        <property name="show_tabs">False</property>
-        <property name="show_border">False</property>
-        <child>
-          <object class="GtkTable" id="wpa_eap_table">
-            <property name="visible">True</property>
-            <property name="n_rows">2</property>
-            <property name="n_columns">2</property>
-            <property name="column_spacing">12</property>
-            <property name="row_spacing">6</property>
-            <child>
-              <object class="GtkLabel" id="wpa_eap_auth_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">_Authentication:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">wpa_eap_auth_combo</property>
-              </object>
-              <packing>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkComboBox" id="wpa_eap_auth_combo">
-                <property name="visible">True</property>
-                <property name="model">model5</property>
-                <child>
-                  <object class="GtkCellRendererText" id="renderer5"/>
-                  <attributes>
-                    <attribute name="text">0</attribute>
-                  </attributes>
-                </child>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="y_options">GTK_FILL</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkVBox" id="wpa_eap_method_vbox">
-                <property name="visible">True</property>
-                <property name="orientation">vertical</property>
-                <child>
-                  <placeholder/>
-                </child>
-              </object>
-              <packing>
-                <property name="right_attach">2</property>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-                <property name="x_options">GTK_FILL</property>
-              </packing>
-            </child>
-          </object>
-        </child>
-        <child type="tab">
-          <object class="GtkLabel" id="GtkLabel3">
-            <property name="visible">True</property>
-          </object>
-          <packing>
-            <property name="tab_fill">False</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-  </object>
-  <object class="GtkWindow" id="eap_tls_widget">
-    <property name="visible">False</property>
-    <property name="title">eap_tls_widget</property>
-    <child>
-      <object class="GtkNotebook" id="eap_tls_notebook">
-        <property name="visible">True</property>
-        <property name="show_tabs">False</property>
-        <property name="show_border">False</property>
-        <child>
-          <object class="GtkTable" id="table8">
-            <property name="visible">True</property>
-            <property name="n_rows">6</property>
-            <property name="n_columns">2</property>
-            <property name="column_spacing">12</property>
-            <property name="row_spacing">6</property>
-            <child>
-              <object class="GtkLabel" id="eap_tls_identity_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">I_dentity:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">eap_tls_identity_entry</property>
-              </object>
-              <packing>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="eap_tls_identity_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="eap_tls_user_cert_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">_User certificate:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">eap_tls_user_cert_button</property>
-              </object>
-              <packing>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="eap_tls_ca_cert_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">C_A certificate:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">eap_tls_ca_cert_button</property>
-              </object>
-              <packing>
-                <property name="top_attach">2</property>
-                <property name="bottom_attach">3</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkFileChooserButton" id="eap_tls_ca_cert_button">
-                <property name="visible">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">2</property>
-                <property name="bottom_attach">3</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options">GTK_FILL</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="eap_tls_private_key_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">Private _key:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">eap_tls_private_key_button</property>
-              </object>
-              <packing>
-                <property name="top_attach">3</property>
-                <property name="bottom_attach">4</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkFileChooserButton" id="eap_tls_private_key_button">
-                <property name="visible">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">3</property>
-                <property name="bottom_attach">4</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options">GTK_FILL</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="eap_tls_private_key_password_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">_Private key password:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">eap_tls_private_key_password_entry</property>
-              </object>
-              <packing>
-                <property name="top_attach">4</property>
-                <property name="bottom_attach">5</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="eap_tls_private_key_password_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="visibility">False</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">4</property>
-                <property name="bottom_attach">5</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkCheckButton" id="show_checkbutton_eaptls">
-                <property name="label" translatable="yes">Sho_w password</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_underline">True</property>
-                <property name="draw_indicator">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">5</property>
-                <property name="bottom_attach">6</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkFileChooserButton" id="eap_tls_user_cert_button">
-                <property name="visible">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options">GTK_FILL</property>
-              </packing>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-          </object>
-        </child>
-        <child type="tab">
-          <object class="GtkLabel" id="label34">
-            <property name="visible">True</property>
-          </object>
-          <packing>
-            <property name="tab_fill">False</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-  </object>
-  <object class="GtkWindow" id="eap_leap_widget">
-    <property name="visible">False</property>
-    <property name="title">eap_leap_widget</property>
-    <child>
-      <object class="GtkNotebook" id="eap_leap_notebook">
-        <property name="visible">True</property>
-        <property name="show_tabs">False</property>
-        <property name="show_border">False</property>
-        <child>
-          <object class="GtkTable" id="table9">
-            <property name="visible">True</property>
-            <property name="n_rows">3</property>
-            <property name="n_columns">2</property>
-            <property name="column_spacing">12</property>
-            <property name="row_spacing">6</property>
-            <child>
-              <object class="GtkLabel" id="eap_leap_username_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">_Username:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">eap_leap_username_entry</property>
-              </object>
-              <packing>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="eap_leap_password_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">_Password:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">eap_leap_password_entry</property>
-              </object>
-              <packing>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="eap_leap_password_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="visibility">False</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkCheckButton" id="show_checkbutton_eapleap">
-                <property name="label" translatable="yes">Sho_w password</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_underline">True</property>
-                <property name="draw_indicator">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">2</property>
-                <property name="bottom_attach">3</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="eap_leap_username_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-          </object>
-        </child>
-        <child type="tab">
-          <object class="GtkLabel" id="label43">
-            <property name="visible">True</property>
-          </object>
-          <packing>
-            <property name="tab_fill">False</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-  </object>
-  <object class="GtkWindow" id="eap_ttls_widget">
-    <property name="visible">False</property>
-    <property name="title">eap_ttls_widget</property>
-    <child>
-      <object class="GtkNotebook" id="eap_ttls_notebook">
-        <property name="visible">True</property>
-        <property name="show_tabs">False</property>
-        <property name="show_border">False</property>
-        <child>
-          <object class="GtkTable" id="table10">
-            <property name="visible">True</property>
-            <property name="n_rows">4</property>
-            <property name="n_columns">2</property>
-            <property name="column_spacing">12</property>
-            <property name="row_spacing">6</property>
-            <child>
-              <object class="GtkLabel" id="eap_ttls_anon_identity_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">Anony_mous identity:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">eap_ttls_anon_identity_entry</property>
-              </object>
-              <packing>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="eap_ttls_anon_identity_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="eap_ttls_ca_cert_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">C_A certificate:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">eap_ttls_ca_cert_button</property>
-              </object>
-              <packing>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkFileChooserButton" id="eap_ttls_ca_cert_button">
-                <property name="visible">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options">GTK_FILL</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="eap_ttls_inner_auth_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">I_nner authentication:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">eap_ttls_inner_auth_combo</property>
-              </object>
-              <packing>
-                <property name="top_attach">2</property>
-                <property name="bottom_attach">3</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkComboBox" id="eap_ttls_inner_auth_combo">
-                <property name="visible">True</property>
-                <property name="model">model6</property>
-                <child>
-                  <object class="GtkCellRendererText" id="renderer6"/>
-                  <attributes>
-                    <attribute name="text">0</attribute>
-                  </attributes>
-                </child>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">2</property>
-                <property name="bottom_attach">3</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options">GTK_FILL</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkVBox" id="eap_ttls_inner_auth_vbox">
-                <property name="visible">True</property>
-                <property name="orientation">vertical</property>
-                <property name="spacing">6</property>
-                <child>
-                  <placeholder/>
-                </child>
-              </object>
-              <packing>
-                <property name="right_attach">2</property>
-                <property name="top_attach">3</property>
-                <property name="bottom_attach">4</property>
-                <property name="x_options">GTK_FILL</property>
-              </packing>
-            </child>
-          </object>
-        </child>
-        <child type="tab">
-          <object class="GtkLabel" id="label49">
-            <property name="visible">True</property>
-          </object>
-          <packing>
-            <property name="tab_fill">False</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-  </object>
-  <object class="GtkWindow" id="eap_simple_widget">
-    <property name="visible">False</property>
-    <property name="title">eap_simple_widget</property>
-    <child>
-      <object class="GtkNotebook" id="eap_simple_notebook">
-        <property name="visible">True</property>
-        <property name="show_tabs">False</property>
-        <property name="show_border">False</property>
-        <child>
-          <object class="GtkTable" id="table11">
-            <property name="visible">True</property>
-            <property name="n_rows">3</property>
-            <property name="n_columns">2</property>
-            <property name="column_spacing">12</property>
-            <property name="row_spacing">6</property>
-            <child>
-              <object class="GtkLabel" id="eap_simple_username_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">_Username:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">eap_simple_username_entry</property>
-              </object>
-              <packing>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="eap_simple_password_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">_Password:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">eap_simple_password_entry</property>
-              </object>
-              <packing>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="eap_simple_password_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="visibility">False</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="eap_simple_username_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkAlignment" id="alignment1">
-                <property name="visible">True</property>
-                <child>
-                  <object class="GtkVBox" id="vbox5">
-                    <property name="visible">True</property>
-                    <property name="orientation">vertical</property>
-                    <child>
-                      <object class="GtkCheckButton" id="eap_password_always_ask">
-                        <property name="label" translatable="yes">As_k for this password every time</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="use_underline">True</property>
-                        <property name="draw_indicator">True</property>
-                      </object>
-                      <packing>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkCheckButton" id="show_checkbutton_eapsimple">
-                        <property name="label" translatable="yes">Sho_w password</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="use_underline">True</property>
-                        <property name="draw_indicator">True</property>
-                      </object>
-                      <packing>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <placeholder/>
-                    </child>
-                  </object>
-                </child>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">2</property>
-                <property name="bottom_attach">3</property>
-              </packing>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-          </object>
-        </child>
-        <child type="tab">
-          <object class="GtkLabel" id="label53">
-            <property name="visible">True</property>
-          </object>
-          <packing>
-            <property name="tab_fill">False</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-  </object>
-  <object class="GtkWindow" id="dynamic_wep_widget">
-    <property name="visible">False</property>
-    <property name="title">dynamic_wep_widget</property>
-    <child>
-      <object class="GtkNotebook" id="dynamic_wep_notebook">
-        <property name="visible">True</property>
-        <property name="show_tabs">False</property>
-        <property name="show_border">False</property>
-        <child>
-          <object class="GtkTable" id="table12">
-            <property name="visible">True</property>
-            <property name="n_rows">3</property>
-            <property name="n_columns">2</property>
-            <property name="column_spacing">12</property>
-            <property name="row_spacing">6</property>
-            <child>
-              <object class="GtkLabel" id="dynamic_wep_auth_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">_Authentication:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">dynamic_wep_auth_combo</property>
-              </object>
-              <packing>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkComboBox" id="dynamic_wep_auth_combo">
-                <property name="visible">True</property>
-                <property name="model">model7</property>
-                <child>
-                  <object class="GtkCellRendererText" id="renderer7"/>
-                  <attributes>
-                    <attribute name="text">0</attribute>
-                  </attributes>
-                </child>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="y_options">GTK_FILL</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkVBox" id="dynamic_wep_method_vbox">
-                <property name="visible">True</property>
-                <property name="orientation">vertical</property>
-                <property name="spacing">6</property>
-                <child>
-                  <placeholder/>
-                </child>
-              </object>
-              <packing>
-                <property name="right_attach">2</property>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-                <property name="x_options">GTK_FILL</property>
-              </packing>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-          </object>
-        </child>
-        <child type="tab">
-          <object class="GtkLabel" id="label55">
-            <property name="visible">True</property>
-          </object>
-          <packing>
-            <property name="tab_fill">False</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-  </object>
-  <object class="GtkDialog" id="nag_user_dialog">
-    <property name="border_width">5</property>
-    <property name="modal">True</property>
-    <property name="window_position">center</property>
-    <property name="type_hint">dialog</property>
-    <property name="has_separator">False</property>
-    <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox2">
-        <property name="visible">True</property>
-        <property name="orientation">vertical</property>
-        <property name="spacing">14</property>
-        <child>
-          <object class="GtkHBox" id="hbox5">
-            <property name="visible">True</property>
-            <property name="border_width">5</property>
-            <property name="spacing">12</property>
-            <child>
-              <object class="GtkImage" id="image4">
-                <property name="visible">True</property>
-                <property name="yalign">0</property>
-                <property name="stock">gtk-dialog-warning</property>
-                <property name="icon-size">6</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkVBox" id="content_vbox">
-                <property name="visible">True</property>
-                <property name="orientation">vertical</property>
-                <property name="spacing">12</property>
-                <child>
-                  <object class="GtkLabel" id="content_label">
-                    <property name="visible">True</property>
-                    <property name="xalign">0</property>
-                    <property name="yalign">0</property>
-                    <property name="label">alert text</property>
-                    <property name="use_markup">True</property>
-                    <property name="wrap">True</property>
-                  </object>
-                  <packing>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkCheckButton" id="ignore_checkbox">
-                    <property name="label" translatable="yes">Don't _warn me again</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="receives_default">False</property>
-                    <property name="use_underline">True</property>
-                    <property name="draw_indicator">True</property>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
-              </object>
-              <packing>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area2">
-            <property name="visible">True</property>
-            <property name="layout_style">end</property>
-            <child>
-              <object class="GtkButton" id="ignore_button">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="receives_default">False</property>
-                <child>
-                  <object class="GtkAlignment" id="alignment3">
-                    <property name="visible">True</property>
-                    <property name="xscale">0</property>
-                    <property name="yscale">0</property>
-                    <child>
-                      <object class="GtkHBox" id="hbox4">
-                        <property name="visible">True</property>
-                        <property name="spacing">2</property>
-                        <child>
-                          <object class="GtkImage" id="image3">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-no</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label57">
-                            <property name="visible">True</property>
-                            <property name="label" translatable="yes">No</property>
-                            <property name="use_underline">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="change_button">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="receives_default">False</property>
-                <child>
-                  <object class="GtkAlignment" id="alignment2">
-                    <property name="visible">True</property>
-                    <property name="xscale">0</property>
-                    <property name="yscale">0</property>
-                    <child>
-                      <object class="GtkHBox" id="hbox3">
-                        <property name="visible">True</property>
-                        <property name="spacing">2</property>
-                        <child>
-                          <object class="GtkImage" id="image2">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-ok</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label56">
-                            <property name="visible">True</property>
-                            <property name="label" translatable="yes">Yes</property>
-                            <property name="use_underline">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-    <action-widgets>
-      <action-widget response="-9">ignore_button</action-widget>
-      <action-widget response="-8">change_button</action-widget>
-    </action-widgets>
-  </object>
-  <object class="GtkWindow" id="eap_peap_widget">
-    <property name="visible">False</property>
-    <property name="title">eap_peap_widget</property>
-    <child>
-      <object class="GtkNotebook" id="eap_peap_notebook">
-        <property name="visible">True</property>
-        <property name="show_tabs">False</property>
-        <property name="show_border">False</property>
-        <child>
-          <object class="GtkTable" id="table13">
-            <property name="visible">True</property>
-            <property name="n_rows">5</property>
-            <property name="n_columns">2</property>
-            <property name="column_spacing">12</property>
-            <property name="row_spacing">6</property>
-            <child>
-              <object class="GtkLabel" id="eap_peap_anon_identity_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">Anony_mous identity:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">eap_peap_anon_identity_entry</property>
-              </object>
-              <packing>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="eap_peap_anon_identity_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="eap_peap_ca_cert_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">C_A certificate:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">eap_peap_ca_cert_button</property>
-              </object>
-              <packing>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkFileChooserButton" id="eap_peap_ca_cert_button">
-                <property name="visible">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options">GTK_FILL</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkVBox" id="eap_peap_inner_auth_vbox">
-                <property name="visible">True</property>
-                <property name="orientation">vertical</property>
-                <child>
-                  <placeholder/>
-                </child>
-              </object>
-              <packing>
-                <property name="right_attach">2</property>
-                <property name="top_attach">4</property>
-                <property name="bottom_attach">5</property>
-                <property name="x_options">GTK_FILL</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="eap_peap_inner_auth_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">I_nner authentication:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">eap_peap_inner_auth_combo</property>
-              </object>
-              <packing>
-                <property name="top_attach">3</property>
-                <property name="bottom_attach">4</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkComboBox" id="eap_peap_inner_auth_combo">
-                <property name="visible">True</property>
-                <property name="model">model8</property>
-                <child>
-                  <object class="GtkCellRendererText" id="renderer8"/>
-                  <attributes>
-                    <attribute name="text">0</attribute>
-                  </attributes>
-                </child>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">3</property>
-                <property name="bottom_attach">4</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options">GTK_FILL</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="eap_peap_version_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">_PEAP version:</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">eap_peap_version_combo</property>
-              </object>
-              <packing>
-                <property name="top_attach">2</property>
-                <property name="bottom_attach">3</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"/>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkComboBox" id="eap_peap_version_combo">
-                <property name="visible">True</property>
-                <property name="model">model9</property>
-                <child>
-                  <object class="GtkCellRendererText" id="renderer9"/>
-                  <attributes>
-                    <attribute name="text">0</attribute>
-                  </attributes>
-                </child>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">2</property>
-                <property name="bottom_attach">3</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options">GTK_FILL</property>
-              </packing>
-            </child>
-          </object>
-        </child>
-        <child type="tab">
-          <object class="GtkLabel" id="label61">
-            <property name="visible">True</property>
-          </object>
-          <packing>
-            <property name="tab_fill">False</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-  </object>
   <object class="GtkDialog" id="unlock_dialog">
     <property name="border_width">5</property>
     <property name="window_position">center</property>
diff --git a/src/connection-editor/ce-page.c b/src/connection-editor/ce-page.c
index 4180484..717bca3 100644
--- a/src/connection-editor/ce-page.c
+++ b/src/connection-editor/ce-page.c
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2008 - 2009 Red Hat, Inc.
+ * (C) Copyright 2008 - 2010 Red Hat, Inc.
  */
 
 #include <config.h>
@@ -229,6 +229,7 @@ ce_page_complete_init (CEPage *self,
 static void
 ce_page_init (CEPage *self)
 {
+	self->builder = gtk_builder_new ();
 }
 
 static void
@@ -431,3 +432,42 @@ ce_page_new_connection (const char *format,
 	return connection;
 }
 
+CEPage *
+ce_page_new (GType page_type,
+             NMConnection *connection,
+             GtkWindow *parent_window,
+             const char *ui_file,
+             const char *widget_name,
+             const char *title)
+{
+	CEPage *self;
+	GError *error = NULL;
+
+	g_return_val_if_fail (title != NULL, NULL);
+	if (ui_file)
+		g_return_val_if_fail (widget_name != NULL, NULL);
+
+	self = CE_PAGE (g_object_new (page_type,
+	                              CE_PAGE_CONNECTION, connection,
+	                              CE_PAGE_PARENT_WINDOW, parent_window,
+	                              NULL));
+	self->title = g_strdup (title);
+	if (ui_file) {
+		if (!gtk_builder_add_from_file (self->builder, ui_file, &error)) {
+			g_warning ("Couldn't load builder file: %s", error->message);
+			g_error_free (error);
+			g_object_unref (self);
+			return NULL;
+		}
+
+		self->page = GTK_WIDGET (gtk_builder_get_object (self->builder, widget_name));
+		if (!self->page) {
+			g_warning ("Couldn't load page widget '%s' from %s", widget_name, ui_file);
+			g_object_unref (self);
+			return NULL;
+		}
+		g_object_ref_sink (self->page);
+	}
+	return self;
+}
+
diff --git a/src/connection-editor/ce-page.h b/src/connection-editor/ce-page.h
index 53c6ac5..b7d0466 100644
--- a/src/connection-editor/ce-page.h
+++ b/src/connection-editor/ce-page.h
@@ -54,8 +54,8 @@ typedef void (*PageNewConnectionFunc) (GtkWindow *parent,
 #define CE_IS_PAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), CE_TYPE_PAGE))
 #define CE_PAGE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), CE_TYPE_PAGE, CEPageClass))
 
-#define CE_PAGE_CONNECTION "connection"
-#define CE_PAGE_INITIALIZED "initialized"
+#define CE_PAGE_CONNECTION    "connection"
+#define CE_PAGE_INITIALIZED   "initialized"
 #define CE_PAGE_PARENT_WINDOW "parent-window"
 
 typedef struct {
@@ -125,5 +125,12 @@ NMConnection *ce_page_new_connection (const char *format,
                                       PageGetConnectionsFunc get_connections_func,
                                       gpointer user_data);
 
+CEPage *ce_page_new (GType page_type,
+                     NMConnection *connection,
+                     GtkWindow *parent_window,
+                     const char *ui_file,
+                     const char *widget_name,
+                     const char *title);
+
 #endif  /* __CE_PAGE_H__ */
 
diff --git a/src/connection-editor/nm-connection-editor.c b/src/connection-editor/nm-connection-editor.c
index fa20f7e..34b3257 100644
--- a/src/connection-editor/nm-connection-editor.c
+++ b/src/connection-editor/nm-connection-editor.c
@@ -272,31 +272,18 @@ system_checkbutton_toggled_cb (GtkWidget *widget, NMConnectionEditor *editor)
 	connection_editor_validate (editor);
 }
 
+#define NMCE_UI UIDIR "/nm-connection-editor.ui"
+
 static void
 nm_connection_editor_init (NMConnectionEditor *editor)
 {
 	GtkWidget *dialog;
 	GError *error = NULL;
 
-	/* Yes, we mean applet.ui, not nm-connection-editor.ui. The wireless security bits
-	   are taken from applet.ui. */
-	if (!g_file_test (UIDIR "/applet.ui", G_FILE_TEST_EXISTS)) {
-		dialog = gtk_message_dialog_new (NULL, 0,
-		                                 GTK_MESSAGE_ERROR,
-		                                 GTK_BUTTONS_OK,
-		                                 "%s",
-		                                 _("The connection editor could not find some required resources (the NetworkManager applet .ui file was not found)."));
-		gtk_dialog_run (GTK_DIALOG (dialog));
-		gtk_widget_destroy (dialog);
-		gtk_main_quit ();
-		return;
-	}
+	editor->builder = gtk_builder_new ();
 
-	editor->builder = gtk_builder_new();
-
-	if (!gtk_builder_add_from_file (editor->builder, UIDIR "/nm-connection-editor.ui", &error))
-	{
-		g_warning ("Couldn't load builder file: %s", error->message);
+	if (!gtk_builder_add_from_file (editor->builder, NMCE_UI, &error)) {
+		g_warning ("Couldn't load builder file " NMCE_UI ": %s", error->message);
 		g_error_free (error);
 
 		dialog = gtk_message_dialog_new (NULL, 0,
@@ -526,9 +513,11 @@ idle_validate (gpointer user_data)
 static void
 recheck_initialization (NMConnectionEditor *editor)
 {
-	if (!editor_is_initialized (editor))
+	if (!editor_is_initialized (editor) || editor->init_run)
 		return;
 
+	editor->init_run = TRUE;
+
 	populate_connection_ui (editor);
 
 	/* When everything is initialized, re-present the window to ensure it's on top */
diff --git a/src/connection-editor/nm-connection-editor.h b/src/connection-editor/nm-connection-editor.h
index 0612af0..22e1ed2 100644
--- a/src/connection-editor/nm-connection-editor.h
+++ b/src/connection-editor/nm-connection-editor.h
@@ -58,6 +58,7 @@ typedef struct {
 	GtkWidget *cancel_button;
 
 	gboolean busy;
+	gboolean init_run;
 } NMConnectionEditor;
 
 typedef struct {
diff --git a/src/connection-editor/nm-connection-list.c b/src/connection-editor/nm-connection-list.c
index 9554919..996353c 100644
--- a/src/connection-editor/nm-connection-list.c
+++ b/src/connection-editor/nm-connection-list.c
@@ -1493,7 +1493,7 @@ nm_connection_list_new (GType def_type)
 		return NULL;
 
 	/* load GUI */
-	list->gui = gtk_builder_new();
+	list->gui = gtk_builder_new ();
 
 	if (!gtk_builder_add_from_file (list->gui, UIDIR "/nm-connection-editor.ui", &error)) {
 		g_warning ("Couldn't load builder file: %s", error->message);
diff --git a/src/connection-editor/page-dsl.c b/src/connection-editor/page-dsl.c
index d21f1ad..94da531 100644
--- a/src/connection-editor/page-dsl.c
+++ b/src/connection-editor/page-dsl.c
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2008 Red Hat, Inc.
+ * (C) Copyright 2008 - 2010 Red Hat, Inc.
  */
 
 #include <string.h>
@@ -127,32 +127,17 @@ ce_page_dsl_new (NMConnection *connection,
 {
 	CEPageDsl *self;
 	CEPageDslPrivate *priv;
-	CEPage *parent;
 
-	self = CE_PAGE_DSL (g_object_new (CE_TYPE_PAGE_DSL,
-	                                  CE_PAGE_CONNECTION, connection,
-	                                  CE_PAGE_PARENT_WINDOW, parent_window,
-	                                  NULL));
-	parent = CE_PAGE (self);
-
-	parent->builder = gtk_builder_new();
-
-	if (!gtk_builder_add_from_file (parent->builder, UIDIR "/ce-page-dsl.ui", error)) {
-		g_warning ("Couldn't load builder file: %s", (*error)->message);
-		g_set_error (error, 0, 0, "%s", _("Could not load DSL user interface."));
-		g_object_unref (self);
-		return NULL;
-	}
-
-	parent->page = GTK_WIDGET (gtk_builder_get_object (parent->builder, "DslPage"));
-	if (!parent->page) {
-		g_set_error (error, 0, 0, "%s", _("Could not load DSL user interface."));
-		g_object_unref (self);
+	self = CE_PAGE_DSL (ce_page_new (CE_TYPE_PAGE_DSL,
+	                                 connection,
+	                                 parent_window,
+	                                 UIDIR "/ce-page-dsl.ui",
+	                                 "DslPage",
+	                                 _("DSL")));
+	if (!self) {
+		g_set_error_literal (error, 0, 0, _("Could not load DSL user interface."));
 		return NULL;
 	}
-	g_object_ref_sink (parent->page);
-
-	parent->title = g_strdup (_("DSL"));
 
 	dsl_private_init (self);
 	priv = CE_PAGE_DSL_GET_PRIVATE (self);
diff --git a/src/connection-editor/page-ip4.c b/src/connection-editor/page-ip4.c
index c758459..6492366 100644
--- a/src/connection-editor/page-ip4.c
+++ b/src/connection-editor/page-ip4.c
@@ -805,33 +805,18 @@ ce_page_ip4_new (NMConnection *connection,
 {
 	CEPageIP4 *self;
 	CEPageIP4Private *priv;
-	CEPage *parent;
 	NMSettingConnection *s_con;
 
-	self = CE_PAGE_IP4 (g_object_new (CE_TYPE_PAGE_IP4,
-	                                  CE_PAGE_CONNECTION, connection,
-	                                  CE_PAGE_PARENT_WINDOW, parent_window,
-	                                  NULL));
-	parent = CE_PAGE (self);
-
-	parent->builder = gtk_builder_new();
-
-	if (!gtk_builder_add_from_file (parent->builder, UIDIR "/ce-page-ip4.ui", error)) {
-		g_warning ("Couldn't load builder file: %s", (*error)->message);
-		g_set_error (error, 0, 0, "%s", _("Could not load IPv4 user interface."));
-		g_object_unref (self);
-		return NULL;
-	}
-
-	parent->page = GTK_WIDGET (gtk_builder_get_object (parent->builder, "IP4Page"));
-	if (!parent->page) {
-		g_set_error (error, 0, 0, "%s", _("Could not load IPv4 user interface."));
-		g_object_unref (self);
+	self = CE_PAGE_IP4 (ce_page_new (CE_TYPE_PAGE_IP4,
+	                                 connection,
+	                                 parent_window,
+	                                 UIDIR "/ce-page-ip4.ui",
+	                                 "IP4Page",
+	                                 _("IPv4 Settings")));
+	if (!self) {
+		g_set_error_literal (error, 0, 0, _("Could not load IPv4 user interface."));
 		return NULL;
 	}
-	g_object_ref_sink (parent->page);
-
-	parent->title = g_strdup (_("IPv4 Settings"));
 
 	ip4_private_init (self, connection);
 	priv = CE_PAGE_IP4_GET_PRIVATE (self);
diff --git a/src/connection-editor/page-ip6.c b/src/connection-editor/page-ip6.c
index a2f769b..320199c 100644
--- a/src/connection-editor/page-ip6.c
+++ b/src/connection-editor/page-ip6.c
@@ -788,33 +788,18 @@ ce_page_ip6_new (NMConnection *connection,
 {
 	CEPageIP6 *self;
 	CEPageIP6Private *priv;
-	CEPage *parent;
 	NMSettingConnection *s_con;
 
-	self = CE_PAGE_IP6 (g_object_new (CE_TYPE_PAGE_IP6,
-	                                  CE_PAGE_CONNECTION, connection,
-	                                  CE_PAGE_PARENT_WINDOW, parent_window,
-	                                  NULL));
-	parent = CE_PAGE (self);
-
-	parent->builder = gtk_builder_new();
-
-	if (!gtk_builder_add_from_file (parent->builder, UIDIR "/ce-page-ip6.ui", error)) {
-		g_warning ("Couldn't load builder file: %s", (*error)->message);
-		g_set_error (error, 0, 0, "%s", _("Could not load IPv6 user interface."));
-		g_object_unref (self);
-		return NULL;
-	}
-
-	parent->page = GTK_WIDGET (gtk_builder_get_object (parent->builder, "IP6Page"));
-	if (!parent->page) {
-		g_set_error (error, 0, 0, "%s", _("Could not load IPv6 user interface."));
-		g_object_unref (self);
+	self = CE_PAGE_IP6 (ce_page_new (CE_TYPE_PAGE_IP6,
+	                                 connection,
+	                                 parent_window,
+	                                 UIDIR "/ce-page-ip6.ui",
+	                                 "IP6Page",
+	                                 _("IPv6 Settings")));
+	if (!self) {
+		g_set_error_literal (error, 0, 0, _("Could not load IPv6 user interface."));
 		return NULL;
 	}
-	g_object_ref_sink (parent->page);
-
-	parent->title = g_strdup (_("IPv6 Settings"));
 
 	ip6_private_init (self, connection);
 	priv = CE_PAGE_IP6_GET_PRIVATE (self);
diff --git a/src/connection-editor/page-mobile.c b/src/connection-editor/page-mobile.c
index 27a9096..afe2fab 100644
--- a/src/connection-editor/page-mobile.c
+++ b/src/connection-editor/page-mobile.c
@@ -356,32 +356,17 @@ ce_page_mobile_new (NMConnection *connection,
 {
 	CEPageMobile *self;
 	CEPageMobilePrivate *priv;
-	CEPage *parent;
 
-	self = CE_PAGE_MOBILE (g_object_new (CE_TYPE_PAGE_MOBILE,
-	                                     CE_PAGE_CONNECTION, connection,
-	                                     CE_PAGE_PARENT_WINDOW, parent_window,
-	                                     NULL));
-	parent = CE_PAGE (self);
-
-	parent->builder = gtk_builder_new();
-
-	if (!gtk_builder_add_from_file (parent->builder, UIDIR "/ce-page-mobile.ui", error)) {
-		g_warning ("Couldn't load builder file: %s", (*error)->message);
-		g_set_error (error, 0, 0, "%s", _("Could not load mobile broadband user interface."));
-		g_object_unref (self);
-		return NULL;
-	}
-
-	parent->page = GTK_WIDGET (gtk_builder_get_object (parent->builder, "MobilePage"));
-	if (!parent->page) {
-		g_set_error (error, 0, 0, "%s", _("Could not load mobile broadband user interface."));
-		g_object_unref (self);
+	self = CE_PAGE_MOBILE (ce_page_new (CE_TYPE_PAGE_MOBILE,
+	                                    connection,
+	                                    parent_window,
+	                                    UIDIR "/ce-page-mobile.ui",
+	                                    "MobilePage",
+	                                    _("Mobile Broadband")));
+	if (!self) {
+		g_set_error_literal (error, 0, 0, _("Could not load mobile broadband user interface."));
 		return NULL;
 	}
-	g_object_ref_sink (parent->page);
-
-	parent->title = g_strdup (_("Mobile Broadband"));
 
 	mobile_private_init (self);
 	priv = CE_PAGE_MOBILE_GET_PRIVATE (self);
diff --git a/src/connection-editor/page-ppp.c b/src/connection-editor/page-ppp.c
index 91f3523..4c8e361 100644
--- a/src/connection-editor/page-ppp.c
+++ b/src/connection-editor/page-ppp.c
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2008 Red Hat, Inc.
+ * (C) Copyright 2008 - 2010 Red Hat, Inc.
  */
 
 #include <string.h>
@@ -269,33 +269,18 @@ ce_page_ppp_new (NMConnection *connection,
 {
 	CEPagePpp *self;
 	CEPagePppPrivate *priv;
-	CEPage *parent;
 	NMSettingConnection *s_con;
 
-	self = CE_PAGE_PPP (g_object_new (CE_TYPE_PAGE_PPP,
-	                                  CE_PAGE_CONNECTION, connection,
-	                                  CE_PAGE_PARENT_WINDOW, parent_window,
-	                                  NULL));
-	parent = CE_PAGE (self);
-
-	parent->builder = gtk_builder_new();
-
-	if (!gtk_builder_add_from_file (parent->builder, UIDIR "/ce-page-ppp.ui", error)) {
-		g_warning ("Couldn't load builder file: %s", (*error)->message);
-		g_set_error (error, 0, 0, "%s", _("Could not load PPP user interface."));
-		g_object_unref (self);
-		return NULL;
-	}
-
-	parent->page = GTK_WIDGET (gtk_builder_get_object (parent->builder, "PppPage"));
-	if (!parent->page) {
-		g_set_error (error, 0, 0, "%s", _("Could not load PPP user interface."));
-		g_object_unref (self);
+	self = CE_PAGE_PPP (ce_page_new (CE_TYPE_PAGE_PPP,
+	                                 connection,
+	                                 parent_window,
+	                                 UIDIR "/ce-page-ppp.ui",
+	                                 "PppPage",
+	                                 _("PPP Settings")));
+	if (!self) {
+		g_set_error_literal (error, 0, 0, _("Could not load PPP user interface."));
 		return NULL;
 	}
-	g_object_ref_sink (parent->page);
-
-	parent->title = g_strdup (_("PPP Settings"));
 
 	ppp_private_init (self);
 	priv = CE_PAGE_PPP_GET_PRIVATE (self);
diff --git a/src/connection-editor/page-vpn.c b/src/connection-editor/page-vpn.c
index dd26758..6a7d614 100644
--- a/src/connection-editor/page-vpn.c
+++ b/src/connection-editor/page-vpn.c
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2008 Red Hat, Inc.
+ * (C) Copyright 2008 - 2010 Red Hat, Inc.
  */
 
 #include <string.h>
@@ -95,17 +95,20 @@ ce_page_vpn_new (NMConnection *connection,
 {
 	CEPageVpn *self;
 	CEPageVpnPrivate *priv;
-	CEPage *parent;
 	const char *service_type;
 
-	self = CE_PAGE_VPN (g_object_new (CE_TYPE_PAGE_VPN,
-	                                  CE_PAGE_CONNECTION, connection,
-	                                  CE_PAGE_PARENT_WINDOW, parent_window,
-	                                  NULL));
-	parent = CE_PAGE (self);
-	priv = CE_PAGE_VPN_GET_PRIVATE (self);
+	self = CE_PAGE_VPN (ce_page_new (CE_TYPE_PAGE_VPN,
+	                                 connection,
+	                                 parent_window,
+	                                 NULL,
+	                                 NULL,
+	                                 _("VPN")));
+	if (!self) {
+		g_set_error_literal (error, 0, 0, _("Could not load VPN user interface."));
+		return NULL;
+	}
 
-	parent->title = g_strdup (_("VPN"));
+	priv = CE_PAGE_VPN_GET_PRIVATE (self);
 
 	priv->setting = (NMSettingVPN *) nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN);
 	g_assert (priv->setting);
diff --git a/src/connection-editor/page-wired-security.c b/src/connection-editor/page-wired-security.c
index cf6fb19..e955b50 100644
--- a/src/connection-editor/page-wired-security.c
+++ b/src/connection-editor/page-wired-security.c
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2008 Red Hat, Inc.
+ * (C) Copyright 2008 - 2010 Red Hat, Inc.
  */
 
 #include <string.h>
@@ -72,12 +72,11 @@ finish_setup (CEPageWiredSecurity *self, gpointer unused, GError *error, gpointe
 {
 	CEPage *parent = CE_PAGE (self);
 	CEPageWiredSecurityPrivate *priv = CE_PAGE_WIRED_SECURITY_GET_PRIVATE (self);
-	const char *ui_file = UIDIR "/applet.ui";
 
 	if (error)
 		return;
 
-	priv->security = (WirelessSecurity *) ws_wpa_eap_new (ui_file, parent->connection, TRUE);
+	priv->security = (WirelessSecurity *) ws_wpa_eap_new (parent->connection, TRUE);
 	if (!priv->security) {
 		g_warning ("Could not load wired 802.1x user interface.");
 		return;
@@ -103,17 +102,23 @@ ce_page_wired_security_new (NMConnection *connection,
                             GError **error)
 {
 	CEPageWiredSecurity *self;
-	CEPage *parent;
 	CEPageWiredSecurityPrivate *priv;
+	CEPage *parent;
+
+	self = CE_PAGE_WIRED_SECURITY (ce_page_new (CE_TYPE_PAGE_WIRED_SECURITY,
+	                                            connection,
+	                                            parent_window,
+	                                            NULL,
+	                                            NULL,
+	                                            _("802.1x Security")));
+	if (!self) {
+		g_set_error_literal (error, 0, 0, _("Could not load Wired Security security user interface."));
+		return NULL;
+	}
 
-	self = CE_PAGE_WIRED_SECURITY (g_object_new (CE_TYPE_PAGE_WIRED_SECURITY,
-	                                             CE_PAGE_CONNECTION, connection,
-	                                             CE_PAGE_PARENT_WINDOW, parent_window,
-	                                             NULL));
 	parent = CE_PAGE (self);
 	priv = CE_PAGE_WIRED_SECURITY_GET_PRIVATE (self);
 
-	parent->title = g_strdup (_("802.1x Security"));
 	parent->page = gtk_vbox_new (FALSE, 6);
 	g_object_ref_sink (G_OBJECT (parent->page));
 	gtk_container_set_border_width (GTK_CONTAINER (parent->page), 6);
diff --git a/src/connection-editor/page-wired.c b/src/connection-editor/page-wired.c
index 31d83fd..e427eab 100644
--- a/src/connection-editor/page-wired.c
+++ b/src/connection-editor/page-wired.c
@@ -200,33 +200,18 @@ ce_page_wired_new (NMConnection *connection,
 {
 	CEPageWired *self;
 	CEPageWiredPrivate *priv;
-	CEPage *parent;
 
-	self = CE_PAGE_WIRED (g_object_new (CE_TYPE_PAGE_WIRED,
-	                                    CE_PAGE_CONNECTION, connection,
-	                                    CE_PAGE_PARENT_WINDOW, parent_window,
-	                                    NULL));
-	parent = CE_PAGE (self);
-
-	parent->builder = gtk_builder_new ();
-
-	if (!gtk_builder_add_from_file (parent->builder, UIDIR "/ce-page-wired.ui", error)) {
-		g_warning ("Couldn't load builder file: %s", (*error)->message);
-		g_set_error (error, 0, 0, "%s", _("Could not load wired user interface."));
-		g_object_unref (self);
+	self = CE_PAGE_WIRED (ce_page_new (CE_TYPE_PAGE_WIRED,
+	                                   connection,
+	                                   parent_window,
+	                                   UIDIR "/ce-page-wired.ui",
+	                                   "WiredPage",
+	                                   _("Wired")));
+	if (!self) {
+		g_set_error_literal (error, 0, 0, _("Could not load wired user interface."));
 		return NULL;
 	}
 
-	parent->page = GTK_WIDGET (gtk_builder_get_object (parent->builder, "WiredPage"));
-	if (!parent->page) {
-		g_set_error (error, 0, 0, "%s", _("Could not load wired user interface."));
-		g_object_unref (self);
-		return NULL;
-	}
-	g_object_ref_sink (parent->page);
-
-	parent->title = g_strdup (_("Wired"));
-
 	wired_private_init (self);
 	priv = CE_PAGE_WIRED_GET_PRIVATE (self);
 
@@ -368,4 +353,3 @@ wired_connection_new (GtkWindow *parent,
 	(*result_func) (connection, FALSE, NULL, user_data);
 }
 
-
diff --git a/src/connection-editor/page-wireless-security.c b/src/connection-editor/page-wireless-security.c
index 1726e73..f8b5821 100644
--- a/src/connection-editor/page-wireless-security.c
+++ b/src/connection-editor/page-wireless-security.c
@@ -200,7 +200,6 @@ finish_setup (CEPageWirelessSecurity *self, gpointer unused, GError *error, gpoi
 	NMUtilsSecurityType default_type = NMU_SEC_NONE;
 	int active = -1;
 	int item = 0;
-	const char *ui_file = UIDIR "/applet.ui";
 	GtkComboBox *combo;
 
 	if (error)
@@ -257,7 +256,7 @@ finish_setup (CEPageWirelessSecurity *self, gpointer unused, GError *error, gpoi
 				wep_type = NM_WEP_KEY_TYPE_KEY;
 		}
 
-		ws_wep = ws_wep_key_new (ui_file, connection, NM_WEP_KEY_TYPE_KEY, FALSE, FALSE);
+		ws_wep = ws_wep_key_new (connection, NM_WEP_KEY_TYPE_KEY, FALSE, FALSE);
 		if (ws_wep) {
 			add_security_item (self, WIRELESS_SECURITY (ws_wep), sec_model,
 			                   &iter, _("WEP 40/128-bit Key (Hex or ASCII)"));
@@ -266,7 +265,7 @@ finish_setup (CEPageWirelessSecurity *self, gpointer unused, GError *error, gpoi
 			item++;
 		}
 
-		ws_wep = ws_wep_key_new (ui_file, connection, NM_WEP_KEY_TYPE_PASSPHRASE, FALSE, FALSE);
+		ws_wep = ws_wep_key_new (connection, NM_WEP_KEY_TYPE_PASSPHRASE, FALSE, FALSE);
 		if (ws_wep) {
 			add_security_item (self, WIRELESS_SECURITY (ws_wep), sec_model,
 			                   &iter, _("WEP 128-bit Passphrase"));
@@ -279,7 +278,7 @@ finish_setup (CEPageWirelessSecurity *self, gpointer unused, GError *error, gpoi
 	if (nm_utils_security_valid (NMU_SEC_LEAP, dev_caps, FALSE, is_adhoc, 0, 0, 0)) {
 		WirelessSecurityLEAP *ws_leap;
 
-		ws_leap = ws_leap_new (ui_file, connection);
+		ws_leap = ws_leap_new (connection);
 		if (ws_leap) {
 			add_security_item (self, WIRELESS_SECURITY (ws_leap), sec_model,
 			                   &iter, _("LEAP"));
@@ -292,7 +291,7 @@ finish_setup (CEPageWirelessSecurity *self, gpointer unused, GError *error, gpoi
 	if (nm_utils_security_valid (NMU_SEC_DYNAMIC_WEP, dev_caps, FALSE, is_adhoc, 0, 0, 0)) {
 		WirelessSecurityDynamicWEP *ws_dynamic_wep;
 
-		ws_dynamic_wep = ws_dynamic_wep_new (ui_file, connection, TRUE);
+		ws_dynamic_wep = ws_dynamic_wep_new (connection, TRUE);
 		if (ws_dynamic_wep) {
 			add_security_item (self, WIRELESS_SECURITY (ws_dynamic_wep), sec_model,
 			                   &iter, _("Dynamic WEP (802.1x)"));
@@ -306,7 +305,7 @@ finish_setup (CEPageWirelessSecurity *self, gpointer unused, GError *error, gpoi
 	    || nm_utils_security_valid (NMU_SEC_WPA2_PSK, dev_caps, FALSE, is_adhoc, 0, 0, 0)) {
 		WirelessSecurityWPAPSK *ws_wpa_psk;
 
-		ws_wpa_psk = ws_wpa_psk_new (ui_file, connection);
+		ws_wpa_psk = ws_wpa_psk_new (connection);
 		if (ws_wpa_psk) {
 			add_security_item (self, WIRELESS_SECURITY (ws_wpa_psk), sec_model,
 			                   &iter, _("WPA & WPA2 Personal"));
@@ -320,7 +319,7 @@ finish_setup (CEPageWirelessSecurity *self, gpointer unused, GError *error, gpoi
 	    || nm_utils_security_valid (NMU_SEC_WPA2_ENTERPRISE, dev_caps, FALSE, is_adhoc, 0, 0, 0)) {
 		WirelessSecurityWPAEAP *ws_wpa_eap;
 
-		ws_wpa_eap = ws_wpa_eap_new (ui_file, connection, TRUE);
+		ws_wpa_eap = ws_wpa_eap_new (connection, TRUE);
 		if (ws_wpa_eap) {
 			add_security_item (self, WIRELESS_SECURITY (ws_wpa_eap), sec_model,
 			                   &iter, _("WPA & WPA2 Enterprise"));
@@ -349,43 +348,27 @@ ce_page_wireless_security_new (NMConnection *connection,
                                GError **error)
 {
 	CEPageWirelessSecurity *self;
-	CEPage *parent;
 	NMSettingWireless *s_wireless;
 	NMSettingWirelessSecurity *s_wsec = NULL;
 	NMUtilsSecurityType default_type = NMU_SEC_NONE;
 	const char *security;
 
-	self = CE_PAGE_WIRELESS_SECURITY (g_object_new (CE_TYPE_PAGE_WIRELESS_SECURITY,
-	                                                CE_PAGE_CONNECTION, connection,
-	                                                CE_PAGE_PARENT_WINDOW, parent_window,
-	                                                NULL));
-	parent = CE_PAGE (self);
-
 	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
 	if (!s_wireless) {
-		g_set_error (error, 0, 0, "%s", _("Could not load WiFi security user interface; missing WiFi setting."));
-		g_object_unref (self);
-		return NULL;
-	}
-
-	parent->builder = gtk_builder_new();
-
-	if (!gtk_builder_add_from_file (parent->builder, UIDIR "/ce-page-wireless-security.ui", error)) {
-		g_warning ("Couldn't load builder file: %s", (*error)->message);
-		g_set_error (error, 0, 0, "%s", _("Could not load WiFi security user interface."));
-		g_object_unref (self);
+		g_set_error_literal (error, 0, 0, _("Could not load WiFi security user interface; missing WiFi setting."));
 		return NULL;
 	}
 
-	parent->page = GTK_WIDGET (gtk_builder_get_object (parent->builder, "WirelessSecurityPage"));
-	if (!parent->page) {
-		g_set_error (error, 0, 0, "%s", _("Could not load WiFi security user interface."));
-		g_object_unref (self);
+	self = CE_PAGE_WIRELESS_SECURITY (ce_page_new (CE_TYPE_PAGE_WIRELESS_SECURITY,
+	                                               connection,
+	                                               parent_window,
+	                                               UIDIR "/ce-page-wireless-security.ui",
+	                                               "WirelessSecurityPage",
+	                                               _("Wireless Security")));
+	if (!self) {
+		g_set_error_literal (error, 0, 0, _("Could not load WiFi security user interface."));
 		return NULL;
 	}
-	g_object_ref_sink (parent->page);
-
-	parent->title = g_strdup (_("Wireless Security"));
 
 	self->group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
 
diff --git a/src/connection-editor/page-wireless.c b/src/connection-editor/page-wireless.c
index 3ba41c0..8e601a3 100644
--- a/src/connection-editor/page-wireless.c
+++ b/src/connection-editor/page-wireless.c
@@ -384,34 +384,19 @@ ce_page_wireless_new (NMConnection *connection,
 {
 	CEPageWireless *self;
 	CEPageWirelessPrivate *priv;
-	CEPage *parent;
 
 	g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
 
-	self = CE_PAGE_WIRELESS (g_object_new (CE_TYPE_PAGE_WIRELESS,
-	                                       CE_PAGE_CONNECTION, connection,
-	                                       CE_PAGE_PARENT_WINDOW, parent_window,
-	                                       NULL));
-	parent = CE_PAGE (self);
-
-    parent->builder = gtk_builder_new();
-
-    if (!gtk_builder_add_from_file (parent->builder, UIDIR "/ce-page-wireless.ui", error)) {
-        g_warning ("Couldn't load builder file: %s", (*error)->message);
-		g_set_error (error, 0, 0, "%s", _("Could not load WiFi user interface."));
-		g_object_unref (self);
-		return NULL;
-	}
-
-	parent->page = GTK_WIDGET (gtk_builder_get_object (parent->builder, "WirelessPage"));
-	if (!parent->page) {
-		g_set_error (error, 0, 0, "%s", _("Could not load WiFi user interface."));
-		g_object_unref (self);
+	self = CE_PAGE_WIRELESS (ce_page_new (CE_TYPE_PAGE_WIRELESS,
+	                                      connection,
+	                                      parent_window,
+	                                      UIDIR "/ce-page-wireless.ui",
+	                                      "WirelessPage",
+	                                      _("Wireless")));
+	if (!self) {
+		g_set_error_literal (error, 0, 0, _("Could not load WiFi user interface."));
 		return NULL;
 	}
-	g_object_ref_sink (parent->page);
-
-	parent->title = g_strdup (_("Wireless"));
 
 	wireless_private_init (self);
 	priv = CE_PAGE_WIRELESS_GET_PRIVATE (self);
diff --git a/src/wired-dialog.c b/src/wired-dialog.c
index 4a395a9..3209eb3 100644
--- a/src/wired-dialog.c
+++ b/src/wired-dialog.c
@@ -18,7 +18,7 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
  * (C) Copyright 2008 Novell, Inc.
- * (C) Copyright 2008 Red Hat, Inc.
+ * (C) Copyright 2008 - 2010 Red Hat, Inc.
  */
 
 #ifdef HAVE_CONFIG_H
@@ -56,19 +56,20 @@ dialog_set_network_name (NMConnection *connection, GtkEntry *entry)
 
 static WirelessSecurity *
 dialog_set_security (NMConnection *connection,
-					 const char *ui_file,
-					 GtkBox *box)
+                     GtkBuilder *builder,
+                     GtkBox *box)
 {
 	GList *children;
 	GList *iter;
 	WirelessSecurity *security;
 
-	security = (WirelessSecurity *) ws_wpa_eap_new (ui_file, connection, FALSE);
+	security = (WirelessSecurity *) ws_wpa_eap_new (connection, FALSE);
 
 	/* Remove any previous wireless security widgets */
 	children = gtk_container_get_children (GTK_CONTAINER (box));
 	for (iter = children; iter; iter = iter->next)
 		gtk_container_remove (GTK_CONTAINER (box), GTK_WIDGET (iter->data));
+	g_list_free (children);
 
 	gtk_box_pack_start (box, wireless_security_get_widget (security), TRUE, TRUE, 0);
 
@@ -77,10 +78,9 @@ dialog_set_security (NMConnection *connection,
 
 static gboolean
 dialog_init (GtkWidget *dialog,
-			 GtkBuilder *builder,
-			 NMClient *nm_client,
-			 const char *ui_file,
-			 NMConnection *connection)
+             GtkBuilder *builder,
+             NMClient *nm_client,
+             NMConnection *connection)
 {
 	WirelessSecurity *security;
 	GtkWidget *widget;
@@ -99,7 +99,7 @@ dialog_init (GtkWidget *dialog,
 	                      _("Wired 802.1X authentication"));
 
 	dialog_set_network_name (connection, GTK_ENTRY (GTK_WIDGET (gtk_builder_get_object (builder, "network_name_entry"))));
-	security = dialog_set_security (connection, ui_file, GTK_BOX (GTK_WIDGET (gtk_builder_get_object (builder, "security_vbox"))));
+	security = dialog_set_security (connection, builder, GTK_BOX (GTK_WIDGET (gtk_builder_get_object (builder, "security_vbox"))));
 	wireless_security_set_changed_notify (security, stuff_changed_cb, GTK_WIDGET (gtk_builder_get_object (builder, "ok_button")));
 
 	g_object_set_data_full (G_OBJECT (dialog),
@@ -130,6 +130,7 @@ nma_wired_dialog_new (const char *ui_file,
 		g_warning ("Couldn't load builder file: %s", error->message);
 		g_error_free (error);
 		applet_warning_dialog_show (_("The NetworkManager Applet could not find some required resources (the .ui file was not found)."));
+		g_object_unref (builder);
 		return NULL;
 	}
 
@@ -140,10 +141,11 @@ nma_wired_dialog_new (const char *ui_file,
 		return NULL;
 	}
 
-	success = dialog_init (dialog, builder, nm_client, ui_file, NM_CONNECTION (connection));
+	success = dialog_init (dialog, builder, nm_client, NM_CONNECTION (connection));
 	if (!success) {
 		nm_warning ("Couldn't create wired security dialog.");
 		gtk_widget_destroy (dialog);
+		g_object_unref (builder);
 		return NULL;
 	}
 
@@ -151,6 +153,11 @@ nma_wired_dialog_new (const char *ui_file,
 	                        "connection", g_object_ref (connection),
 	                        (GDestroyNotify) g_object_unref);
 
+	/* Ensure the builder gets destroyed when the dialog goes away */
+	g_object_set_data_full (G_OBJECT (dialog),
+	                        "builder", builder,
+	                        (GDestroyNotify) g_object_unref);
+
 	return dialog;
 }
 					  
diff --git a/src/wireless-dialog.c b/src/wireless-dialog.c
index 1961ff9..582f7ba 100644
--- a/src/wireless-dialog.c
+++ b/src/wireless-dialog.c
@@ -59,7 +59,6 @@ typedef struct {
 typedef struct {
 	NMApplet *applet;
 
-	char *ui_file;
 	GtkBuilder *builder;
 
 	NMConnection *connection;
@@ -187,6 +186,7 @@ security_combo_changed (GtkWidget *combo,
 	children = gtk_container_get_children (GTK_CONTAINER (vbox));
 	for (elt = children; elt; elt = g_list_next (elt))
 		gtk_container_remove (GTK_CONTAINER (vbox), GTK_WIDGET (elt->data));
+	g_list_free (children);
 
 	model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
 	if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter)) {
@@ -930,7 +930,7 @@ security_combo_init (NMAWirelessDialog *self, gboolean auth_only)
 	    && ((!ap_wpa && !ap_rsn) || !(dev_caps & (NM_WIFI_DEVICE_CAP_WPA | NM_WIFI_DEVICE_CAP_RSN)))) {
 		WirelessSecurityWEPKey *ws_wep;
 
-		ws_wep = ws_wep_key_new (priv->ui_file, priv->connection, NM_WEP_KEY_TYPE_KEY, priv->adhoc_create, auth_only);
+		ws_wep = ws_wep_key_new (priv->connection, NM_WEP_KEY_TYPE_KEY, priv->adhoc_create, auth_only);
 		if (ws_wep) {
 			add_security_item (self, WIRELESS_SECURITY (ws_wep), sec_model,
 			                   &iter, _("WEP 40/128-bit Key (Hex or ASCII)"));
@@ -939,7 +939,7 @@ security_combo_init (NMAWirelessDialog *self, gboolean auth_only)
 			item++;
 		}
 
-		ws_wep = ws_wep_key_new (priv->ui_file, priv->connection, NM_WEP_KEY_TYPE_PASSPHRASE, priv->adhoc_create, auth_only);
+		ws_wep = ws_wep_key_new (priv->connection, NM_WEP_KEY_TYPE_PASSPHRASE, priv->adhoc_create, auth_only);
 		if (ws_wep) {
 			add_security_item (self, WIRELESS_SECURITY (ws_wep), sec_model,
 			                   &iter, _("WEP 128-bit Passphrase"));
@@ -956,7 +956,7 @@ security_combo_init (NMAWirelessDialog *self, gboolean auth_only)
 	    && ((!ap_wpa && !ap_rsn) || !(dev_caps & (NM_WIFI_DEVICE_CAP_WPA | NM_WIFI_DEVICE_CAP_RSN)))) {
 		WirelessSecurityLEAP *ws_leap;
 
-		ws_leap = ws_leap_new (priv->ui_file, priv->connection);
+		ws_leap = ws_leap_new (priv->connection);
 		if (ws_leap) {
 			add_security_item (self, WIRELESS_SECURITY (ws_leap), sec_model,
 			                   &iter, _("LEAP"));
@@ -969,7 +969,7 @@ security_combo_init (NMAWirelessDialog *self, gboolean auth_only)
 	if (nm_utils_security_valid (NMU_SEC_DYNAMIC_WEP, dev_caps, !!priv->ap, is_adhoc, ap_flags, ap_wpa, ap_rsn)) {
 		WirelessSecurityDynamicWEP *ws_dynamic_wep;
 
-		ws_dynamic_wep = ws_dynamic_wep_new (priv->ui_file, priv->connection, FALSE);
+		ws_dynamic_wep = ws_dynamic_wep_new (priv->connection, FALSE);
 		if (ws_dynamic_wep) {
 			add_security_item (self, WIRELESS_SECURITY (ws_dynamic_wep), sec_model,
 			                   &iter, _("Dynamic WEP (802.1x)"));
@@ -983,7 +983,7 @@ security_combo_init (NMAWirelessDialog *self, gboolean auth_only)
 	    || nm_utils_security_valid (NMU_SEC_WPA2_PSK, dev_caps, !!priv->ap, is_adhoc, ap_flags, ap_wpa, ap_rsn)) {
 		WirelessSecurityWPAPSK *ws_wpa_psk;
 
-		ws_wpa_psk = ws_wpa_psk_new (priv->ui_file, priv->connection);
+		ws_wpa_psk = ws_wpa_psk_new (priv->connection);
 		if (ws_wpa_psk) {
 			add_security_item (self, WIRELESS_SECURITY (ws_wpa_psk), sec_model,
 			                   &iter, _("WPA & WPA2 Personal"));
@@ -997,7 +997,7 @@ security_combo_init (NMAWirelessDialog *self, gboolean auth_only)
 	    || nm_utils_security_valid (NMU_SEC_WPA2_ENTERPRISE, dev_caps, !!priv->ap, is_adhoc, ap_flags, ap_wpa, ap_rsn)) {
 		WirelessSecurityWPAEAP *ws_wpa_eap;
 
-		ws_wpa_eap = ws_wpa_eap_new (priv->ui_file, priv->connection, FALSE);
+		ws_wpa_eap = ws_wpa_eap_new (priv->connection, FALSE);
 		if (ws_wpa_eap) {
 			add_security_item (self, WIRELESS_SECURITY (ws_wpa_eap), sec_model,
 			                   &iter, _("WPA & WPA2 Enterprise"));
@@ -1400,10 +1400,9 @@ nma_wireless_dialog_init (NMAWirelessDialog *self)
 	NMAWirelessDialogPrivate *priv = NMA_WIRELESS_DIALOG_GET_PRIVATE (self);
 	GError *error = NULL;
 
-	priv->ui_file = g_build_filename (UIDIR, "applet.ui", NULL);
 	priv->builder = gtk_builder_new();
 
-	if (!gtk_builder_add_from_file (priv->builder, priv->ui_file, &error)) {
+	if (!gtk_builder_add_from_file (priv->builder, UIDIR "/applet.ui", &error)) {
 		g_warning ("Couldn't load builder file: %s", error->message);
 		g_error_free (error);
 	}
@@ -1424,8 +1423,6 @@ dispose (GObject *object)
 	if (priv->secrets_info)
 		priv->secrets_info->canceled = TRUE;
 
-	g_free (priv->ui_file);
-
 	g_object_unref (priv->builder);
 
 	model_free (priv->device_model, D_NAME_COLUMN);
diff --git a/src/wireless-security/Makefile.am b/src/wireless-security/Makefile.am
index 986d60d..831600f 100644
--- a/src/wireless-security/Makefile.am
+++ b/src/wireless-security/Makefile.am
@@ -30,6 +30,7 @@ libwireless_security_la_SOURCES = \
 
 libwireless_security_la_CPPFLAGS = \
 	$(GTK_CFLAGS) \
+	-DUIDIR=\""$(uidir)"\" \
 	$(NMA_CFLAGS) \
 	$(DISABLE_DEPRECATED) \
 	-I${top_srcdir}/src/utils \
@@ -41,3 +42,20 @@ libwireless_security_la_LIBADD = \
 	${top_builddir}/src/utils/libutils.la \
 	${top_builddir}/src/gconf-helpers/libgconf-helpers.la
 
+uidir = $(datadir)/nm-applet
+ui_DATA = \
+	eap-method-leap.ui \
+	eap-method-peap.ui \
+	eap-method-simple.ui \
+	eap-method-tls.ui \
+	eap-method-ttls.ui \
+	nag-user-dialog.ui \
+	ws-dynamic-wep.ui \
+	ws-leap.ui \
+	ws-wep-key.ui \
+	ws-wpa-eap.ui \
+	ws-wpa-psk.ui
+
+EXTRA_DIST = \
+	$(ui_DATA)
+
diff --git a/src/wireless-security/eap-method-leap.c b/src/wireless-security/eap-method-leap.c
index 626e9b0..513b10c 100644
--- a/src/wireless-security/eap-method-leap.c
+++ b/src/wireless-security/eap-method-leap.c
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #include <ctype.h>
@@ -29,6 +29,10 @@
 #include "gconf-helpers.h"
 #include "helpers.h"
 
+struct _EAPMethodLEAP {
+	EAPMethod parent;
+};
+
 static void
 show_toggled_cb (GtkCheckButton *button, EAPMethod *method)
 {
@@ -42,14 +46,6 @@ show_toggled_cb (GtkCheckButton *button, EAPMethod *method)
 	gtk_entry_set_visibility (GTK_ENTRY (widget), visible);
 }
 
-static void
-destroy (EAPMethod *parent)
-{
-	EAPMethodLEAP *method = (EAPMethodLEAP *) parent;
-
-	g_slice_free (EAPMethodLEAP, method);
-}
-
 static gboolean
 validate (EAPMethod *parent)
 {
@@ -116,52 +112,29 @@ update_secrets (EAPMethod *parent, NMConnection *connection)
 }
 
 EAPMethodLEAP *
-eap_method_leap_new (const char *ui_file,
-                     WirelessSecurity *parent,
+eap_method_leap_new (WirelessSecurity *ws_parent,
                      NMConnection *connection)
 {
-	EAPMethodLEAP *method;
+	EAPMethod *parent;
 	GtkWidget *widget;
-	GtkBuilder *builder;
-	GError *error = NULL;
-
-	g_return_val_if_fail (ui_file != NULL, NULL);
-
-	builder = gtk_builder_new ();
 
-	if (!gtk_builder_add_from_file (builder, ui_file, &error))
-	{
-		g_warning ("Couldn't load builder file: %s", error->message);
-		g_error_free (error);
+	parent = eap_method_init (sizeof (EAPMethodLEAP),
+	                          validate,
+	                          add_to_size_group,
+	                          fill_connection,
+	                          update_secrets,
+	                          NULL,
+	                          UIDIR "/eap-method-leap.ui",
+	                          "eap_leap_notebook",
+	                          "eap_leap_username_entry");
+	if (!parent)
 		return NULL;
-	}
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "eap_leap_notebook"));
-	g_assert (widget);
-	g_object_ref_sink (widget);
-
-	method = g_slice_new0 (EAPMethodLEAP);
-	if (!method) {
-		g_object_unref (builder);
-		g_object_unref (widget);
-		return NULL;
-	}
-
-	eap_method_init (EAP_METHOD (method),
-	                 validate,
-	                 add_to_size_group,
-	                 fill_connection,
-	                 update_secrets,
-	                 destroy,
-	                 builder,
-	                 widget,
-	                 "eap_leap_username_entry");
-
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "eap_leap_username_entry"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_leap_username_entry"));
 	g_assert (widget);
 	g_signal_connect (G_OBJECT (widget), "changed",
 	                  (GCallback) wireless_security_changed_cb,
-	                  parent);
+	                  ws_parent);
 	if (connection) {
 		NMSetting8021x *s_8021x;
 
@@ -170,22 +143,22 @@ eap_method_leap_new (const char *ui_file,
 			gtk_entry_set_text (GTK_ENTRY (widget), nm_setting_802_1x_get_identity (s_8021x));
 	}
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "eap_leap_password_entry"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_leap_password_entry"));
 	g_assert (widget);
 	g_signal_connect (G_OBJECT (widget), "changed",
 	                  (GCallback) wireless_security_changed_cb,
-	                  parent);
+	                  ws_parent);
 
 	/* Fill secrets, if any */
 	if (connection)
-		update_secrets (EAP_METHOD (method), connection);
+		update_secrets (parent, connection);
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "show_checkbutton_eapleap"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "show_checkbutton_eapleap"));
 	g_assert (widget);
 	g_signal_connect (G_OBJECT (widget), "toggled",
 	                  (GCallback) show_toggled_cb,
-	                  method);
+	                  parent);
 
-	return method;
+	return (EAPMethodLEAP *) parent;
 }
 
diff --git a/src/wireless-security/eap-method-leap.h b/src/wireless-security/eap-method-leap.h
index 18ac098..ec9090f 100644
--- a/src/wireless-security/eap-method-leap.h
+++ b/src/wireless-security/eap-method-leap.h
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #ifndef EAP_METHOD_LEAP_H
@@ -25,14 +25,10 @@
 
 #include "wireless-security.h"
 
-typedef struct {
-	struct _EAPMethod parent;
+typedef struct _EAPMethodLEAP EAPMethodLEAP;
 
-} EAPMethodLEAP;
-
-EAPMethodLEAP * eap_method_leap_new (const char *ui_file,
-                                     WirelessSecurity *parent,
-                                     NMConnection *connection);
+EAPMethodLEAP *eap_method_leap_new (WirelessSecurity *ws_parent,
+                                    NMConnection *connection);
 
 #endif /* EAP_METHOD_LEAP_H */
 
diff --git a/src/wireless-security/eap-method-leap.ui b/src/wireless-security/eap-method-leap.ui
new file mode 100644
index 0000000..97c7285
--- /dev/null
+++ b/src/wireless-security/eap-method-leap.ui
@@ -0,0 +1,107 @@
+<?xml version="1.0"?>
+<interface>
+  <!-- interface-requires gtk+ 2.6 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkWindow" id="eap_leap_widget">
+    <property name="visible">False</property>
+    <property name="title">eap_leap_widget</property>
+    <child>
+      <object class="GtkNotebook" id="eap_leap_notebook">
+        <property name="visible">True</property>
+        <property name="show_tabs">False</property>
+        <property name="show_border">False</property>
+        <child>
+          <object class="GtkTable" id="table9">
+            <property name="visible">True</property>
+            <property name="n_rows">3</property>
+            <property name="n_columns">2</property>
+            <property name="column_spacing">12</property>
+            <property name="row_spacing">6</property>
+            <child>
+              <object class="GtkLabel" id="eap_leap_username_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">_Username:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">eap_leap_username_entry</property>
+              </object>
+              <packing>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="eap_leap_password_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">_Password:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">eap_leap_password_entry</property>
+              </object>
+              <packing>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="eap_leap_password_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="visibility">False</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="show_checkbutton_eapleap">
+                <property name="label" translatable="yes">Sho_w password</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_underline">True</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="eap_leap_username_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+          </object>
+        </child>
+        <child type="tab">
+          <object class="GtkLabel" id="label43">
+            <property name="visible">True</property>
+          </object>
+          <packing>
+            <property name="tab_fill">False</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/src/wireless-security/eap-method-peap.c b/src/wireless-security/eap-method-peap.c
index 764b0d0..db3859a 100644
--- a/src/wireless-security/eap-method-peap.c
+++ b/src/wireless-security/eap-method-peap.c
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #include <glib/gi18n.h>
@@ -34,6 +34,14 @@
 #define I_NAME_COLUMN   0
 #define I_METHOD_COLUMN 1
 
+struct _EAPMethodPEAP {
+	EAPMethod parent;
+
+	GtkSizeGroup *size_group;
+	WirelessSecurity *sec_parent;
+	gboolean is_editor;
+};
+
 static void
 destroy (EAPMethod *parent)
 {
@@ -41,7 +49,6 @@ destroy (EAPMethod *parent)
 
 	if (method->size_group)
 		g_object_unref (method->size_group);
-	g_slice_free (EAPMethodPEAP, method);
 }
 
 static gboolean
@@ -212,11 +219,10 @@ inner_auth_combo_changed_cb (GtkWidget *combo, gpointer user_data)
 
 static GtkWidget *
 inner_auth_combo_init (EAPMethodPEAP *method,
-                       const char *ui_file,
                        NMConnection *connection,
                        NMSetting8021x *s_8021x)
 {
-	GtkBuilder *builder = EAP_METHOD (method)->builder;
+	EAPMethod *parent = (EAPMethod *) method;
 	GtkWidget *combo;
 	GtkListStore *auth_model;
 	GtkTreeIter iter;
@@ -235,8 +241,7 @@ inner_auth_combo_init (EAPMethodPEAP *method,
 			phase2_auth = nm_setting_802_1x_get_phase2_autheap (s_8021x);
 	}
 
-	em_mschap_v2 = eap_method_simple_new (ui_file,
-	                                      method->sec_parent,
+	em_mschap_v2 = eap_method_simple_new (method->sec_parent,
 	                                      connection,
 	                                      EAP_METHOD_SIMPLE_TYPE_MSCHAP_V2,
 	                                      method->is_editor);
@@ -251,11 +256,10 @@ inner_auth_combo_init (EAPMethodPEAP *method,
 	if (phase2_auth && !strcasecmp (phase2_auth, "mschapv2"))
 		active = 0;
 
-	em_md5 = eap_method_simple_new (ui_file,
-	                                 method->sec_parent,
-	                                 connection,
-	                                 EAP_METHOD_SIMPLE_TYPE_MD5,
-	                                 method->is_editor);
+	em_md5 = eap_method_simple_new (method->sec_parent,
+	                                connection,
+	                                EAP_METHOD_SIMPLE_TYPE_MD5,
+	                                method->is_editor);
 	gtk_list_store_append (auth_model, &iter);
 	gtk_list_store_set (auth_model, &iter,
 	                    I_NAME_COLUMN, _("MD5"),
@@ -267,8 +271,7 @@ inner_auth_combo_init (EAPMethodPEAP *method,
 	if (phase2_auth && !strcasecmp (phase2_auth, "md5"))
 		active = 1;
 
-	em_gtc = eap_method_simple_new (ui_file,
-	                                method->sec_parent,
+	em_gtc = eap_method_simple_new (method->sec_parent,
 	                                connection,
 	                                EAP_METHOD_SIMPLE_TYPE_GTC,
 	                                method->is_editor);
@@ -283,7 +286,7 @@ inner_auth_combo_init (EAPMethodPEAP *method,
 	if (phase2_auth && !strcasecmp (phase2_auth, "gtc"))
 		active = 2;
 
-	combo = GTK_WIDGET (gtk_builder_get_object (builder, "eap_peap_inner_auth_combo"));
+	combo = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_peap_inner_auth_combo"));
 	g_assert (combo);
 
 	gtk_combo_box_set_model (GTK_COMBO_BOX (combo), GTK_TREE_MODEL (auth_model));
@@ -306,70 +309,49 @@ update_secrets (EAPMethod *parent, NMConnection *connection)
 }
 
 EAPMethodPEAP *
-eap_method_peap_new (const char *ui_file,
-                     WirelessSecurity *parent,
+eap_method_peap_new (WirelessSecurity *ws_parent,
                      NMConnection *connection,
                      gboolean is_editor)
 {
+	EAPMethod *parent;
 	EAPMethodPEAP *method;
 	GtkWidget *widget;
-	GtkBuilder *builder;
 	GtkFileFilter *filter;
 	NMSetting8021x *s_8021x = NULL;
 	const char *filename;
-	GError *error = NULL;
-
-	g_return_val_if_fail (ui_file != NULL, NULL);
 
-	builder = gtk_builder_new ();
-	if (!gtk_builder_add_from_file (builder, ui_file, &error))
-	{
-		g_warning ("Couldn't load builder file: %s", error->message);
-		g_error_free (error);
+	parent = eap_method_init (sizeof (EAPMethodPEAP),
+	                          validate,
+	                          add_to_size_group,
+	                          fill_connection,
+	                          update_secrets,
+	                          destroy,
+	                          UIDIR "/eap-method-peap.ui",
+	                          "eap_peap_notebook",
+	                          "eap_peap_anon_identity_entry");
+	if (!parent)
 		return NULL;
-	}
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "eap_peap_notebook"));
-	g_assert (widget);
-	g_object_ref_sink (widget);
-
-	method = g_slice_new0 (EAPMethodPEAP);
-	if (!method) {
-		g_object_unref (builder);
-		g_object_unref (widget);
-		return NULL;
-	}
-
-	eap_method_init (EAP_METHOD (method),
-	                 validate,
-	                 add_to_size_group,
-	                 fill_connection,
-	                 update_secrets,
-	                 destroy,
-	                 builder,
-	                 widget,
-	                 "eap_peap_anon_identity_entry");
-
-	eap_method_nag_init (EAP_METHOD (method),
-	                     ui_file,
+	eap_method_nag_init (parent,
 	                     "eap_peap_ca_cert_button",
 	                     connection,
 	                     FALSE);
 
-	method->sec_parent = parent;
+	method = (EAPMethodPEAP *) parent;
+	method->sec_parent = ws_parent;
 	method->is_editor = is_editor;
 
 	if (connection)
 		s_8021x = NM_SETTING_802_1X (nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X));
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "eap_peap_ca_cert_button"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_peap_ca_cert_button"));
 	g_assert (widget);
 	gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (widget), TRUE);
 	gtk_file_chooser_button_set_title (GTK_FILE_CHOOSER_BUTTON (widget),
 	                                   _("Choose a Certificate Authority certificate..."));
 	g_signal_connect (G_OBJECT (widget), "selection-changed",
 	                  (GCallback) wireless_security_changed_cb,
-	                  parent);
+	                  ws_parent);
 	filter = eap_method_default_file_chooser_filter_new (FALSE);
 	gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (widget), filter);
 	if (connection && s_8021x) {
@@ -380,10 +362,10 @@ eap_method_peap_new (const char *ui_file,
 		}
 	}
 
-	widget = inner_auth_combo_init (method, ui_file, connection, s_8021x);
+	widget = inner_auth_combo_init (method, connection, s_8021x);
 	inner_auth_combo_changed_cb (widget, (gpointer) method);
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "eap_peap_version_combo"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_peap_version_combo"));
 	g_assert (widget);
 	gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
 	if (s_8021x) {
@@ -400,14 +382,14 @@ eap_method_peap_new (const char *ui_file,
 	}
 	g_signal_connect (G_OBJECT (widget), "changed",
 	                  (GCallback) wireless_security_changed_cb,
-	                  parent);
+	                  ws_parent);
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "eap_peap_anon_identity_entry"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_peap_anon_identity_entry"));
 	if (s_8021x && nm_setting_802_1x_get_anonymous_identity (s_8021x))
 		gtk_entry_set_text (GTK_ENTRY (widget), nm_setting_802_1x_get_anonymous_identity (s_8021x));
 	g_signal_connect (G_OBJECT (widget), "changed",
 	                  (GCallback) wireless_security_changed_cb,
-	                  parent);
+	                  ws_parent);
 
 	return method;
 }
diff --git a/src/wireless-security/eap-method-peap.h b/src/wireless-security/eap-method-peap.h
index 1967ccc..1443522 100644
--- a/src/wireless-security/eap-method-peap.h
+++ b/src/wireless-security/eap-method-peap.h
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #ifndef EAP_METHOD_PEAP_H
@@ -25,18 +25,11 @@
 
 #include "wireless-security.h"
 
-typedef struct {
-	struct _EAPMethod parent;
+typedef struct _EAPMethodPEAP EAPMethodPEAP;
 
-	GtkSizeGroup *size_group;
-	WirelessSecurity *sec_parent;
-	gboolean is_editor;
-} EAPMethodPEAP;
-
-EAPMethodPEAP * eap_method_peap_new (const char *ui_file,
-                                     WirelessSecurity *parent,
-                                     NMConnection *connection,
-                                     gboolean is_editor);
+EAPMethodPEAP *eap_method_peap_new (WirelessSecurity *ws_parent,
+                                    NMConnection *connection,
+                                    gboolean is_editor);
 
 #endif /* EAP_METHOD_PEAP_H */
 
diff --git a/src/wireless-security/eap-method-peap.ui b/src/wireless-security/eap-method-peap.ui
new file mode 100644
index 0000000..bb0d916
--- /dev/null
+++ b/src/wireless-security/eap-method-peap.ui
@@ -0,0 +1,196 @@
+<?xml version="1.0"?>
+<interface>
+  <object class="GtkListStore" id="model8">
+    <columns>
+      <column type="gchararray"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0" translatable="yes"> </col>
+      </row>
+    </data>
+  </object>
+  <object class="GtkListStore" id="model9">
+    <columns>
+      <column type="gchararray"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0" translatable="yes">Automatic</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Version 0</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Version 1</col>
+      </row>
+    </data>
+  </object>
+  <!-- interface-requires gtk+ 2.6 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkWindow" id="eap_peap_widget">
+    <property name="visible">False</property>
+    <property name="title">eap_peap_widget</property>
+    <child>
+      <object class="GtkNotebook" id="eap_peap_notebook">
+        <property name="visible">True</property>
+        <property name="show_tabs">False</property>
+        <property name="show_border">False</property>
+        <child>
+          <object class="GtkTable" id="table13">
+            <property name="visible">True</property>
+            <property name="n_rows">5</property>
+            <property name="n_columns">2</property>
+            <property name="column_spacing">12</property>
+            <property name="row_spacing">6</property>
+            <child>
+              <object class="GtkLabel" id="eap_peap_anon_identity_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Anony_mous identity:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">eap_peap_anon_identity_entry</property>
+              </object>
+              <packing>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="eap_peap_anon_identity_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="eap_peap_ca_cert_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">C_A certificate:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">eap_peap_ca_cert_button</property>
+              </object>
+              <packing>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkFileChooserButton" id="eap_peap_ca_cert_button">
+                <property name="visible">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkVBox" id="eap_peap_inner_auth_vbox">
+                <property name="visible">True</property>
+                <property name="orientation">vertical</property>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="right_attach">2</property>
+                <property name="top_attach">4</property>
+                <property name="bottom_attach">5</property>
+                <property name="x_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="eap_peap_inner_auth_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">I_nner authentication:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">eap_peap_inner_auth_combo</property>
+              </object>
+              <packing>
+                <property name="top_attach">3</property>
+                <property name="bottom_attach">4</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkComboBox" id="eap_peap_inner_auth_combo">
+                <property name="visible">True</property>
+                <property name="model">model8</property>
+                <child>
+                  <object class="GtkCellRendererText" id="renderer8"/>
+                  <attributes>
+                    <attribute name="text">0</attribute>
+                  </attributes>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">3</property>
+                <property name="bottom_attach">4</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="eap_peap_version_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">_PEAP version:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">eap_peap_version_combo</property>
+              </object>
+              <packing>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkComboBox" id="eap_peap_version_combo">
+                <property name="visible">True</property>
+                <property name="model">model9</property>
+                <child>
+                  <object class="GtkCellRendererText" id="renderer9"/>
+                  <attributes>
+                    <attribute name="text">0</attribute>
+                  </attributes>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options">GTK_FILL</property>
+              </packing>
+            </child>
+          </object>
+        </child>
+        <child type="tab">
+          <object class="GtkLabel" id="label61">
+            <property name="visible">True</property>
+          </object>
+          <packing>
+            <property name="tab_fill">False</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/src/wireless-security/eap-method-simple.c b/src/wireless-security/eap-method-simple.c
index 98e8644..3bbec1f 100644
--- a/src/wireless-security/eap-method-simple.c
+++ b/src/wireless-security/eap-method-simple.c
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #include <ctype.h>
@@ -30,6 +30,13 @@
 #include "gconf-helpers.h"
 #include "helpers.h"
 
+struct _EAPMethodSimple {
+	EAPMethod parent;
+
+	EAPMethodSimpleType type;
+	gboolean is_editor;
+};
+
 static void
 show_toggled_cb (GtkCheckButton *button, EAPMethod *method)
 {
@@ -43,14 +50,6 @@ show_toggled_cb (GtkCheckButton *button, EAPMethod *method)
 	gtk_entry_set_visibility (GTK_ENTRY (widget), visible);
 }
 
-static void
-destroy (EAPMethod *parent)
-{
-	EAPMethodSimple *method = (EAPMethodSimple *) parent;
-
-	g_slice_free (EAPMethodSimple, method);
-}
-
 static gboolean
 validate (EAPMethod *parent)
 {
@@ -189,57 +188,37 @@ password_always_ask_changed (GtkButton *button, EAPMethodSimple *method)
 }
 
 EAPMethodSimple *
-eap_method_simple_new (const char *ui_file,
-                       WirelessSecurity *parent,
+eap_method_simple_new (WirelessSecurity *ws_parent,
                        NMConnection *connection,
                        EAPMethodSimpleType type,
                        gboolean is_editor)
 {
+	EAPMethod *parent;
 	EAPMethodSimple *method;
 	GtkWidget *widget;
-	GtkBuilder *builder;
 	gboolean always_ask = FALSE;
-	GError *error = NULL;
 
-	g_return_val_if_fail (ui_file != NULL, NULL);
-
-	builder = gtk_builder_new ();
-	if (!gtk_builder_add_from_file (builder, ui_file, &error))
-	{
-		g_warning ("Couldn't load builder file: %s", error->message);
-		g_error_free (error);
+	parent = eap_method_init (sizeof (EAPMethodSimple),
+	                          validate,
+	                          add_to_size_group,
+	                          fill_connection,
+	                          update_secrets,
+	                          NULL,
+	                          UIDIR "/eap-method-simple.ui",
+	                          "eap_simple_notebook",
+	                          "eap_simple_username_entry");
+	if (!parent)
 		return NULL;
-	}
-
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "eap_simple_notebook"));
-	g_assert (widget);
-	g_object_ref_sink (widget);
-
-	method = g_slice_new0 (EAPMethodSimple);
-	if (!method) {
-		g_object_unref (builder);
-		g_object_unref (widget);
-		return NULL;
-	}
-
-	eap_method_init (EAP_METHOD (method),
-	                 validate,
-	                 add_to_size_group,
-	                 fill_connection,
-	                 update_secrets,
-	                 destroy,
-	                 builder,
-	                 widget,
-	                 "eap_simple_username_entry");
 
+	method = (EAPMethodSimple *) parent;
 	method->type = type;
 	method->is_editor = is_editor;
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "eap_simple_username_entry"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_simple_username_entry"));
 	g_assert (widget);
 	g_signal_connect (G_OBJECT (widget), "changed",
 	                  (GCallback) wireless_security_changed_cb,
-	                  parent);
+	                  ws_parent);
 	if (connection) {
 		NMSetting8021x *s_8021x;
 
@@ -248,17 +227,17 @@ eap_method_simple_new (const char *ui_file,
 			gtk_entry_set_text (GTK_ENTRY (widget), nm_setting_802_1x_get_identity (s_8021x));
 	}
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "eap_simple_password_entry"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_simple_password_entry"));
 	g_assert (widget);
 	g_signal_connect (G_OBJECT (widget), "changed",
 	                  (GCallback) wireless_security_changed_cb,
-	                  parent);
+	                  ws_parent);
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "eap_password_always_ask"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_password_always_ask"));
 	g_assert (widget);
 	g_signal_connect (G_OBJECT (widget), "toggled",
 	                  (GCallback) wireless_security_changed_cb,
-	                  parent);
+	                  ws_parent);
 	if (is_editor) {
 		/* We only desensitize the password entry from the editor, because
 		 * from nm-applet if the entry was desensitized, there'd be no way to
@@ -288,7 +267,7 @@ eap_method_simple_new (const char *ui_file,
 	if (connection && !always_ask)
 		update_secrets (EAP_METHOD (method), connection);
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "show_checkbutton_eapsimple"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "show_checkbutton_eapsimple"));
 	g_assert (widget);
 	g_signal_connect (G_OBJECT (widget), "toggled",
 	                  (GCallback) show_toggled_cb,
diff --git a/src/wireless-security/eap-method-simple.h b/src/wireless-security/eap-method-simple.h
index ac84ecd..3f072a2 100644
--- a/src/wireless-security/eap-method-simple.h
+++ b/src/wireless-security/eap-method-simple.h
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #ifndef EAP_METHOD_SIMPLE_H
@@ -34,18 +34,12 @@ typedef enum {
 	EAP_METHOD_SIMPLE_TYPE_GTC
 } EAPMethodSimpleType;
 
-typedef struct {
-	struct _EAPMethod parent;
+typedef struct _EAPMethodSimple EAPMethodSimple;
 
-	EAPMethodSimpleType type;
-	gboolean is_editor;
-} EAPMethodSimple;
-
-EAPMethodSimple * eap_method_simple_new (const char *ui_file,
-                                         WirelessSecurity *parent,
-                                         NMConnection *connection,
-                                         EAPMethodSimpleType type,
-                                         gboolean is_editor);
+EAPMethodSimple *eap_method_simple_new (WirelessSecurity *ws_parent,
+                                        NMConnection *connection,
+                                        EAPMethodSimpleType type,
+                                        gboolean is_editor);
 
 #endif /* EAP_METHOD_SIMPLE_H */
 
diff --git a/src/wireless-security/eap-method-simple.ui b/src/wireless-security/eap-method-simple.ui
new file mode 100644
index 0000000..13bf457
--- /dev/null
+++ b/src/wireless-security/eap-method-simple.ui
@@ -0,0 +1,135 @@
+<?xml version="1.0"?>
+<interface>
+  <!-- interface-requires gtk+ 2.6 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkWindow" id="eap_simple_widget">
+    <property name="visible">False</property>
+    <property name="title">eap_simple_widget</property>
+    <child>
+      <object class="GtkNotebook" id="eap_simple_notebook">
+        <property name="visible">True</property>
+        <property name="show_tabs">False</property>
+        <property name="show_border">False</property>
+        <child>
+          <object class="GtkTable" id="table11">
+            <property name="visible">True</property>
+            <property name="n_rows">3</property>
+            <property name="n_columns">2</property>
+            <property name="column_spacing">12</property>
+            <property name="row_spacing">6</property>
+            <child>
+              <object class="GtkLabel" id="eap_simple_username_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">_Username:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">eap_simple_username_entry</property>
+              </object>
+              <packing>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="eap_simple_password_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">_Password:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">eap_simple_password_entry</property>
+              </object>
+              <packing>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="eap_simple_password_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="visibility">False</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="eap_simple_username_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkAlignment" id="alignment1">
+                <property name="visible">True</property>
+                <child>
+                  <object class="GtkVBox" id="vbox5">
+                    <property name="visible">True</property>
+                    <property name="orientation">vertical</property>
+                    <child>
+                      <object class="GtkCheckButton" id="eap_password_always_ask">
+                        <property name="label" translatable="yes">As_k for this password every time</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="use_underline">True</property>
+                        <property name="draw_indicator">True</property>
+                      </object>
+                      <packing>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkCheckButton" id="show_checkbutton_eapsimple">
+                        <property name="label" translatable="yes">Sho_w password</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="use_underline">True</property>
+                        <property name="draw_indicator">True</property>
+                      </object>
+                      <packing>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <placeholder/>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+              </packing>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+          </object>
+        </child>
+        <child type="tab">
+          <object class="GtkLabel" id="label53">
+            <property name="visible">True</property>
+          </object>
+          <packing>
+            <property name="tab_fill">False</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/src/wireless-security/eap-method-tls.c b/src/wireless-security/eap-method-tls.c
index d2bcec3..26eaafc 100644
--- a/src/wireless-security/eap-method-tls.c
+++ b/src/wireless-security/eap-method-tls.c
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #include <glib/gi18n.h>
@@ -33,6 +33,13 @@
 #include "utils.h"
 #include "helpers.h"
 
+struct _EAPMethodTLS {
+	EAPMethod parent;
+
+	gboolean phase2;
+};
+
+
 static void
 show_toggled_cb (GtkCheckButton *button, EAPMethod *method)
 {
@@ -46,14 +53,6 @@ show_toggled_cb (GtkCheckButton *button, EAPMethod *method)
 	gtk_entry_set_visibility (GTK_ENTRY (widget), visible);
 }
 
-static void
-destroy (EAPMethod *parent)
-{
-	EAPMethodTLS *method = (EAPMethodTLS *) parent;
-
-	g_slice_free (EAPMethodTLS, method);
-}
-
 static gboolean
 validate (EAPMethod *parent)
 {
@@ -296,7 +295,7 @@ static void
 setup_filepicker (GtkBuilder *builder,
                   const char *name,
                   const char *title,
-                  WirelessSecurity *parent,
+                  WirelessSecurity *ws_parent,
                   EAPMethodTLS *method,
                   NMSetting8021x *s_8021x,
                   SchemeFunc scheme_func,
@@ -334,7 +333,7 @@ setup_filepicker (GtkBuilder *builder,
 
 	g_signal_connect (G_OBJECT (widget), "selection-changed",
 	                  (GCallback) wireless_security_changed_cb,
-	                  parent);
+	                  ws_parent);
 
 	filter = eap_method_default_file_chooser_filter_new (privkey);
 	gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (widget), filter);
@@ -388,82 +387,61 @@ update_secrets (EAPMethod *parent, NMConnection *connection)
 }
 
 EAPMethodTLS *
-eap_method_tls_new (const char *ui_file,
-                    WirelessSecurity *parent,
+eap_method_tls_new (WirelessSecurity *ws_parent,
                     NMConnection *connection,
                     gboolean phase2)
 {
+	EAPMethod *parent;
 	EAPMethodTLS *method;
 	GtkWidget *widget;
-	GtkBuilder *builder;
 	NMSetting8021x *s_8021x = NULL;
-    GError *error = NULL;
 
-	g_return_val_if_fail (ui_file != NULL, NULL);
-
-	builder = gtk_builder_new ();
-	if (!gtk_builder_add_from_file (builder, ui_file, &error))
-	{
-		g_warning ("Couldn't load builder file: %s", error->message);
-		g_error_free (error);
+	parent = eap_method_init (sizeof (EAPMethodTLS),
+	                          validate,
+	                          add_to_size_group,
+	                          fill_connection,
+	                          update_secrets,
+	                          NULL,
+	                          UIDIR "/eap-method-tls.ui",
+	                          "eap_tls_notebook",
+	                          "eap_tls_identity_entry");
+	if (!parent)
 		return NULL;
-	}
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "eap_tls_notebook"));
-	g_assert (widget);
-	g_object_ref_sink (widget);
-
-	method = g_slice_new0 (EAPMethodTLS);
-	if (!method) {
-		g_object_unref (builder);
-		g_object_unref (widget);
-		return NULL;
-	}
-
-	eap_method_init (EAP_METHOD (method),
-	                 validate,
-	                 add_to_size_group,
-	                 fill_connection,
-	                 update_secrets,
-	                 destroy,
-	                 builder,
-	                 widget,
-	                 "eap_tls_identity_entry");
-
-	eap_method_nag_init (EAP_METHOD (method),
-	                     ui_file,
+	eap_method_nag_init (parent,
 	                     "eap_tls_ca_cert_button",
 	                     connection,
 	                     phase2);
 
+	method = (EAPMethodTLS *) parent;
 	method->phase2 = phase2;
 
 	if (connection)
 		s_8021x = NM_SETTING_802_1X (nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X));
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "eap_tls_identity_entry"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_tls_identity_entry"));
 	g_assert (widget);
 	g_signal_connect (G_OBJECT (widget), "changed",
 	                  (GCallback) wireless_security_changed_cb,
-	                  parent);
+	                  ws_parent);
 	if (s_8021x && nm_setting_802_1x_get_identity (s_8021x))
 		gtk_entry_set_text (GTK_ENTRY (widget), nm_setting_802_1x_get_identity (s_8021x));
 
-	setup_filepicker (builder, "eap_tls_user_cert_button",
+	setup_filepicker (parent->builder, "eap_tls_user_cert_button",
 	                  _("Choose your personal certificate..."),
-	                  parent, method, s_8021x,
+	                  ws_parent, method, s_8021x,
 	                  phase2 ? nm_setting_802_1x_get_phase2_client_cert_scheme : nm_setting_802_1x_get_client_cert_scheme,
 	                  phase2 ? nm_setting_802_1x_get_phase2_client_cert_path : nm_setting_802_1x_get_client_cert_path,
 	                  FALSE, TRUE);
-	setup_filepicker (builder, "eap_tls_ca_cert_button",
+	setup_filepicker (parent->builder, "eap_tls_ca_cert_button",
 	                  _("Choose a Certificate Authority certificate..."),
-	                  parent, method, s_8021x,
+	                  ws_parent, method, s_8021x,
 	                  phase2 ? nm_setting_802_1x_get_phase2_ca_cert_scheme : nm_setting_802_1x_get_ca_cert_scheme,
 	                  phase2 ? nm_setting_802_1x_get_phase2_ca_cert_path : nm_setting_802_1x_get_ca_cert_path,
 	                  FALSE, FALSE);
-	setup_filepicker (builder, "eap_tls_private_key_button",
+	setup_filepicker (parent->builder, "eap_tls_private_key_button",
 	                  _("Choose your private key..."),
-	                  parent, method, s_8021x,
+	                  ws_parent, method, s_8021x,
 	                  phase2 ? nm_setting_802_1x_get_phase2_private_key_scheme : nm_setting_802_1x_get_private_key_scheme,
 	                  phase2 ? nm_setting_802_1x_get_phase2_private_key_path : nm_setting_802_1x_get_private_key_path,
 	                  TRUE, FALSE);
@@ -472,13 +450,13 @@ eap_method_tls_new (const char *ui_file,
 	if (connection)
 		update_secrets (EAP_METHOD (method), connection);
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "eap_tls_private_key_password_entry"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_tls_private_key_password_entry"));
 	g_assert (widget);
 	g_signal_connect (G_OBJECT (widget), "changed",
 	                  (GCallback) wireless_security_changed_cb,
-	                  parent);
+	                  ws_parent);
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "show_checkbutton_eaptls"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "show_checkbutton_eaptls"));
 	g_assert (widget);
 	g_signal_connect (G_OBJECT (widget), "toggled",
 	                  (GCallback) show_toggled_cb,
diff --git a/src/wireless-security/eap-method-tls.h b/src/wireless-security/eap-method-tls.h
index ff1d29e..8cd42c4 100644
--- a/src/wireless-security/eap-method-tls.h
+++ b/src/wireless-security/eap-method-tls.h
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #ifndef EAP_METHOD_TLS_H
@@ -25,16 +25,11 @@
 
 #include "wireless-security.h"
 
-typedef struct {
-	struct _EAPMethod parent;
+typedef struct _EAPMethodTLS EAPMethodTLS;
 
-	gboolean phase2;
-} EAPMethodTLS;
-
-EAPMethodTLS * eap_method_tls_new (const char *ui_file,
-                                   WirelessSecurity *parent,
-                                   NMConnection *connection,
-                                   gboolean phase2);
+EAPMethodTLS *eap_method_tls_new (WirelessSecurity *ws_parent,
+                                  NMConnection *connection,
+                                  gboolean phase2);
 
 #endif /* EAP_METHOD_TLS_H */
 
diff --git a/src/wireless-security/eap-method-tls.ui b/src/wireless-security/eap-method-tls.ui
new file mode 100644
index 0000000..698b7c8
--- /dev/null
+++ b/src/wireless-security/eap-method-tls.ui
@@ -0,0 +1,191 @@
+<?xml version="1.0"?>
+<interface>
+  <!-- interface-requires gtk+ 2.6 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkWindow" id="eap_tls_widget">
+    <property name="visible">False</property>
+    <property name="title">eap_tls_widget</property>
+    <child>
+      <object class="GtkNotebook" id="eap_tls_notebook">
+        <property name="visible">True</property>
+        <property name="show_tabs">False</property>
+        <property name="show_border">False</property>
+        <child>
+          <object class="GtkTable" id="table8">
+            <property name="visible">True</property>
+            <property name="n_rows">6</property>
+            <property name="n_columns">2</property>
+            <property name="column_spacing">12</property>
+            <property name="row_spacing">6</property>
+            <child>
+              <object class="GtkLabel" id="eap_tls_identity_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">I_dentity:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">eap_tls_identity_entry</property>
+              </object>
+              <packing>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="eap_tls_identity_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="eap_tls_user_cert_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">_User certificate:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">eap_tls_user_cert_button</property>
+              </object>
+              <packing>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="eap_tls_ca_cert_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">C_A certificate:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">eap_tls_ca_cert_button</property>
+              </object>
+              <packing>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkFileChooserButton" id="eap_tls_ca_cert_button">
+                <property name="visible">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="eap_tls_private_key_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Private _key:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">eap_tls_private_key_button</property>
+              </object>
+              <packing>
+                <property name="top_attach">3</property>
+                <property name="bottom_attach">4</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkFileChooserButton" id="eap_tls_private_key_button">
+                <property name="visible">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">3</property>
+                <property name="bottom_attach">4</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="eap_tls_private_key_password_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">_Private key password:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">eap_tls_private_key_password_entry</property>
+              </object>
+              <packing>
+                <property name="top_attach">4</property>
+                <property name="bottom_attach">5</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="eap_tls_private_key_password_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="visibility">False</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">4</property>
+                <property name="bottom_attach">5</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="show_checkbutton_eaptls">
+                <property name="label" translatable="yes">Sho_w password</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_underline">True</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">5</property>
+                <property name="bottom_attach">6</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkFileChooserButton" id="eap_tls_user_cert_button">
+                <property name="visible">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+          </object>
+        </child>
+        <child type="tab">
+          <object class="GtkLabel" id="label34">
+            <property name="visible">True</property>
+          </object>
+          <packing>
+            <property name="tab_fill">False</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/src/wireless-security/eap-method-ttls.c b/src/wireless-security/eap-method-ttls.c
index f9102d0..0d6e1af 100644
--- a/src/wireless-security/eap-method-ttls.c
+++ b/src/wireless-security/eap-method-ttls.c
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #include <glib/gi18n.h>
@@ -34,6 +34,14 @@
 #define I_NAME_COLUMN   0
 #define I_METHOD_COLUMN 1
 
+struct _EAPMethodTTLS {
+	EAPMethod parent;
+
+	GtkSizeGroup *size_group;
+	WirelessSecurity *sec_parent;
+	gboolean is_editor;
+};
+
 static void
 destroy (EAPMethod *parent)
 {
@@ -41,7 +49,6 @@ destroy (EAPMethod *parent)
 
 	if (method->size_group)
 		g_object_unref (method->size_group);
-	g_slice_free (EAPMethodTTLS, method);
 }
 
 static gboolean
@@ -173,6 +180,7 @@ inner_auth_combo_changed_cb (GtkWidget *combo, gpointer user_data)
 	children = gtk_container_get_children (GTK_CONTAINER (vbox));
 	for (elt = children; elt; elt = g_list_next (elt))
 		gtk_container_remove (GTK_CONTAINER (vbox), GTK_WIDGET (elt->data));
+	g_list_free (children);
 
 	model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
 	gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter);
@@ -194,11 +202,10 @@ inner_auth_combo_changed_cb (GtkWidget *combo, gpointer user_data)
 
 static GtkWidget *
 inner_auth_combo_init (EAPMethodTTLS *method,
-                       const char *ui_file,
                        NMConnection *connection,
                        NMSetting8021x *s_8021x)
 {
-	GtkBuilder *builder = EAP_METHOD (method)->builder;
+	EAPMethod *parent = (EAPMethod *) method;
 	GtkWidget *combo;
 	GtkListStore *auth_model;
 	GtkTreeIter iter;
@@ -218,8 +225,7 @@ inner_auth_combo_init (EAPMethodTTLS *method,
 			phase2_auth = nm_setting_802_1x_get_phase2_autheap (s_8021x);
 	}
 
-	em_pap = eap_method_simple_new (ui_file,
-	                                method->sec_parent,
+	em_pap = eap_method_simple_new (method->sec_parent,
 	                                connection,
 	                                EAP_METHOD_SIMPLE_TYPE_PAP,
 	                                method->is_editor);
@@ -234,8 +240,7 @@ inner_auth_combo_init (EAPMethodTTLS *method,
 	if (phase2_auth && !strcasecmp (phase2_auth, "pap"))
 		active = 0;
 
-	em_mschap = eap_method_simple_new (ui_file,
-	                                   method->sec_parent,
+	em_mschap = eap_method_simple_new (method->sec_parent,
 	                                   connection,
 	                                   EAP_METHOD_SIMPLE_TYPE_MSCHAP,
 	                                   method->is_editor);
@@ -250,8 +255,7 @@ inner_auth_combo_init (EAPMethodTTLS *method,
 	if (phase2_auth && !strcasecmp (phase2_auth, "mschap"))
 		active = 1;
 
-	em_mschap_v2 = eap_method_simple_new (ui_file,
-	                                      method->sec_parent,
+	em_mschap_v2 = eap_method_simple_new (method->sec_parent,
 	                                      connection,
 	                                      EAP_METHOD_SIMPLE_TYPE_MSCHAP_V2,
 	                                      method->is_editor);
@@ -266,8 +270,7 @@ inner_auth_combo_init (EAPMethodTTLS *method,
 	if (phase2_auth && !strcasecmp (phase2_auth, "mschapv2"))
 		active = 2;
 
-	em_chap = eap_method_simple_new (ui_file,
-	                                 method->sec_parent,
+	em_chap = eap_method_simple_new (method->sec_parent,
 	                                 connection,
 	                                 EAP_METHOD_SIMPLE_TYPE_CHAP,
 	                                 method->is_editor);
@@ -282,7 +285,7 @@ inner_auth_combo_init (EAPMethodTTLS *method,
 	if (phase2_auth && !strcasecmp (phase2_auth, "chap"))
 		active = 3;
 
-	combo = GTK_WIDGET (gtk_builder_get_object (builder, "eap_ttls_inner_auth_combo"));
+	combo = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_ttls_inner_auth_combo"));
 	g_assert (combo);
 
 	gtk_combo_box_set_model (GTK_COMBO_BOX (combo), GTK_TREE_MODEL (auth_model));
@@ -305,70 +308,49 @@ update_secrets (EAPMethod *parent, NMConnection *connection)
 }
 
 EAPMethodTTLS *
-eap_method_ttls_new (const char *ui_file,
-                     WirelessSecurity *parent,
+eap_method_ttls_new (WirelessSecurity *ws_parent,
                      NMConnection *connection,
                      gboolean is_editor)
 {
+	EAPMethod *parent;
 	EAPMethodTTLS *method;
 	GtkWidget *widget;
-	GtkBuilder *builder;
 	GtkFileFilter *filter;
 	NMSetting8021x *s_8021x = NULL;
 	const char *filename;
-    GError *error = NULL;
-
-	g_return_val_if_fail (ui_file != NULL, NULL);
 
-	builder = gtk_builder_new ();
-	if (!gtk_builder_add_from_file (builder, ui_file, &error))
-	{
-		g_warning ("Couldn't load builder file: %s", error->message);
-		g_error_free (error);
+	parent = eap_method_init (sizeof (EAPMethodTTLS),
+	                          validate,
+	                          add_to_size_group,
+	                          fill_connection,
+	                          update_secrets,
+	                          destroy,
+	                          UIDIR "/eap-method-ttls.ui",
+	                          "eap_ttls_notebook",
+	                          "eap_ttls_anon_identity_entry");
+	if (!parent)
 		return NULL;
-	}
-
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "eap_ttls_notebook"));
-	g_assert (widget);
-	g_object_ref_sink (widget);
 
-	method = g_slice_new0 (EAPMethodTTLS);
-	if (!method) {
-		g_object_unref (builder);
-		g_object_unref (widget);
-		return NULL;
-	}
-
-	eap_method_init (EAP_METHOD (method),
-	                 validate,
-	                 add_to_size_group,
-	                 fill_connection,
-	                 update_secrets,
-	                 destroy,
-	                 builder,
-	                 widget,
-	                 "eap_ttls_anon_identity_entry");
-
-	eap_method_nag_init (EAP_METHOD (method),
-	                     ui_file,
+	eap_method_nag_init (parent,
 	                     "eap_ttls_ca_cert_button",
 	                     connection,
 	                     FALSE);
 
-	method->sec_parent = parent;
+	method = (EAPMethodTTLS *) parent;
+	method->sec_parent = ws_parent;
 	method->is_editor = is_editor;
 
 	if (connection)
 		s_8021x = NM_SETTING_802_1X (nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X));
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "eap_ttls_ca_cert_button"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_ttls_ca_cert_button"));
 	g_assert (widget);
 	gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (widget), TRUE);
 	gtk_file_chooser_button_set_title (GTK_FILE_CHOOSER_BUTTON (widget),
 	                                   _("Choose a Certificate Authority certificate..."));
 	g_signal_connect (G_OBJECT (widget), "selection-changed",
 	                  (GCallback) wireless_security_changed_cb,
-	                  parent);
+	                  ws_parent);
 	filter = eap_method_default_file_chooser_filter_new (FALSE);
 	gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (widget), filter);
 	if (connection && s_8021x) {
@@ -379,14 +361,14 @@ eap_method_ttls_new (const char *ui_file,
 		}
 	}
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "eap_ttls_anon_identity_entry"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_ttls_anon_identity_entry"));
 	if (s_8021x && nm_setting_802_1x_get_anonymous_identity (s_8021x))
 		gtk_entry_set_text (GTK_ENTRY (widget), nm_setting_802_1x_get_anonymous_identity (s_8021x));
 	g_signal_connect (G_OBJECT (widget), "changed",
 	                  (GCallback) wireless_security_changed_cb,
-	                  parent);
+	                  ws_parent);
 
-	widget = inner_auth_combo_init (method, ui_file, connection, s_8021x);
+	widget = inner_auth_combo_init (method, connection, s_8021x);
 	inner_auth_combo_changed_cb (widget, (gpointer) method);
 
 	return method;
diff --git a/src/wireless-security/eap-method-ttls.h b/src/wireless-security/eap-method-ttls.h
index f4e70fd..503b357 100644
--- a/src/wireless-security/eap-method-ttls.h
+++ b/src/wireless-security/eap-method-ttls.h
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #ifndef EAP_METHOD_TTLS_H
@@ -25,18 +25,11 @@
 
 #include "wireless-security.h"
 
-typedef struct {
-	struct _EAPMethod parent;
+typedef struct _EAPMethodTTLS EAPMethodTTLS;
 
-	GtkSizeGroup *size_group;
-	WirelessSecurity *sec_parent;
-	gboolean is_editor;
-} EAPMethodTTLS;
-
-EAPMethodTTLS * eap_method_ttls_new (const char *ui_file,
-                                     WirelessSecurity *parent,
-                                     NMConnection *connection,
-                                     gboolean is_editor);
+EAPMethodTTLS *eap_method_ttls_new (WirelessSecurity *ws_parent,
+                                    NMConnection *connection,
+                                    gboolean is_editor);
 
 #endif /* EAP_METHOD_TLS_H */
 
diff --git a/src/wireless-security/eap-method-ttls.ui b/src/wireless-security/eap-method-ttls.ui
new file mode 100644
index 0000000..f75ecab
--- /dev/null
+++ b/src/wireless-security/eap-method-ttls.ui
@@ -0,0 +1,146 @@
+<?xml version="1.0"?>
+<interface>
+  <object class="GtkListStore" id="model6">
+    <columns>
+      <column type="gchararray"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0" translatable="yes"> </col>
+      </row>
+    </data>
+  </object>
+  <!-- interface-requires gtk+ 2.6 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkWindow" id="eap_ttls_widget">
+    <property name="visible">False</property>
+    <property name="title">eap_ttls_widget</property>
+    <child>
+      <object class="GtkNotebook" id="eap_ttls_notebook">
+        <property name="visible">True</property>
+        <property name="show_tabs">False</property>
+        <property name="show_border">False</property>
+        <child>
+          <object class="GtkTable" id="table10">
+            <property name="visible">True</property>
+            <property name="n_rows">4</property>
+            <property name="n_columns">2</property>
+            <property name="column_spacing">12</property>
+            <property name="row_spacing">6</property>
+            <child>
+              <object class="GtkLabel" id="eap_ttls_anon_identity_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Anony_mous identity:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">eap_ttls_anon_identity_entry</property>
+              </object>
+              <packing>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="eap_ttls_anon_identity_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="eap_ttls_ca_cert_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">C_A certificate:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">eap_ttls_ca_cert_button</property>
+              </object>
+              <packing>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkFileChooserButton" id="eap_ttls_ca_cert_button">
+                <property name="visible">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="eap_ttls_inner_auth_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">I_nner authentication:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">eap_ttls_inner_auth_combo</property>
+              </object>
+              <packing>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkComboBox" id="eap_ttls_inner_auth_combo">
+                <property name="visible">True</property>
+                <property name="model">model6</property>
+                <child>
+                  <object class="GtkCellRendererText" id="renderer6"/>
+                  <attributes>
+                    <attribute name="text">0</attribute>
+                  </attributes>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkVBox" id="eap_ttls_inner_auth_vbox">
+                <property name="visible">True</property>
+                <property name="orientation">vertical</property>
+                <property name="spacing">6</property>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="right_attach">2</property>
+                <property name="top_attach">3</property>
+                <property name="bottom_attach">4</property>
+                <property name="x_options">GTK_FILL</property>
+              </packing>
+            </child>
+          </object>
+        </child>
+        <child type="tab">
+          <object class="GtkLabel" id="label49">
+            <property name="visible">True</property>
+          </object>
+          <packing>
+            <property name="tab_fill">False</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/src/wireless-security/eap-method.c b/src/wireless-security/eap-method.c
index 86e658e..7e8f970 100644
--- a/src/wireless-security/eap-method.c
+++ b/src/wireless-security/eap-method.c
@@ -124,7 +124,7 @@ nag_dialog_response_cb (GtkDialog *nag_dialog,
 
 	if (response == GTK_RESPONSE_NO) {
 		/* Grab the value of the "don't bother me" checkbox */
-		widget = GTK_WIDGET (gtk_builder_get_object (method->nag_dialog_ui, "ignore_checkbox"));
+		widget = GTK_WIDGET (gtk_builder_get_object (method->nag_builder, "ignore_checkbox"));
 		g_assert (widget);
 
 		method->ignore_ca_cert = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
@@ -144,8 +144,6 @@ nag_dialog_delete_event_cb (GtkDialog *nag_dialog, GdkEvent *e, gpointer user_da
 	//g_signal_emit_by_name (nag_dialog, "response", GTK_RESPONSE_NO, user_data);
 	return TRUE;  /* do not destroy */
 } 
- 
-
 
 GtkWidget *
 eap_method_nag_user (EAPMethod *method)
@@ -159,7 +157,7 @@ eap_method_nag_user (EAPMethod *method)
 		return NULL;
 
 	/* Checkbox should be unchecked each time dialog comes up */
-	widget = GTK_WIDGET (gtk_builder_get_object (method->nag_dialog_ui, "ignore_checkbox"));
+	widget = GTK_WIDGET (gtk_builder_get_object (method->nag_builder, "ignore_checkbox"));
 	g_assert (widget);
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
 
@@ -176,26 +174,26 @@ eap_method_nag_user (EAPMethod *method)
 	return method->nag_dialog;
 }
 
+#define NAG_DIALOG_UI UIDIR "/nag-user-dialog.ui"
+
 gboolean
 eap_method_nag_init (EAPMethod *method,
-                     const char *ui_file,
                      const char *ca_cert_chooser,
                      NMConnection *connection,
                      gboolean phase2)
 {
 	GtkWidget *dialog, *widget;
-	char *text;
 	NagDialogResponseInfo *info;
 	GError *error = NULL;
+	char *text;
 
 	g_return_val_if_fail (method != NULL, FALSE);
-	g_return_val_if_fail (ui_file != NULL, FALSE);
 	g_return_val_if_fail (ca_cert_chooser != NULL, FALSE);
 
-	method->nag_dialog_ui = gtk_builder_new ();
-	if (!gtk_builder_add_from_file (method->nag_dialog_ui, ui_file, &error))
-	{
-		g_warning ("Couldn't load builder file: %s", error->message);
+	method->nag_builder = gtk_builder_new ();
+	if (!gtk_builder_add_from_file (method->nag_builder, NAG_DIALOG_UI, &error)) {
+		g_warning ("Couldn't load UI builder file " NAG_DIALOG_UI ": %s",
+		           error->message);
 		g_error_free (error);
 		return FALSE;
 	}
@@ -217,13 +215,13 @@ eap_method_nag_init (EAPMethod *method,
 	info->method = method;
 	info->connection = connection;
 
-	dialog = GTK_WIDGET (gtk_builder_get_object (method->nag_dialog_ui, "nag_user_dialog"));
+	dialog = GTK_WIDGET (gtk_builder_get_object (method->nag_builder, "nag_user_dialog"));
 	g_assert (dialog);
 	g_signal_connect (dialog, "response", G_CALLBACK (nag_dialog_response_cb), info);
 	g_signal_connect (dialog, "delete-event", G_CALLBACK (nag_dialog_delete_event_cb), info);
 	g_object_weak_ref (G_OBJECT (dialog), nag_dialog_destroyed, info);
 
-	widget = GTK_WIDGET (gtk_builder_get_object (method->nag_dialog_ui, "content_label"));
+	widget = GTK_WIDGET (gtk_builder_get_object (method->nag_builder, "content_label"));
 	g_assert (widget);
 
 	text = g_strdup_printf ("<span weight=\"bold\" size=\"larger\">%s</span>\n\n%s",
@@ -232,11 +230,11 @@ eap_method_nag_init (EAPMethod *method,
 	gtk_label_set_markup (GTK_LABEL (widget), text);
 	g_free (text);
 
-	widget = GTK_WIDGET (gtk_builder_get_object (method->nag_dialog_ui, "ignore_button"));
+	widget = GTK_WIDGET (gtk_builder_get_object (method->nag_builder, "ignore_button"));
 	gtk_button_set_label (GTK_BUTTON (widget), _("Ignore"));
 	g_assert (widget);
 
-	widget = GTK_WIDGET (gtk_builder_get_object (method->nag_dialog_ui, "change_button"));
+	widget = GTK_WIDGET (gtk_builder_get_object (method->nag_builder, "change_button"));
 	gtk_button_set_label (GTK_BUTTON (widget), _("Choose CA Certificate"));
 	g_assert (widget);
 
@@ -284,28 +282,54 @@ eap_method_phase2_update_secrets_helper (EAPMethod *method,
 	}
 }
 
-void
-eap_method_init (EAPMethod *method,
+EAPMethod *
+eap_method_init (gsize obj_size,
                  EMValidateFunc validate,
                  EMAddToSizeGroupFunc add_to_size_group,
                  EMFillConnectionFunc fill_connection,
                  EMUpdateSecretsFunc update_secrets,
                  EMDestroyFunc destroy,
-                 GtkBuilder *builder,
-                 GtkWidget *ui_widget,
+                 const char *ui_file,
+                 const char *ui_widget_name,
                  const char *default_field)
 {                 
-	method->refcount = 1;
+	EAPMethod *method;
+	GError *error = NULL;
 
+	g_return_val_if_fail (obj_size > 0, NULL);
+	g_return_val_if_fail (ui_file != NULL, NULL);
+	g_return_val_if_fail (ui_widget_name != NULL, NULL);
+
+	method = g_slice_alloc0 (obj_size);
+	g_assert (method);
+
+	method->refcount = 1;
+	method->obj_size = obj_size;
 	method->validate = validate;
 	method->add_to_size_group = add_to_size_group;
 	method->fill_connection = fill_connection;
 	method->update_secrets = update_secrets;
 	method->destroy = destroy;
-
-	method->builder = builder;
-	method->ui_widget = ui_widget;
 	method->default_field = default_field;
+
+	method->builder = gtk_builder_new ();
+	if (!gtk_builder_add_from_file (method->builder, ui_file, &error)) {
+		g_warning ("Couldn't load UI builder file %s: %s",
+		           ui_file, error->message);
+		eap_method_unref (method);
+		return NULL;
+	}
+
+	method->ui_widget = GTK_WIDGET (gtk_builder_get_object (method->builder, ui_widget_name));
+	if (!method->ui_widget) {
+		g_warning ("Couldn't load UI widget '%s' from UI file %s",
+		           ui_widget_name, ui_file);
+		eap_method_unref (method);
+		return NULL;
+	}
+	g_object_ref_sink (method->ui_widget);
+
+	return method;
 }
 
 
@@ -325,18 +349,22 @@ eap_method_unref (EAPMethod *method)
 	g_return_if_fail (method != NULL);
 	g_return_if_fail (method->refcount > 0);
 
-	g_assert (method->destroy);
-
 	method->refcount--;
 	if (method->refcount == 0) {
+		if (method->destroy)
+			method->destroy (method);
+
 		if (method->nag_dialog)
 			gtk_widget_destroy (method->nag_dialog);
-		if (method->nag_dialog_ui)
-			g_object_unref (method->nag_dialog_ui);
+		if (method->nag_builder)
+			g_object_unref (method->nag_builder);
 		g_free (method->ca_cert_chooser);
-		g_object_unref (method->builder);
-		g_object_unref (method->ui_widget);
-		(*(method->destroy)) (method);
+		if (method->builder)
+			g_object_unref (method->builder);
+		if (method->ui_widget)
+			g_object_unref (method->ui_widget);
+
+		g_slice_free1 (method->obj_size, method);
 	}
 }
 
diff --git a/src/wireless-security/eap-method.h b/src/wireless-security/eap-method.h
index 0026ea0..6553696 100644
--- a/src/wireless-security/eap-method.h
+++ b/src/wireless-security/eap-method.h
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #ifndef EAP_METHOD_H
@@ -39,10 +39,12 @@ typedef gboolean    (*EMValidateFunc)       (EAPMethod *method);
 
 struct _EAPMethod {
 	guint32 refcount;
+	gsize obj_size;
+
 	GtkBuilder *builder;
 	GtkWidget *ui_widget;
 
-	GtkBuilder *nag_dialog_ui;
+	GtkBuilder *nag_builder;
 	char *ca_cert_chooser;
 	const char *default_field;
 	GtkWidget *nag_dialog;
@@ -85,15 +87,15 @@ GType eap_method_get_g_type (void);
 #include "eap-method-peap.h"
 #include "eap-method-simple.h"
 
-void eap_method_init (EAPMethod *method,
-                      EMValidateFunc validate,
-                      EMAddToSizeGroupFunc add_to_size_group,
-                      EMFillConnectionFunc fill_connection,
-                      EMUpdateSecretsFunc update_secrets,
-                      EMDestroyFunc destroy,
-                      GtkBuilder *builder,
-                      GtkWidget *ui_widget,
-                      const char *default_field);
+EAPMethod *eap_method_init (gsize obj_size,
+                            EMValidateFunc validate,
+                            EMAddToSizeGroupFunc add_to_size_group,
+                            EMFillConnectionFunc fill_connection,
+                            EMUpdateSecretsFunc update_secrets,
+                            EMDestroyFunc destroy,
+                            const char *ui_file,
+                            const char *ui_widget_name,
+                            const char *default_field);
 
 GtkFileFilter * eap_method_default_file_chooser_filter_new (gboolean privkey);
 
@@ -110,7 +112,6 @@ gboolean eap_method_validate_filepicker (GtkBuilder *builder,
                                          NMSetting8021xCKFormat *out_format);
 
 gboolean eap_method_nag_init (EAPMethod *method,
-                              const char *ui_file,
                               const char *ca_cert_chooser,
                               NMConnection *connection,
                               gboolean phase2);
diff --git a/src/wireless-security/nag-user-dialog.ui b/src/wireless-security/nag-user-dialog.ui
new file mode 100644
index 0000000..16ee75e
--- /dev/null
+++ b/src/wireless-security/nag-user-dialog.ui
@@ -0,0 +1,192 @@
+<?xml version="1.0"?>
+<interface>
+  <!-- interface-requires gtk+ 2.6 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkDialog" id="nag_user_dialog">
+    <property name="border_width">5</property>
+    <property name="modal">True</property>
+    <property name="window_position">center</property>
+    <property name="type_hint">dialog</property>
+    <property name="has_separator">False</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox2">
+        <property name="visible">True</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">14</property>
+        <child>
+          <object class="GtkHBox" id="hbox5">
+            <property name="visible">True</property>
+            <property name="border_width">5</property>
+            <property name="spacing">12</property>
+            <child>
+              <object class="GtkImage" id="image4">
+                <property name="visible">True</property>
+                <property name="yalign">0</property>
+                <property name="stock">gtk-dialog-warning</property>
+                <property name="icon-size">6</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkVBox" id="content_vbox">
+                <property name="visible">True</property>
+                <property name="orientation">vertical</property>
+                <property name="spacing">12</property>
+                <child>
+                  <object class="GtkLabel" id="content_label">
+                    <property name="visible">True</property>
+                    <property name="xalign">0</property>
+                    <property name="yalign">0</property>
+                    <property name="label">alert text</property>
+                    <property name="use_markup">True</property>
+                    <property name="wrap">True</property>
+                  </object>
+                  <packing>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkCheckButton" id="ignore_checkbox">
+                    <property name="label" translatable="yes">Don't _warn me again</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area2">
+            <property name="visible">True</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="ignore_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <child>
+                  <object class="GtkAlignment" id="alignment3">
+                    <property name="visible">True</property>
+                    <property name="xscale">0</property>
+                    <property name="yscale">0</property>
+                    <child>
+                      <object class="GtkHBox" id="hbox4">
+                        <property name="visible">True</property>
+                        <property name="spacing">2</property>
+                        <child>
+                          <object class="GtkImage" id="image3">
+                            <property name="visible">True</property>
+                            <property name="stock">gtk-no</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="label57">
+                            <property name="visible">True</property>
+                            <property name="label" translatable="yes">No</property>
+                            <property name="use_underline">True</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="change_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <child>
+                  <object class="GtkAlignment" id="alignment2">
+                    <property name="visible">True</property>
+                    <property name="xscale">0</property>
+                    <property name="yscale">0</property>
+                    <child>
+                      <object class="GtkHBox" id="hbox3">
+                        <property name="visible">True</property>
+                        <property name="spacing">2</property>
+                        <child>
+                          <object class="GtkImage" id="image2">
+                            <property name="visible">True</property>
+                            <property name="stock">gtk-ok</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="label56">
+                            <property name="visible">True</property>
+                            <property name="label" translatable="yes">Yes</property>
+                            <property name="use_underline">True</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="-9">ignore_button</action-widget>
+      <action-widget response="-8">change_button</action-widget>
+    </action-widgets>
+  </object>
+</interface>
diff --git a/src/wireless-security/wireless-security.c b/src/wireless-security/wireless-security.c
index b15404e..a567732 100644
--- a/src/wireless-security/wireless-security.c
+++ b/src/wireless-security/wireless-security.c
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #include <string.h>
@@ -133,38 +133,69 @@ wireless_security_unref (WirelessSecurity *sec)
 	g_return_if_fail (sec != NULL);
 	g_return_if_fail (sec->refcount > 0);
 
-	g_assert (sec->destroy);
-
 	sec->refcount--;
 	if (sec->refcount == 0) {
-		g_object_unref (sec->builder);
-		g_object_unref (sec->ui_widget);
-		(*(sec->destroy)) (sec);
+		if (sec->destroy)
+			sec->destroy (sec);
+
+		if (sec->builder)
+			g_object_unref (sec->builder);
+		if (sec->ui_widget)
+			g_object_unref (sec->ui_widget);
+		g_slice_free1 (sec->obj_size, sec);
 	}
 }
 
-void
-wireless_security_init (WirelessSecurity *sec,
+WirelessSecurity *
+wireless_security_init (gsize obj_size,
                         WSValidateFunc validate,
                         WSAddToSizeGroupFunc add_to_size_group,
                         WSFillConnectionFunc fill_connection,
                         WSUpdateSecretsFunc update_secrets,
                         WSDestroyFunc destroy,
-                        GtkBuilder *builder,
-                        GtkWidget *ui_widget,
+                        const char *ui_file,
+                        const char *ui_widget_name,
                         const char *default_field)
 {
+	WirelessSecurity *sec;
+	GError *error = NULL;
+
+	g_return_val_if_fail (obj_size > 0, NULL);
+	g_return_val_if_fail (ui_file != NULL, NULL);
+	g_return_val_if_fail (ui_widget_name != NULL, NULL);
+
+	sec = g_slice_alloc0 (obj_size);
+	g_assert (sec);
+
 	sec->refcount = 1;
+	sec->obj_size = obj_size;
 
 	sec->validate = validate;
 	sec->add_to_size_group = add_to_size_group;
 	sec->fill_connection = fill_connection;
 	sec->update_secrets = update_secrets;
 	sec->destroy = destroy;
-
-	sec->builder = builder;
-	sec->ui_widget = ui_widget;
 	sec->default_field = default_field;
+
+	sec->builder = gtk_builder_new ();
+	if (!gtk_builder_add_from_file (sec->builder, ui_file, &error)) {
+		g_warning ("Couldn't load UI builder file %s: %s",
+		           ui_file, error->message);
+		g_error_free (error);
+		wireless_security_unref (sec);
+		return NULL;
+	}
+
+	sec->ui_widget = GTK_WIDGET (gtk_builder_get_object (sec->builder, ui_widget_name));
+	if (!sec->ui_widget) {
+		g_warning ("Couldn't load UI widget '%s' from UI file %s",
+		           ui_widget_name, ui_file);
+		wireless_security_unref (sec);
+		return NULL;
+	}
+	g_object_ref_sink (sec->ui_widget);
+
+	return sec;
 }
 
 GtkWidget *
@@ -289,7 +320,6 @@ ws_802_1x_auth_combo_changed (GtkWidget *combo,
 
 GtkWidget *
 ws_802_1x_auth_combo_init (WirelessSecurity *sec,
-                           const char *ui_file,
                            const char *combo_name,
                            GCallback auth_combo_changed_cb,
                            NMConnection *connection,
@@ -324,7 +354,7 @@ ws_802_1x_auth_combo_init (WirelessSecurity *sec,
 
 	auth_model = gtk_list_store_new (2, G_TYPE_STRING, eap_method_get_g_type ());
 
-	em_tls = eap_method_tls_new (ui_file, sec, connection, FALSE);
+	em_tls = eap_method_tls_new (sec, connection, FALSE);
 	gtk_list_store_append (auth_model, &iter);
 	gtk_list_store_set (auth_model, &iter,
 	                    AUTH_NAME_COLUMN, _("TLS"),
@@ -336,7 +366,7 @@ ws_802_1x_auth_combo_init (WirelessSecurity *sec,
 	item++;
 
 	if (!wired) {
-		em_leap = eap_method_leap_new (ui_file, sec, connection);
+		em_leap = eap_method_leap_new (sec, connection);
 		gtk_list_store_append (auth_model, &iter);
 		gtk_list_store_set (auth_model, &iter,
 		                    AUTH_NAME_COLUMN, _("LEAP"),
@@ -348,7 +378,7 @@ ws_802_1x_auth_combo_init (WirelessSecurity *sec,
 		item++;
 	}
 
-	em_ttls = eap_method_ttls_new (ui_file, sec, connection, is_editor);
+	em_ttls = eap_method_ttls_new (sec, connection, is_editor);
 	gtk_list_store_append (auth_model, &iter);
 	gtk_list_store_set (auth_model, &iter,
 	                    AUTH_NAME_COLUMN, _("Tunneled TLS"),
@@ -359,7 +389,7 @@ ws_802_1x_auth_combo_init (WirelessSecurity *sec,
 		active = item;
 	item++;
 
-	em_peap = eap_method_peap_new (ui_file, sec, connection, is_editor);
+	em_peap = eap_method_peap_new (sec, connection, is_editor);
 	gtk_list_store_append (auth_model, &iter);
 	gtk_list_store_set (auth_model, &iter,
 	                    AUTH_NAME_COLUMN, _("Protected EAP (PEAP)"),
diff --git a/src/wireless-security/wireless-security.h b/src/wireless-security/wireless-security.h
index 3072386..fe68b84 100644
--- a/src/wireless-security/wireless-security.h
+++ b/src/wireless-security/wireless-security.h
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #ifndef WIRELESS_SECURITY_H
@@ -41,6 +41,7 @@ typedef GtkWidget * (*WSNagUserFunc) (WirelessSecurity *sec);
 
 struct _WirelessSecurity {
 	guint32 refcount;
+	gsize obj_size;
 	GtkBuilder *builder;
 	GtkWidget *ui_widget;
 	WSChangedFunc changed_notify;
@@ -91,15 +92,15 @@ GType wireless_security_get_g_type (void);
 #include "ws-wpa-eap.h"
 #include "ws-dynamic-wep.h"
 
-void wireless_security_init (WirelessSecurity *sec,
-                             WSValidateFunc validate,
-                             WSAddToSizeGroupFunc add_to_size_group,
-                             WSFillConnectionFunc fill_connection,
-                             WSUpdateSecretsFunc update_secrets,
-                             WSDestroyFunc destroy,
-                             GtkBuilder *builder,
-                             GtkWidget *ui_widget,
-                             const char *default_field);
+WirelessSecurity *wireless_security_init (gsize obj_size,
+                                          WSValidateFunc validate,
+                                          WSAddToSizeGroupFunc add_to_size_group,
+                                          WSFillConnectionFunc fill_connection,
+                                          WSUpdateSecretsFunc update_secrets,
+                                          WSDestroyFunc destroy,
+                                          const char *ui_file,
+                                          const char *ui_widget_name,
+                                          const char *default_field);
 
 void wireless_security_changed_cb (GtkWidget *entry, gpointer user_data);
 
@@ -109,7 +110,6 @@ void wireless_security_clear_ciphers (NMConnection *connection);
 #define AUTH_METHOD_COLUMN 1
 
 GtkWidget *ws_802_1x_auth_combo_init (WirelessSecurity *sec,
-                                      const char *ui_file,
                                       const char *combo_name,
                                       GCallback auth_combo_changed_cb,
                                       NMConnection *connection,
diff --git a/src/wireless-security/ws-dynamic-wep.c b/src/wireless-security/ws-dynamic-wep.c
index 9f18570..b8ca197 100644
--- a/src/wireless-security/ws-dynamic-wep.c
+++ b/src/wireless-security/ws-dynamic-wep.c
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #include <glib/gi18n.h>
@@ -28,6 +28,12 @@
 #include "wireless-security.h"
 #include "eap-method.h"
 
+struct _WirelessSecurityDynamicWEP {
+	WirelessSecurity parent;
+
+	GtkSizeGroup *size_group;
+};
+
 static void
 destroy (WirelessSecurity *parent)
 {
@@ -35,7 +41,6 @@ destroy (WirelessSecurity *parent)
 
 	if (sec->size_group)
 		g_object_unref (sec->size_group);
-	g_slice_free (WirelessSecurityDynamicWEP, sec);
 }
 
 static gboolean
@@ -103,56 +108,33 @@ update_secrets (WirelessSecurity *parent, NMConnection *connection)
 }
 
 WirelessSecurityDynamicWEP *
-ws_dynamic_wep_new (const char *ui_file,
-                    NMConnection *connection,
+ws_dynamic_wep_new (NMConnection *connection,
                     gboolean is_editor)
 {
-	WirelessSecurityDynamicWEP *sec;
+	WirelessSecurity *parent;
 	GtkWidget *widget;
-	GtkBuilder *builder;
-	GError *error = NULL;
 
-	g_return_val_if_fail (ui_file != NULL, NULL);
-
-	builder = gtk_builder_new();
-	if (!gtk_builder_add_from_file (builder, ui_file, &error))
-	{
-		g_warning ("Couldn't load builder file: %s", error->message);
-		g_error_free (error);
+	parent = wireless_security_init (sizeof (WirelessSecurityDynamicWEP),
+	                                 validate,
+	                                 add_to_size_group,
+	                                 fill_connection,
+	                                 update_secrets,
+	                                 destroy,
+	                                 UIDIR "/ws-dynamic-wep.ui",
+	                                 "dynamic_wep_notebook",
+	                                 NULL);
+	if (!parent)
 		return NULL;
-	}
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "dynamic_wep_notebook"));
-	g_assert (widget);
-	g_object_ref_sink (widget);
+	parent->nag_user = nag_user;
 
-	sec = g_slice_new0 (WirelessSecurityDynamicWEP);
-	if (!sec) {
-		g_object_unref (builder);
-		g_object_unref (widget);
-		return NULL;
-	}
-
-	wireless_security_init (WIRELESS_SECURITY (sec),
-	                        validate,
-	                        add_to_size_group,
-	                        fill_connection,
-	                        update_secrets,
-	                        destroy,
-	                        builder,
-	                        widget,
-	                        NULL);
-
-	WIRELESS_SECURITY (sec)->nag_user = nag_user;
-
-	widget = ws_802_1x_auth_combo_init (WIRELESS_SECURITY (sec),
-	                                    ui_file,
+	widget = ws_802_1x_auth_combo_init (parent,
 	                                    "dynamic_wep_auth_combo",
 	                                    (GCallback) auth_combo_changed_cb,
 	                                    connection,
 	                                    is_editor);
-	auth_combo_changed_cb (widget, (gpointer) sec);
+	auth_combo_changed_cb (widget, (gpointer) parent);
 
-	return sec;
+	return (WirelessSecurityDynamicWEP *) parent;
 }
 
diff --git a/src/wireless-security/ws-dynamic-wep.h b/src/wireless-security/ws-dynamic-wep.h
index 7218799..481ec07 100644
--- a/src/wireless-security/ws-dynamic-wep.h
+++ b/src/wireless-security/ws-dynamic-wep.h
@@ -17,21 +17,18 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #ifndef WS_DYNAMIC_WEP_H
 #define WS_DYNAMIC_WEP_H
 
-typedef struct {
-	struct _WirelessSecurity parent;
+#include <nm-connection.h>
 
-	GtkSizeGroup *size_group;
-} WirelessSecurityDynamicWEP;
+typedef struct _WirelessSecurityDynamicWEP WirelessSecurityDynamicWEP;
 
-WirelessSecurityDynamicWEP * ws_dynamic_wep_new (const char *ui_file,
-                                                 NMConnection *connection,
-                                                 gboolean is_editor);
+WirelessSecurityDynamicWEP *ws_dynamic_wep_new (NMConnection *connection,
+                                                gboolean is_editor);
 
 #endif /* WS_DYNAMIC_WEP_H */
 
diff --git a/src/wireless-security/ws-dynamic-wep.ui b/src/wireless-security/ws-dynamic-wep.ui
new file mode 100644
index 0000000..f68a8e7
--- /dev/null
+++ b/src/wireless-security/ws-dynamic-wep.ui
@@ -0,0 +1,95 @@
+<?xml version="1.0"?>
+<interface>
+  <object class="GtkListStore" id="model7">
+    <columns>
+      <column type="gchararray"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0" translatable="yes"> </col>
+      </row>
+    </data>
+  </object>
+  <!-- interface-requires gtk+ 2.6 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkWindow" id="dynamic_wep_widget">
+    <property name="visible">False</property>
+    <property name="title">dynamic_wep_widget</property>
+    <child>
+      <object class="GtkNotebook" id="dynamic_wep_notebook">
+        <property name="visible">True</property>
+        <property name="show_tabs">False</property>
+        <property name="show_border">False</property>
+        <child>
+          <object class="GtkTable" id="table12">
+            <property name="visible">True</property>
+            <property name="n_rows">3</property>
+            <property name="n_columns">2</property>
+            <property name="column_spacing">12</property>
+            <property name="row_spacing">6</property>
+            <child>
+              <object class="GtkLabel" id="dynamic_wep_auth_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">_Authentication:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">dynamic_wep_auth_combo</property>
+              </object>
+              <packing>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkComboBox" id="dynamic_wep_auth_combo">
+                <property name="visible">True</property>
+                <property name="model">model7</property>
+                <child>
+                  <object class="GtkCellRendererText" id="renderer7"/>
+                  <attributes>
+                    <attribute name="text">0</attribute>
+                  </attributes>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="y_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkVBox" id="dynamic_wep_method_vbox">
+                <property name="visible">True</property>
+                <property name="orientation">vertical</property>
+                <property name="spacing">6</property>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="right_attach">2</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="x_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+          </object>
+        </child>
+        <child type="tab">
+          <object class="GtkLabel" id="label55">
+            <property name="visible">True</property>
+          </object>
+          <packing>
+            <property name="tab_fill">False</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/src/wireless-security/ws-leap.c b/src/wireless-security/ws-leap.c
index 6f94dd0..cb4228d 100644
--- a/src/wireless-security/ws-leap.c
+++ b/src/wireless-security/ws-leap.c
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #include <string.h>
@@ -28,6 +28,9 @@
 #include "gconf-helpers.h"
 #include "helpers.h"
 
+struct _WirelessSecurityLEAP {
+	WirelessSecurity parent;
+};
 
 static void
 show_toggled_cb (GtkCheckButton *button, WirelessSecurity *sec)
@@ -42,14 +45,6 @@ show_toggled_cb (GtkCheckButton *button, WirelessSecurity *sec)
 	gtk_entry_set_visibility (GTK_ENTRY (widget), visible);
 }
 
-static void
-destroy (WirelessSecurity *parent)
-{
-	WirelessSecurityLEAP *sec = (WirelessSecurityLEAP *) parent;
-
-	g_slice_free (WirelessSecurityLEAP, sec);
-}
-
 static gboolean
 validate (WirelessSecurity *parent, const GByteArray *ssid)
 {
@@ -125,44 +120,24 @@ update_secrets (WirelessSecurity *parent, NMConnection *connection)
 }
 
 WirelessSecurityLEAP *
-ws_leap_new (const char *ui_file, NMConnection *connection)
+ws_leap_new (NMConnection *connection)
 {
+	WirelessSecurity *parent;
 	WirelessSecurityLEAP *sec;
 	GtkWidget *widget;
-	GtkBuilder *builder;
 	NMSettingWirelessSecurity *wsec = NULL;
-	GError *error = NULL;
-
-	g_return_val_if_fail (ui_file != NULL, NULL);
-
-	builder = gtk_builder_new ();
-	if (!gtk_builder_add_from_file (builder, ui_file, &error))
-	{
-		g_warning ("Couldn't load builder file: %s", error->message);
-		g_error_free (error);
-		return NULL;
-	}
-
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "leap_notebook"));
-	g_assert (widget);
-	g_object_ref_sink (widget);
 
-	sec = g_slice_new0 (WirelessSecurityLEAP);
-	if (!sec) {
-		g_object_unref (builder);
-		g_object_unref (widget);
+	parent = wireless_security_init (sizeof (WirelessSecurityLEAP),
+	                                 validate,
+	                                 add_to_size_group,
+	                                 fill_connection,
+	                                 update_secrets,
+	                                 NULL,
+	                                 UIDIR "/ws-leap.ui",
+	                                 "leap_notebook",
+	                                 "leap_username_entry");
+	if (!parent)
 		return NULL;
-	}
-
-	wireless_security_init (WIRELESS_SECURITY (sec),
-	                        validate,
-	                        add_to_size_group,
-	                        fill_connection,
-	                        update_secrets,
-	                        destroy,
-	                        builder,
-	                        widget,
-	                        "leap_username_entry");
 
 	if (connection) {
 		wsec = NM_SETTING_WIRELESS_SECURITY (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY));
@@ -176,7 +151,9 @@ ws_leap_new (const char *ui_file, NMConnection *connection)
 		}
 	}
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "leap_password_entry"));
+	sec = (WirelessSecurityLEAP *) parent;
+
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "leap_password_entry"));
 	g_assert (widget);
 	g_signal_connect (G_OBJECT (widget), "changed",
 	                  (GCallback) wireless_security_changed_cb,
@@ -184,7 +161,7 @@ ws_leap_new (const char *ui_file, NMConnection *connection)
 	if (wsec)
 		update_secrets (WIRELESS_SECURITY (sec), connection);
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "leap_username_entry"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "leap_username_entry"));
 	g_assert (widget);
 	g_signal_connect (G_OBJECT (widget), "changed",
 	                  (GCallback) wireless_security_changed_cb,
@@ -192,7 +169,7 @@ ws_leap_new (const char *ui_file, NMConnection *connection)
 	if (wsec)
 		gtk_entry_set_text (GTK_ENTRY (widget), nm_setting_wireless_security_get_leap_username (wsec));
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "show_checkbutton_leap"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "show_checkbutton_leap"));
 	g_assert (widget);
 	g_signal_connect (G_OBJECT (widget), "toggled",
 	                  (GCallback) show_toggled_cb,
diff --git a/src/wireless-security/ws-leap.h b/src/wireless-security/ws-leap.h
index 4949341..4192a09 100644
--- a/src/wireless-security/ws-leap.h
+++ b/src/wireless-security/ws-leap.h
@@ -17,19 +17,17 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #ifndef WS_LEAP_H
 #define WS_LEAP_H
 
-typedef struct {
-	struct _WirelessSecurity parent;
+#include <nm-connection.h>
 
-} WirelessSecurityLEAP;
+typedef struct _WirelessSecurityLEAP WirelessSecurityLEAP;
 
-WirelessSecurityLEAP * ws_leap_new (const char *ui_file,
-                                    NMConnection *connection);
+WirelessSecurityLEAP * ws_leap_new (NMConnection *connection);
 
 #endif /* WS_LEAP_H */
 
diff --git a/src/wireless-security/ws-leap.ui b/src/wireless-security/ws-leap.ui
new file mode 100644
index 0000000..e0c36a1
--- /dev/null
+++ b/src/wireless-security/ws-leap.ui
@@ -0,0 +1,108 @@
+<?xml version="1.0"?>
+<interface>
+  <!-- interface-requires gtk+ 2.6 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkWindow" id="leap_widget">
+    <property name="visible">False</property>
+    <property name="title">leap_widget</property>
+    <child>
+      <object class="GtkNotebook" id="leap_notebook">
+        <property name="visible">True</property>
+        <property name="show_tabs">False</property>
+        <property name="show_border">False</property>
+        <child>
+          <object class="GtkTable" id="table5">
+            <property name="visible">True</property>
+            <property name="n_rows">3</property>
+            <property name="n_columns">2</property>
+            <property name="column_spacing">12</property>
+            <property name="row_spacing">6</property>
+            <child>
+              <object class="GtkLabel" id="leap_username_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">_Username:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">leap_username_entry</property>
+              </object>
+              <packing>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="leap_password_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">_Password:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">leap_password_entry</property>
+              </object>
+              <packing>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="leap_password_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="visibility">False</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="show_checkbutton_leap">
+                <property name="label" translatable="yes">Sho_w password</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_underline">True</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="leap_username_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+          </object>
+        </child>
+        <child type="tab">
+          <object class="GtkLabel" id="GtkLabel1">
+            <property name="visible">True</property>
+          </object>
+          <packing>
+            <property name="tab_fill">False</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
+
diff --git a/src/wireless-security/ws-wep-key.c b/src/wireless-security/ws-wep-key.c
index 31a76f7..ba5ca01 100644
--- a/src/wireless-security/ws-wep-key.c
+++ b/src/wireless-security/ws-wep-key.c
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #include <ctype.h>
@@ -30,6 +30,13 @@
 #include "utils.h"
 #include "gconf-helpers.h"
 
+struct _WirelessSecurityWEPKey {
+	WirelessSecurity parent;
+
+	NMWepKeyType type;
+	char keys[4][65];
+	guint8 cur_index;
+};
 
 static void
 show_toggled_cb (GtkCheckButton *button, WirelessSecurity *sec)
@@ -79,8 +86,6 @@ destroy (WirelessSecurity *parent)
 
 	for (i = 0; i < 4; i++)
 		memset (sec->keys[i], 0, sizeof (sec->keys[i]));
-
-	g_slice_free (WirelessSecurityWEPKey, sec);
 }
 
 static gboolean
@@ -235,54 +240,35 @@ update_secrets (WirelessSecurity *parent, NMConnection *connection)
 }
 
 WirelessSecurityWEPKey *
-ws_wep_key_new (const char *ui_file,
-                NMConnection *connection,
+ws_wep_key_new (NMConnection *connection,
                 NMWepKeyType type,
                 gboolean adhoc_create,
                 gboolean simple)
 {
+	WirelessSecurity *parent;
 	WirelessSecurityWEPKey *sec;
 	GtkWidget *widget;
-	GtkBuilder *builder;
 	NMSettingWirelessSecurity *s_wsec = NULL;
 	guint8 default_key_idx = 0;
 	gboolean is_adhoc = adhoc_create;
 	gboolean is_shared_key = FALSE;
-	GError *error = NULL;
-
-	g_return_val_if_fail (ui_file != NULL, NULL);
-
-	builder = gtk_builder_new ();
-	if (!gtk_builder_add_from_file (builder, ui_file, &error))
-	{
-		g_warning ("Couldn't load builder file: %s", error->message);
-		g_error_free (error);
-		return NULL;
-	}
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "wep_key_notebook"));
-	g_assert (widget);
-	g_object_ref_sink (widget);
-
-	sec = g_slice_new0 (WirelessSecurityWEPKey);
-	if (!sec) {
-		g_object_unref (builder);
-		g_object_unref (widget);
+	parent = wireless_security_init (sizeof (WirelessSecurityWEPKey),
+	                                 validate,
+	                                 add_to_size_group,
+	                                 fill_connection,
+	                                 update_secrets,
+	                                 destroy,
+	                                 UIDIR "/ws-wep-key.ui",
+	                                 "wep_key_notebook",
+	                                 "wep_key_entry");
+	if (!parent)
 		return NULL;
-	}
-
-	wireless_security_init (WIRELESS_SECURITY (sec),
-	                        validate,
-	                        add_to_size_group,
-	                        fill_connection,
-	                        update_secrets,
-	                        destroy,
-	                        builder,
-	                        widget,
-	                        "wep_key_entry");
+	
+	sec = (WirelessSecurityWEPKey *) parent;
 	sec->type = type;
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "wep_key_entry"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "wep_key_entry"));
 	g_assert (widget);
 	gtk_entry_set_width_chars (GTK_ENTRY (widget), 28);
 
@@ -314,7 +300,7 @@ ws_wep_key_new (const char *ui_file,
 	else if (sec->type == NM_WEP_KEY_TYPE_PASSPHRASE)
 		gtk_entry_set_max_length (GTK_ENTRY (widget), 64);
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "key_index_combo"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "key_index_combo"));
 	if (connection && s_wsec)
 		default_key_idx = nm_setting_wireless_security_get_wep_tx_keyidx (s_wsec);
 
@@ -327,7 +313,7 @@ ws_wep_key_new (const char *ui_file,
 	/* Key index is useless with adhoc networks */
 	if (is_adhoc || simple) {
 		gtk_widget_hide (widget);
-		widget = GTK_WIDGET (gtk_builder_get_object (builder, "key_index_label"));
+		widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "key_index_label"));
 		gtk_widget_hide (widget);
 	}
 
@@ -335,13 +321,13 @@ ws_wep_key_new (const char *ui_file,
 	if (connection)
 		update_secrets (WIRELESS_SECURITY (sec), connection);
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "show_checkbutton_wep"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "show_checkbutton_wep"));
 	g_assert (widget);
 	g_signal_connect (G_OBJECT (widget), "toggled",
 	                  (GCallback) show_toggled_cb,
 	                  sec);
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "auth_method_combo"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "auth_method_combo"));
 	gtk_combo_box_set_active (GTK_COMBO_BOX (widget), is_shared_key ? 1 : 0);
 
 	g_signal_connect (G_OBJECT (widget), "changed",
@@ -356,7 +342,7 @@ ws_wep_key_new (const char *ui_file,
 		if (is_adhoc)
 			gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
 		gtk_widget_hide (widget);
-		widget = GTK_WIDGET (gtk_builder_get_object (builder, "auth_method_label"));
+		widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "auth_method_label"));
 		gtk_widget_hide (widget);
 	}
 
diff --git a/src/wireless-security/ws-wep-key.h b/src/wireless-security/ws-wep-key.h
index ca746ca..1fafd5d 100644
--- a/src/wireless-security/ws-wep-key.h
+++ b/src/wireless-security/ws-wep-key.h
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #ifndef WS_WEP_KEY_H
@@ -25,19 +25,12 @@
 
 #include <nm-setting-wireless-security.h>
 
-typedef struct {
-	struct _WirelessSecurity parent;
+typedef struct _WirelessSecurityWEPKey WirelessSecurityWEPKey;
 
-	NMWepKeyType type;
-	char keys[4][65];
-	guint8 cur_index;
-} WirelessSecurityWEPKey;
-
-WirelessSecurityWEPKey * ws_wep_key_new (const char *ui_file,
-                                         NMConnection *connection,
-                                         NMWepKeyType type,
-                                         gboolean adhoc_create,
-                                         gboolean simple);
+WirelessSecurityWEPKey *ws_wep_key_new (NMConnection *connection,
+                                        NMWepKeyType type,
+                                        gboolean adhoc_create,
+                                        gboolean simple);
 
 #endif /* WS_WEP_KEY_H */
 
diff --git a/src/wireless-security/ws-wep-key.ui b/src/wireless-security/ws-wep-key.ui
new file mode 100644
index 0000000..8476273
--- /dev/null
+++ b/src/wireless-security/ws-wep-key.ui
@@ -0,0 +1,192 @@
+<?xml version="1.0"?>
+<interface>
+  <object class="GtkListStore" id="model3">
+    <columns>
+      <column type="gchararray"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0" translatable="yes">Open System</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Shared Key</col>
+      </row>
+    </data>
+  </object>
+  <object class="GtkListStore" id="model4">
+    <columns>
+      <column type="gchararray"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0" translatable="yes">1 (Default)</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">2</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">3</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">4</col>
+      </row>
+    </data>
+  </object>
+  <!-- interface-requires gtk+ 2.6 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkWindow" id="wep_key_widget">
+    <property name="visible">False</property>
+    <property name="title">wep_key_widget</property>
+    <child>
+      <object class="GtkNotebook" id="wep_key_notebook">
+        <property name="visible">True</property>
+        <property name="show_tabs">False</property>
+        <property name="show_border">False</property>
+        <child>
+          <object class="GtkTable" id="table6">
+            <property name="visible">True</property>
+            <property name="n_rows">4</property>
+            <property name="n_columns">2</property>
+            <property name="column_spacing">12</property>
+            <property name="row_spacing">6</property>
+            <child>
+              <object class="GtkLabel" id="wep_key_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">_Key:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">wep_key_entry</property>
+              </object>
+              <packing>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="wep_key_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="visibility">False</property>
+                <property name="activates_default">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label31">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+              </object>
+              <packing>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="show_checkbutton_wep">
+                <property name="label" translatable="yes">Sho_w key</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_underline">True</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="auth_method_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">_Authentication:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">auth_method_combo</property>
+              </object>
+              <packing>
+                <property name="top_attach">3</property>
+                <property name="bottom_attach">4</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkComboBox" id="auth_method_combo">
+                <property name="visible">True</property>
+                <property name="model">model3</property>
+                <child>
+                  <object class="GtkCellRendererText" id="renderer3"/>
+                  <attributes>
+                    <attribute name="text">0</attribute>
+                  </attributes>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">3</property>
+                <property name="bottom_attach">4</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="key_index_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">WEP inde_x:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">key_index_combo</property>
+              </object>
+              <packing>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkComboBox" id="key_index_combo">
+                <property name="visible">True</property>
+                <property name="model">model4</property>
+                <child>
+                  <object class="GtkCellRendererText" id="renderer4"/>
+                  <attributes>
+                    <attribute name="text">0</attribute>
+                  </attributes>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options">GTK_FILL</property>
+              </packing>
+            </child>
+          </object>
+        </child>
+        <child type="tab">
+          <object class="GtkLabel" id="label23">
+            <property name="visible">True</property>
+          </object>
+          <packing>
+            <property name="tab_fill">False</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
+
diff --git a/src/wireless-security/ws-wpa-eap.c b/src/wireless-security/ws-wpa-eap.c
index 274fc16..6a81030 100644
--- a/src/wireless-security/ws-wpa-eap.c
+++ b/src/wireless-security/ws-wpa-eap.c
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #include <glib/gi18n.h>
@@ -28,6 +28,13 @@
 #include "wireless-security.h"
 #include "eap-method.h"
 
+struct _WirelessSecurityWPAEAP {
+	WirelessSecurity parent;
+
+	GtkSizeGroup *size_group;
+};
+
+
 static void
 destroy (WirelessSecurity *parent)
 {
@@ -35,7 +42,6 @@ destroy (WirelessSecurity *parent)
 
 	if (sec->size_group)
 		g_object_unref (sec->size_group);
-	g_slice_free (WirelessSecurityWPAEAP, sec);
 }
 
 static gboolean
@@ -98,56 +104,33 @@ update_secrets (WirelessSecurity *parent, NMConnection *connection)
 }
 
 WirelessSecurityWPAEAP *
-ws_wpa_eap_new (const char *ui_file,
-                NMConnection *connection,
+ws_wpa_eap_new (NMConnection *connection,
                 gboolean is_editor)
 {
-	WirelessSecurityWPAEAP *sec;
+	WirelessSecurity *parent;
 	GtkWidget *widget;
-	GtkBuilder *builder;
-	GError *error = NULL;
 
-	g_return_val_if_fail (ui_file != NULL, NULL);
-
-	builder = gtk_builder_new ();
-	if (!gtk_builder_add_from_file (builder, ui_file, &error))
-	{
-		g_warning ("Couldn't load builder file: %s", error->message);
-		g_error_free (error);
+	parent = wireless_security_init (sizeof (WirelessSecurityWPAEAP),
+	                                 validate,
+	                                 add_to_size_group,
+	                                 fill_connection,
+	                                 update_secrets,
+	                                 destroy,
+	                                 UIDIR "/ws-wpa-eap.ui",
+	                                 "wpa_eap_notebook",
+	                                 NULL);
+	if (!parent)
 		return NULL;
-	}
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "wpa_eap_notebook"));
-	g_assert (widget);
-	g_object_ref_sink (widget);
+	parent->nag_user = nag_user;
 
-	sec = g_slice_new0 (WirelessSecurityWPAEAP);
-	if (!sec) {
-		g_object_unref (builder);
-		g_object_unref (widget);
-		return NULL;
-	}
-
-	wireless_security_init (WIRELESS_SECURITY (sec),
-	                        validate,
-	                        add_to_size_group,
-	                        fill_connection,
-	                        update_secrets,
-	                        destroy,
-	                        builder,
-	                        widget,
-	                        NULL);
-
-	WIRELESS_SECURITY (sec)->nag_user = nag_user;
-
-	widget = ws_802_1x_auth_combo_init (WIRELESS_SECURITY (sec),
-	                                    ui_file,
+	widget = ws_802_1x_auth_combo_init (parent,
 	                                    "wpa_eap_auth_combo",
 	                                    (GCallback) auth_combo_changed_cb,
 	                                    connection,
 	                                    is_editor);
-	auth_combo_changed_cb (widget, (gpointer) sec);
+	auth_combo_changed_cb (widget, parent);
 
-	return sec;
+	return (WirelessSecurityWPAEAP *) parent;
 }
 
diff --git a/src/wireless-security/ws-wpa-eap.h b/src/wireless-security/ws-wpa-eap.h
index 55bfbbb..0f21b59 100644
--- a/src/wireless-security/ws-wpa-eap.h
+++ b/src/wireless-security/ws-wpa-eap.h
@@ -17,20 +17,17 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #ifndef WS_WPA_EAP_H
 #define WS_WPA_EAP_H
 
-typedef struct {
-	struct _WirelessSecurity parent;
+#include <nm-connection.h>
 
-	GtkSizeGroup *size_group;
-} WirelessSecurityWPAEAP;
+typedef struct _WirelessSecurityWPAEAP WirelessSecurityWPAEAP;
 
-WirelessSecurityWPAEAP * ws_wpa_eap_new (const char *ui_file,
-                                         NMConnection *connection,
+WirelessSecurityWPAEAP * ws_wpa_eap_new (NMConnection *connection,
                                          gboolean is_editor);
 
 #endif /* WS_WPA_EAP_H */
diff --git a/src/wireless-security/ws-wpa-eap.ui b/src/wireless-security/ws-wpa-eap.ui
new file mode 100644
index 0000000..fd1fe07
--- /dev/null
+++ b/src/wireless-security/ws-wpa-eap.ui
@@ -0,0 +1,88 @@
+<?xml version="1.0"?>
+<interface>
+  <object class="GtkListStore" id="model5">
+    <columns>
+      <column type="gchararray"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0" translatable="yes"> </col>
+      </row>
+    </data>
+  </object>
+  <!-- interface-requires gtk+ 2.6 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkWindow" id="wpa_eap_widget">
+    <property name="visible">False</property>
+    <property name="title">wpa_eap_widget</property>
+    <child>
+      <object class="GtkNotebook" id="wpa_eap_notebook">
+        <property name="visible">True</property>
+        <property name="show_tabs">False</property>
+        <property name="show_border">False</property>
+        <child>
+          <object class="GtkTable" id="wpa_eap_table">
+            <property name="visible">True</property>
+            <property name="n_rows">2</property>
+            <property name="n_columns">2</property>
+            <property name="column_spacing">12</property>
+            <property name="row_spacing">6</property>
+            <child>
+              <object class="GtkLabel" id="wpa_eap_auth_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">_Authentication:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">wpa_eap_auth_combo</property>
+              </object>
+              <packing>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkComboBox" id="wpa_eap_auth_combo">
+                <property name="visible">True</property>
+                <property name="model">model5</property>
+                <child>
+                  <object class="GtkCellRendererText" id="renderer5"/>
+                  <attributes>
+                    <attribute name="text">0</attribute>
+                  </attributes>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="y_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkVBox" id="wpa_eap_method_vbox">
+                <property name="visible">True</property>
+                <property name="orientation">vertical</property>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="right_attach">2</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="x_options">GTK_FILL</property>
+              </packing>
+            </child>
+          </object>
+        </child>
+        <child type="tab">
+          <object class="GtkLabel" id="GtkLabel3">
+            <property name="visible">True</property>
+          </object>
+          <packing>
+            <property name="tab_fill">False</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/src/wireless-security/ws-wpa-psk.c b/src/wireless-security/ws-wpa-psk.c
index 78712ce..641d1c6 100644
--- a/src/wireless-security/ws-wpa-psk.c
+++ b/src/wireless-security/ws-wpa-psk.c
@@ -17,7 +17,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #include <ctype.h>
@@ -31,6 +31,10 @@
 
 #define WPA_PMK_LEN 32
 
+struct _WirelessSecurityWPAPSK {
+	WirelessSecurity parent;
+};
+
 static void
 show_toggled_cb (GtkCheckButton *button, WirelessSecurity *sec)
 {
@@ -44,14 +48,6 @@ show_toggled_cb (GtkCheckButton *button, WirelessSecurity *sec)
 	gtk_entry_set_visibility (GTK_ENTRY (widget), visible);
 }
 
-static void
-destroy (WirelessSecurity *parent)
-{
-	WirelessSecurityWPAPSK *sec = (WirelessSecurityWPAPSK *) parent;
-
-	g_slice_free (WirelessSecurityWPAPSK, sec);
-}
-
 static gboolean
 validate (WirelessSecurity *parent, const GByteArray *ssid)
 {
@@ -151,45 +147,27 @@ update_secrets (WirelessSecurity *parent, NMConnection *connection)
 }
 
 WirelessSecurityWPAPSK *
-ws_wpa_psk_new (const char *ui_file, NMConnection *connection)
+ws_wpa_psk_new (NMConnection *connection)
 {
+	WirelessSecurity *parent;
 	WirelessSecurityWPAPSK *sec;
 	GtkWidget *widget;
-	GtkBuilder *builder;
-	GError *error = NULL;
-
-	g_return_val_if_fail (ui_file != NULL, NULL);
 
-	builder = gtk_builder_new ();
-	if (!gtk_builder_add_from_file (builder, ui_file, &error))
-	{
-		g_warning ("Couldn't load builder file: %s", error->message);
-		g_error_free (error);
+	parent = wireless_security_init (sizeof (WirelessSecurityWPAPSK),
+	                                 validate,
+	                                 add_to_size_group,
+	                                 fill_connection,
+	                                 update_secrets,
+	                                 NULL,
+	                                 UIDIR "/ws-wpa-psk.ui",
+	                                 "wpa_psk_notebook",
+	                                 "wpa_psk_entry");
+	if (!parent)
 		return NULL;
-	}
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "wpa_psk_notebook"));
-	g_assert (widget);
-	g_object_ref_sink (widget);
+	sec = (WirelessSecurityWPAPSK *) parent;
 
-	sec = g_slice_new0 (WirelessSecurityWPAPSK);
-	if (!sec) {
-		g_object_unref (builder);
-		g_object_unref (widget);
-		return NULL;
-	}
-
-	wireless_security_init (WIRELESS_SECURITY (sec),
-	                        validate,
-	                        add_to_size_group,
-	                        fill_connection,
-	                        update_secrets,
-	                        destroy,
-	                        builder,
-	                        widget,
-	                        "wpa_psk_entry");
-
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "wpa_psk_entry"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "wpa_psk_entry"));
 	g_assert (widget);
 	g_signal_connect (G_OBJECT (widget), "changed",
 	                  (GCallback) wireless_security_changed_cb,
@@ -200,17 +178,17 @@ ws_wpa_psk_new (const char *ui_file, NMConnection *connection)
 	if (connection)
 		update_secrets (WIRELESS_SECURITY (sec), connection);
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "show_checkbutton_wpa"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "show_checkbutton_wpa"));
 	g_assert (widget);
 	g_signal_connect (G_OBJECT (widget), "toggled",
 	                  (GCallback) show_toggled_cb,
 	                  sec);
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "wpa_psk_type_combo"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "wpa_psk_type_combo"));
 	g_assert (widget);
 	gtk_widget_hide (widget);
 
-	widget = GTK_WIDGET (gtk_builder_get_object (builder, "wpa_psk_type_label"));
+	widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "wpa_psk_type_label"));
 	g_assert (widget);
 	gtk_widget_hide (widget);
 
diff --git a/src/wireless-security/ws-wpa-psk.h b/src/wireless-security/ws-wpa-psk.h
index 4c973c7..9bad94b 100644
--- a/src/wireless-security/ws-wpa-psk.h
+++ b/src/wireless-security/ws-wpa-psk.h
@@ -17,19 +17,15 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
  */
 
 #ifndef WS_WPA_PSK_H
 #define WS_WPA_PSK_H
 
-typedef struct {
-	struct _WirelessSecurity parent;
+typedef struct _WirelessSecurityWPAPSK WirelessSecurityWPAPSK;
 
-} WirelessSecurityWPAPSK;
-
-WirelessSecurityWPAPSK * ws_wpa_psk_new (const char *ui_file,
-                                         NMConnection *connection);
+WirelessSecurityWPAPSK * ws_wpa_psk_new (NMConnection *connection);
 
 #endif /* WS_WEP_KEY_H */
 
diff --git a/src/wireless-security/ws-wpa-psk.ui b/src/wireless-security/ws-wpa-psk.ui
new file mode 100644
index 0000000..123e86d
--- /dev/null
+++ b/src/wireless-security/ws-wpa-psk.ui
@@ -0,0 +1,117 @@
+<?xml version="1.0"?>
+<interface>
+  <!-- interface-requires gtk+ 2.6 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkWindow" id="wpa_psk_widget">
+    <property name="visible">False</property>
+    <property name="title">wpa_psk_widget</property>
+    <child>
+      <object class="GtkNotebook" id="wpa_psk_notebook">
+        <property name="visible">True</property>
+        <property name="show_tabs">False</property>
+        <property name="show_border">False</property>
+        <child>
+          <object class="GtkTable" id="wpa_psk_table">
+            <property name="visible">True</property>
+            <property name="n_rows">3</property>
+            <property name="n_columns">2</property>
+            <property name="column_spacing">12</property>
+            <property name="row_spacing">6</property>
+            <child>
+              <object class="GtkLabel" id="wpa_psk_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">_Password:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">wpa_psk_entry</property>
+              </object>
+              <packing>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="wpa_psk_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="max_length">64</property>
+                <property name="visibility">False</property>
+                <property name="activates_default">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="wpa_psk_type_label">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">_Type:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">wpa_psk_type_combo</property>
+              </object>
+              <packing>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label32">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+              </object>
+              <packing>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="show_checkbutton_wpa">
+                <property name="label" translatable="yes">Sho_w password</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_underline">True</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"/>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkComboBox" id="wpa_psk_type_combo">
+                <property name="visible">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+                <property name="y_options">GTK_FILL</property>
+              </packing>
+            </child>
+          </object>
+        </child>
+        <child type="tab">
+          <object class="GtkLabel" id="GtkLabel2">
+            <property name="visible">True</property>
+          </object>
+          <packing>
+            <property name="tab_fill">False</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]