diff --git a/examples/book/custom/custom_widget/mywidget.cc b/examples/book/custom/custom_widget/mywidget.cc
index 9025d21..e235500 100644
--- a/examples/book/custom/custom_widget/mywidget.cc
+++ b/examples/book/custom/custom_widget/mywidget.cc
@@ -28,87 +28,35 @@ MyWidget::MyWidget() :
   //The GType name will actually be gtkmm__CustomObject_mywidget
   Glib::ObjectBase("mywidget"),
   Gtk::Widget(),
-  m_scale(1000)
+  m_refGdkWindow(0)
 {
   set_has_window(false);
 
   //This shows the GType name, which must be used in the RC file.
   std::cout << "GType name: " << G_OBJECT_TYPE_NAME(gobj()) << std::endl;
-
-  //This show that the GType still derives from GtkWidget:
-  //std::cout << "Gtype is a GtkWidget?:" << GTK_IS_WIDGET(gobj()) << std::endl;
-
-  //Install a style so that an aspect of this widget may be themed via an RC
-  //file: 
-  gtk_widget_class_install_style_property(GTK_WIDGET_CLASS(
-              G_OBJECT_GET_CLASS(gobj())), 
-      g_param_spec_int("example_scale",
-        "Scale of Example Drawing",
-        "The scale to use when drawing. This is just a silly example.",
-        G_MININT,
-        G_MAXINT,
-        0,
-        G_PARAM_READABLE) );
-
-  gtk_rc_parse("custom_gtkrc");
 }
 
 MyWidget::~MyWidget()
 {
-}
-
-#ifdef GLIBMM_DEFAULT_SIGNAL_HANDLERS_ENABLED
-void MyWidget::on_size_request(Gtk::Requisition* requisition)
-{
-  //Initialize the output parameter:
-  *requisition = Gtk::Requisition();
-
-  //Discover the total amount of minimum space needed by this widget.
-
-  //Let's make this simple example widget always need 50 by 50:
-  requisition->height = 50;
-  requisition->width = 50;
-}
-
-void MyWidget::on_size_allocate(Gtk::Allocation& allocation)
-{
-  //Do something with the space that we have actually been given:
-  //(We will not be given heights or widths less than we have requested, though
-  //we might get more)
-
-  //Use the offered allocation for this container:
-  set_allocation(allocation);
-
   if(m_refGdkWindow)
   {
-    m_refGdkWindow->move_resize( allocation.get_x(), allocation.get_y(),
-            allocation.get_width(), allocation.get_height() );
+    // If we just do 
+    //   g_object_unref(m_refGdkWindow);
+    // instead of gdk_window_destroy() then we see this warning:
+    //   Gdk-WARNING **: losing last reference to undestroyed window
+    gdk_window_destroy(m_refGdkWindow); //also unrefs it.
+    
+    m_refGdkWindow = 0;
   }
 }
 
