Index: widgets/table/e-cell-tree.c
===================================================================
--- widgets/table/e-cell-tree.c	(revision 33821)
+++ widgets/table/e-cell-tree.c	(working copy)
@@ -51,8 +51,9 @@
 #include "tree-unexpanded.xpm"
 
 
-#define PARENT_TYPE e_cell_get_type ()
+G_DEFINE_TYPE (ECellTree, e_cell_tree, E_CELL_TYPE)
 
+
 typedef struct {
 	ECellView    cell_view;
 	ECellView   *subcell_view;
@@ -65,8 +66,6 @@
 
 } ECellTreeView;
 
-static ECellClass *parent_class;
-
 #define INDENT_AMOUNT 16
 
 ECellView *
@@ -183,8 +182,8 @@
 				    GDK_JOIN_MITER);
 	gdk_gc_set_dashes (tree_view->gc, 0, (gint8 *)"\1\1", 2);
 
-	if (parent_class->realize)
-		(* parent_class->realize) (ecell_view);
+	if (E_CELL_CLASS (e_cell_tree_parent_class)->realize)
+		(* E_CELL_CLASS (e_cell_tree_parent_class)->realize) (ecell_view);
 }
 
 /*
@@ -201,8 +200,8 @@
 	g_object_unref (tree_view->gc);
 	tree_view->gc = NULL;
 
-	if (parent_class->unrealize)
-		(* parent_class->unrealize) (ecv);
+	if (E_CELL_CLASS (e_cell_tree_parent_class)->unrealize)
+		(* E_CELL_CLASS (e_cell_tree_parent_class)->unrealize) (ecv);
 }
 
 static void
@@ -818,13 +817,14 @@
 		g_object_unref (ect->closed_pixbuf);
 	ect->closed_pixbuf = NULL;
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (e_cell_tree_parent_class)->dispose (object);
 }
 
 static void
-e_cell_tree_class_init (GObjectClass *object_class)
+e_cell_tree_class_init (ECellTreeClass *klass)
 {
-	ECellClass *ecc = (ECellClass *) object_class;
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+	ECellClass *ecc = E_CELL_CLASS (klass);
 
 	object_class->dispose = ect_dispose;
 
@@ -843,12 +843,14 @@
 	ecc->show_tooltip     = ect_show_tooltip;
 	ecc->get_bg_color     = ect_get_bg_color;
 
-	parent_class = g_type_class_ref (PARENT_TYPE);
-
         gal_a11y_e_cell_registry_add_cell_type (NULL, E_CELL_TREE_TYPE, gal_a11y_e_cell_tree_new);
 }
 
-E_MAKE_TYPE(e_cell_tree, "ECellTree", ECellTree, e_cell_tree_class_init, NULL, PARENT_TYPE)
+static void
+e_cell_tree_init (ECellTree *ect)
+{
+	/* nothing to do */
+}
 
 /**
  * e_cell_tree_construct:
Index: widgets/table/e-cell-hbox.c
===================================================================
--- widgets/table/e-cell-hbox.c	(revision 33821)
+++ widgets/table/e-cell-hbox.c	(working copy)
@@ -41,10 +41,8 @@
 #include "e-cell-hbox.h"
 #include "e-table-item.h"
 
-#define PARENT_TYPE e_cell_get_type ()
+G_DEFINE_TYPE (ECellHbox, e_cell_hbox, E_CELL_TYPE)
 
-static ECellClass *parent_class;
-
 #define INDENT_AMOUNT 16
 #define MAX_CELL_SIZE 25
 
@@ -117,8 +115,8 @@
 	for (i = 0; i < hbox_view->subcell_view_count; i++)
 		e_cell_realize (hbox_view->subcell_views[i]);
 
-	if (parent_class->realize)
-		(* parent_class->realize) (ecell_view);
+	if (E_CELL_CLASS (e_cell_hbox_parent_class)->realize)
+		(* E_CELL_CLASS (e_cell_hbox_parent_class)->realize) (ecell_view);
 }
 
 /*
@@ -134,8 +132,8 @@
 	for (i = 0; i < hbox_view->subcell_view_count; i++)
 		e_cell_unrealize (hbox_view->subcell_views[i]);
 
-	if (parent_class->unrealize)
-		(* parent_class->unrealize) (ecv);
+	if (E_CELL_CLASS (e_cell_hbox_parent_class)->unrealize)
+		(* E_CELL_CLASS (e_cell_hbox_parent_class)->unrealize) (ecv);
 }
 
 /*
@@ -260,13 +258,14 @@
 	ecv->subcells = NULL;
 	ecv->subcell_count = 0;
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (e_cell_hbox_parent_class)->dispose (object);
 }
 
 static void
-e_cell_hbox_class_init (GObjectClass *object_class)
+e_cell_hbox_class_init (ECellHboxClass *klass)
 {
-	ECellClass *ecc = (ECellClass *) object_class;
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+	ECellClass *ecc = E_CELL_CLASS (klass);
 
 	object_class->dispose = ecv_dispose;
 
@@ -280,22 +279,16 @@
 
 	ecc->max_width        = ecv_max_width;
 
-	parent_class = g_type_class_ref (PARENT_TYPE);
-
 /* 	gal_a11y_e_cell_registry_add_cell_type (NULL, E_CELL_HBOX_TYPE, gal_a11y_e_cell_hbox_new); */
 }
 
 static void
-e_cell_hbox_init (GtkObject *object)
+e_cell_hbox_init (ECellHbox *ecv)
 {
-	ECellHbox *ecv = E_CELL_HBOX (object);
-
 	ecv->subcells = NULL;
 	ecv->subcell_count = 0;
 }
 
-E_MAKE_TYPE(e_cell_hbox, "ECellHbox", ECellHbox, e_cell_hbox_class_init, e_cell_hbox_init, PARENT_TYPE)
-
 /**
  * e_cell_hbox_new:
  * 
Index: widgets/table/e-cell-popup.c
===================================================================
--- widgets/table/e-cell-popup.c	(revision 33821)
+++ widgets/table/e-cell-popup.c	(working copy)
@@ -45,7 +45,7 @@
 #define E_CELL_POPUP_ARROW_YPAD		3
 
 
-static void	e_cell_popup_class_init	(GtkObjectClass	*object_class);
+static void	e_cell_popup_class_init	(ECellPopupClass *klass);
 static void	e_cell_popup_init	(ECellPopup	*ecp);
 static void	e_cell_popup_dispose	(GObject	*object);
 
@@ -115,19 +115,14 @@
 					 int             row,
 					 int             model_col);
 
-static ECellClass *parent_class;
+G_DEFINE_TYPE (ECellPopup, e_cell_popup, E_CELL_TYPE)
 
-
-E_MAKE_TYPE (e_cell_popup, "ECellPopup", ECellPopup, e_cell_popup_class_init,
-	     e_cell_popup_init, e_cell_get_type())
-
-
 static void
-e_cell_popup_class_init		(GtkObjectClass	*object_class)
+e_cell_popup_class_init		(ECellPopupClass	*klass)
 {
-	ECellClass *ecc = (ECellClass *) object_class;
+	ECellClass *ecc = E_CELL_CLASS (klass);
 
-	G_OBJECT_CLASS (object_class)->dispose = e_cell_popup_dispose;
+	G_OBJECT_CLASS (klass)->dispose = e_cell_popup_dispose;
 
 	ecc->new_view     = ecp_new_view;
 	ecc->kill_view    = ecp_kill_view;
@@ -144,7 +139,6 @@
 	ecc->show_tooltip = ecp_show_tooltip;
 	ecc->get_bg_color = ecp_get_bg_color;
 
-	parent_class = g_type_class_ref (E_CELL_TYPE);
 	gal_a11y_e_cell_registry_add_cell_type (NULL,
                                                 E_CELL_POPUP_TYPE,
                                                 gal_a11y_e_cell_popup_new);
@@ -187,7 +181,7 @@
 		g_object_unref (ecp->child);
 	ecp->child = NULL;
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (e_cell_popup_parent_class)->dispose (object);
 }
 
 
@@ -249,8 +243,8 @@
 
 	e_cell_realize (ecp_view->child_view);
 
-	if (parent_class->realize)
-		(* parent_class->realize) (ecv);
+	if (E_CELL_CLASS (e_cell_popup_parent_class)->realize)
+		(* E_CELL_CLASS (e_cell_popup_parent_class)->realize) (ecv);
 }
 
 
@@ -264,8 +258,8 @@
 
 	e_cell_unrealize (ecp_view->child_view);
 
-	if (parent_class->unrealize)
-		(* parent_class->unrealize) (ecv);
+	if (E_CELL_CLASS (e_cell_popup_parent_class)->unrealize)
+		(* E_CELL_CLASS (e_cell_popup_parent_class)->unrealize) (ecv);
 }
 
 
Index: widgets/table/e-tree-simple.c
===================================================================
--- widgets/table/e-tree-simple.c	(revision 33821)
+++ widgets/table/e-tree-simple.c	(working copy)
@@ -143,7 +143,7 @@
 	model_class      ->is_editable      = simple_is_editable;
 }
 
-E_MAKE_TYPE(e_tree_simple, "ETreeSimple", ETreeSimple, e_tree_simple_class_init, NULL, E_TREE_MODEL_TYPE)
+G_DEFINE_TYPE (ETreeSimple, e_tree_simple, E_TREE_MODEL_TYPE)
 
 /**
  * e_tree_simple_new:
Index: widgets/table/e-cell-date.c
===================================================================
--- widgets/table/e-cell-date.c	(revision 33821)
+++ widgets/table/e-cell-date.c	(working copy)
@@ -33,15 +33,13 @@
 
 #include "e-cell-date.h"
 
-#define PARENT_TYPE e_cell_text_get_type ()
+G_DEFINE_TYPE (ECellDate, e_cell_date, E_CELL_TEXT_TYPE)
 
 #ifdef G_OS_WIN32
 /* The localtime() in Microsoft's C library *is* thread-safe */
 #define localtime_r(timep, result)  (localtime (timep) ? memcpy ((result), localtime (timep), sizeof (*(result))) : 0)
 #endif
 
-static ECellTextClass *parent_class;
-
 static char *
 ecd_get_text(ECellText *cell, ETableModel *model, int col, int row)
 {
@@ -118,18 +116,16 @@
 }
 
 static void
-e_cell_date_class_init (GtkObjectClass *object_class)
+e_cell_date_class_init (ECellDateClass *klass)
 {
-	ECellTextClass *ectc = (ECellTextClass *) object_class;
+	ECellTextClass *ectc = E_CELL_TEXT_CLASS (klass);
 
-	parent_class = g_type_class_ref (PARENT_TYPE);
-
 	ectc->get_text  = ecd_get_text;
 	ectc->free_text = ecd_free_text;
 }
 
 static void
-e_cell_date_init (GtkObject *object)
+e_cell_date_init (ECellDate *ecd)
 {
 }
 
@@ -168,4 +164,3 @@
 	return (ECell *) ecd;
 }
 
-E_MAKE_TYPE(e_cell_date, "ECellDate", ECellDate, e_cell_date_class_init, e_cell_date_init, PARENT_TYPE)
Index: widgets/table/e-tree-table-adapter.c
===================================================================
--- widgets/table/e-tree-table-adapter.c	(revision 33821)
+++ widgets/table/e-tree-table-adapter.c	(working copy)
@@ -38,13 +38,13 @@
 #include "e-table-sorting-utils.h"
 #include "e-tree-table-adapter.h"
 
-#define PARENT_TYPE E_TABLE_MODEL_TYPE
+/* workaround for avoiding API breakage */
+#define etta_get_type e_tree_table_adapter_get_type
+G_DEFINE_TYPE (ETreeTableAdapter, etta, E_TABLE_MODEL_TYPE)
 #define d(x)
 
 #define INCREMENT_AMOUNT 100
 
-static ETableModelClass *parent_class;
-
 typedef struct {
 	ETreePath path;
 	guint32 num_visible_children;
@@ -509,7 +509,7 @@
 
 	g_free (etta->priv);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (etta_parent_class)->finalize (object);
 }
 
 static void
@@ -551,7 +551,7 @@
 		etta->priv->source = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (etta_parent_class)->dispose (object);
 }
 
 static int
@@ -681,8 +681,6 @@
 	ETableModelClass *table_class   = (ETableModelClass *) klass;
 	GObjectClass *object_class      = (GObjectClass *) klass;
 
-	parent_class                    = g_type_class_peek_parent (klass);
-	
 	object_class->dispose           = etta_dispose;
 	object_class->finalize          = etta_finalize;
 
@@ -732,8 +730,6 @@
 	etta->priv->node_request_collapse_id = 0;
 }
 
-E_MAKE_TYPE(e_tree_table_adapter, "ETreeTableAdapter", ETreeTableAdapter, etta_class_init, etta_init, PARENT_TYPE)
-
 static void
 etta_proxy_pre_change (ETreeModel *etm, ETreeTableAdapter *etta)
 {
Index: widgets/table/e-tree-scrolled.c
===================================================================
--- widgets/table/e-tree-scrolled.c	(revision 33821)
+++ widgets/table/e-tree-scrolled.c	(working copy)
@@ -39,23 +39,19 @@
 
 #define COLUMN_HEADER_HEIGHT 16
 
-#define PARENT_TYPE gtk_scrolled_window_get_type ()
+G_DEFINE_TYPE (ETreeScrolled, e_tree_scrolled, GTK_TYPE_SCROLLED_WINDOW)
 
-static GtkObjectClass *parent_class;
-
 enum {
 	PROP_0,
 	PROP_TREE
 };
 
 static void
-e_tree_scrolled_init (GtkObject *object)
+e_tree_scrolled_init (ETreeScrolled *ets)
 {
-	ETreeScrolled *ets;
 	GtkScrolledWindow *scrolled_window;
 
-	ets = E_TREE_SCROLLED (object);
-	scrolled_window = GTK_SCROLLED_WINDOW (object);
+	scrolled_window = GTK_SCROLLED_WINDOW (ets);
 
 	GTK_WIDGET_SET_FLAGS (ets, GTK_CAN_FOCUS);
 
@@ -218,8 +214,6 @@
 	object_class = (GObjectClass *) class;
 	widget_class = (GtkWidgetClass *) class;
 
-	parent_class = g_type_class_ref (PARENT_TYPE);
-
 	object_class->get_property = ets_get_property;
 
 	widget_class->grab_focus = ets_grab_focus;
@@ -234,5 +228,3 @@
 							      G_PARAM_READABLE));
 }
 
-E_MAKE_TYPE(e_tree_scrolled, "ETreeScrolled", ETreeScrolled, e_tree_scrolled_class_init, e_tree_scrolled_init, PARENT_TYPE)
-
Index: widgets/table/e-table-field-chooser.c
===================================================================
--- widgets/table/e-table-field-chooser.c	(revision 33821)
+++ widgets/table/e-table-field-chooser.c	(working copy)
@@ -39,9 +39,6 @@
 static void e_table_field_chooser_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 static void e_table_field_chooser_dispose (GObject *object);
 
-#define PARENT_TYPE GTK_TYPE_VBOX
-static GtkVBoxClass *parent_class = NULL;
-
 /* The arguments we take */
 enum {
 	PROP_0,
@@ -50,12 +47,7 @@
 	PROP_DND_CODE
 };
 
-E_MAKE_TYPE (e_table_field_chooser,
-	     "ETableFieldChooser",
-	     ETableFieldChooser,
-	     e_table_field_chooser_class_init,
-	     e_table_field_chooser_init,
-	     PARENT_TYPE)
+G_DEFINE_TYPE (ETableFieldChooser, e_table_field_chooser, GTK_TYPE_VBOX)
 
 static void
 e_table_field_chooser_class_init (ETableFieldChooserClass *klass)
@@ -66,8 +58,6 @@
 
 	glade_init();
 
-	parent_class = g_type_class_ref (GTK_TYPE_VBOX);
-
 	object_class->set_property = e_table_field_chooser_set_property;
 	object_class->get_property = e_table_field_chooser_get_property;
 	object_class->dispose      = e_table_field_chooser_dispose;
@@ -225,8 +215,8 @@
 		g_object_unref (etfc->gui);
 	etfc->gui = NULL;
 
-	if (G_OBJECT_CLASS (parent_class)->dispose)
-		(* G_OBJECT_CLASS (parent_class)->dispose) (object);
+	if (G_OBJECT_CLASS (e_table_field_chooser_parent_class)->dispose)
+		(* G_OBJECT_CLASS (e_table_field_chooser_parent_class)->dispose) (object);
 }
 
 GtkWidget*
