Index: examples/book/builder/basic/main.cc
===================================================================
--- examples/book/builder/basic/main.cc	(revision 85)
+++ examples/book/builder/basic/main.cc	(working copy)
@@ -3,13 +3,22 @@
 
 Gtk::Dialog* pDialog = 0;
 
-static
+class MySlots : public Glib::SlotsContainer
+{
+private:
+  virtual void init_slots(void)
+  {
+    GLIBMM_SLOT(MySlots::on_button_clicked);
+  }
+
 void on_button_clicked()
 {
   if(pDialog)
     pDialog->hide(); //hide() will cause main::run() to end.
 }
 
+};
+
 int main (int argc, char **argv)
 {
   Gtk::Main kit(argc, argv);
@@ -41,20 +50,12 @@
   }
 #endif /* !GLIBMM_EXCEPTIONS_ENABLED */
 
+  refBuilder->connect_signals<MySlots>();
+
   //Get the GtkBuilder-instantiated Dialog:
-  refBuilder->get_widget("DialogBasic", pDialog);
+  pDialog = refBuilder->get_widget<typeof(*pDialog)>("DialogBasic");
   if(pDialog)
-  {
-    //Get the GtkBuilder-instantiated Button, and connect a signal handler:
-    Gtk::Button* pButton = 0;
-    refBuilder->get_widget("quit_button", pButton);
-    if(pButton)
-    {
-      pButton->signal_clicked().connect( sigc::ptr_fun(on_button_clicked) );
-    }
-
     kit.run(*pDialog);
-  }
 
   return 0;
 }
Index: examples/book/builder/basic/basic.ui
===================================================================
--- examples/book/builder/basic/basic.ui	(revision 85)
+++ examples/book/builder/basic/basic.ui	(working copy)
@@ -34,7 +34,7 @@
 	      <property name="label">gtk-quit</property>
 	      <property name="use_stock">True</property>
 	      <property name="relief">GTK_RELIEF_NORMAL</property>
-	      
+	      <signal name="clicked" handler="MySlots::on_button_clicked"/>
 	    </object>
 	  </child>
 	</object>
Index: examples/book/builder/other/main.cc
===================================================================
--- examples/book/builder/other/main.cc	(revision 0)
+++ examples/book/builder/other/main.cc	(revision 0)
@@ -0,0 +1,104 @@
+#include <gtkmm.h>
+#include <iostream>
+
+Gtk::Dialog* pDialog = 0;
+
+void on_button3_clicked()
+{
+  std::cout << "handler3" << std::endl;
+}
+
+class MySlots : public Glib::SlotsContainer
+{
+private:
+GLIBMM_DECLARE_SLOTS(
+  GLIBMM_SLOT(MySlots::on_button_clicked),
+  GLIBMM_SLOT(on_button3_clicked)
+);
+
+void on_button_clicked()
+{
+  std::cout << "handler1" << std::endl;
+}
+
+};
+
+class MySlots2 : public Glib::SlotsContainer
+{
+private:
+  virtual void init_slots(void)
+  {
+    GLIBMM_SLOT(MySlots2::on_button2_clicked);
+  }
+
+void on_button2_clicked()
+{
+  std::cout << "handler2" << std::endl;
+}
+
+};
+
+class DerivedButton : public Gtk::Button
+{
+public:
+  DerivedButton(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& refGlade)
+  : Gtk::Button(cobject),
+    m_refGlade(refGlade)
+  {
+    pDialog = refGlade->get_widget<typeof(*pDialog)>("DialogBasic");
+    magic = "quit";
+  }
+
+  //Signal handlers:
+  virtual void on_button_quit()
+  {
+    std::cout << magic << std::endl;
+    if(pDialog)
+      pDialog->hide(); //hide() will cause main::run() to end.
+  }
+
+protected:
+  Glib::RefPtr<Gtk::Builder> m_refGlade;
+  Gtk::Dialog* pDialog;
+  std::string magic;
+};
+
+
+int main (int argc, char **argv)
+{
+  MySlots2 slots2;
+  Gtk::Main kit(argc, argv);
+
+  //Load the GtkBuilder file and instantiate its widgets:
+  Glib::RefPtr<Gtk::Builder> refBuilder = Gtk::Builder::create();
+  try
+  {
+    refBuilder->add_from_file("other.ui");
+  }
+  catch(const Glib::FileError& ex)
+  {
+    std::cerr << "FileError: " << ex.what() << std::endl;
+    return 1;
+  }
+  catch(const Gtk::BuilderError& ex)
+  {
+    std::cerr << "BuilderError: " << ex.what() << std::endl;
+    return 1;
+  }
+
+  DerivedButton *btn =
+	refBuilder->create_widget_derived<DerivedButton>("quit_button4");
+  slots2.register_slot(GLIBMM_MAKE_SLOT(DerivedButton::on_button_quit), btn);
+
+  refBuilder->connect_signals<MySlots>();
+  refBuilder->connect_signals(slots2);
+
+  //Get the GtkBuilder-instantiated Dialog:
+  pDialog = refBuilder->get_widget<typeof(*pDialog)>("DialogBasic");
+  if(pDialog)
+  {
+    kit.run(*pDialog);
+  }
+
+  return 0;
+}
Index: examples/book/builder/other/Makefile.am
===================================================================
--- examples/book/builder/other/Makefile.am	(revision 0)
+++ examples/book/builder/other/Makefile.am	(revision 0)
@@ -0,0 +1,9 @@
+include $(top_srcdir)/examples/Makefile.am_fragment
+
+#Build the executable, but don't install it.
+noinst_PROGRAMS = example
+example_SOURCES = main.cc
+
+EXTRA_DIST = other.ui
+
+
Index: examples/book/builder/other/other.ui
===================================================================
--- examples/book/builder/other/other.ui	(revision 0)
+++ examples/book/builder/other/other.ui	(revision 0)
@@ -0,0 +1,106 @@
+<?xml version="1.0" ?>
+<!--*- mode: xml -*--><!DOCTYPE glade-interface
+  SYSTEM 'http://glade.gnome.org/glade-2.0.dtd'>
+<interface>
+
+<object class="GtkDialog" id="DialogBasic">
+  <property name="title" translatable="yes">basic libglademm example</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="has_separator">True</property>
+
+  <child internal-child="vbox">
+    <object class="GtkVBox" id="dialog-vbox2">
+      <property name="border_width">2</property>
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+	<object class="GtkHButtonBox" id="dialog-action_area2">
+	  <property name="border_width">5</property>
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+	  <property name="spacing">10</property>
+
+	  <child>
+	    <object class="GtkButton" id="quit_button">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-quit</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <signal name="clicked" handler="MySlots::on_button_clicked"/>
+	    </object>
+	  </child>
+	  <child>
+	    <object class="GtkButton" id="quit_button2">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-quit</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <signal name="clicked" handler="MySlots2::on_button2_clicked"/>
+	    </object>
+	  </child>
+	  <child>
+	    <object class="GtkButton" id="quit_button3">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-quit</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <signal name="clicked" handler="on_button3_clicked"/>
+	    </object>
+	  </child>
+	  <child>
+	    <object class="GtkButton" id="quit_button4">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-quit</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <signal name="clicked" handler="DerivedButton::on_button_quit"/>
+	    </object>
+	  </child>
+	</object>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<object class="GtkLabel" id="label1">
+	  <property name="visible">True</property>
+	  <property name="label" translatable="yes">This is a basic libglademm example</property>
+	  <property name="use_underline">False</property>
+	  <property name="use_markup">False</property>
+	  <property name="justify">GTK_JUSTIFY_LEFT</property>
+	  <property name="wrap">False</property>
+	  <property name="selectable">False</property>
+	  <property name="xalign">0.5</property>
+	  <property name="yalign">0.5</property>
+	  <property name="xpad">0</property>
+	  <property name="ypad">0</property>
+	</object>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">False</property>
+	</packing>
+      </child>
+    </object>
+  </child>
+<action-widgets><action-widget response="0">quit_button</action-widget></action-widgets></object>
+
+</interface>
Index: examples/book/builder/derived/deriveddialog.cc
===================================================================
--- examples/book/builder/derived/deriveddialog.cc	(revision 85)
+++ examples/book/builder/derived/deriveddialog.cc	(working copy)
@@ -23,12 +23,7 @@
   m_refGlade(refGlade),
   m_pButton(0)
 {
-  //Get the Glade-instantiated Button, and connect a signal handler:
-  m_refGlade->get_widget("quit_button", m_pButton);
-  if(m_pButton)
-  {
-    m_pButton->signal_clicked().connect( sigc::mem_fun(*this, &DerivedDialog::on_button_quit) ); 
-  }
+  m_refGlade->connect_signals(*this);
 }
 
 DerivedDialog::~DerivedDialog()