-void MyWidget::on_map()
-{
-  //Call base class:
-  Gtk::Widget::on_map();
-}
-
-void MyWidget::on_unmap()
-{
-  //Call base class:
-  Gtk::Widget::on_unmap();
-}
+#ifdef GLIBMM_DEFAULT_SIGNAL_HANDLERS_ENABLED
 
 void MyWidget::on_realize()
 {
   //Call base class:
   Gtk::Widget::on_realize();
 
-  ensure_style();
-
-  //Get the themed style from the RC file:
-  get_style_property("example_scale", m_scale);
-  std::cout << "m_scale (example_scale from the theme/rc-file) is: "
-      << m_scale << std::endl; 
 
   if(!m_refGdkWindow)
   {
@@ -125,76 +73,14 @@ void MyWidget::on_realize()
     attributes.width = allocation.get_width();
     attributes.height = allocation.get_height();
 
-    attributes.event_mask = get_events () | Gdk::EXPOSURE_MASK; 
+    attributes.event_mask = get_events () | Gdk::EXPOSURE_MASK;
     attributes.window_type = GDK_WINDOW_CHILD;
     attributes.wclass = GDK_INPUT_OUTPUT;
 
-
-    m_refGdkWindow = Gdk::Window::create(get_window() /* parent */, &attributes,
+    GdkWindow* parent_window = gtk_widget_get_parent_window(gobj());
+    m_refGdkWindow = gdk_window_new(parent_window /* parent */, &attributes,
             GDK_WA_X | GDK_WA_Y);
-    set_has_window();
-    set_window(m_refGdkWindow);
-
-    //set colors
-    modify_bg(Gtk::STATE_NORMAL , Gdk::Color("red"));
-    modify_fg(Gtk::STATE_NORMAL , Gdk::Color("blue"));
-
-    //make the widget receive expose events
-    m_refGdkWindow->set_user_data(gobj());
   }
 }
 
-void MyWidget::on_unrealize()
-{
-  m_refGdkWindow.clear();
-
-  //Call base class:
-  Gtk::Widget::on_unrealize();
-}
-
-bool MyWidget::on_expose_event(GdkEventExpose* event)
-{
-  if(m_refGdkWindow)
-  {
-    double scale_x = (double)get_allocation().get_width() / m_scale;
-    double scale_y = (double)get_allocation().get_height() / m_scale;
-
-    Cairo::RefPtr<Cairo::Context> cr = m_refGdkWindow->create_cairo_context();
-    if(event)
-    {
-      // clip to the area that needs to be re-exposed so we don't draw any
-      // more than we need to.
-      cr->rectangle(event->area.x, event->area.y,
-              event->area.width, event->area.height);
-      cr->clip();
-    }
-
-    // paint the background
-    Gdk::Cairo::set_source_color(cr, get_style()->get_bg(Gtk::STATE_NORMAL));
-    cr->paint();
-
-    // draw the foreground
-    Gdk::Cairo::set_source_color(cr, get_style()->get_fg(Gtk::STATE_NORMAL));
-    cr->move_to(155.*scale_x, 165.*scale_y);
-    cr->line_to(155.*scale_x, 838.*scale_y);
-    cr->line_to(265.*scale_x, 900.*scale_y);
-    cr->line_to(849.*scale_x, 564.*scale_y);
-    cr->line_to(849.*scale_x, 438.*scale_y);
-    cr->line_to(265.*scale_x, 100.*scale_y);
-    cr->line_to(155.*scale_x, 165.*scale_y);
-    cr->move_to(265.*scale_x, 100.*scale_y);
-    cr->line_to(265.*scale_x, 652.*scale_y);
-    cr->line_to(526.*scale_x, 502.*scale_y);
-    cr->move_to(369.*scale_x, 411.*scale_y);
-    cr->line_to(633.*scale_x, 564.*scale_y);
-    cr->move_to(369.*scale_x, 286.*scale_y);
-    cr->line_to(369.*scale_x, 592.*scale_y);
-    cr->move_to(369.*scale_x, 286.*scale_y);
-    cr->line_to(849.*scale_x, 564.*scale_y);
-    cr->move_to(633.*scale_x, 564.*scale_y);
-    cr->line_to(155.*scale_x, 838.*scale_y);
-    cr->stroke();
-  }
-  return true;
-}
 #endif /* GLIBMM_DEFAULT_SIGNAL_HANDLERS_ENABLED */
diff --git a/examples/book/custom/custom_widget/mywidget.h b/examples/book/custom/custom_widget/mywidget.h
index 2af729b..aeef803 100644
--- a/examples/book/custom/custom_widget/mywidget.h
+++ b/examples/book/custom/custom_widget/mywidget.h
@@ -31,18 +31,11 @@ protected:
 
 #ifdef GLIBMM_DEFAULT_SIGNAL_HANDLERS_ENABLED
   //Overrides:
-  virtual void on_size_request(Gtk::Requisition* requisition);
-  virtual void on_size_allocate(Gtk::Allocation& allocation);
-  virtual void on_map();
-  virtual void on_unmap();
   virtual void on_realize();
-  virtual void on_unrealize();
-  virtual bool on_expose_event(GdkEventExpose* event);
 #endif /* GLIBMM_DEFAULT_SIGNAL_HANDLERS_ENABLED */
 
-  Glib::RefPtr<Gdk::Window> m_refGdkWindow;
+  GdkWindow* m_refGdkWindow;
 
-  int m_scale;
 };
 
 #endif //GTKMM_CUSTOM_WIDGET_MYWIDGET_H