Index: widgets/table/e-table-header-item.c
===================================================================
--- widgets/table/e-table-header-item.c	(revision 33821)
+++ widgets/table/e-table-header-item.c	(working copy)
@@ -74,13 +74,12 @@
 
 #define ETHI_RESIZING(x) ((x)->resize_col != -1)
 
-#define PARENT_OBJECT_TYPE gnome_canvas_item_get_type ()
+#define ethi_get_type e_table_header_item_get_type
+G_DEFINE_TYPE (ETableHeaderItem, ethi, GNOME_TYPE_CANVAS_ITEM)
 
 #define ELEMENTS(x) (sizeof (x) / sizeof (x[0]))
 #define d(x)
 
-static GnomeCanvasItemClass *ethi_parent_class;
-
 static void ethi_drop_table_header (ETableHeaderItem *ethi);
 
 /*
@@ -1855,12 +1854,11 @@
 }
 
 static void
-ethi_class_init (GObjectClass *object_class)
+ethi_class_init (ETableHeaderItemClass *klass)
 {
-	GnomeCanvasItemClass *item_class = (GnomeCanvasItemClass *) object_class;
+	GnomeCanvasItemClass *item_class = GNOME_CANVAS_ITEM_CLASS (klass);
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	ethi_parent_class = g_type_class_ref (PARENT_OBJECT_TYPE);
-	
 	object_class->dispose = ethi_dispose;
 	object_class->set_property = ethi_set_property;
 	object_class->get_property = ethi_get_property;
@@ -1944,9 +1942,9 @@
 }
 
 static void
-ethi_init (GnomeCanvasItem *item)
+ethi_init (ETableHeaderItem *ethi)
 {
-	ETableHeaderItem *ethi = E_TABLE_HEADER_ITEM (item);
+	GnomeCanvasItem *item = GNOME_CANVAS_ITEM (ethi);
 
 	ethi->resize_col = -1;
 
@@ -1970,9 +1968,3 @@
 	ethi->selected_col = 0;
 }
 
-E_MAKE_TYPE (e_table_header_item,
-	     "ETableHeaderItem",
-	     ETableHeaderItem,
-	     ethi_class_init,
-	     ethi_init,
-	     PARENT_OBJECT_TYPE)
Index: widgets/table/e-cell-pixbuf.c
===================================================================
--- widgets/table/e-cell-pixbuf.c	(revision 33821)
+++ widgets/table/e-cell-pixbuf.c	(working copy)
@@ -31,8 +31,7 @@
 #include <gtk/gtk.h>
 #include "e-cell-pixbuf.h"
 
-#define PARENT_TYPE E_CELL_TYPE
-static ECellClass *parent_class;
+G_DEFINE_TYPE (ECellPixbuf, e_cell_pixbuf, E_CELL_TYPE)
 
 typedef struct _ECellPixbufView ECellPixbufView;
 
@@ -290,8 +289,8 @@
 static void
 pixbuf_dispose (GObject *object)
 {
-	if (G_OBJECT_CLASS (parent_class)->dispose)
-		(* G_OBJECT_CLASS (parent_class)->dispose) (object);
+	if (G_OBJECT_CLASS (e_cell_pixbuf_parent_class)->dispose)
+		(* G_OBJECT_CLASS (e_cell_pixbuf_parent_class)->dispose) (object);
 }
 
 static void
@@ -353,19 +352,18 @@
 }
 
 static void
-e_cell_pixbuf_init (GtkObject *object)
+e_cell_pixbuf_init (ECellPixbuf *ecp)
 {
-	ECellPixbuf *ecp = E_CELL_PIXBUF (object);
-
 	ecp->selected_column = -1;
 	ecp->focused_column = -1;
 	ecp->unselected_column = -1;
 }
 
 static void
-e_cell_pixbuf_class_init (GObjectClass *object_class)
+e_cell_pixbuf_class_init (ECellPixbufClass *klass)
 {
-	ECellClass *ecc = (ECellClass *) object_class;
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+	ECellClass *ecc = E_CELL_CLASS (klass);
 
 	object_class->dispose = pixbuf_dispose;
 	object_class->set_property = pixbuf_set_property;
@@ -380,8 +378,6 @@
 	ecc->print_height = pixbuf_print_height;
 	ecc->max_width = pixbuf_max_width;
 
-	parent_class = g_type_class_ref (PARENT_TYPE);
-
 	g_object_class_install_property (object_class, PROP_SELECTED_COLUMN,
 					 g_param_spec_int ("selected_column",
 							   _("Selected Column"),
@@ -404,9 +400,3 @@
 							   G_PARAM_READWRITE));
 }
 
-E_MAKE_TYPE (e_cell_pixbuf,
-	     "ECellPixbuf",
-	     ECellPixbuf,
-	     e_cell_pixbuf_class_init,
-	     e_cell_pixbuf_init,
-	     PARENT_TYPE)
Index: widgets/table/e-table-subset-variable.c
===================================================================
--- widgets/table/e-table-subset-variable.c	(revision 33821)
+++ widgets/table/e-table-subset-variable.c	(working copy)
@@ -32,6 +32,10 @@
 
 #define ETSSV_CLASS(e) (E_TABLE_SUBSET_VARIABLE_GET_CLASS (e))
 
+/* workaround for avoiding API breakage */
+#define etssv_get_type e_table_subset_variable_get_type
+G_DEFINE_TYPE (ETableSubsetVariable, etssv, E_TABLE_SUBSET_TYPE)
+
 #define INCREMENT_AMOUNT 10
 
 static void
@@ -117,17 +121,19 @@
 }
 
 static void
-etssv_class_init (GObjectClass *object_class)
+etssv_class_init (ETableSubsetVariableClass *klass)
 {
-	ETableSubsetVariableClass *klass = E_TABLE_SUBSET_VARIABLE_CLASS(object_class);
-
 	klass->add     = etssv_add;
 	klass->add_array = etssv_add_array;
 	klass->add_all = etssv_add_all;
 	klass->remove  = etssv_remove;
 }
 
-E_MAKE_TYPE(e_table_subset_variable, "ETableSubsetVariable", ETableSubsetVariable, etssv_class_init, NULL, E_TABLE_SUBSET_TYPE)
+static void
+etssv_init (ETableSubsetVariable *etssv)
+{
+	/* nothing to do */
+}
 
 ETableModel *
 e_table_subset_variable_construct (ETableSubsetVariable *etssv,
Index: widgets/table/e-tree-selection-model.c
===================================================================
--- widgets/table/e-tree-selection-model.c	(revision 33821)
+++ widgets/table/e-tree-selection-model.c	(working copy)
@@ -30,10 +30,8 @@
 
 #include "e-tree-selection-model.h"
 
-#define PARENT_TYPE e_selection_model_get_type ()
+G_DEFINE_TYPE (ETreeSelectionModel, e_tree_selection_model, E_SELECTION_MODEL_TYPE)
 
-static ESelectionModelClass *parent_class;
-
 enum {
 	PROP_0,
 	PROP_CURSOR_ROW,
@@ -280,8 +278,8 @@
 
 	drop_model(etsm);
 
-	if (G_OBJECT_CLASS (parent_class)->dispose)
-		(* G_OBJECT_CLASS (parent_class)->dispose) (object);
+	if (G_OBJECT_CLASS (e_tree_selection_model_parent_class)->dispose)
+		(* G_OBJECT_CLASS (e_tree_selection_model_parent_class)->dispose) (object);
 }
 
 static void
@@ -296,8 +294,8 @@
 		etsm->priv = NULL;
 	}
 
-	if (G_OBJECT_CLASS (parent_class)->finalize)
-		(* G_OBJECT_CLASS (parent_class)->finalize) (object);
+	if (G_OBJECT_CLASS (e_tree_selection_model_parent_class)->finalize)
+		(* G_OBJECT_CLASS (e_tree_selection_model_parent_class)->finalize) (object);
 }
 
 static void
@@ -778,8 +776,6 @@
 	GObjectClass *object_class;
 	ESelectionModelClass *esm_class;
 
-	parent_class = g_type_class_ref (PARENT_TYPE);
-
 	object_class = G_OBJECT_CLASS(klass);
 	esm_class = E_SELECTION_MODEL_CLASS(klass);
 
@@ -842,5 +838,3 @@
 	return g_object_new (E_TREE_SELECTION_MODEL_TYPE, NULL);
 }
 
-E_MAKE_TYPE(e_tree_selection_model, "ETreeSelectionModel", ETreeSelectionModel,
-	    e_tree_selection_model_class_init, e_tree_selection_model_init, PARENT_TYPE)
Index: widgets/table/e-tree-sorted-variable.c
===================================================================
--- widgets/table/e-tree-sorted-variable.c	(revision 33821)
+++ widgets/table/e-tree-sorted-variable.c	(working copy)
@@ -128,7 +128,7 @@
 	etsv->insert_count = 0;
 }
 
-E_MAKE_TYPE(e_tree_sorted_variable, "ETreeSortedVariable", ETreeSortedVariable, etsv_class_init, etsv_init, E_TREE_MODEL_TYPE)
+G_DEFINE_TYPE (ETreeSortedVariable, etsv, E_TREE_MODEL_TYPE)
 
 static gboolean
 etsv_sort_idle(ETreeSortedVariable *etsv)
Index: widgets/table/e-tree-memory-callbacks.c
===================================================================
--- widgets/table/e-tree-memory-callbacks.c	(revision 33821)
+++ widgets/table/e-tree-memory-callbacks.c	(working copy)
@@ -29,7 +29,7 @@
 
 #include "e-tree-memory-callbacks.h"
 
-#define PARENT_TYPE E_TREE_MEMORY_TYPE
+G_DEFINE_TYPE (ETreeMemoryCallbacks, e_tree_memory_callbacks, E_TREE_MEMORY_TYPE)
 
 static GdkPixbuf *
 etmc_icon_at (ETreeModel *etm, ETreePath node)
@@ -186,9 +186,9 @@
 }
 
 static void
-e_tree_memory_callbacks_class_init (GtkObjectClass *object_class)
+e_tree_memory_callbacks_class_init (ETreeMemoryCallbacksClass *klass)
 {
-	ETreeModelClass *model_class        = (ETreeModelClass *) object_class;
+	ETreeModelClass *model_class        = E_TREE_MODEL_CLASS (klass);
 
 	model_class->icon_at            = etmc_icon_at;
 
@@ -212,7 +212,11 @@
 	model_class->value_to_string    = etmc_value_to_string;
 }
 
-E_MAKE_TYPE(e_tree_memory_callbacks, "ETreeMemoryCallbacks", ETreeMemoryCallbacks, e_tree_memory_callbacks_class_init, NULL, PARENT_TYPE)
+static void
+e_tree_memory_callbacks_init (ETreeMemoryCallbacks *etmc)
+{
+	/* nothing to do */
+}
 
 /**
  * e_tree_memory_callbacks_new:
Index: widgets/table/ChangeLog
===================================================================
--- widgets/table/ChangeLog	(revision 33821)
+++ widgets/table/ChangeLog	(working copy)
@@ -1,3 +1,67 @@
+2007-07-20  Hiroyuki Ikezoe  <poincare@ikezoe.net>
+
+	* e-cell-tree.c,
+	  e-cell-hbox.c,
+	  e-cell-popup.c,
+	  e-tree-simple.c,
+	  e-cell-date.c,
+	  e-tree-table-adapter.c,
+	  e-tree-scrolled.c,
+	  e-table-field-chooser.c,
+	  e-table-header-item.c,
+	  e-cell-pixbuf.c,
+	  e-table-subset-variable.c,
+	  e-tree-selection-model.c,
+	  e-tree-sorted-variable.c,
+	  e-tree-memory-callbacks.c,
+	  e-table-sorted.c,
+	  e-table-subset.c,
+	  e-table-search.c,
+	  e-table-extras.c,
+	  e-table-one.c,
+	  e-table-config-field.c,
+	  e-cell-combo.c,
+	  e-table-item.c,
+	  e-cell-toggle.c,
+	  e-tree.c,
+	  e-table-col.c,
+	  e-table-field-chooser-item.c,
+	  e-table-sort-info.c,
+	  e-table-simple.c,
+	  e-table-column.c,
+	  e-table-scrolled.c,
+	  e-tree-model.c,
+	  e-table-column-specification.c,
+	  e-table-group-container.c,
+	  e-cell-text.c,
+	  e-table-specification.c,
+	  e-cell-number.c,
+	  e-table-sorted-variable.c,
+	  e-table-selection-model.c,
+	  e-table-memory-callbacks.c,
+	  e-cell.c,
+	  e-table-click-to-add.c,
+	  e-cell-float.c,
+	  e-table-field-chooser-dialog.c,
+	  e-tree-memory.c,
+	  e-cell-progress.c,
+	  e-table-group-leaf.c,
+	  e-table.c,
+	  e-table-sorter.c,
+	  e-table-header.c,
+	  e-table-group.c,
+	  e-table-model.c,
+	  e-cell-size.c,
+	  e-table-without.c,
+	  e-table-config.c,
+	  e-cell-vbox.c,
+	  e-tree-sorted.c,
+	  e-table-state.c,
+	  e-table-memory-store.c,
+	  e-table-memory.c,
+	  e-cell-spin-button.c,
+	  e-cell-checkbox.c: Use G_DEFINE_TYPE instead of E_MAKE_TYPE.
+
 2007-06-15  Matthew Barnes  <mbarnes@redhat.com>
 
 	* e-cell-vbox.c (ecv_finalize):
Index: widgets/table/e-table-sorted.c
===================================================================
--- widgets/table/e-table-sorted.c	(revision 33821)
+++ widgets/table/e-table-sorted.c	(working copy)
@@ -35,11 +35,13 @@
 
 #define INCREMENT_AMOUNT 100
 
+/* workaround for avoding API breakage */
+#define ets_get_type e_table_sorted_get_type
+G_DEFINE_TYPE (ETableSorted, ets, E_TABLE_SUBSET_TYPE)
+
 /* maximum insertions between an idle event that we will do without scheduling an idle sort */
 #define ETS_INSERT_MAX (4)
 
-static ETableSubsetClass *ets_parent_class;
-
 static void ets_sort_info_changed        (ETableSortInfo *info, ETableSorted *ets);
 static void ets_sort                     (ETableSorted *ets);
 static void ets_proxy_model_changed      (ETableSubset *etss, ETableModel *source);
@@ -76,12 +78,11 @@
 }
 
 static void
-ets_class_init (GObjectClass *object_class)
+ets_class_init (ETableSortedClass *klass)
 {
-	ETableSubsetClass *etss_class = E_TABLE_SUBSET_CLASS(object_class);
+	ETableSubsetClass *etss_class = E_TABLE_SUBSET_CLASS (klass);
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	ets_parent_class = g_type_class_peek_parent (object_class);
-
 	etss_class->proxy_model_changed = ets_proxy_model_changed;
 	etss_class->proxy_model_row_changed = ets_proxy_model_row_changed;
 	etss_class->proxy_model_cell_changed = ets_proxy_model_cell_changed;
@@ -103,8 +104,6 @@
 	ets->insert_count = 0;
 }
 
-E_MAKE_TYPE(e_table_sorted, "ETableSorted", ETableSorted, ets_class_init, ets_init, E_TABLE_SUBSET_TYPE)
-
 static gboolean
 ets_sort_idle(ETableSorted *ets)
 {
@@ -130,8 +129,8 @@
 	ETableSorted *ets = g_object_new (E_TABLE_SORTED_TYPE, NULL);
 	ETableSubset *etss = E_TABLE_SUBSET (ets);
 
-	if (ets_parent_class->proxy_model_pre_change)
-		(ets_parent_class->proxy_model_pre_change) (etss, source);
+	if (E_TABLE_SUBSET_CLASS (ets_parent_class)->proxy_model_pre_change)
+		(E_TABLE_SUBSET_CLASS (ets_parent_class)->proxy_model_pre_change) (etss, source);
 
 	if (e_table_subset_construct (etss, source, 0) == NULL){
 		g_object_unref (ets);
@@ -184,8 +183,8 @@
 	if (!E_TABLE_SORTED(subset)->sort_idle_id)
 		E_TABLE_SORTED(subset)->sort_idle_id = g_idle_add_full(50, (GSourceFunc) ets_sort_idle, subset, NULL);
 	
-	if (ets_parent_class->proxy_model_row_changed)
-		(ets_parent_class->proxy_model_row_changed) (subset, source, row);
+	if (E_TABLE_SUBSET_CLASS (ets_parent_class)->proxy_model_row_changed)
+		(E_TABLE_SUBSET_CLASS (ets_parent_class)->proxy_model_row_changed) (subset, source, row);
 }
 
 static void
@@ -194,8 +193,8 @@
 	ETableSorted *ets = E_TABLE_SORTED(subset);
 	if (e_table_sorting_utils_affects_sort(ets->sort_info, ets->full_header, col))
 		ets_proxy_model_row_changed(subset, source, row);
-	else if (ets_parent_class->proxy_model_cell_changed)
-		(ets_parent_class->proxy_model_cell_changed) (subset, source, col, row);
+	else if (E_TABLE_SUBSET_CLASS (ets_parent_class)->proxy_model_cell_changed)
+		(E_TABLE_SUBSET_CLASS (ets_parent_class)->proxy_model_cell_changed) (subset, source, col, row);
 }
 
 static void