Index: examples/book/builder/derived/deriveddialog.h
===================================================================
--- examples/book/builder/derived/deriveddialog.h	(revision 85)
+++ examples/book/builder/derived/deriveddialog.h	(working copy)
@@ -22,7 +22,7 @@
 #include <gtkmm.h>
 
 
-class DerivedDialog : public Gtk::Dialog
+class DerivedDialog : public Gtk::Dialog, public Glib::SlotsContainer
 {
 public:
   DerivedDialog(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& refGlade);
@@ -34,6 +34,11 @@
 
   Glib::RefPtr<Gtk::Builder> m_refGlade;
   Gtk::Button* m_pButton;
+
+private:
+GLIBMM_DECLARE_SLOTS(
+  GLIBMM_SLOT(DerivedDialog::on_button_quit)
+);
 };
 
 #endif //GTKMM_EXAMPLE_DERIVED_WINDOW_H
Index: examples/book/builder/derived/main.cc
===================================================================
--- examples/book/builder/derived/main.cc	(revision 85)
+++ examples/book/builder/derived/main.cc	(working copy)
@@ -51,8 +51,8 @@
 #endif /* !GLIBMM_EXCEPTIONS_ENABLED */
 
   //Get the GtkBuilder-instantiated dialog::
-  DerivedDialog* pDialog = 0;
-  refBuilder->get_widget_derived("DialogBasic", pDialog);
+  DerivedDialog* pDialog =
+	refBuilder->create_widget_derived<DerivedDialog>("DialogBasic");
   if(pDialog)
   {
     //Start:
Index: examples/book/builder/derived/basic.ui
===================================================================
--- examples/book/builder/derived/basic.ui	(revision 85)
+++ examples/book/builder/derived/basic.ui	(working copy)
@@ -34,7 +34,7 @@
 	      <property name="label">gtk-quit</property>
 	      <property name="use_stock">True</property>
 	      <property name="relief">GTK_RELIEF_NORMAL</property>
-	      
+	      <signal name="clicked" handler="DerivedDialog::on_button_quit"/>
 	    </object>
 	  </child>
 	</object>
Index: examples/book/builder/Makefile.am
===================================================================
--- examples/book/builder/Makefile.am	(revision 85)
+++ examples/book/builder/Makefile.am	(working copy)
@@ -1,2 +1,2 @@
-SUBDIRS = basic derived
+SUBDIRS = basic derived other
 