Index: widgets/table/e-table-subset.c
===================================================================
--- widgets/table/e-table-subset.c	(revision 33821)
+++ widgets/table/e-table-subset.c	(working copy)
@@ -40,7 +40,9 @@
 
 #define d(x)
 
-static ETableModelClass *etss_parent_class;
+/* workaround for avoding API breakage */
+#define etss_get_type e_table_subset_get_type
+G_DEFINE_TYPE (ETableSubset, etss, E_TABLE_MODEL_TYPE)
 
 #define ETSS_CLASS(object) (E_TABLE_SUBSET_GET_CLASS(object))
 
@@ -246,13 +248,11 @@
 }
 
 static void
-etss_class_init (GObjectClass *object_class)
+etss_class_init (ETableSubsetClass *klass)
 {
-	ETableSubsetClass *klass         = (ETableSubsetClass *) object_class;
-	ETableModelClass *table_class    = (ETableModelClass *) object_class;
+	ETableModelClass *table_class    = E_TABLE_MODEL_CLASS (klass);
+	GObjectClass *object_class       = G_OBJECT_CLASS (klass);
 
-	etss_parent_class                = g_type_class_peek_parent (klass);
-	
 	object_class->dispose            = etss_dispose;
 	object_class->finalize           = etss_finalize;
 
@@ -288,8 +288,6 @@
 	etss->last_access = 0;
 }
 
-E_MAKE_TYPE(e_table_subset, "ETableSubset", ETableSubset, etss_class_init, etss_init, E_TABLE_MODEL_TYPE)
-
 static void
 etss_proxy_model_pre_change_real (ETableSubset *etss, ETableModel *etm)
 {
Index: widgets/table/e-table-search.c
===================================================================
--- widgets/table/e-table-search.c	(revision 33821)
+++ widgets/table/e-table-search.c	(working copy)
@@ -40,7 +40,7 @@
 	gunichar last_character;
 };
 
-static GObjectClass *e_table_search_parent_class;
+G_DEFINE_TYPE (ETableSearch, e_table_search, G_TYPE_OBJECT)
 
 enum {
 	SEARCH_SEARCH,
@@ -113,15 +113,14 @@
 	g_free (ets->priv->search_string);
 	g_free (ets->priv);
 	
-	if (e_table_search_parent_class->finalize)
-		(*e_table_search_parent_class->finalize)(object);
+	if (G_OBJECT_CLASS (e_table_search_parent_class)->finalize)
+		(*G_OBJECT_CLASS (e_table_search_parent_class)->finalize)(object);
 }
 
 static void
-e_table_search_class_init (GObjectClass *object_class)
+e_table_search_class_init (ETableSearchClass *klass)
 {
-	ETableSearchClass *klass = E_TABLE_SEARCH_CLASS(object_class);
-	e_table_search_parent_class = g_type_class_peek_parent (klass);
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
 	object_class->finalize = e_table_search_finalize;
 
@@ -157,9 +156,6 @@
 	ets->priv->last_character = 0;
 }
 
-
-E_MAKE_TYPE(e_table_search, "ETableSearch", ETableSearch, e_table_search_class_init, e_table_search_init, G_TYPE_OBJECT)
-
 ETableSearch *
 e_table_search_new (void)
 {
Index: widgets/table/e-table-extras.c
===================================================================
--- widgets/table/e-table-extras.c	(revision 33821)
+++ widgets/table/e-table-extras.c	(working copy)
@@ -39,7 +39,9 @@
 #include "e-cell-tree.h"
 #include "e-table-extras.h"
 
-static GObjectClass *ete_parent_class;
+/* workaround for avoiding API breakage */
+#define ete_get_type e_table_extras_get_type
+G_DEFINE_TYPE (ETableExtras, ete, G_TYPE_OBJECT)
 
 static void
 cell_hash_free(gchar	*key,
@@ -91,15 +93,15 @@
 	ete->searches = NULL;
 	ete->pixbufs = NULL;
 
-	ete_parent_class->finalize (object);
+	G_OBJECT_CLASS (ete_parent_class)->finalize (object);
 }
 
 static void
-ete_class_init (GObjectClass *klass)
+ete_class_init (ETableExtrasClass *klass)
 {
-	ete_parent_class = g_type_class_peek_parent (klass);
-	
-	klass->finalize = ete_finalize;
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+	object_class->finalize = ete_finalize;
 }
 
 static gint
@@ -184,8 +186,6 @@
 	e_table_extras_add_cell(extras, "tree-string", e_cell_tree_new (NULL, NULL, TRUE, e_cell_text_new (NULL, GTK_JUSTIFY_LEFT)));
 }
 
-E_MAKE_TYPE(e_table_extras, "ETableExtras", ETableExtras, ete_class_init, ete_init, G_TYPE_OBJECT)
-
 ETableExtras *
 e_table_extras_new (void)
 {
Index: widgets/table/e-table-one.c
===================================================================
--- widgets/table/e-table-one.c	(revision 33821)
+++ widgets/table/e-table-one.c	(working copy)
@@ -27,7 +27,7 @@
 
 #include "e-table-one.h"
 
-static ETableModelClass *parent_class = NULL;
+G_DEFINE_TYPE (ETableOne, e_table_one, E_TABLE_MODEL_TYPE)
 
 static int
 one_column_count (ETableModel *etm)
@@ -136,7 +136,7 @@
 static void
 one_finalize (GObject *object)
 {
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (e_table_one_parent_class)->finalize (object);
 }
 
 static void
@@ -164,16 +164,15 @@
 		g_object_unref(one->source);
 	one->source = NULL;
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (e_table_one_parent_class)->dispose (object);
 }
 
 static void
-e_table_one_class_init (GObjectClass *object_class)
+e_table_one_class_init (ETableOneClass *klass)
 {
-	ETableModelClass *model_class = (ETableModelClass *) object_class;
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+	ETableModelClass *model_class = E_TABLE_MODEL_CLASS (klass);
 
-	parent_class = g_type_class_peek_parent (object_class);
-
 	model_class->column_count = one_column_count;
 	model_class->row_count = one_row_count;
 	model_class->value_at = one_value_at;
@@ -190,17 +189,12 @@
 }
 
 static void
-e_table_one_init (GObject *object)
+e_table_one_init (ETableOne *one)
 {
-	ETableOne *one = E_TABLE_ONE(object);
-
 	one->source = NULL;
 	one->data = NULL;
 }
 
-E_MAKE_TYPE(e_table_one, "ETableOne", ETableOne, e_table_one_class_init, e_table_one_init, E_TABLE_MODEL_TYPE)
-
-
 ETableModel *
 e_table_one_new (ETableModel *source)
 {
Index: widgets/table/e-table-config-field.c
===================================================================
--- widgets/table/e-table-config-field.c	(revision 33821)
+++ widgets/table/e-table-config-field.c	(working copy)
@@ -32,10 +32,8 @@
 
 #include "e-table-config-field.h"
 
-#define PARENT_TYPE (gtk_vbox_get_type())
+G_DEFINE_TYPE (ETableConfigField, etcf, GTK_TYPE_VBOX)
 
-static GtkVBoxClass *etcf_parent_class;
-
 static void
 etcf_dispose (GObject *object)
 {
@@ -53,11 +51,11 @@
 }
 
 static void
-etcf_class_init (GObjectClass *klass)
+etcf_class_init (ETableConfigFieldClass *klass)
 {
-	etcf_parent_class = g_type_class_ref (PARENT_TYPE);
-	
-	klass->dispose = etcf_dispose;
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+	object_class->dispose = etcf_dispose;
 }
 
 static void
@@ -72,8 +70,6 @@
 	etcf->child_fields     = NULL;
 }
 
-E_MAKE_TYPE(e_table_config_field, "ETableConfigField", ETableConfigField, etcf_class_init, etcf_init, PARENT_TYPE)
-
 ETableConfigField *
 e_table_config_field_new       (ETableSpecification *spec,
 				ETableSortInfo      *sort_info,
Index: widgets/table/e-cell-combo.c
===================================================================
--- widgets/table/e-cell-combo.c	(revision 33821)
+++ widgets/table/e-cell-combo.c	(working copy)
@@ -77,7 +77,7 @@
 #define E_CELL_COMBO_UTF8_KEY		"UTF-8-TEXT"
 
 
-static void e_cell_combo_class_init	(GObjectClass	*object_class);
+static void e_cell_combo_class_init	(ECellComboClass *klass);
 static void e_cell_combo_init		(ECellCombo	*ecc);
 static void e_cell_combo_dispose	(GObject	*object);
 
@@ -114,25 +114,17 @@
 static void e_cell_combo_update_cell	(ECellCombo	*ecc);
 static void e_cell_combo_restart_edit	(ECellCombo	*ecc);
 
+G_DEFINE_TYPE (ECellCombo, e_cell_combo, E_CELL_POPUP_TYPE)
 
-static ECellPopupClass *parent_class;
-
-
-E_MAKE_TYPE (e_cell_combo, "ECellCombo", ECellCombo,
-	     e_cell_combo_class_init, e_cell_combo_init,
-	     e_cell_popup_get_type())
-
-
 static void
-e_cell_combo_class_init			(GObjectClass	*object_class)
+e_cell_combo_class_init			(ECellComboClass	*klass)
 {
-	ECellPopupClass *ecpc = (ECellPopupClass *) object_class;
+	ECellPopupClass *ecpc = E_CELL_POPUP_CLASS (klass);
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
 	object_class->dispose = e_cell_combo_dispose;
 
 	ecpc->popup = e_cell_combo_do_popup;
-
-	parent_class = g_type_class_ref (E_CELL_POPUP_TYPE);
 }
 
 
@@ -228,7 +220,7 @@
 		gtk_widget_destroy (ecc->popup_window);
 	ecc->popup_window = NULL;
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (e_cell_combo_parent_class)->dispose (object);
 }
 
 
Index: widgets/table/e-table-item.c
===================================================================
--- widgets/table/e-table-item.c	(revision 33821)
+++ widgets/table/e-table-item.c	(working copy)
@@ -48,7 +48,9 @@
 #include "e-table-item.h"
 #include "e-table-subset.h"
 
-#define PARENT_OBJECT_TYPE gnome_canvas_item_get_type ()
+/* workaround for avoiding API breakage */
+#define eti_get_type e_table_item_get_type
+G_DEFINE_TYPE (ETableItem, eti, GNOME_TYPE_CANVAS_ITEM)
 
 #define FOCUSED_BORDER 2
 
@@ -67,8 +69,6 @@
    realize and make sure that all of them are doable by all the cells
    and that all of the others are only done after realization. */
 
-static GnomeCanvasItemClass *eti_parent_class;
-
 enum {
 	CURSOR_CHANGE,
 	CURSOR_ACTIVATED,
@@ -1575,10 +1575,8 @@
 }
 
 static void
-eti_init (GnomeCanvasItem *item)
+eti_init (ETableItem *eti)
 {
-	ETableItem *eti = E_TABLE_ITEM (item);
-
 	eti->motion_row 	       = -1;
 	eti->motion_col 	       = -1;
 	eti->editing_col               = -1;
@@ -2920,13 +2918,11 @@
 }
 
 static void
-eti_class_init (GObjectClass *object_class)
+eti_class_init (ETableItemClass *klass)
 {
-	GnomeCanvasItemClass *item_class = (GnomeCanvasItemClass *) object_class;
-	ETableItemClass *eti_class  = (ETableItemClass *) object_class;
-	
-	eti_parent_class            = g_type_class_ref (PARENT_OBJECT_TYPE);
-	
+	GnomeCanvasItemClass *item_class = GNOME_CANVAS_ITEM_CLASS (klass);
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
 	object_class->dispose       = eti_dispose;
 	object_class->set_property  = eti_set_property;
 	object_class->get_property  = eti_get_property;
@@ -2938,16 +2934,16 @@
 	item_class->point           = eti_point;
 	item_class->event           = eti_event;
 	
-	eti_class->cursor_change    = NULL;
-	eti_class->cursor_activated = NULL;
-	eti_class->double_click     = NULL;
-	eti_class->right_click      = NULL;
-	eti_class->click            = NULL;
-	eti_class->key_press        = NULL;
-	eti_class->start_drag       = NULL;
-	eti_class->style_set        = eti_style_set;
-	eti_class->selection_model_removed = NULL;
-	eti_class->selection_model_added = NULL;
+	klass->cursor_change    = NULL;
+	klass->cursor_activated = NULL;
+	klass->double_click     = NULL;
+	klass->right_click      = NULL;
+	klass->click            = NULL;
+	klass->key_press        = NULL;
+	klass->start_drag       = NULL;
+	klass->style_set        = eti_style_set;
+	klass->selection_model_removed = NULL;
+	klass->selection_model_added = NULL;
 
 	g_object_class_install_property (object_class, PROP_TABLE_HEADER,
 					 g_param_spec_object ("ETableHeader",
@@ -3147,13 +3143,6 @@
 	gal_a11y_e_table_item_init ();
 }
 
-E_MAKE_TYPE (e_table_item,
-	     "ETableItem",
-	     ETableItem,
-	     eti_class_init,
-	     eti_init,
-	     PARENT_OBJECT_TYPE)
-
 /** 
  * e_table_item_set_cursor:
  * @eti: %ETableItem which will have the cursor set.
Index: widgets/table/e-cell-toggle.c
===================================================================
--- widgets/table/e-cell-toggle.c	(revision 33821)
+++ widgets/table/e-cell-toggle.c	(working copy)
@@ -35,7 +35,7 @@
 #include "e-cell-toggle.h"
 #include "e-table-item.h"
 
-#define PARENT_TYPE e_cell_get_type ()
+G_DEFINE_TYPE (ECellToggle, e_cell_toggle, E_CELL_TYPE)
 
 typedef struct {
 	ECellView     cell_view;
@@ -44,8 +44,6 @@
 	GdkPixmap   **pixmap_cache;
 } ECellToggleView;
 
-static ECellClass *parent_class;
-
 #define CACHE_SEQ_COUNT 6
 
 /*
@@ -388,15 +386,15 @@
 	etog->images = NULL;
 	etog->n_states = 0;
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (e_cell_toggle_parent_class)->finalize (object);
 }
 
 static void
-e_cell_toggle_class_init (GtkObjectClass *object_class)
+e_cell_toggle_class_init (ECellToggleClass *klass)
 {
-	ECellClass *ecc = (ECellClass *) object_class;
+	ECellClass *ecc = E_CELL_CLASS (klass);
 
-	G_OBJECT_CLASS (object_class)->finalize = etog_finalize;
+	G_OBJECT_CLASS (klass)->finalize = etog_finalize;
 
 	ecc->new_view   = etog_new_view;
 	ecc->kill_view  = etog_kill_view;
@@ -410,23 +408,18 @@
 	ecc->max_width  = etog_max_width;
 	ecc->style_set  = etog_style_set;
 
-	parent_class = g_type_class_ref (PARENT_TYPE);
 	gal_a11y_e_cell_registry_add_cell_type (NULL,
 					         E_CELL_TOGGLE_TYPE,
                                                 gal_a11y_e_cell_toggle_new);
 }
 
 static void
-e_cell_toggle_init (GtkObject *object)
+e_cell_toggle_init (ECellToggle *etog)
 {
-	ECellToggle *etog = (ECellToggle *) object;
-
 	etog->images = NULL;
 	etog->n_states = 0;
 }
 
-E_MAKE_TYPE(e_cell_toggle, "ECellToggle", ECellToggle, e_cell_toggle_class_init, e_cell_toggle_init, PARENT_TYPE)
-
 /**
  * e_cell_toggle_construct:
  * @etog: a fresh ECellToggle object
Index: widgets/table/e-tree.c
===================================================================
--- widgets/table/e-tree.c	(revision 33821)
+++ widgets/table/e-tree.c	(working copy)
@@ -54,10 +54,8 @@
 
 #define COLUMN_HEADER_HEIGHT 16
 
-#define PARENT_TYPE gtk_table_get_type ()
+G_DEFINE_TYPE (ETree, e_tree, GTK_TYPE_TABLE)
 
-static GtkObjectClass *parent_class;
-
 #define d(x)
 
 #if d(!)0
@@ -429,8 +427,8 @@
 		et->priv = NULL;
 	}
 
-	if (G_OBJECT_CLASS (parent_class)->dispose)
-		G_OBJECT_CLASS (parent_class)->dispose (object);
+	if (G_OBJECT_CLASS (e_tree_parent_class)->dispose)
+		G_OBJECT_CLASS (e_tree_parent_class)->dispose (object);
 }
 
 static void
@@ -439,8 +437,8 @@
 	scroll_off (E_TREE (widget));
 	hover_off (E_TREE (widget));
 
-	if (GTK_WIDGET_CLASS (parent_class)->unrealize)
-		GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
+	if (GTK_WIDGET_CLASS (e_tree_parent_class)->unrealize)
+		GTK_WIDGET_CLASS (e_tree_parent_class)->unrealize (widget);
 }
 
 typedef struct {
@@ -526,12 +524,11 @@
 }
 
 static void
-e_tree_init (GtkObject *object)
+e_tree_init (ETree *e_tree)
 {
-	ETree *e_tree                                    = E_TREE (object);
-	GtkTable *gtk_table                              = GTK_TABLE (object);
+	GtkTable *gtk_table = GTK_TABLE (e_tree);
 
-	GTK_WIDGET_SET_FLAGS (e_tree, GTK_CAN_FOCUS);
+	GTK_WIDGET_SET_FLAGS (GTK_WIDGET (e_tree), GTK_CAN_FOCUS);
 
 	gtk_table->homogeneous               = FALSE;
 
@@ -3049,8 +3046,6 @@
 	object_class                   = (GObjectClass *) class;
 	widget_class                   = (GtkWidgetClass *) class;
 
-	parent_class                   = g_type_class_ref (PARENT_TYPE);
-
 	object_class->dispose          = et_dispose;
 	object_class->set_property     = et_set_property;
 	object_class->get_property     = et_get_property;
@@ -3366,4 +3361,3 @@
 	gal_a11y_e_tree_init ();
 }
 
-E_MAKE_TYPE(e_tree, "ETree", ETree, e_tree_class_init, e_tree_init, PARENT_TYPE)
Index: widgets/table/e-table-col.c
===================================================================
--- widgets/table/e-table-col.c	(revision 33821)
+++ widgets/table/e-table-col.c	(working copy)
@@ -28,7 +28,7 @@
 
 #include "e-table-col.h"
 
-static GObjectClass *parent_class;
+G_DEFINE_TYPE (ETableCol, e_table_col, G_TYPE_OBJECT)
 
 enum {
 	PROP_0,
@@ -52,7 +52,8 @@
 		g_free (etc->text);
 	etc->text = NULL;
 	
-	parent_class->dispose (object);
+	if (G_OBJECT_CLASS (e_table_col_parent_class)->dispose)
+		G_OBJECT_CLASS (e_table_col_parent_class)->dispose (object);
 }
 
 static void
@@ -85,9 +86,9 @@
 }
  
 static void
-e_table_col_class_init (GObjectClass *object_class)
+e_table_col_class_init (ETableColClass *klass)
 {
-	parent_class = g_type_class_peek_parent (object_class);
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);	
 
 	object_class->dispose = etc_dispose;
 	object_class->set_property = etc_set_property;
@@ -111,8 +112,6 @@
 	etc->priority = 0;
 }
 
-E_MAKE_TYPE(e_table_col, "ETableCol", ETableCol, e_table_col_class_init, e_table_col_init, G_TYPE_OBJECT)
-
 /** 
  * e_table_col_new:
  * @col_idx: the column we represent in the model
Index: widgets/table/e-table-field-chooser-item.c
===================================================================
--- widgets/table/e-table-field-chooser-item.c	(revision 33821)
+++ widgets/table/e-table-field-chooser-item.c	(working copy)
@@ -54,12 +54,12 @@
 static guint etfci_signals [LAST_SIGNAL] = { 0, };
 #endif
 
-#define PARENT_OBJECT_TYPE gnome_canvas_item_get_type ()
+/* workaround for avoiding API breakage */
+#define etfci_get_type e_table_field_chooser_item_get_type
+G_DEFINE_TYPE (ETableFieldChooserItem, etfci, GNOME_TYPE_CANVAS_ITEM)
 
 #define ELEMENTS(x) (sizeof (x) / sizeof (x[0]))
 
-static GnomeCanvasItemClass *etfci_parent_class;
-
 static void etfci_drop_table_header (ETableFieldChooserItem *etfci);
 static void etfci_drop_full_header (ETableFieldChooserItem *etfci);
 
@@ -615,12 +615,11 @@
 }
 
 static void
-etfci_class_init (GObjectClass *object_class)
+etfci_class_init (ETableFieldChooserItemClass *klass)
 {
-	GnomeCanvasItemClass *item_class = (GnomeCanvasItemClass *) object_class;
+	GnomeCanvasItemClass *item_class = GNOME_CANVAS_ITEM_CLASS (klass);
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	etfci_parent_class = g_type_class_ref (PARENT_OBJECT_TYPE);
-	
 	object_class->dispose = etfci_dispose;
 	object_class->set_property = etfci_set_property;
 	object_class->get_property = etfci_get_property;
@@ -669,10 +668,8 @@
 }
 
 static void
-etfci_init (GnomeCanvasItem *item)
+etfci_init (ETableFieldChooserItem *etfci)
 {
-	ETableFieldChooserItem *etfci = E_TABLE_FIELD_CHOOSER_ITEM (item);
-
 	etfci->full_header = NULL;
 	etfci->header = NULL;
 	etfci->combined_header = NULL;
@@ -691,12 +688,6 @@
 	etfci->maybe_drag = 0;
 	etfci->drag_end_id = 0;
 
-	e_canvas_item_set_reflow_callback(item, etfci_reflow);
+	e_canvas_item_set_reflow_callback(GNOME_CANVAS_ITEM (etfci), etfci_reflow);
 }
 
-E_MAKE_TYPE (e_table_field_chooser_item,
-	     "ETableFieldChooserItem",
-	     ETableFieldChooserItem,
-	     etfci_class_init,
-	     etfci_init,
-	     PARENT_OBJECT_TYPE)
Index: widgets/table/e-table-sort-info.c
===================================================================
--- widgets/table/e-table-sort-info.c	(revision 33821)
+++ widgets/table/e-table-sort-info.c	(working copy)
@@ -32,7 +32,7 @@
 
 #define ETM_CLASS(e) (E_TABLE_SORT_INFO_GET_CLASS (e))
 
-static GObjectClass *e_table_sort_info_parent_class;
+G_DEFINE_TYPE (ETableSortInfo , e_table_sort_info, G_TYPE_OBJECT)
 
 enum {
 	SORT_INFO_CHANGED,
@@ -102,9 +102,6 @@
 	klass->group_info_changed = NULL;
 }
 
-E_MAKE_TYPE(e_table_sort_info, "ETableSortInfo", ETableSortInfo,
-	    e_table_sort_info_class_init, e_table_sort_info_init, G_TYPE_OBJECT)
-
 static void
 e_table_sort_info_sort_info_changed (ETableSortInfo *info)
 {
Index: widgets/table/e-table-simple.c
===================================================================
--- widgets/table/e-table-simple.c	(revision 33821)
+++ widgets/table/e-table-simple.c	(working copy)
@@ -28,6 +28,8 @@
 
 #include "e-table-simple.h"
 
+G_DEFINE_TYPE (ETableSimple, e_table_simple, E_TABLE_MODEL_TYPE)
+
 static int
 simple_column_count (ETableModel *etm)
 {
@@ -167,9 +169,9 @@
 }
 
 static void
-e_table_simple_class_init (GObjectClass *object_class)
+e_table_simple_class_init (ETableSimpleClass *klass)
 {
-	ETableModelClass *model_class = (ETableModelClass *) object_class;
+	ETableModelClass *model_class = E_TABLE_MODEL_CLASS (klass);
 
 	model_class->column_count      = simple_column_count;
 	model_class->row_count         = simple_row_count;
@@ -189,7 +191,11 @@
 	model_class->value_to_string   = simple_value_to_string;
 }
 
-E_MAKE_TYPE(e_table_simple, "ETableSimple", ETableSimple, e_table_simple_class_init, NULL, E_TABLE_MODEL_TYPE)
+static void
+e_table_simple_init (ETableSimple *simple)
+{
+	/* nothing to do */
+}
 
 /**
  * e_table_simple_new:
Index: widgets/table/e-table-column.c
===================================================================
--- widgets/table/e-table-column.c	(revision 33821)
+++ widgets/table/e-table-column.c	(working copy)
@@ -33,8 +33,7 @@
 
 static guint etc_signals [LAST_SIGNAL] = { 0, };
 
-#define PARENT_CLASS GTK_TYPE_OBJECT
-static GtkObjectClass *e_table_column_parent_class;
+G_DEFINE_TYPE (ETableColumn, e_table_column, GTK_TYPE_OBJECT)
 
 static void
 e_table_column_finalize (GObject *object)
@@ -83,13 +82,6 @@
 			      G_TYPE_NONE, 1, G_TYPE_INT);
 }
 
-E_MAKE_TYPE (e_table_column,
-	     "ETableColumn",
-	     ETableColumn,
-	     e_table_column_class_init,
-	     NULL,
-	     PARENT_TYPE);
-
 static void
 etc_do_insert (ETableColumn *etc, int pos, ETableCol *val)
 {
Index: widgets/table/e-table-scrolled.c
===================================================================
--- widgets/table/e-table-scrolled.c	(revision 33821)
+++ widgets/table/e-table-scrolled.c	(working copy)
@@ -39,23 +39,19 @@
 
 #define COLUMN_HEADER_HEIGHT 16
 
-#define PARENT_TYPE gtk_scrolled_window_get_type ()
+G_DEFINE_TYPE (ETableScrolled, e_table_scrolled, GTK_TYPE_SCROLLED_WINDOW)
 
-static GtkObjectClass *parent_class;
-
 enum {
 	PROP_0,
 	PROP_TABLE
 };
 
 static void
-e_table_scrolled_init (GtkObject *object)
+e_table_scrolled_init (ETableScrolled *ets)
 {
-	ETableScrolled *ets;
 	GtkScrolledWindow *scrolled_window;
 
-	ets = E_TABLE_SCROLLED (object);
-	scrolled_window = GTK_SCROLLED_WINDOW (object);
+	scrolled_window = GTK_SCROLLED_WINDOW (ets);
 
 	GTK_WIDGET_SET_FLAGS (ets, GTK_CAN_FOCUS);
 
@@ -209,8 +205,6 @@
 	object_class = (GObjectClass *) class;
 	widget_class = (GtkWidgetClass *) class;
 
-	parent_class = g_type_class_ref (PARENT_TYPE);
-
 	object_class->get_property = ets_get_property;
 
 	widget_class->grab_focus = ets_grab_focus;
@@ -225,5 +219,3 @@
 							      G_PARAM_READABLE));
 }
 
-E_MAKE_TYPE(e_table_scrolled, "ETableScrolled", ETableScrolled, e_table_scrolled_class_init, e_table_scrolled_init, PARENT_TYPE)
-
Index: widgets/table/e-tree-model.c
===================================================================
--- widgets/table/e-tree-model.c	(revision 33821)
+++ widgets/table/e-tree-model.c	(working copy)
@@ -42,7 +42,7 @@
 
 #define d(x)
 
-static GObjectClass *parent_class;
+G_DEFINE_TYPE (ETreeModel, e_tree_model, G_TYPE_OBJECT)
 
 enum {
 	PRE_CHANGE,
@@ -61,15 +61,13 @@
 
 
 static void
-e_tree_model_class_init (GObjectClass *klass)
+e_tree_model_class_init (ETreeModelClass *klass)
 {
-	ETreeModelClass *tree_class = (ETreeModelClass *) klass;
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	parent_class = g_type_class_peek_parent (klass);
-
 	e_tree_model_signals [PRE_CHANGE] =
 		g_signal_new ("pre_change",
-			      G_TYPE_FROM_CLASS (klass),
+			      G_TYPE_FROM_CLASS (object_class),
 			      G_SIGNAL_RUN_LAST,
 			      G_STRUCT_OFFSET (ETreeModelClass, pre_change),
 			      (GSignalAccumulator) NULL, NULL,
@@ -78,7 +76,7 @@
 
 	e_tree_model_signals [NO_CHANGE] =
 		g_signal_new ("no_change",
-			      G_TYPE_FROM_CLASS (klass),
+			      G_TYPE_FROM_CLASS (object_class),
 			      G_SIGNAL_RUN_LAST,
 			      G_STRUCT_OFFSET (ETreeModelClass, no_change),
 			      (GSignalAccumulator) NULL, NULL,
@@ -87,7 +85,7 @@
 
 	e_tree_model_signals [NODE_CHANGED] =
 		g_signal_new ("node_changed",
-			      G_TYPE_FROM_CLASS (klass),
+			      G_TYPE_FROM_CLASS (object_class),
 			      G_SIGNAL_RUN_LAST,
 			      G_STRUCT_OFFSET (ETreeModelClass, node_changed),
 			      (GSignalAccumulator) NULL, NULL,
@@ -96,7 +94,7 @@
 
 	e_tree_model_signals [NODE_DATA_CHANGED] =
 		g_signal_new ("node_data_changed",
-			      G_TYPE_FROM_CLASS (klass),
+			      G_TYPE_FROM_CLASS (object_class),
 			      G_SIGNAL_RUN_LAST,
 			      G_STRUCT_OFFSET (ETreeModelClass, node_data_changed),
 			      (GSignalAccumulator) NULL, NULL,
@@ -105,7 +103,7 @@
 
 	e_tree_model_signals [NODE_COL_CHANGED] =
 		g_signal_new ("node_col_changed",
-			      G_TYPE_FROM_CLASS (klass),
+			      G_TYPE_FROM_CLASS (object_class),
 			      G_SIGNAL_RUN_LAST,
 			      G_STRUCT_OFFSET (ETreeModelClass, node_col_changed),
 			      (GSignalAccumulator) NULL, NULL,
@@ -114,7 +112,7 @@
 
 	e_tree_model_signals [NODE_INSERTED] =
 		g_signal_new ("node_inserted",
-			      G_TYPE_FROM_CLASS (klass),
+			      G_TYPE_FROM_CLASS (object_class),
 			      G_SIGNAL_RUN_LAST,
 			      G_STRUCT_OFFSET (ETreeModelClass, node_inserted),
 			      (GSignalAccumulator) NULL, NULL,
@@ -123,7 +121,7 @@
 
 	e_tree_model_signals [NODE_REMOVED] =
 		g_signal_new ("node_removed",
-			      G_TYPE_FROM_CLASS (klass),
+			      G_TYPE_FROM_CLASS (object_class),
 			      G_SIGNAL_RUN_LAST,
 			      G_STRUCT_OFFSET (ETreeModelClass, node_removed),
 			      (GSignalAccumulator) NULL, NULL,
@@ -132,7 +130,7 @@
 
 	e_tree_model_signals [NODE_DELETED] =
 		g_signal_new ("node_deleted",
-			      G_TYPE_FROM_CLASS (klass),
+			      G_TYPE_FROM_CLASS (object_class),
 			      G_SIGNAL_RUN_LAST,
 			      G_STRUCT_OFFSET (ETreeModelClass, node_deleted),
 			      (GSignalAccumulator) NULL, NULL,
@@ -141,63 +139,66 @@
 
 	e_tree_model_signals [NODE_REQUEST_COLLAPSE] =
 		g_signal_new ("node_request_collapse",
-			      G_TYPE_FROM_CLASS (klass),
+			      G_TYPE_FROM_CLASS (object_class),
 			      G_SIGNAL_RUN_LAST,
 			      G_STRUCT_OFFSET (ETreeModelClass, node_request_collapse),
 			      (GSignalAccumulator) NULL, NULL,
 			      g_cclosure_marshal_VOID__POINTER,
 			      G_TYPE_NONE, 1, G_TYPE_POINTER);
 
-	tree_class->get_root              = NULL;
+	klass->get_root              = NULL;
 
-	tree_class->get_parent            = NULL;
-	tree_class->get_first_child       = NULL;
-	tree_class->get_last_child        = NULL;
-	tree_class->get_next              = NULL;
-	tree_class->get_prev              = NULL;
+	klass->get_parent            = NULL;
+	klass->get_first_child       = NULL;
+	klass->get_last_child        = NULL;
+	klass->get_next              = NULL;
+	klass->get_prev              = NULL;
 
-	tree_class->is_root               = NULL;
-	tree_class->is_expandable         = NULL;
-	tree_class->get_children          = NULL;
-	tree_class->depth                 = NULL;
+	klass->is_root               = NULL;
+	klass->is_expandable         = NULL;
+	klass->get_children          = NULL;
+	klass->depth                 = NULL;
 
-	tree_class->icon_at               = NULL;
+	klass->icon_at               = NULL;
 
-	tree_class->get_expanded_default  = NULL;
-	tree_class->column_count          = NULL;
+	klass->get_expanded_default  = NULL;
+	klass->column_count          = NULL;
 
-	tree_class->has_save_id           = NULL;
-	tree_class->get_save_id           = NULL;
-	tree_class->has_get_node_by_id    = NULL;
-	tree_class->get_node_by_id        = NULL;
+	klass->has_save_id           = NULL;
+	klass->get_save_id           = NULL;
+	klass->has_get_node_by_id    = NULL;
+	klass->get_node_by_id        = NULL;
 
-	tree_class->has_change_pending    = NULL;
+	klass->has_change_pending    = NULL;
 
-	tree_class->sort_value_at 	  = NULL;
-	tree_class->value_at              = NULL;
-	tree_class->set_value_at          = NULL;
-	tree_class->is_editable           = NULL;
+	klass->sort_value_at 	  = NULL;
+	klass->value_at              = NULL;
+	klass->set_value_at          = NULL;
+	klass->is_editable           = NULL;
 
-	tree_class->duplicate_value       = NULL;
-	tree_class->free_value            = NULL;
-	tree_class->initialize_value      = NULL;
-	tree_class->value_is_empty        = NULL;
-	tree_class->value_to_string       = NULL;
+	klass->duplicate_value       = NULL;
+	klass->free_value            = NULL;
+	klass->initialize_value      = NULL;
+	klass->value_is_empty        = NULL;
+	klass->value_to_string       = NULL;
 
-	tree_class->pre_change            = NULL;
-	tree_class->no_change             = NULL;
-	tree_class->node_changed          = NULL;
-	tree_class->node_data_changed     = NULL;
-	tree_class->node_col_changed      = NULL;
-	tree_class->node_inserted         = NULL;
-	tree_class->node_removed          = NULL;
-	tree_class->node_deleted          = NULL;
-	tree_class->node_request_collapse = NULL;
+	klass->pre_change            = NULL;
+	klass->no_change             = NULL;
+	klass->node_changed          = NULL;
+	klass->node_data_changed     = NULL;
+	klass->node_col_changed      = NULL;
+	klass->node_inserted         = NULL;
+	klass->node_removed          = NULL;
+	klass->node_deleted          = NULL;
+	klass->node_request_collapse = NULL;
 }
 
-E_MAKE_TYPE(e_tree_model, "ETreeModel", ETreeModel, e_tree_model_class_init, NULL, G_TYPE_OBJECT)
+static void
+e_tree_model_init (ETreeModel *tree_model)
+{
+	/* nothing to do */
+}
 
-
 /* signals */
 
 /**
Index: widgets/table/e-table-column-specification.c
===================================================================
--- widgets/table/e-table-column-specification.c	(revision 33821)
+++ widgets/table/e-table-column-specification.c	(working copy)
@@ -33,7 +33,9 @@
 
 #include "e-table-column-specification.h"
 
-static GObjectClass *etcs_parent_class;
+/* workaround for avoiding API breakage */
+#define etcs_get_type e_table_column_specification_get_type
+G_DEFINE_TYPE (ETableColumnSpecification, etcs, G_TYPE_OBJECT)
 
 static void
 free_strings (ETableColumnSpecification *etcs)
@@ -57,15 +59,15 @@
 
 	free_strings(etcs);
 
-	etcs_parent_class->finalize (object);
+	G_OBJECT_CLASS (etcs_parent_class)->finalize (object);
 }
 
 static void
-etcs_class_init (GObjectClass *klass)
+etcs_class_init (ETableColumnSpecificationClass *klass)
 {
-	etcs_parent_class = g_type_class_peek_parent (klass);
-	
-	klass->finalize = etcs_finalize;
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+	object_class->finalize = etcs_finalize;
 }
 
 static void
@@ -87,8 +89,6 @@
 	specification->priority      = 0;
 }
 
-E_MAKE_TYPE(e_table_column_specification, "ETableColumnSpecification", ETableColumnSpecification, etcs_class_init, etcs_init, G_TYPE_OBJECT)
-
 ETableColumnSpecification *
 e_table_column_specification_new (void)
 {
Index: widgets/table/e-table-group-container.c
===================================================================
--- widgets/table/e-table-group-container.c	(revision 33821)
+++ widgets/table/e-table-group-container.c	(working copy)
@@ -42,10 +42,10 @@
 
 #define TITLE_HEIGHT         16
 
-#define PARENT_TYPE e_table_group_get_type ()
+/* workaround for avoiding API breakage */
+#define etgc_get_type e_table_group_container_get_type
+G_DEFINE_TYPE (ETableGroupContainer, etgc, E_TABLE_GROUP_TYPE)
 
-static GnomeCanvasGroupClass *etgc_parent_class;
-
 /* The arguments we take */
 enum {
 	PROP_0,
@@ -864,10 +864,11 @@
 }
 
 static void
-etgc_class_init (GObjectClass *object_class)
+etgc_class_init (ETableGroupContainerClass *klass)
 {
-	GnomeCanvasItemClass *item_class = (GnomeCanvasItemClass *) object_class;
-	ETableGroupClass *e_group_class = E_TABLE_GROUP_CLASS(object_class);
+	GnomeCanvasItemClass *item_class = GNOME_CANVAS_ITEM_CLASS (klass);
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+	ETableGroupClass *e_group_class = E_TABLE_GROUP_CLASS (klass);
 
 	object_class->dispose = etgc_dispose;
 	object_class->set_property = etgc_set_property;
@@ -877,8 +878,6 @@
 	item_class->realize = etgc_realize;
 	item_class->unrealize = etgc_unrealize;
 
-	etgc_parent_class = g_type_class_ref (PARENT_TYPE);
-
 	e_group_class->add = etgc_add;
 	e_group_class->add_array = etgc_add_array;
 	e_group_class->add_all = etgc_add_all;
@@ -1069,12 +1068,11 @@
 }
 
 static void
-etgc_init (GtkObject *object)
+etgc_init (ETableGroupContainer *container)
 {
-	ETableGroupContainer *container = E_TABLE_GROUP_CONTAINER(object);
 	container->children = FALSE;
 
-	e_canvas_item_set_reflow_callback (GNOME_CANVAS_ITEM(object), etgc_reflow);
+	e_canvas_item_set_reflow_callback (GNOME_CANVAS_ITEM(container), etgc_reflow);
 
 	container->alternating_row_colors = 1;
 	container->horizontal_draw_grid = 1;
@@ -1086,8 +1084,6 @@
 	container->uniform_row_height = FALSE;
 }
 
-E_MAKE_TYPE (e_table_group_container, "ETableGroupContainer", ETableGroupContainer, etgc_class_init, etgc_init, PARENT_TYPE)
-
 void
 e_table_group_apply_to_leafs (ETableGroup *etg, ETableGroupLeafFn fn, void *closure)
 {
Index: widgets/table/e-cell-text.c
===================================================================
--- widgets/table/e-cell-text.c	(revision 33821)
+++ widgets/table/e-cell-text.c	(working copy)
@@ -108,7 +108,7 @@
 
 static GdkAtom clipboard_atom = GDK_NONE;
 
-#define PARENT_TYPE e_cell_get_type ()
+G_DEFINE_TYPE (ECellText, e_cell_text, E_CELL_TYPE)
 
 #define UTF8_ATOM  gdk_atom_intern ("UTF8_STRING", FALSE)
 
@@ -216,8 +216,6 @@
 static void _delete_selection (ECellTextView *text_view);
 static PangoAttrList* build_attr_list (ECellTextView *text_view, int row, int text_length);
 
-static ECellClass *parent_class;
-
 char *
 e_cell_text_get_text (ECellText *cell, ETableModel *model, int col, int row)
 {
@@ -400,8 +398,8 @@
 
 	text_view->i_cursor = gdk_cursor_new (GDK_XTERM);
 	
-	if (parent_class->realize)
-		(* parent_class->realize) (ecell_view);
+	if (E_CELL_CLASS (e_cell_text_parent_class)->realize)
+		(* E_CELL_CLASS (e_cell_text_parent_class)->realize) (ecell_view);
 }
 
 /*
@@ -434,8 +432,8 @@
 		ect->colors = NULL;
 	}
 
-	if (parent_class->unrealize)
-		(* parent_class->unrealize) (ecv);
+	if (E_CELL_CLASS (e_cell_text_parent_class)->unrealize)
+		(* E_CELL_CLASS (e_cell_text_parent_class)->unrealize) (ecv);
 
 }
 
@@ -1648,7 +1646,7 @@
 
 	g_free (ect->font_name);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (e_cell_text_parent_class)->finalize (object);
 }
 /* Set_arg handler for the text item */
 static void
@@ -1737,13 +1735,13 @@
 static gboolean use_ellipsis_default = TRUE;
 
 static void
-e_cell_text_class_init (GObjectClass *object_class)
+e_cell_text_class_init (ECellTextClass *klass)
 {
-	ECellClass *ecc = (ECellClass *) object_class;
-	ECellTextClass *ectc = (ECellTextClass *) object_class;
+	ECellClass *ecc = E_CELL_CLASS (klass);
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 	const char *ellipsis_env;
 
-	G_OBJECT_CLASS (object_class)->finalize = ect_finalize;
+	object_class->finalize = ect_finalize;
 
 	ecc->new_view   = ect_new_view;
 	ecc->kill_view  = ect_kill_view;
@@ -1764,15 +1762,13 @@
 	ecc->show_tooltip = ect_show_tooltip;
 	ecc->get_bg_color = ect_get_bg_color;
 
-	ectc->get_text = ect_real_get_text;
-	ectc->free_text = ect_real_free_text;
-	ectc->set_value = ect_real_set_value;
+	klass->get_text = ect_real_get_text;
+	klass->free_text = ect_real_free_text;
+	klass->set_value = ect_real_set_value;
 
 	object_class->get_property = ect_get_property;
 	object_class->set_property = ect_set_property;
 
-	parent_class = g_type_class_ref (PARENT_TYPE);
-
 	signals [TEXT_INSERTED] = 
 		g_signal_new ("text_inserted",
 			      G_TYPE_FROM_CLASS (object_class),
@@ -1948,8 +1944,6 @@
 	ect->editable = TRUE;
 }
 
-E_MAKE_TYPE(e_cell_text, "ECellText", ECellText, e_cell_text_class_init, e_cell_text_init, PARENT_TYPE)
-
 /**
  * e_cell_text_construct:
  * @cell: The cell to construct
Index: widgets/table/e-table-specification.c
===================================================================
--- widgets/table/e-table-specification.c	(revision 33821)
+++ widgets/table/e-table-specification.c	(working copy)
@@ -38,7 +38,9 @@
 
 #include "e-table-specification.h"
 
-static GObjectClass *etsp_parent_class;
+/* workaround for avoiding API breakage */
+#define etsp_get_type e_table_specification_get_type
+G_DEFINE_TYPE (ETableSpecification, etsp, G_TYPE_OBJECT)
 
 static void
 etsp_finalize (GObject *object)
@@ -64,15 +66,15 @@
 	g_free (etsp->domain);
 	etsp->domain		   = NULL;
 
-	etsp_parent_class->finalize (object);
+	G_OBJECT_CLASS (etsp_parent_class)->finalize (object);
 }
 
 static void
-etsp_class_init (GObjectClass *klass)
+etsp_class_init (ETableSpecificationClass *klass)
 {
-	etsp_parent_class = g_type_class_peek_parent (klass);
-	
-	klass->finalize = etsp_finalize;
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+	object_class->finalize = etsp_finalize;
 }
 
 static void
@@ -99,8 +101,6 @@
 	etsp->domain                 = NULL;
 }
 
-E_MAKE_TYPE (e_table_specification, "ETableSpecification", ETableSpecification, etsp_class_init, etsp_init, G_TYPE_OBJECT)
-
 /**
  * e_table_specification_new:
  *
Index: widgets/table/e-cell-number.c
===================================================================
--- widgets/table/e-cell-number.c	(revision 33821)
+++ widgets/table/e-cell-number.c	(working copy)
@@ -30,10 +30,8 @@
 
 #include "e-cell-number.h"
 
-#define PARENT_TYPE e_cell_text_get_type ()
+G_DEFINE_TYPE (ECellNumber, e_cell_number, E_CELL_TEXT_TYPE)
 
-static ECellTextClass *parent_class;
-
 static char *
 ecn_get_text(ECellText *cell, ETableModel *model, int col, int row)
 {
@@ -47,18 +45,16 @@
 }
 
 static void
-e_cell_number_class_init (GtkObjectClass *object_class)
+e_cell_number_class_init (ECellNumberClass *klass)
 {
-	ECellTextClass *ectc = (ECellTextClass *) object_class;
+	ECellTextClass *ectc = E_CELL_TEXT_CLASS (klass);
 
-	parent_class = g_type_class_ref (PARENT_TYPE);
-
 	ectc->get_text  = ecn_get_text;
 	ectc->free_text = ecn_free_text;
 }
 
 static void
-e_cell_number_init (GtkObject *object)
+e_cell_number_init (ECellNumber *cell_number)
 {
 }
 
@@ -85,4 +81,3 @@
 	return (ECell *) ecn;
 }
 
-E_MAKE_TYPE(e_cell_number, "ECellNumber", ECellNumber, e_cell_number_class_init, e_cell_number_init, PARENT_TYPE)
Index: widgets/table/e-table-sorted-variable.c
===================================================================
--- widgets/table/e-table-sorted-variable.c	(revision 33821)
+++ widgets/table/e-table-sorted-variable.c	(working copy)
@@ -38,7 +38,9 @@
 /* maximum insertions between an idle event that we will do without scheduling an idle sort */
 #define ETSV_INSERT_MAX (4)
 
-static ETableSubsetVariableClass *etsv_parent_class;
+/* workaround for avoiding API breakage */
+#define etsv_get_type e_table_sorted_variable_get_type
+G_DEFINE_TYPE (ETableSortedVariable, etsv, E_TABLE_SUBSET_VARIABLE_TYPE)
 
 static void etsv_sort_info_changed        (ETableSortInfo *info, ETableSortedVariable *etsv);
 static void etsv_sort                     (ETableSortedVariable *etsv);
@@ -76,12 +78,11 @@
 }
 
 static void
-etsv_class_init (GObjectClass *object_class)
+etsv_class_init (ETableSortedVariableClass *klass)
 {
-	ETableSubsetVariableClass *etssv_class = E_TABLE_SUBSET_VARIABLE_CLASS(object_class);
+	ETableSubsetVariableClass *etssv_class = E_TABLE_SUBSET_VARIABLE_CLASS(klass);
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	etsv_parent_class = g_type_class_peek_parent (object_class);
-
 	object_class->dispose = etsv_dispose;
 
 	etssv_class->add = etsv_add;
@@ -100,8 +101,6 @@
 	etsv->insert_count = 0;
 }
 
-E_MAKE_TYPE(e_table_sorted_variable, "ETableSortedVariable", ETableSortedVariable, etsv_class_init, etsv_init, E_TABLE_SUBSET_VARIABLE_TYPE)
-
 static gboolean
 etsv_sort_idle(ETableSortedVariable *etsv)
 {
Index: widgets/table/e-table-selection-model.c
===================================================================
--- widgets/table/e-table-selection-model.c	(revision 33821)
+++ widgets/table/e-table-selection-model.c	(working copy)
@@ -32,10 +32,8 @@
 
 #include "e-table-selection-model.h"
 
-#define PARENT_TYPE e_selection_model_array_get_type ()
+G_DEFINE_TYPE (ETableSelectionModel, e_table_selection_model, E_SELECTION_MODEL_ARRAY_TYPE)
 
-static ESelectionModelArray *parent_class;
-
 static gint etsm_get_row_count (ESelectionModelArray *esm);
 
 enum {
@@ -244,8 +242,8 @@
 	drop_model(etsm);
 	free_hash(etsm);
 
-	if (G_OBJECT_CLASS(parent_class)->dispose)
-		G_OBJECT_CLASS(parent_class)->dispose (object);
+	if (G_OBJECT_CLASS(e_table_selection_model_parent_class)->dispose)
+		G_OBJECT_CLASS(e_table_selection_model_parent_class)->dispose (object);
 }
 
 static void
@@ -295,8 +293,6 @@
 	GObjectClass *object_class;
 	ESelectionModelArrayClass *esma_class;
 
-	parent_class             = g_type_class_ref (PARENT_TYPE);
-
 	object_class             = G_OBJECT_CLASS(klass);
 	esma_class               = E_SELECTION_MODEL_ARRAY_CLASS(klass);
 
@@ -321,9 +317,6 @@
 							      G_PARAM_READWRITE));
 }
 
-E_MAKE_TYPE(e_table_selection_model, "ETableSelectionModel", ETableSelectionModel,
-	    e_table_selection_model_class_init, e_table_selection_model_init, PARENT_TYPE)
-
 /** 
  * e_table_selection_model_new
  *
Index: widgets/table/e-table-memory-callbacks.c
===================================================================
--- widgets/table/e-table-memory-callbacks.c	(revision 33821)
+++ widgets/table/e-table-memory-callbacks.c	(working copy)
@@ -27,6 +27,8 @@
 
 #include "e-table-memory-callbacks.h"
 
+G_DEFINE_TYPE (ETableMemoryCalbacks, e_table_memory_callbacks, E_TABLE_MEMORY_TYPE)
+
 static int
 etmc_column_count (ETableModel *etm)
 {
@@ -133,9 +135,9 @@
 }
 
 static void
-e_table_memory_callbacks_class_init (GObjectClass *object_class)
+e_table_memory_callbacks_class_init (ETableMemoryCalbacksClass *klass)
 {
-	ETableModelClass *model_class = (ETableModelClass *) object_class;
+	ETableModelClass *model_class = E_TABLE_MODEL_CLASS (klass);
 
 	model_class->column_count     = etmc_column_count;
 	model_class->value_at         = etmc_value_at;
@@ -150,9 +152,12 @@
 
 }
 
-E_MAKE_TYPE(e_table_memory_callbacks, "ETableMemoryCalbacks", ETableMemoryCalbacks, e_table_memory_callbacks_class_init, NULL, E_TABLE_MEMORY_TYPE)
+static void
+e_table_memory_callbacks_init (ETableMemoryCalbacks *etmc)
+{
+	/* nothing to do */
+}
 
-
 /**
  * e_table_memory_callbacks_new:
  * @col_count:
Index: widgets/table/e-cell.c
===================================================================
--- widgets/table/e-cell.c	(revision 33821)
+++ widgets/table/e-cell.c	(working copy)
@@ -28,7 +28,7 @@
 
 #include "e-cell.h"
 
-#define PARENT_TYPE GTK_TYPE_OBJECT
+G_DEFINE_TYPE (ECell, e_cell, GTK_TYPE_OBJECT)
 
 #define ECVIEW_EC_CLASS(v) (E_CELL_GET_CLASS (v->ecell))
 
@@ -131,38 +131,34 @@
 }
 
 static void
-e_cell_class_init (GtkObjectClass *object_class)
+e_cell_class_init (ECellClass *klass)
 {
-	ECellClass *ecc = (ECellClass *) object_class;
-
-	ecc->realize = ec_realize;
-	ecc->unrealize = ec_unrealize;
-	ecc->new_view = ec_new_view;
-	ecc->kill_view = ec_kill_view;
-	ecc->draw = ec_draw;
-	ecc->event = ec_event;
-	ecc->focus = ec_focus;
-	ecc->unfocus = ec_unfocus;
-	ecc->height = ec_height;
-	ecc->enter_edit = ec_enter_edit;
-	ecc->leave_edit = ec_leave_edit;
-	ecc->save_state = ec_save_state;
-	ecc->load_state = ec_load_state;
-	ecc->free_state = ec_free_state;
-	ecc->print = NULL;
-	ecc->print_height = NULL;
-	ecc->max_width = NULL;
-	ecc->max_width_by_row = NULL;
-	ecc->show_tooltip = ec_show_tooltip;
+	klass->realize = ec_realize;
+	klass->unrealize = ec_unrealize;
+	klass->new_view = ec_new_view;
+	klass->kill_view = ec_kill_view;
+	klass->draw = ec_draw;
+	klass->event = ec_event;
+	klass->focus = ec_focus;
+	klass->unfocus = ec_unfocus;
+	klass->height = ec_height;
+	klass->enter_edit = ec_enter_edit;
+	klass->leave_edit = ec_leave_edit;
+	klass->save_state = ec_save_state;
+	klass->load_state = ec_load_state;
+	klass->free_state = ec_free_state;
+	klass->print = NULL;
+	klass->print_height = NULL;
+	klass->max_width = NULL;
+	klass->max_width_by_row = NULL;
+	klass->show_tooltip = ec_show_tooltip;
 }
 
 static void
-e_cell_init (GtkObject *object)
+e_cell_init (ECell *cell)
 {
 }
 
-E_MAKE_TYPE(e_cell, "ECell", ECell, e_cell_class_init, e_cell_init, PARENT_TYPE)
-
 /**
  * e_cell_event:
  * @ecell_view: The ECellView where the event will be dispatched
Index: widgets/table/e-table-click-to-add.c
===================================================================
--- widgets/table/e-table-click-to-add.c	(revision 33821)
+++ widgets/table/e-table-click-to-add.c	(working copy)
@@ -51,12 +51,12 @@
 
 static guint etcta_signals [LAST_SIGNAL] = { 0 };
 
-#define PARENT_OBJECT_TYPE gnome_canvas_group_get_type ()
+/* workaround for avoiding APi breakage */
+#define etcta_get_type e_table_click_to_add_get_type
+G_DEFINE_TYPE (ETableClickToAdd, etcta, GNOME_TYPE_CANVAS_GROUP)
 
 #define ELEMENTS(x) (sizeof (x) / sizeof (x[0]))
 
-static GnomeCanvasGroupClass *etcta_parent_class;
-
 enum {
 	PROP_0,
 	PROP_HEADER,
@@ -477,8 +477,6 @@
 	GnomeCanvasItemClass *item_class = GNOME_CANVAS_ITEM_CLASS(klass);
 	GObjectClass *object_class = G_OBJECT_CLASS(klass);
 
-	etcta_parent_class = g_type_class_ref (PARENT_OBJECT_TYPE);
-
 	klass->cursor_change = NULL;
 	klass->style_set     = etcta_style_set;
 
@@ -547,9 +545,8 @@
 }
 
 static void
-etcta_init (GnomeCanvasItem *item)
+etcta_init (ETableClickToAdd *etcta)
 {
-	ETableClickToAdd *etcta = E_TABLE_CLICK_TO_ADD (item);
 	AtkObject *a11y;
 
 	etcta->one = NULL;
@@ -566,7 +563,7 @@
 	g_signal_connect(etcta->selection, "cursor_changed",
 			 G_CALLBACK (etcta_cursor_change), etcta);
 
-	e_canvas_item_set_reflow_callback(item, etcta_reflow);
+	e_canvas_item_set_reflow_callback (GNOME_CANVAS_ITEM (etcta), etcta_reflow);
 
 	/* create its a11y object at this time if accessibility is enabled*/
 	if (atk_get_root () != NULL) {
@@ -575,9 +572,6 @@
 	}
 }
 
-E_MAKE_TYPE(e_table_click_to_add, "ETableClickToAdd", ETableClickToAdd, etcta_class_init, etcta_init, PARENT_OBJECT_TYPE)
-
-
 /* The colors in this need to be themefied. */
 /**
  * e_table_click_to_add_commit:
Index: widgets/table/e-cell-float.c
===================================================================
--- widgets/table/e-cell-float.c	(revision 33821)
+++ widgets/table/e-cell-float.c	(working copy)
@@ -34,10 +34,8 @@
 
 #include "e-cell-float.h"
 
-#define PARENT_TYPE e_cell_text_get_type ()
+G_DEFINE_TYPE (ECellFloat, e_cell_float, E_CELL_TEXT_TYPE)
 
-static ECellTextClass *parent_class;
-
 static char *
 ecf_get_text(ECellText *cell, ETableModel *model, int col, int row)
 {
@@ -55,18 +53,16 @@
 }
 
 static void
-e_cell_float_class_init (GtkObjectClass *object_class)
+e_cell_float_class_init (ECellFloatClass *klass)
 {
-	ECellTextClass *ectc = (ECellTextClass *) object_class;
+	ECellTextClass *ectc = E_CELL_TEXT_CLASS (klass);
 
-	parent_class = g_type_class_ref (PARENT_TYPE);
-
 	ectc->get_text  = ecf_get_text;
 	ectc->free_text = ecf_free_text;
 }
 
 static void
-e_cell_float_init (GtkObject *object)
+e_cell_float_init (ECellFloat *cell_float)
 {
 }
 
@@ -93,4 +89,3 @@
 	return (ECell *) ecn;
 }
 
-E_MAKE_TYPE(e_cell_float, "ECellFloat", ECellFloat, e_cell_float_class_init, e_cell_float_init, PARENT_TYPE)
Index: widgets/table/e-table-field-chooser-dialog.c
===================================================================
--- widgets/table/e-table-field-chooser-dialog.c	(revision 33821)
+++ widgets/table/e-table-field-chooser-dialog.c	(working copy)
@@ -37,9 +37,6 @@
 static void e_table_field_chooser_dialog_dispose (GObject *object);
 static void e_table_field_chooser_dialog_response (GtkDialog *dialog, gint id);
 
-#define PARENT_TYPE GTK_TYPE_DIALOG
-static GtkDialogClass *parent_class = NULL;
-
 /* The arguments we take */
 enum {
 	PROP_0,
@@ -48,12 +45,7 @@
 	PROP_HEADER
 };
 
-E_MAKE_TYPE (e_table_field_chooser_dialog,
-	     "ETableFieldChooserDialog",
-	     ETableFieldChooserDialog,
-	     e_table_field_chooser_dialog_class_init,
-	     e_table_field_chooser_dialog_init,
-	     PARENT_TYPE)
+G_DEFINE_TYPE (ETableFieldChooserDialog, e_table_field_chooser_dialog, GTK_TYPE_DIALOG)
 
 static void
 e_table_field_chooser_dialog_class_init (ETableFieldChooserDialogClass *klass)
@@ -64,8 +56,6 @@
 	object_class = (GObjectClass*) klass;
 	dialog_class = GTK_DIALOG_CLASS (klass);
 
-	parent_class = g_type_class_ref (PARENT_TYPE);
-
 	object_class->dispose      = e_table_field_chooser_dialog_dispose;
 	object_class->set_property = e_table_field_chooser_dialog_set_property;
 	object_class->get_property = e_table_field_chooser_dialog_get_property;
@@ -150,7 +140,7 @@
 		g_object_unref (etfcd->header);
 	etfcd->header = NULL;
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (e_table_field_chooser_dialog_parent_class)->dispose (object);
 }
 
 static void
Index: widgets/table/e-tree-memory.c
===================================================================
--- widgets/table/e-tree-memory.c	(revision 33821)
+++ widgets/table/e-tree-memory.c	(working copy)
@@ -38,7 +38,7 @@
 
 #include "e-tree-memory.h"
 
-static ETreeModelClass *parent_class;
+G_DEFINE_TYPE (ETreeMemory, e_tree_memory, E_TREE_MODEL_TYPE)
 
 enum {
 	FILL_IN_CHILDREN,
@@ -223,7 +223,7 @@
 	}
 	etmm->priv = NULL;
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (e_tree_memory_parent_class)->dispose (object);
 }
 
 static ETreePath
@@ -341,8 +341,8 @@
 	if (node)
 		etmm_clear_children_computed (node);
 
-	if (parent_class->node_request_collapse) {
-		parent_class->node_request_collapse (etm, node);
+	if (E_TREE_MODEL_CLASS (e_tree_memory_parent_class)->node_request_collapse) {
+		E_TREE_MODEL_CLASS (e_tree_memory_parent_class)->node_request_collapse (etm, node);
 	}
 }
 
@@ -353,8 +353,6 @@
 	ETreeModelClass *tree_class = (ETreeModelClass *) klass;
 	GObjectClass  *object_class = (GObjectClass *) klass;
 
-	parent_class                     = g_type_class_peek_parent (klass);
-	
 	signals [FILL_IN_CHILDREN] =
 		g_signal_new ("fill_in_children",
 			      G_TYPE_FROM_CLASS (object_class),
@@ -385,10 +383,8 @@
 }
 
 static void
-e_tree_memory_init (GObject *object)
+e_tree_memory_init (ETreeMemory *etmm)
 {
-	ETreeMemory *etmm = (ETreeMemory *)object;
-
 	ETreeMemoryPriv *priv;
 
 	priv = g_new0 (ETreeMemoryPriv, 1);
@@ -401,10 +397,6 @@
 	priv->destroy_user_data = NULL;
 }
 
-E_MAKE_TYPE(e_tree_memory, "ETreeMemory", ETreeMemory, e_tree_memory_class_init, e_tree_memory_init, E_TREE_MODEL_TYPE)
-
-
-
 /**
  * e_tree_memory_construct:
  * @etree: 
Index: widgets/table/e-cell-progress.c
===================================================================
--- widgets/table/e-cell-progress.c	(revision 33821)
+++ widgets/table/e-cell-progress.c	(working copy)
@@ -39,7 +39,7 @@
 #include "e-cell-progress.h"
 #include "e-table-item.h"
 
-#define PARENT_TYPE e_cell_get_type ()
+G_DEFINE_TYPE (ECellProgress, e_cell_progress, E_CELL_TYPE)
 
 typedef struct {
 	ECellView    cell_view;
@@ -47,8 +47,6 @@
 	GnomeCanvas *canvas;
 } ECellProgressView;
 
-static ECellClass *parent_class;
-
 static void
 eprog_queue_redraw (ECellProgressView *text_view, int view_col, int view_row)
 {
@@ -299,13 +297,14 @@
 	g_free (eprog->image);
 	g_free (eprog->buffer);
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (e_cell_progress_parent_class)->dispose (object);
 }
 
 static void
-e_cell_progress_class_init (GObjectClass *object_class)
+e_cell_progress_class_init (ECellProgressClass *klass)
 {
-	ECellClass *ecc = (ECellClass *) object_class;
+	ECellClass *ecc = E_CELL_CLASS (klass);
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
 	object_class->dispose = eprog_dispose;
 
@@ -317,12 +316,14 @@
 	ecc->event      = eprog_event;
 	ecc->height     = eprog_height;
 	ecc->max_width  = eprog_max_width;
+}
 
-	parent_class = g_type_class_ref (PARENT_TYPE);
+static void
+e_cell_progress_init (ECellProgress *eprog)
+{
+	/* nothing to do */
 }
 
-E_MAKE_TYPE(e_cell_progress, "ECellProgress", ECellProgress, e_cell_progress_class_init, NULL, PARENT_TYPE)
-
 /**
  * e_cell_progress_construct:
  * @eprog: a fresh ECellProgress object
Index: widgets/table/e-table-group-leaf.c
===================================================================
--- widgets/table/e-table-group-leaf.c	(revision 33821)
+++ widgets/table/e-table-group-leaf.c	(working copy)
@@ -35,10 +35,10 @@
 #include "e-table-sorted.h"
 #include "e-table-sorted-variable.h"
 
-#define PARENT_TYPE e_table_group_get_type ()
+/* workaround for avoiding APi breakage */
+#define etgl_get_type e_table_group_leaf_get_type
+G_DEFINE_TYPE (ETableGroupLeaf, etgl, E_TABLE_GROUP_TYPE)
 
-static GnomeCanvasGroupClass *etgl_parent_class;
-
 /* The arguments we take */
 enum {
 	PROP_0,
@@ -542,10 +542,11 @@
 }
 
 static void
-etgl_class_init (GObjectClass *object_class)
+etgl_class_init (ETableGroupLeafClass *klass)
 {
-	GnomeCanvasItemClass *item_class = (GnomeCanvasItemClass *) object_class;
-	ETableGroupClass *e_group_class = E_TABLE_GROUP_CLASS(object_class);
+	GnomeCanvasItemClass *item_class = GNOME_CANVAS_ITEM_CLASS (klass);
+	ETableGroupClass *e_group_class = E_TABLE_GROUP_CLASS (klass);
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
 	object_class->dispose = etgl_dispose;
 	object_class->set_property = etgl_set_property;
@@ -553,8 +554,6 @@
 
 	item_class->realize = etgl_realize;
 
-	etgl_parent_class = g_type_class_ref (PARENT_TYPE);
-
 	e_group_class->add = etgl_add;
 	e_group_class->add_array = etgl_add_array;
 	e_group_class->add_all = etgl_add_all;
@@ -654,10 +653,8 @@
 }
 
 static void
-etgl_init (GtkObject *object)
+etgl_init (ETableGroupLeaf *etgl)
 {
-	ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF (object);
-
 	etgl->width = 1;
 	etgl->height = 1;
 	etgl->minimum_width = 0;
@@ -683,7 +680,6 @@
 	etgl->selection_model = NULL;
 	etgl->uniform_row_height = FALSE;
 
-	e_canvas_item_set_reflow_callback (GNOME_CANVAS_ITEM(object), etgl_reflow);
+	e_canvas_item_set_reflow_callback (GNOME_CANVAS_ITEM (etgl), etgl_reflow);
 }
 
-E_MAKE_TYPE (e_table_group_leaf, "ETableGroupLeaf", ETableGroupLeaf, etgl_class_init, etgl_init, PARENT_TYPE)
Index: widgets/table/e-table.c
===================================================================
--- widgets/table/e-table.c	(revision 33821)
+++ widgets/table/e-table.c	(working copy)
@@ -55,7 +55,7 @@
 
 #define COLUMN_HEADER_HEIGHT 16
 
-#define PARENT_TYPE gtk_table_get_type ()
+G_DEFINE_TYPE (ETable, e_table, GTK_TYPE_TABLE)
 
 #define d(x)
 
@@ -65,8 +65,6 @@
 #define e_table_item_leave_edit_(x) (e_table_item_leave_edit((x)))
 #endif
 
-static GtkObjectClass *parent_class;
-
 enum {
 	CURSOR_CHANGE,
 	CURSOR_ACTIVATED,
@@ -223,8 +221,8 @@
 et_size_request (GtkWidget *widget, GtkRequisition *request)
 {
 	ETable *et = E_TABLE (widget);
-	if (GTK_WIDGET_CLASS (parent_class)->size_request)
-		GTK_WIDGET_CLASS (parent_class)->size_request (widget, request);
+	if (GTK_WIDGET_CLASS (e_table_parent_class)->size_request)
+		GTK_WIDGET_CLASS (e_table_parent_class)->size_request (widget, request);
 	if (et->horizontal_resize)
 		request->width = MAX (request->width, et->header_width);
 }
@@ -393,7 +391,7 @@
 	g_free(et->domain);
 	et->domain = NULL;
 
-	(*G_OBJECT_CLASS (parent_class)->dispose)(object);
+	(*G_OBJECT_CLASS (e_table_parent_class)->dispose)(object);
 }
 
 static void
@@ -401,8 +399,8 @@
 {
 	scroll_off (E_TABLE (widget));
 
-	if (GTK_WIDGET_CLASS (parent_class)->unrealize)
-		GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
+	if (GTK_WIDGET_CLASS (e_table_parent_class)->unrealize)
+		GTK_WIDGET_CLASS (e_table_parent_class)->unrealize (widget);
 }
 
 static gboolean
@@ -500,16 +498,15 @@
 
 	g_free(et->domain);
 	et->domain = NULL;
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (e_table_parent_class)->finalize (object);
 }
 
 static void
-e_table_init (GtkObject *object)
+e_table_init (ETable *e_table)
 {
-	ETable *e_table = E_TABLE (object);
-	GtkTable *gtk_table = GTK_TABLE (object);
+	GtkTable *gtk_table = GTK_TABLE (e_table);
 
-	GTK_WIDGET_SET_FLAGS (e_table, GTK_CAN_FOCUS);
+	GTK_WIDGET_SET_FLAGS (GTK_WIDGET (e_table), GTK_CAN_FOCUS);
 
 	gtk_table->homogeneous          = FALSE;
 
@@ -3062,8 +3059,6 @@
 	object_class                    = (GObjectClass *) class;
 	widget_class                    = (GtkWidgetClass *) class;
 
-	parent_class                    = g_type_class_peek_parent (class);
-
 	object_class->dispose           = et_dispose;
 	object_class->finalize          = et_finalize;
 	object_class->set_property      = et_set_property;
@@ -3345,4 +3340,3 @@
 	gal_a11y_e_table_init ();
 }
 
-E_MAKE_TYPE(e_table, "ETable", ETable, e_table_class_init, e_table_init, PARENT_TYPE)
Index: widgets/table/e-table-sorter.c
===================================================================
--- widgets/table/e-table-sorter.c	(revision 33821)
+++ widgets/table/e-table-sorter.c	(working copy)
@@ -39,12 +39,12 @@
 	PROP_SORT_INFO
 };
 
-#define PARENT_TYPE e_sorter_get_type()
+/* workaround for avoiding API breakage */
+#define ets_get_type e_table_sorter_get_type
+G_DEFINE_TYPE (ETableSorter, ets, E_SORTER_TYPE)
 
 #define INCREMENT_AMOUNT 100
 
-static ESorterClass *parent_class;
-
 static void    	ets_model_changed      (ETableModel *etm, ETableSorter *ets);
 static void    	ets_model_row_changed  (ETableModel *etm, int row, ETableSorter *ets);
 static void    	ets_model_cell_changed (ETableModel *etm, int col, int row, ETableSorter *ets);
@@ -109,7 +109,7 @@
 		g_object_unref(ets->source);
 	ets->source = NULL;
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (ets_parent_class)->dispose (object);
 }
 
 static void
@@ -158,8 +158,6 @@
 	GObjectClass *object_class = G_OBJECT_CLASS(klass);
 	ESorterClass *sorter_class = E_SORTER_CLASS(klass);
 
-	parent_class                            = g_type_class_peek_parent (klass);
-
 	object_class->dispose                   = ets_dispose;
 	object_class->set_property              = ets_set_property;
 	object_class->get_property              = ets_get_property;
@@ -196,8 +194,6 @@
 	ets->group_info_changed_id = 0;
 }
 
-E_MAKE_TYPE(e_table_sorter, "ETableSorter", ETableSorter, ets_class_init, ets_init, PARENT_TYPE)
-
 ETableSorter *
 e_table_sorter_new (ETableModel *source, ETableHeader *full_header, ETableSortInfo *sort_info)
 {
Index: widgets/table/e-table-header.c
===================================================================
--- widgets/table/e-table-header.c	(revision 33821)
+++ widgets/table/e-table-header.c	(working copy)
@@ -55,7 +55,7 @@
 
 static guint eth_signals [LAST_SIGNAL] = { 0, };
 
-static GObjectClass *e_table_header_parent_class;
+G_DEFINE_TYPE (ETableHeader, e_table_header, G_TYPE_OBJECT)
 
 struct two_ints {
 	int column;
@@ -181,8 +181,8 @@
 	eth->col_count = 0;
 	eth->columns = NULL;
 
-	if (e_table_header_parent_class->finalize)
-		e_table_header_parent_class->finalize (object);
+	if (G_OBJECT_CLASS (e_table_header_parent_class)->finalize)
+		G_OBJECT_CLASS (e_table_header_parent_class)->finalize (object);
 }
 
 static void
@@ -247,9 +247,9 @@
 }
 
 static void
-e_table_header_class_init (GObjectClass *object_class)
+e_table_header_class_init (ETableHeaderClass *klass)
 {
-	ETableHeaderClass *klass = E_TABLE_HEADER_CLASS (object_class);
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
 	object_class->finalize = eth_finalize;
 	object_class->set_property = eth_set_property;
@@ -906,8 +906,6 @@
 	g_signal_emit (G_OBJECT (eth), eth_signals [EXPANSION_CHANGE], 0);
 }
 
-E_MAKE_TYPE(e_table_header, "ETableHeader", ETableHeader, e_table_header_class_init, e_table_header_init, G_TYPE_OBJECT)
-
 int
 e_table_header_prioritized_column (ETableHeader *eth)
 {
Index: widgets/table/e-table-group.c
===================================================================
--- widgets/table/e-table-group.c	(revision 33821)
+++ widgets/table/e-table-group.c	(working copy)
@@ -33,12 +33,12 @@
 #include "e-table-group-leaf.h"
 #include "e-table-item.h"
 
-#define PARENT_TYPE gnome_canvas_group_get_type ()
+/* workaround for avoiding API breakage*/
+#define etg_get_type e_table_group_get_type
+G_DEFINE_TYPE (ETableGroup, etg, GNOME_TYPE_CANVAS_GROUP)
 
 #define ETG_CLASS(e) (E_TABLE_GROUP_CLASS(GTK_OBJECT_GET_CLASS(e)))
 
-static GnomeCanvasGroupClass *etg_parent_class;
-
 enum {
 	CURSOR_CHANGE,
 	CURSOR_ACTIVATED,
@@ -611,10 +611,10 @@
 }
 
 static void
-etg_class_init (GObjectClass *object_class)
+etg_class_init (ETableGroupClass *klass)
 {
-	GnomeCanvasItemClass *item_class = (GnomeCanvasItemClass *) object_class;
-	ETableGroupClass *klass = (ETableGroupClass *) object_class;
+	GnomeCanvasItemClass *item_class = GNOME_CANVAS_ITEM_CLASS (klass);
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
 	object_class->dispose = etg_dispose;
 
@@ -641,8 +641,6 @@
 	klass->compute_location = NULL;
 	klass->get_cell_geometry = NULL;
 
-	etg_parent_class = g_type_class_ref (PARENT_TYPE);
-
 	etg_signals [CURSOR_CHANGE] =
 		g_signal_new ("cursor_change",
 			      G_OBJECT_CLASS_TYPE (object_class),
@@ -711,4 +709,8 @@
 			      G_TYPE_INT, GDK_TYPE_EVENT);
 }
 
-E_MAKE_TYPE (e_table_group, "ETableGroup", ETableGroup, etg_class_init, NULL, PARENT_TYPE)
+static void
+etg_init (ETableGroup *etg)
+{
+	/* nothing to do */
+}
Index: widgets/table/e-table-model.c
===================================================================
--- widgets/table/e-table-model.c	(revision 33821)
+++ widgets/table/e-table-model.c	(working copy)
@@ -38,7 +38,7 @@
 d(static gint depth = 0;)
 
 
-static GObjectClass *e_table_model_parent_class;
+G_DEFINE_TYPE (ETableModel, e_table_model, G_TYPE_OBJECT)
 
 enum {
 	MODEL_NO_CHANGE,
@@ -270,15 +270,14 @@
 static void
 e_table_model_finalize (GObject *object)
 {
-	if (e_table_model_parent_class->finalize)
-		(*e_table_model_parent_class->finalize)(object);
+	if (G_OBJECT_CLASS (e_table_model_parent_class)->finalize)
+		(* G_OBJECT_CLASS (e_table_model_parent_class)->finalize)(object);
 }
 
 static void
-e_table_model_class_init (GObjectClass *object_class)
+e_table_model_class_init (ETableModelClass *klass)
 {
-	ETableModelClass *klass = E_TABLE_MODEL_CLASS(object_class);
-	e_table_model_parent_class = g_type_class_peek_parent (object_class);
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);	
 	
 	object_class->finalize = e_table_model_finalize;
 
@@ -373,7 +372,11 @@
 	klass->model_rows_deleted  = NULL;
 }
 
-E_MAKE_TYPE(e_table_model, "ETableModel", ETableModel, e_table_model_class_init, NULL, G_TYPE_OBJECT)
+static void
+e_table_model_init (ETableModel *e_table_model)
+{
+	/* nothing to do */
+}
 
 #if d(!)0
 static void
Index: widgets/table/e-cell-size.c
===================================================================
--- widgets/table/e-cell-size.c	(revision 33821)
+++ widgets/table/e-cell-size.c	(working copy)
@@ -30,10 +30,8 @@
 
 #include "e-cell-size.h"
 
-#define PARENT_TYPE e_cell_text_get_type ()
+G_DEFINE_TYPE (ECellSize, e_cell_size, E_CELL_TEXT_TYPE)
 
-static ECellTextClass *parent_class;
-
 static char *
 ecd_get_text(ECellText *cell, ETableModel *model, int col, int row)
 {
@@ -60,18 +58,16 @@
 }
 
 static void
-e_cell_size_class_init (GtkObjectClass *object_class)
+e_cell_size_class_init (ECellSizeClass *klass)
 {
-	ECellTextClass *ectc = (ECellTextClass *) object_class;
+	ECellTextClass *ectc = E_CELL_TEXT_CLASS (klass);
 
-	parent_class = g_type_class_ref (PARENT_TYPE);
-
 	ectc->get_text  = ecd_get_text;
 	ectc->free_text = ecd_free_text;
 }
 
 static void
-e_cell_size_init (GtkObject *object)
+e_cell_size_init (ECellSize *e_cell_size)
 {
 }
 
@@ -110,4 +106,3 @@
 	return (ECell *) ecd;
 }
 
-E_MAKE_TYPE(e_cell_size, "ECellSize", ECellSize, e_cell_size_class_init, e_cell_size_init, PARENT_TYPE)
Index: widgets/table/e-table-without.c
===================================================================
--- widgets/table/e-table-without.c	(revision 33821)
+++ widgets/table/e-table-without.c	(working copy)
@@ -30,12 +30,12 @@
 
 #include "e-table-without.h"
 
-#define PARENT_TYPE E_TABLE_SUBSET_TYPE
+/* workaround for avoiding API breakage */
+#define etw_get_type e_table_without_get_type
+G_DEFINE_TYPE (ETableWithout, etw, E_TABLE_SUBSET_TYPE)
 
 #define INCREMENT_AMOUNT 10
 
-static ETableSubsetClass *parent_class;
-
 struct _ETableWithoutPrivate {
 	GHashTable *hash;
 
@@ -144,8 +144,8 @@
 		etw->priv = NULL;
 	}
 
-	if (G_OBJECT_CLASS (parent_class)->dispose)
-		(* G_OBJECT_CLASS (parent_class)->dispose) (object);
+	if (G_OBJECT_CLASS (etw_parent_class)->dispose)
+		(* G_OBJECT_CLASS (etw_parent_class)->dispose) (object);
 }
 
 static void
@@ -217,8 +217,8 @@
 	}
 	etss->n_map = j;
 
-	if (parent_class->proxy_model_changed)
-		parent_class->proxy_model_changed (etss, etm);
+	if (E_TABLE_SUBSET_CLASS (etw_parent_class)->proxy_model_changed)
+		E_TABLE_SUBSET_CLASS (etw_parent_class)->proxy_model_changed (etss, etm);
 }
 
 static void
@@ -227,8 +227,6 @@
 	ETableSubsetClass *etss_class         = E_TABLE_SUBSET_CLASS (klass);
 	GObjectClass *object_class            = G_OBJECT_CLASS (klass);
 
-	parent_class                          = g_type_class_ref (PARENT_TYPE);
-
 	object_class->dispose                 = etw_dispose;
 
 	etss_class->proxy_model_rows_inserted = etw_proxy_model_rows_inserted;
@@ -248,8 +246,6 @@
 	etw->priv->free_duplicated_key_func = NULL;
 }
 
-E_MAKE_TYPE(e_table_without, "ETableWithout", ETableWithout, etw_class_init, etw_init, PARENT_TYPE)
-
 ETableModel *
 e_table_without_construct (ETableWithout                 *etw,
 			   ETableModel                   *source,
Index: widgets/table/e-table-config.c
===================================================================
--- widgets/table/e-table-config.c	(revision 33821)
+++ widgets/table/e-table-config.c	(working copy)
@@ -45,7 +45,7 @@
 #include "e-table-scrolled.h"
 #include "e-table-without.h"
 
-static GObjectClass *config_parent_class;
+G_DEFINE_TYPE (ETableConfig, e_table_config, G_TYPE_OBJECT)
 
 enum {
 	CHANGED,
@@ -90,7 +90,7 @@
 	g_free (config->domain);
 	config->domain = NULL;
 
-	config_parent_class->finalize (object);
+	G_OBJECT_CLASS (e_table_config_parent_class)->finalize (object);
 }
 
 static void
@@ -129,11 +129,9 @@
 }
 
 static void
-config_class_init (GObjectClass *object_class)
+e_table_config_class_init (ETableConfigClass *klass)
 {
-	ETableConfigClass *klass = E_TABLE_CONFIG_CLASS(object_class);
-
-	config_parent_class   = g_type_class_peek_parent (klass);
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);	
 	
 	klass->changed        = NULL;
 
@@ -1257,7 +1255,7 @@
 }
 
 static void
-config_init (ETableConfig *config)
+e_table_config_init (ETableConfig *config)
 {
 	config->domain = NULL;
 }
@@ -1355,4 +1353,3 @@
 	gdk_window_raise (GTK_WIDGET (config->dialog_toplevel)->window);
 }
 
-E_MAKE_TYPE(e_table_config, "ETableConfig", ETableConfig, config_class_init, config_init, G_TYPE_OBJECT)
Index: widgets/table/e-cell-vbox.c
===================================================================
--- widgets/table/e-cell-vbox.c	(revision 33821)
+++ widgets/table/e-cell-vbox.c	(working copy)
@@ -42,10 +42,8 @@
 #include "e-cell-vbox.h"
 #include "e-table-item.h"
 
-#define PARENT_TYPE e_cell_get_type ()
+G_DEFINE_TYPE (ECellVbox, e_cell_vbox, E_CELL_TYPE)
 
-static ECellClass *parent_class;
-
 #define INDENT_AMOUNT 16
 
 /*
@@ -114,8 +112,8 @@
 	for (i = 0; i < vbox_view->subcell_view_count; i++)
 		e_cell_realize (vbox_view->subcell_views[i]);
 
-	if (parent_class->realize)
-		(* parent_class->realize) (ecell_view);
+	if (E_CELL_CLASS (e_cell_vbox_parent_class)->realize)
+		(* E_CELL_CLASS (e_cell_vbox_parent_class)->realize) (ecell_view);
 }
 
 /*
@@ -131,8 +129,8 @@
 	for (i = 0; i < vbox_view->subcell_view_count; i++)
 		e_cell_unrealize (vbox_view->subcell_views[i]);
 
-	if (parent_class->unrealize)
-		(* parent_class->unrealize) (ecv);
+	if (E_CELL_CLASS (e_cell_vbox_parent_class)->unrealize)
+		(* E_CELL_CLASS (e_cell_vbox_parent_class)->unrealize) (ecv);
 }
 
 /*
@@ -411,7 +409,7 @@
 	ecv->subcells = NULL;
 	ecv->subcell_count = 0;
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (e_cell_vbox_parent_class)->dispose (object);
 }
 
 static void
@@ -421,13 +419,14 @@
 
 	g_free (ecv->model_cols);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (e_cell_vbox_parent_class)->finalize (object);
 }
 
 static void
-e_cell_vbox_class_init (GObjectClass *object_class)
+e_cell_vbox_class_init (ECellVboxClass *klass)
 {
-	ECellClass *ecc = (ECellClass *) object_class;
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+	ECellClass *ecc = E_CELL_CLASS (klass);
 
 	object_class->dispose = ecv_dispose;
 	object_class->finalize = ecv_finalize;
@@ -451,21 +450,16 @@
 	ecc->get_bg_color     = ecv_get_bg_color;
 #endif
 
-	parent_class = g_type_class_ref (PARENT_TYPE);
-
 	gal_a11y_e_cell_registry_add_cell_type (NULL, E_CELL_VBOX_TYPE, gal_a11y_e_cell_vbox_new);
 }
 
 static void
-e_cell_vbox_init (GtkObject *object)
+e_cell_vbox_init (ECellVbox *ecv)
 {
-	ECellVbox *ecv = E_CELL_VBOX (object);
-
 	ecv->subcells = NULL;
 	ecv->subcell_count = 0;
 }
 
-E_MAKE_TYPE(e_cell_vbox, "ECellVbox", ECellVbox, e_cell_vbox_class_init, e_cell_vbox_init, PARENT_TYPE)
 
 /**
  * e_cell_vbox_new:
Index: widgets/table/e-tree-sorted.c
===================================================================
--- widgets/table/e-tree-sorted.c	(revision 33821)
+++ widgets/table/e-tree-sorted.c	(working copy)
@@ -49,7 +49,7 @@
 
 #define d(x)
 
-static ETreeModel *parent_class;
+G_DEFINE_TYPE (ETreeSorted, e_tree_sorted, E_TREE_MODEL_TYPE)
 
 enum {
 	NODE_RESORTED,
@@ -588,7 +588,7 @@
 
 	/* FIXME lots of stuff to free here */
 	if (!priv) {
-		G_OBJECT_CLASS (parent_class)->dispose (object);
+		G_OBJECT_CLASS (e_tree_sorted_parent_class)->dispose (object);
 		return;
 	}
 
@@ -657,7 +657,7 @@
 	g_free (ets->priv);
 	ets->priv = NULL;
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (e_tree_sorted_parent_class)->finalize (object);
 }
 
 static ETreePath
@@ -1152,8 +1152,6 @@
 	ETreeModelClass *tree_class      = E_TREE_MODEL_CLASS (klass);
 	GObjectClass *object_class       = G_OBJECT_CLASS (klass);
 
-	parent_class                     = g_type_class_peek_parent (klass);
-
 	klass->node_resorted             = NULL;
 	
 	object_class->dispose            = ets_dispose;
@@ -1205,10 +1203,8 @@
 }
 
 static void
-e_tree_sorted_init (GObject *object)
+e_tree_sorted_init (ETreeSorted *ets)
 {
-	ETreeSorted *ets = (ETreeSorted *)object;
-
 	ETreeSortedPriv *priv;
 
 	priv                                      = g_new0 (ETreeSortedPriv, 1);
@@ -1241,8 +1237,6 @@
 	priv->nested_resort_idle                  = 0;
 }
 
-E_MAKE_TYPE(e_tree_sorted, "ETreeSorted", ETreeSorted, e_tree_sorted_class_init, e_tree_sorted_init, E_TREE_MODEL_TYPE)
-
 /**
  * e_tree_sorted_construct:
  * @etree: 
Index: widgets/table/e-table-state.c
===================================================================
--- widgets/table/e-table-state.c	(revision 33821)
+++ widgets/table/e-table-state.c	(working copy)
@@ -38,7 +38,7 @@
 
 #define STATE_VERSION 0.1
 
-static GObjectClass *etst_parent_class;
+G_DEFINE_TYPE (ETableState, e_table_state, G_TYPE_OBJECT)
 
 static void
 etst_dispose (GObject *object)
@@ -50,7 +50,7 @@
 		etst->sort_info = NULL;
 	}
 
-	G_OBJECT_CLASS (etst_parent_class)->dispose (object);
+	G_OBJECT_CLASS (e_table_state_parent_class)->dispose (object);
 }
 	
 static void
@@ -68,28 +68,26 @@
 		etst->expansions = NULL;
 	}
 	
-	G_OBJECT_CLASS (etst_parent_class)->finalize (object);
+	G_OBJECT_CLASS (e_table_state_parent_class)->finalize (object);
 }
 
 static void
-etst_class_init (GObjectClass *klass)
+e_table_state_class_init (ETableStateClass *klass)
 {
-	etst_parent_class = g_type_class_peek_parent (klass);
-	
-	klass->dispose = etst_dispose;
-	klass->finalize = etst_finalize;
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+	object_class->dispose = etst_dispose;
+	object_class->finalize = etst_finalize;
 }
 
 static void
-etst_init (ETableState *state)
+e_table_state_init (ETableState *state)
 {
 	state->columns = NULL;
 	state->expansions = NULL;
 	state->sort_info = e_table_sort_info_new();
 }
 
-E_MAKE_TYPE(e_table_state, "ETableState", ETableState, etst_class_init, etst_init, G_TYPE_OBJECT)
-
 ETableState *
 e_table_state_new (void)
 {
Index: widgets/table/e-table-memory-store.c
===================================================================
--- widgets/table/e-table-memory-store.c	(revision 33821)
+++ widgets/table/e-table-memory-store.c	(working copy)
@@ -31,14 +31,14 @@
 
 #define STORE_LOCATOR(etms, col, row) (*((etms)->priv->store + (row) * (etms)->priv->col_count + (col)))
 
-static ETableMemoryClass *parent_class;
-
 struct _ETableMemoryStorePrivate {
 	int col_count;
 	ETableMemoryStoreColumnInfo *columns;
 	void **store;
 };
 
+G_DEFINE_TYPE (ETableMemoryStore, e_table_memory_store, E_TABLE_MEMORY_TYPE)
+
 static void *
 duplicate_value (ETableMemoryStore *etms, int col, const void *val)
 {
@@ -236,8 +236,8 @@
 		g_free (etms->priv);
 	}
 
-	if (G_OBJECT_CLASS (parent_class)->finalize)
-		G_OBJECT_CLASS (parent_class)->finalize (obj);
+	if (G_OBJECT_CLASS (e_table_memory_store_parent_class)->finalize)
+		G_OBJECT_CLASS (e_table_memory_store_parent_class)->finalize (obj);
 }
 	
 static void
@@ -251,12 +251,11 @@
 }
 
 static void
-e_table_memory_store_class_init (GObjectClass *object_class)
+e_table_memory_store_class_init (ETableMemoryStoreClass *klass)
 {
-	ETableModelClass *model_class = (ETableModelClass *) object_class;
+	ETableModelClass *model_class = E_TABLE_MODEL_CLASS (klass);
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	parent_class = g_type_class_peek_parent (object_class);
-
 	object_class->finalize	      = etms_finalize;
 
 	model_class->column_count     = etms_column_count;
@@ -271,8 +270,6 @@
 	model_class->append_row       = etms_append_row;
 }
 
-E_MAKE_TYPE(e_table_memory_store, "ETableMemoryStore", ETableMemoryStore, e_table_memory_store_class_init, e_table_memory_store_init, E_TABLE_MEMORY_TYPE)
-
 /**
  * e_table_memory_store_new:
  * @col_count:
Index: widgets/table/e-table-memory.c
===================================================================
--- widgets/table/e-table-memory.c	(revision 33821)
+++ widgets/table/e-table-memory.c	(working copy)
@@ -38,7 +38,7 @@
 
 #include "e-table-memory.h"
 
-static ETableModel *parent_class;
+G_DEFINE_TYPE (ETableMemory, e_table_memory, E_TABLE_MODEL_TYPE)
 
 struct ETableMemoryPriv {
 	gpointer *data;
@@ -62,7 +62,7 @@
 	}
 	etmm->priv = NULL;
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (e_table_memory_parent_class)->finalize (object);
 }
 
 static int
@@ -75,22 +75,19 @@
 
 
 static void
-e_table_memory_class_init (GObjectClass *klass)
+e_table_memory_class_init (ETableMemoryClass *klass)
 {
-	ETableModelClass *table_class = (ETableModelClass *) klass;
+	ETableModelClass *table_class = E_TABLE_MODEL_CLASS (klass);
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	parent_class               = g_type_class_peek_parent (klass);
-	
-	klass->finalize            = etmm_finalize;
+	object_class->finalize     = etmm_finalize;
 
 	table_class->row_count     = etmm_row_count;
 }
 
 static void
-e_table_memory_init (GObject *object)
+e_table_memory_init (ETableMemory *etmm)
 {
-	ETableMemory *etmm = (ETableMemory *)object;
-
 	ETableMemoryPriv *priv;
 
 	priv = g_new0 (ETableMemoryPriv, 1);
@@ -101,10 +98,6 @@
 	priv->frozen = 0;
 }
 
-E_MAKE_TYPE(e_table_memory, "ETableMemory", ETableMemory, e_table_memory_class_init, e_table_memory_init, E_TABLE_MODEL_TYPE)
-
-
-
 /**
  * e_table_memory_new
  *
Index: widgets/table/e-cell-spin-button.c
===================================================================
--- widgets/table/e-cell-spin-button.c	(revision 33821)
+++ widgets/table/e-cell-spin-button.c	(working copy)
@@ -40,10 +40,10 @@
 #include "e-cell-spin-button.h"
 
 #define E_CELL_SPIN_BUTTON_ARROW_WIDTH  16
-#define PARENT_TYPE e_cell_get_type ()
+G_DEFINE_TYPE (ECellSpinButton, e_cell_spin_button, E_CELL_TYPE)
 
-static void e_cell_spin_button_class_init   (GObjectClass   *klass);
-static void e_cell_spin_button_init         (GtkObject        *object);
+static void e_cell_spin_button_class_init   (ECellSpinButtonClass *klass);
+static void e_cell_spin_button_init         (ECellSpinButton      *ecsb);
 
 static void         ecsb_dispose      (GObject	*object);
 
@@ -117,15 +117,14 @@
 };
 
 static guint    signals[LAST_SIGNAL] = { 0 };
-static ECell   *parent_class;
 
 static void 
-e_cell_spin_button_class_init     (GObjectClass   *klass)
+e_cell_spin_button_class_init     (ECellSpinButtonClass   *klass)
 {
-        ECellClass             *ecc    = (ECellClass *) klass;  
-	ECellSpinButtonClass   *ecsbc  = (ECellSpinButtonClass *) klass;
+        ECellClass *ecc = E_CELL_CLASS (klass);
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
         
-        klass->dispose     = ecsb_dispose;
+        object_class->dispose = ecsb_dispose;
 
 	ecc->realize       = ecsb_realize;
 	ecc->unrealize     = ecsb_unrealize;
@@ -142,10 +141,8 @@
 	ecc->max_width     = NULL;
 	ecc->show_tooltip  = ecsb_show_tooltip;
 
-	ecsbc->step        = NULL;
+	klass->step        = NULL;
 
-        parent_class       = g_type_class_ref (E_CELL_TYPE);
-
 	signals[STEP] =
 		g_signal_new ("step",
 			      G_OBJECT_CLASS_TYPE (klass),
@@ -159,15 +156,10 @@
 }
 
 static void 
-e_cell_spin_button_init           (GtkObject        *object)
+e_cell_spin_button_init           (ECellSpinButton *ecsb)
 {
-        ECellSpinButton   *ecsb;
+	g_return_if_fail (M_IS_CELL_SPIN_BUTTON (ecsb));
 	
-	g_return_if_fail (object != NULL);
-	g_return_if_fail (M_IS_CELL_SPIN_BUTTON (object));
-	
-	ecsb = E_CELL_SPIN_BUTTON (object);
-
 	ecsb->up_pressed    = FALSE;
 	ecsb->down_pressed  = FALSE;
 }
@@ -512,7 +504,7 @@
 	g_return_if_fail (object != NULL);
 	g_return_if_fail (M_IS_CELL_SPIN_BUTTON (object));
 	
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (e_cell_spin_button_parent_class)->dispose (object);
 }
 
 ECell *
@@ -655,7 +647,3 @@
 	g_free (str_value);
 }
 
-E_MAKE_TYPE (e_cell_spin_button, "ECellSpinButton", ECellSpinButton, 
-	     e_cell_spin_button_class_init, e_cell_spin_button_init, 
-	     PARENT_TYPE)
-
Index: widgets/table/e-cell-checkbox.c
===================================================================
--- widgets/table/e-cell-checkbox.c	(revision 33821)
+++ widgets/table/e-cell-checkbox.c	(working copy)
@@ -34,7 +34,7 @@
 #include "check-empty.xpm"
 #include "check-filled.xpm"
 
-#define PARENT_TYPE e_cell_toggle_get_type ()
+G_DEFINE_TYPE (ECellCheckbox, e_cell_checkbox, E_CELL_TOGGLE_TYPE)
 
 static GdkPixbuf *checks [2];
 
@@ -60,15 +60,19 @@
 }
 
 static void
-e_cell_checkbox_class_init (GtkObjectClass *object_class)
+e_cell_checkbox_class_init (ECellCheckboxClass *klass)
 {
-	ECellClass *ecc = (ECellClass *) object_class;
+	ECellClass *ecc = E_CELL_CLASS (klass);
+
 	ecc->print = ecc_print;
 	checks [0] = gdk_pixbuf_new_from_xpm_data (check_empty_xpm);
 	checks [1] = gdk_pixbuf_new_from_xpm_data (check_filled_xpm);
 }
 
-E_MAKE_TYPE(e_cell_checkbox, "ECellCheckbox", ECellCheckbox, e_cell_checkbox_class_init, NULL, PARENT_TYPE)
+static void
+e_cell_checkbox_init (ECellCheckbox *eccb)
+{
+}
 
 /**
  * e_cell_checkbox_new:
