[gthumb] Use the G_DEFINE_* macros to define GObject types



commit 66255bf0ecfbacf5f58e290b51906641ebd6c89f
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Tue Nov 1 14:15:32 2011 +0100

    Use the G_DEFINE_* macros to define GObject types

 extensions/burn_disc/gth-burn-task.c               |   38 +------
 extensions/catalogs/gth-catalog.c                  |   34 +------
 extensions/catalogs/gth-file-source-catalogs.c     |   37 +------
 extensions/catalogs/gth-organize-task.c            |   33 +-----
 extensions/change_date/gth-change-date-task.c      |   33 +-----
 extensions/comments/gth-comment.c                  |   59 +++-------
 .../comments/gth-metadata-provider-comment.c       |   41 ++-----
 .../contact_sheet/gth-contact-sheet-creator.c      |   34 +-----
 .../contact_sheet/gth-contact-sheet-theme-dialog.c |   33 +-----
 .../edit_metadata/gth-delete-metadata-task.c       |   33 +-----
 extensions/edit_metadata/gth-edit-comment-page.c   |   49 ++-------
 .../edit_metadata/gth-edit-metadata-dialog.c       |   78 ++-----------
 .../edit_metadata/gth-edit-metadata-dialog.h       |    6 +-
 extensions/edit_metadata/gth-tag-chooser-dialog.c  |   37 +------
 extensions/edit_metadata/gth-tag-task.c            |   33 +-----
 extensions/exiv2_tools/gth-edit-exiv2-page.c       |   50 ++-------
 .../exiv2_tools/gth-metadata-provider-exiv2.c      |   40 ++-----
 .../facebook/facebook-account-chooser-dialog.c     |   37 +------
 .../facebook/facebook-account-manager-dialog.c     |   37 +------
 extensions/facebook/facebook-account.c             |   47 ++-------
 .../facebook/facebook-album-properties-dialog.c    |   37 +------
 extensions/facebook/facebook-album.c               |   47 ++-------
 extensions/facebook/facebook-authentication.c      |   35 +-----
 extensions/facebook/facebook-connection.c          |   33 +-----
 extensions/facebook/facebook-photo.c               |   48 ++-------
 extensions/facebook/facebook-service.c             |   33 +-----
 extensions/facebook/facebook-user.c                |   46 ++------
 extensions/file_manager/gth-copy-task.c            |   33 +-----
 extensions/file_manager/gth-delete-task.c          |   33 +-----
 extensions/file_manager/gth-duplicate-task.c       |   34 +-----
 extensions/file_manager/gth-reorder-task.c         |   33 +-----
 .../file_tools/gth-file-tool-adjust-colors.c       |   30 +-----
 extensions/file_tools/gth-file-tool-crop.c         |   29 +-----
 extensions/file_tools/gth-file-tool-desaturate.c   |   38 ++-----
 extensions/file_tools/gth-file-tool-enhance.c      |   34 ++----
 extensions/file_tools/gth-file-tool-equalize.c     |   40 ++-----
 extensions/file_tools/gth-file-tool-flip.c         |   40 ++-----
 extensions/file_tools/gth-file-tool-mirror.c       |   40 ++-----
 extensions/file_tools/gth-file-tool-negative.c     |   38 ++-----
 extensions/file_tools/gth-file-tool-redo.c         |   39 ++-----
 extensions/file_tools/gth-file-tool-resize.c       |   45 ++------
 extensions/file_tools/gth-file-tool-rotate-left.c  |   40 ++-----
 extensions/file_tools/gth-file-tool-rotate-right.c |   40 ++-----
 extensions/file_tools/gth-file-tool-rotate.c       |   49 ++------
 extensions/file_tools/gth-file-tool-save-as.c      |   38 ++-----
 extensions/file_tools/gth-file-tool-save.c         |   38 ++-----
 extensions/file_tools/gth-file-tool-sharpen.c      |   47 ++------
 extensions/file_tools/gth-file-tool-undo.c         |   38 ++-----
 extensions/file_tools/gth-image-line-tool.c        |   90 ++++++----------
 extensions/file_tools/gth-image-rotator.c          |   83 +++++---------
 extensions/file_viewer/gth-file-viewer-page.c      |   42 ++------
 extensions/find_duplicates/gth-find-duplicates.c   |   33 +-----
 .../find_duplicates/gth-folder-chooser-dialog.c    |   33 +-----
 .../flicker_utils/flickr-account-chooser-dialog.c  |   33 +-----
 .../flicker_utils/flickr-account-manager-dialog.c  |   33 +-----
 extensions/flicker_utils/flickr-account.c          |   48 ++-------
 extensions/flicker_utils/flickr-authentication.c   |   35 +-----
 extensions/flicker_utils/flickr-connection.c       |   33 +-----
 extensions/flicker_utils/flickr-photo.c            |   47 ++-------
 extensions/flicker_utils/flickr-photoset.c         |   47 ++-------
 extensions/flicker_utils/flickr-service.c          |   37 +------
 extensions/flicker_utils/flickr-user.c             |   49 ++-------
 extensions/gstreamer_tools/gth-media-viewer-page.c |   46 ++------
 .../gth-metadata-provider-gstreamer.c              |   36 ++-----
 extensions/image_print/gth-image-print-job.c       |   33 +-----
 extensions/image_print/gth-load-image-info-task.c  |   33 +-----
 .../image_rotation/gth-reset-orientation-task.c    |   37 +------
 extensions/image_rotation/gth-transform-task.c     |   37 +------
 extensions/image_viewer/gth-image-histogram.c      |   86 +++++----------
 extensions/image_viewer/gth-image-viewer-page.c    |   47 +++------
 .../image_viewer/gth-metadata-provider-image.c     |   42 ++-----
 .../importer/gth-import-destination-button.c       |   33 +-----
 .../importer/gth-import-preferences-dialog.c       |   35 +-----
 extensions/importer/gth-import-task.c              |   37 +------
 extensions/list_tools/gth-script-editor-dialog.c   |   35 +------
 extensions/list_tools/gth-script-file.c            |   37 +------
 extensions/list_tools/gth-script-task.c            |   38 +------
 extensions/list_tools/gth-script.c                 |   62 +++--------
 extensions/map_view/gth-map-view.c                 |   62 +++--------
 extensions/oauth/oauth-account-chooser-dialog.c    |   37 +------
 extensions/oauth/oauth-account-manager-dialog.c    |   37 +------
 extensions/oauth/oauth-account.c                   |   48 ++-------
 extensions/oauth/oauth-authentication.c            |   35 +-----
 extensions/oauth/oauth-connection.c                |   37 +------
 extensions/photobucket/photobucket-account.c       |   47 ++-------
 .../photobucket-album-properties-dialog.c          |   37 +------
 extensions/photobucket/photobucket-album.c         |   49 ++-------
 extensions/photobucket/photobucket-photo.c         |   50 ++-------
 extensions/photobucket/photobucket-service.c       |   37 +------
 extensions/picasaweb/google-connection.c           |   37 +------
 .../picasaweb/picasa-account-chooser-dialog.c      |   37 +------
 .../picasaweb/picasa-account-manager-dialog.c      |   37 +------
 .../picasaweb/picasa-account-properties-dialog.c   |   33 +-----
 .../picasaweb/picasa-album-properties-dialog.c     |   33 +-----
 extensions/picasaweb/picasa-web-album.c            |   48 ++-------
 extensions/picasaweb/picasa-web-photo.c            |   54 ++-------
 extensions/picasaweb/picasa-web-service.c          |   37 +------
 extensions/picasaweb/picasa-web-user.c             |   48 ++-------
 extensions/pixbuf_savers/gth-jpeg-saver.c          |   47 ++-------
 extensions/pixbuf_savers/gth-png-saver.c           |   43 +------
 extensions/pixbuf_savers/gth-tga-saver.c           |   43 +------
 extensions/pixbuf_savers/gth-tiff-saver.c          |   48 ++-------
 extensions/red_eye_removal/gth-file-tool-red-eye.c |   45 ++------
 extensions/rename_series/gth-rename-task.c         |   37 +------
 .../rename_series/gth-template-editor-dialog.c     |   34 +------
 extensions/rename_series/gth-template-selector.c   |   40 +------
 extensions/search/gth-search-editor-dialog.c       |   34 +------
 extensions/search/gth-search-editor.c              |   34 +------
 extensions/search/gth-search-task.c                |   42 +------
 extensions/search/gth-search.c                     |   66 +++--------
 extensions/slideshow/gth-slideshow-preferences.c   |   47 ++-------
 extensions/slideshow/gth-slideshow.c               |   95 ++++++----------
 extensions/slideshow/gth-transition.c              |   49 ++-------
 extensions/webalbums/gth-web-exporter.c            |   35 +-----
 gthumb/gth-async-task.c                            |   33 +-----
 gthumb/gth-cell-renderer-thumbnail.c               |   65 ++++--------
 gthumb/gth-dumb-notebook.c                         |   34 +------
 gthumb/gth-duplicable.c                            |   34 ++----
 gthumb/gth-duplicable.h                            |    6 +-
 gthumb/gth-embedded-dialog.c                       |   70 +-----------
 gthumb/gth-empty-list.c                            |   45 ++------
 gthumb/gth-extensions.c                            |  118 ++------------------
 gthumb/gth-file-chooser-dialog.c                   |   33 +-----
 gthumb/gth-file-data.c                             |   64 +++--------
 gthumb/gth-file-list.c                             |   36 +------
 gthumb/gth-file-properties.c                       |   63 +++--------
 gthumb/gth-file-selection.c                        |   35 +-----
 gthumb/gth-file-selection.h                        |    6 +-
 gthumb/gth-file-source-vfs.c                       |   39 +------
 gthumb/gth-file-source.c                           |   35 +------
 gthumb/gth-file-store.c                            |   75 +++++--------
 gthumb/gth-file-tool.c                             |   31 +-----
 gthumb/gth-file-view.c                             |   35 +-----
 gthumb/gth-file-view.h                             |    6 +-
 gthumb/gth-filter-editor-dialog.c                  |   38 +------
 gthumb/gth-filter.c                                |   59 +++--------
 gthumb/gth-filterbar.c                             |   36 +------
 gthumb/gth-folder-tree.c                           |   38 +------
 gthumb/gth-histogram-view.c                        |   30 +-----
 gthumb/gth-histogram.c                             |   34 +-----
 gthumb/gth-icon-view.c                             |   65 +++--------
 gthumb/gth-image-dragger.c                         |   50 ++-------
 gthumb/gth-image-history.c                         |   38 +------
 gthumb/gth-image-loader.c                          |   33 +-----
 gthumb/gth-image-preloader.c                       |   35 +-----
 gthumb/gth-image-selector.c                        |   52 ++-------
 gthumb/gth-image-viewer-tool.c                     |   28 +----
 gthumb/gth-image-viewer-tool.h                     |    6 +-
 gthumb/gth-image.c                                 |   35 +------
 gthumb/gth-info-bar.c                              |   35 +------
 gthumb/gth-list-view.c                             |   79 +++----------
 gthumb/gth-load-file-data-task.c                   |   33 +-----
 gthumb/gth-main.c                                  |   34 +------
 gthumb/gth-menu-button.c                           |   33 +-----
 gthumb/gth-metadata-chooser.c                      |   35 +-----
 gthumb/gth-metadata-provider-file.c                |   34 +-----
 gthumb/gth-metadata-provider.c                     |   26 +----
 gthumb/gth-metadata.c                              |   30 +-----
 gthumb/gth-monitor.c                               |   35 +-----
 gthumb/gth-multipage.c                             |   59 ++--------
 gthumb/gth-multipage.h                             |    6 +-
 gthumb/gth-overwrite-dialog.c                      |   36 +------
 gthumb/gth-pixbuf-list-task.c                      |   33 +-----
 gthumb/gth-pixbuf-saver.c                          |   31 +-----
 gthumb/gth-pixbuf-task.c                           |   33 +-----
 gthumb/gth-progress-dialog.c                       |   65 +----------
 gthumb/gth-request-dialog.c                        |   34 +-----
 gthumb/gth-save-file-data-task.c                   |   33 +-----
 gthumb/gth-screensaver.c                           |   37 +------
 gthumb/gth-sidebar.c                               |   63 ++---------
 gthumb/gth-sidebar.h                               |    6 +-
 gthumb/gth-source-tree.c                           |   34 +------
 gthumb/gth-statusbar.c                             |   40 +------
 gthumb/gth-string-list.c                           |   37 ++-----
 gthumb/gth-tags-entry.c                            |   37 +------
 gthumb/gth-task.c                                  |   39 +------
 gthumb/gth-test-category.c                         |   65 +++--------
 gthumb/gth-test-chain.c                            |  109 +++++++------------
 gthumb/gth-test-selector.c                         |   37 +------
 gthumb/gth-test-simple.c                           |   65 +++--------
 gthumb/gth-test.c                                  |   53 +++-------
 gthumb/gth-thumb-loader.c                          |   33 +-----
 gthumb/gth-time-selector.c                         |   37 +------
 gthumb/gth-toggle-menu-tool-button.c               |   55 +++-------
 gthumb/gth-toolbox.c                               |   42 +------
 gthumb/gth-uri-list.c                              |   35 +-----
 gthumb/gth-viewer-page.c                           |   29 +----
 gthumb/gth-viewer-page.h                           |    6 +-
 188 files changed, 1377 insertions(+), 6386 deletions(-)
---
diff --git a/extensions/burn_disc/gth-burn-task.c b/extensions/burn_disc/gth-burn-task.c
index ac2e898..cc852a7 100644
--- a/extensions/burn_disc/gth-burn-task.c
+++ b/extensions/burn_disc/gth-burn-task.c
@@ -51,7 +51,7 @@ struct _GthBurnTaskPrivate
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthBurnTask, gth_burn_task, GTH_TYPE_TASK)
 
 
 static void
@@ -64,7 +64,7 @@ free_file_list_from_content (gpointer key,
 
 
 static void
-gth_task_finalize (GObject *object)
+gth_burn_task_finalize (GObject *object)
 {
 	GthBurnTask *task;
 
@@ -88,7 +88,7 @@ gth_task_finalize (GObject *object)
 		task->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_burn_task_parent_class)->finalize (object);
 }
 
 
@@ -426,10 +426,8 @@ gth_burn_task_class_init (GthBurnTaskClass *class)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (class);
-
 	object_class = (GObjectClass*) class;
-	object_class->finalize = gth_task_finalize;
+	object_class->finalize = gth_burn_task_finalize;
 
 	task_class = (GthTaskClass*) class;
 	task_class->exec = gth_burn_task_exec;
@@ -447,34 +445,6 @@ gth_burn_task_init (GthBurnTask *task)
 }
 
 
-GType
-gth_burn_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthBurnTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_burn_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthBurnTask),
-			0,
-			(GInstanceInitFunc) gth_burn_task_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthBurnTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthTask *
 gth_burn_task_new (GthBrowser *browser,
                    GList      *selected_files)
diff --git a/extensions/catalogs/gth-catalog.c b/extensions/catalogs/gth-catalog.c
index 3eb1efd..19dc87f 100644
--- a/extensions/catalogs/gth-catalog.c
+++ b/extensions/catalogs/gth-catalog.c
@@ -44,7 +44,7 @@ struct _GthCatalogPrivate {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthCatalog, gth_catalog, G_TYPE_OBJECT)
 
 
 static void
@@ -66,7 +66,7 @@ gth_catalog_finalize (GObject *object)
 		catalog->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_catalog_parent_class)->finalize (object);
 }
 
 
@@ -232,9 +232,7 @@ gth_catalog_class_init (GthCatalogClass *class)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	object_class = (GObjectClass*) class;
-
 	object_class->finalize = gth_catalog_finalize;
 
 	class->create_root = base_create_root;
@@ -253,34 +251,6 @@ gth_catalog_init (GthCatalog *catalog)
 }
 
 
-GType
-gth_catalog_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthCatalogClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_catalog_class_init,
-			NULL,
-			NULL,
-			sizeof (GthCatalog),
-			0,
-			(GInstanceInitFunc) gth_catalog_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthCatalog",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthCatalog *
 gth_catalog_new (void)
 {
diff --git a/extensions/catalogs/gth-file-source-catalogs.c b/extensions/catalogs/gth-file-source-catalogs.c
index 5155d7c..23fa95d 100644
--- a/extensions/catalogs/gth-file-source-catalogs.c
+++ b/extensions/catalogs/gth-file-source-catalogs.c
@@ -37,7 +37,7 @@ struct _GthFileSourceCatalogsPrivate
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthFileSourceCatalogs, gth_file_source_catalogs, GTH_TYPE_FILE_SOURCE)
 
 
 static GList *
@@ -1416,7 +1416,7 @@ gth_file_source_catalogs_finalize (GObject *object)
 		catalogs->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_file_source_catalogs_parent_class)->finalize (object);
 }
 
 
@@ -1426,11 +1426,10 @@ gth_file_source_catalogs_class_init (GthFileSourceCatalogsClass *class)
 	GObjectClass       *object_class;
 	GthFileSourceClass *file_source_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	object_class = (GObjectClass*) class;
-	file_source_class = (GthFileSourceClass*) class;
-
 	object_class->finalize = gth_file_source_catalogs_finalize;
+
+	file_source_class = (GthFileSourceClass*) class;
 	file_source_class->get_entry_points = get_entry_points;
 	file_source_class->to_gio_file = gth_file_source_catalogs_to_gio_file;
 	file_source_class->get_file_info = gth_file_source_catalogs_get_file_info;
@@ -1454,31 +1453,3 @@ gth_file_source_catalogs_init (GthFileSourceCatalogs *catalogs)
 	catalogs->priv = g_new0 (GthFileSourceCatalogsPrivate, 1);
 	catalogs->priv->catalog = gth_catalog_new ();
 }
-
-
-GType
-gth_file_source_catalogs_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthFileSourceCatalogsClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_file_source_catalogs_class_init,
-			NULL,
-			NULL,
-			sizeof (GthFileSourceCatalogs),
-			0,
-			(GInstanceInitFunc) gth_file_source_catalogs_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_FILE_SOURCE,
-					       "GthFileSourceCatalogs",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
diff --git a/extensions/catalogs/gth-organize-task.c b/extensions/catalogs/gth-organize-task.c
index 5ccfb45..06e2579 100644
--- a/extensions/catalogs/gth-organize-task.c
+++ b/extensions/catalogs/gth-organize-task.c
@@ -59,7 +59,7 @@ struct _GthOrganizeTaskPrivate
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthOrganizeTask, gth_organize_task, GTH_TYPE_TASK)
 
 
 static void
@@ -77,7 +77,7 @@ gth_organize_task_finalize (GObject *object)
 	g_object_unref (self->priv->icon_pixbuf);
 	g_object_unref (self->priv->filter);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_organize_task_parent_class)->finalize (object);
 }
 
 
@@ -628,7 +628,6 @@ gth_organize_task_class_init (GthOrganizeTaskClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthOrganizeTaskPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -837,34 +836,6 @@ gth_organize_task_init (GthOrganizeTask *self)
 }
 
 
-GType
-gth_organize_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthOrganizeTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_organize_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthOrganizeTask),
-			0,
-			(GInstanceInitFunc) gth_organize_task_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthOrganizeTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthTask *
 gth_organize_task_new (GthBrowser     *browser,
 		       GFile          *folder,
diff --git a/extensions/change_date/gth-change-date-task.c b/extensions/change_date/gth-change-date-task.c
index f569962..6cbdf50 100644
--- a/extensions/change_date/gth-change-date-task.c
+++ b/extensions/change_date/gth-change-date-task.c
@@ -37,7 +37,7 @@ struct _GthChangeDateTaskPrivate {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthChangeDateTask, gth_change_date_task, GTH_TYPE_TASK)
 
 
 static void
@@ -52,7 +52,7 @@ gth_change_date_task_finalize (GObject *object)
 	_g_object_list_unref (self->priv->files);
 	gth_datetime_free (self->priv->date_time);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_change_date_task_parent_class)->finalize (object);
 }
 
 
@@ -361,7 +361,6 @@ gth_change_date_task_class_init (GthChangeDateTaskClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthChangeDateTaskPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -380,34 +379,6 @@ gth_change_date_task_init (GthChangeDateTask *self)
 }
 
 
-GType
-gth_change_date_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthChangeDateTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_change_date_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthChangeDateTask),
-			0,
-			(GInstanceInitFunc) gth_change_date_task_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthChangeDateTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthTask *
 gth_change_date_task_new (GFile             *location,
 			  GList             *files, /* GthFileData */
diff --git a/extensions/comments/gth-comment.c b/extensions/comments/gth-comment.c
index 5f6a9eb..da0d8c9 100644
--- a/extensions/comments/gth-comment.c
+++ b/extensions/comments/gth-comment.c
@@ -26,7 +26,6 @@
 
 
 #define COMMENT_VERSION "3.0"
-#define GTH_COMMENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTH_TYPE_COMMENT, GthCommentPrivate))
 
 
 struct _GthCommentPrivate { /* All strings in utf8 format. */
@@ -41,7 +40,18 @@ struct _GthCommentPrivate { /* All strings in utf8 format. */
 	gboolean    utf8;
 };
 
-static gpointer gth_comment_parent_class = NULL;
+
+static void gth_comment_gth_duplicable_interface_init (GthDuplicableInterface *iface);
+static void gth_comment_dom_domizable_interface_init (DomDomizableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthComment,
+			 gth_comment,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (GTH_TYPE_DUPLICABLE,
+					 	gth_comment_gth_duplicable_interface_init)
+		         G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+		        		 	gth_comment_dom_domizable_interface_init))
 
 
 static void
@@ -82,17 +92,15 @@ gth_comment_finalize (GObject *obj)
 static void
 gth_comment_class_init (GthCommentClass *klass)
 {
-	gth_comment_parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthCommentPrivate));
-
 	G_OBJECT_CLASS (klass)->finalize = gth_comment_finalize;
 }
 
 
 static void
-gth_comment_instance_init (GthComment *self)
+gth_comment_init (GthComment *self)
 {
-	self->priv = GTH_COMMENT_GET_PRIVATE (self);
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_COMMENT, GthCommentPrivate);
 	self->priv->caption = NULL;
 	self->priv->note = NULL;
 	self->priv->place = NULL;
@@ -111,7 +119,7 @@ gth_comment_real_duplicate (GthDuplicable *base)
 
 
 static void
-gth_comment_gth_duplicable_interface_init (GthDuplicableIface *iface)
+gth_comment_gth_duplicable_interface_init (GthDuplicableInterface *iface)
 {
 	iface->duplicate = gth_comment_real_duplicate;
 }
@@ -233,43 +241,6 @@ gth_comment_dom_domizable_interface_init (DomDomizableInterface *iface)
 }
 
 
-GType
-gth_comment_get_type (void)
-{
-	static GType gth_comment_type_id = 0;
-
-	if (gth_comment_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthCommentClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_comment_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthComment),
-			0,
-			(GInstanceInitFunc) gth_comment_instance_init,
-			NULL
-		};
-		static const GInterfaceInfo gth_duplicable_info = {
-			(GInterfaceInitFunc) gth_comment_gth_duplicable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) gth_comment_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		gth_comment_type_id = g_type_register_static (G_TYPE_OBJECT, "GthComment", &g_define_type_info, 0);
-		g_type_add_interface_static (gth_comment_type_id, GTH_TYPE_DUPLICABLE, &gth_duplicable_info);
-		g_type_add_interface_static (gth_comment_type_id, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-	}
-
-	return gth_comment_type_id;
-}
-
-
 GthComment *
 gth_comment_new (void)
 {
diff --git a/extensions/comments/gth-metadata-provider-comment.c b/extensions/comments/gth-metadata-provider-comment.c
index d6aa343..e14b5fa 100644
--- a/extensions/comments/gth-metadata-provider-comment.c
+++ b/extensions/comments/gth-metadata-provider-comment.c
@@ -26,7 +26,7 @@
 #include "gth-metadata-provider-comment.h"
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthMetadataProviderComment, gth_metadata_provider_comment, GTH_TYPE_METADATA_PROVIDER)
 
 
 static gboolean
@@ -221,38 +221,17 @@ gth_metadata_provider_comment_write (GthMetadataProvider   *self,
 static void
 gth_metadata_provider_comment_class_init (GthMetadataProviderCommentClass *klass)
 {
-	parent_class = g_type_class_peek_parent (klass);
+	GthMetadataProviderClass *mp_class;
 
-	GTH_METADATA_PROVIDER_CLASS (klass)->can_read = gth_metadata_provider_comment_can_read;
-	GTH_METADATA_PROVIDER_CLASS (klass)->can_write = gth_metadata_provider_comment_can_write;
-	GTH_METADATA_PROVIDER_CLASS (klass)->read = gth_metadata_provider_comment_read;
-	GTH_METADATA_PROVIDER_CLASS (klass)->write = gth_metadata_provider_comment_write;
+	mp_class = GTH_METADATA_PROVIDER_CLASS (klass);
+	mp_class->can_read = gth_metadata_provider_comment_can_read;
+	mp_class->can_write = gth_metadata_provider_comment_can_write;
+	mp_class->read = gth_metadata_provider_comment_read;
+	mp_class->write = gth_metadata_provider_comment_write;
 }
 
-
-GType
-gth_metadata_provider_comment_get_type (void)
+static void
+gth_metadata_provider_comment_init (GthMetadataProviderComment *self)
 {
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthMetadataProviderCommentClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_metadata_provider_comment_class_init,
-			NULL,
-			NULL,
-			sizeof (GthMetadataProviderComment),
-			0,
-			(GInstanceInitFunc) NULL
-		};
-
-		type = g_type_register_static (GTH_TYPE_METADATA_PROVIDER,
-					       "GthMetadataProviderComment",
-					       &type_info,
-					       0);
-	}
-
-	return type;
+	/* void */
 }
diff --git a/extensions/contact_sheet/gth-contact-sheet-creator.c b/extensions/contact_sheet/gth-contact-sheet-creator.c
index 6946121..f0797ff 100644
--- a/extensions/contact_sheet/gth-contact-sheet-creator.c
+++ b/extensions/contact_sheet/gth-contact-sheet-creator.c
@@ -30,7 +30,8 @@
 #define DEFAULT_THUMB_SIZE 128
 #define DEFAULT_FONT "Sans 12"
 
-static GObjectClass *parent_class = NULL;
+
+G_DEFINE_TYPE (GthContactSheetCreator, gth_contact_sheet_creator, GTH_TYPE_TASK)
 
 
 typedef struct {
@@ -1048,7 +1049,7 @@ gth_contact_sheet_creator_finalize (GObject *object)
 	g_free (self->priv->header);
 	_g_object_list_unref (self->priv->gfile_list);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_contact_sheet_creator_parent_class)->finalize (object);
 }
 
 
@@ -1058,7 +1059,6 @@ gth_contact_sheet_creator_class_init (GthContactSheetCreatorClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthContactSheetCreatorPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -1107,34 +1107,6 @@ gth_contact_sheet_creator_init (GthContactSheetCreator *self)
 }
 
 
-GType
-gth_contact_sheet_creator_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthContactSheetCreatorClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_contact_sheet_creator_class_init,
-			NULL,
-			NULL,
-			sizeof (GthContactSheetCreator),
-			0,
-			(GInstanceInitFunc) gth_contact_sheet_creator_init
-                };
-
-                type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthContactSheetCreator",
-					       &type_info,
-					       0);
-        }
-
-	return type;
-}
-
-
 GthTask *
 gth_contact_sheet_creator_new (GthBrowser *browser,
 			       GList      *file_list)
diff --git a/extensions/contact_sheet/gth-contact-sheet-theme-dialog.c b/extensions/contact_sheet/gth-contact-sheet-theme-dialog.c
index c7be9e0..36287e5 100644
--- a/extensions/contact_sheet/gth-contact-sheet-theme-dialog.c
+++ b/extensions/contact_sheet/gth-contact-sheet-theme-dialog.c
@@ -26,7 +26,7 @@
 #define GET_WIDGET(x) (_gtk_builder_get_widget (self->priv->builder, (x)))
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthContactSheetThemeDialog, gth_contact_sheet_theme_dialog, GTK_TYPE_DIALOG)
 
 
 struct _GthContactSheetThemeDialogPrivate {
@@ -49,7 +49,7 @@ gth_contact_sheet_theme_dialog_finalize (GObject *object)
 	gth_contact_sheet_theme_unref (self->priv->theme);
 	gth_contact_sheet_theme_list_free (self->priv->all_themes);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_contact_sheet_theme_dialog_parent_class)->finalize (object);
 }
 
 
@@ -58,7 +58,6 @@ gth_contact_sheet_theme_dialog_class_init (GthContactSheetThemeDialogClass *klas
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthContactSheetThemeDialogPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -308,34 +307,6 @@ gth_contact_sheet_theme_dialog_init (GthContactSheetThemeDialog *self)
 }
 
 
-GType
-gth_contact_sheet_theme_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthContactSheetThemeDialogClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_contact_sheet_theme_dialog_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthContactSheetThemeDialog),
-			0,
-			(GInstanceInitFunc) gth_contact_sheet_theme_dialog_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "GthContactSheetThemeDialog",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthContactSheetTheme *
 _gth_contact_sheet_theme_new_default (void)
 {
diff --git a/extensions/edit_metadata/gth-delete-metadata-task.c b/extensions/edit_metadata/gth-delete-metadata-task.c
index 67e260f..6e02e81 100644
--- a/extensions/edit_metadata/gth-delete-metadata-task.c
+++ b/extensions/edit_metadata/gth-delete-metadata-task.c
@@ -31,7 +31,7 @@ struct _GthDeleteMetadataTaskPrivate {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthDeleteMetadataTask, gth_delete_metadata_task, GTH_TYPE_TASK)
 
 
 static void
@@ -44,7 +44,7 @@ gth_delete_metadata_task_finalize (GObject *object)
 	_g_object_unref (self->priv->file_data);
 	_g_object_list_unref (self->priv->file_list);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_delete_metadata_task_parent_class)->finalize (object);
 }
 
 
@@ -165,7 +165,6 @@ gth_delete_metadata_task_class_init (GthDeleteMetadataTaskClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthDeleteMetadataTaskPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -184,34 +183,6 @@ gth_delete_metadata_task_init (GthDeleteMetadataTask *self)
 }
 
 
-GType
-gth_delete_metadata_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthDeleteMetadataTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_delete_metadata_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthDeleteMetadataTask),
-			0,
-			(GInstanceInitFunc) gth_delete_metadata_task_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthDeleteMetadataTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthTask *
 gth_delete_metadata_task_new (GthBrowser *browser,
 			      GList      *file_list)
diff --git a/extensions/edit_metadata/gth-edit-comment-page.c b/extensions/edit_metadata/gth-edit-comment-page.c
index 90d4565..6019f93 100644
--- a/extensions/edit_metadata/gth-edit-comment-page.c
+++ b/extensions/edit_metadata/gth-edit-comment-page.c
@@ -41,9 +41,6 @@ typedef enum {
 } DateOption;
 
 
-static gpointer gth_edit_comment_page_parent_class = NULL;
-
-
 struct _GthEditCommentPagePrivate {
 	GFileInfo  *info;
 	GtkBuilder *builder;
@@ -54,6 +51,16 @@ struct _GthEditCommentPagePrivate {
 };
 
 
+static void gth_edit_comment_page_gth_edit_comment_page_interface_init (GthEditMetadataPageInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthEditCommentPage,
+			 gth_edit_comment_page,
+			 GTK_TYPE_VBOX,
+			 G_IMPLEMENT_INTERFACE (GTH_TYPE_EDIT_METADATA_PAGE,
+					 	gth_edit_comment_page_gth_edit_comment_page_interface_init))
+
+
 void
 gth_edit_comment_page_real_set_file_list (GthEditMetadataPage *base,
 		 			  GList               *file_list)
@@ -498,43 +505,9 @@ gth_edit_comment_page_init (GthEditCommentPage *self)
 
 
 static void
-gth_edit_comment_page_gth_edit_comment_page_interface_init (GthEditMetadataPageIface *iface)
+gth_edit_comment_page_gth_edit_comment_page_interface_init (GthEditMetadataPageInterface *iface)
 {
 	iface->set_file_list = gth_edit_comment_page_real_set_file_list;
 	iface->update_info = gth_edit_comment_page_real_update_info;
 	iface->get_name = gth_edit_comment_page_real_get_name;
 }
-
-
-GType
-gth_edit_comment_page_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthEditCommentPageClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_edit_comment_page_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthEditCommentPage),
-			0,
-			(GInstanceInitFunc) gth_edit_comment_page_init,
-			NULL
-		};
-		static const GInterfaceInfo gth_edit_comment_page_info = {
-			(GInterfaceInitFunc) gth_edit_comment_page_gth_edit_comment_page_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_VBOX,
-					       "GthEditCommentPage",
-					       &g_define_type_info,
-					       0);
-		g_type_add_interface_static (type, GTH_TYPE_EDIT_METADATA_PAGE, &gth_edit_comment_page_info);
-	}
-
-	return type;
-}
diff --git a/extensions/edit_metadata/gth-edit-metadata-dialog.c b/extensions/edit_metadata/gth-edit-metadata-dialog.c
index 2a45e0b..7291b21 100644
--- a/extensions/edit_metadata/gth-edit-metadata-dialog.c
+++ b/extensions/edit_metadata/gth-edit-metadata-dialog.c
@@ -24,10 +24,7 @@
 #include "gth-edit-metadata-dialog.h"
 
 
-#define GTH_EDIT_METADATA_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTH_TYPE_EDIT_METADATA_DIALOG, GthEditMetadataDialogPrivate))
-
-
-static gpointer gth_edit_metadata_dialog_parent_class = NULL;
+G_DEFINE_TYPE (GthEditMetadataDialog,  gth_edit_metadata_dialog, GTK_TYPE_DIALOG)
 
 
 struct _GthEditMetadataDialogPrivate {
@@ -39,53 +36,19 @@ struct _GthEditMetadataDialogPrivate {
 static void
 gth_edit_metadata_dialog_class_init (GthEditMetadataDialogClass *klass)
 {
-	gth_edit_metadata_dialog_parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthEditMetadataDialogPrivate));
 }
 
 
 static void
-gth_edit_metadata_dialog_init (GthEditMetadataDialog *edit_metadata_dialog)
-{
-	edit_metadata_dialog->priv = GTH_EDIT_METADATA_DIALOG_GET_PRIVATE (edit_metadata_dialog);
-}
-
-
-GType
-gth_edit_metadata_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthEditMetadataDialogClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_edit_metadata_dialog_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthEditMetadataDialog),
-			0,
-			(GInstanceInitFunc) gth_edit_metadata_dialog_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "GthEditMetadataDialog",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
-static void
-gth_edit_metadata_dialog_construct (GthEditMetadataDialog *self)
+gth_edit_metadata_dialog_init (GthEditMetadataDialog *self)
 {
 	GtkWidget *vbox;
 	GArray    *pages;
 	int        i;
 
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_EDIT_METADATA_DIALOG, GthEditMetadataDialogPrivate);
+
 	gtk_window_set_resizable (GTK_WINDOW (self), TRUE);
 	gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (self))), 5);
 	gtk_container_set_border_width (GTK_CONTAINER (self), 5);
@@ -132,12 +95,7 @@ gth_edit_metadata_dialog_construct (GthEditMetadataDialog *self)
 GtkWidget *
 gth_edit_metadata_dialog_new (void)
 {
-	GthEditMetadataDialog *self;
-
-	self = g_object_new (GTH_TYPE_EDIT_METADATA_DIALOG, NULL);
-	gth_edit_metadata_dialog_construct (self);
-
-	return (GtkWidget *) self;
+	return g_object_new (GTH_TYPE_EDIT_METADATA_DIALOG, NULL);
 }
 
 
@@ -204,25 +162,13 @@ gth_edit_metadata_dialog_update_info (GthEditMetadataDialog *dialog,
 /* -- gth_edit_metadata_dialog_page -- */
 
 
-GType
-gth_edit_metadata_page_get_type (void) {
-	static GType gth_edit_metadata_page_type_id = 0;
-	if (gth_edit_metadata_page_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthEditMetadataPageIface),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) NULL,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			0,
-			0,
-			(GInstanceInitFunc) NULL,
-			NULL
-		};
-		gth_edit_metadata_page_type_id = g_type_register_static (G_TYPE_INTERFACE, "GthEditMetadataPageIface", &g_define_type_info, 0);
-	}
-	return gth_edit_metadata_page_type_id;
+G_DEFINE_INTERFACE (GthEditMetadataPage, gth_edit_metadata_page, 0)
+
+
+static void
+gth_edit_metadata_page_default_init (GthEditMetadataPageInterface *iface)
+{
+	/* void */
 }
 
 
diff --git a/extensions/edit_metadata/gth-edit-metadata-dialog.h b/extensions/edit_metadata/gth-edit-metadata-dialog.h
index 1440ad9..9ae14eb 100644
--- a/extensions/edit_metadata/gth-edit-metadata-dialog.h
+++ b/extensions/edit_metadata/gth-edit-metadata-dialog.h
@@ -37,7 +37,7 @@ G_BEGIN_DECLS
 #define GTH_TYPE_EDIT_METADATA_PAGE               (gth_edit_metadata_page_get_type ())
 #define GTH_EDIT_METADATA_PAGE(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTH_TYPE_EDIT_METADATA_PAGE, GthEditMetadataPage))
 #define GTH_IS_EDIT_METADATA_PAGE(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTH_TYPE_EDIT_METADATA_PAGE))
-#define GTH_EDIT_METADATA_PAGE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTH_TYPE_EDIT_METADATA_PAGE, GthEditMetadataPageIface))
+#define GTH_EDIT_METADATA_PAGE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTH_TYPE_EDIT_METADATA_PAGE, GthEditMetadataPageInterface))
 
 typedef struct _GthEditMetadataDialog GthEditMetadataDialog;
 typedef struct _GthEditMetadataDialogClass GthEditMetadataDialogClass;
@@ -53,9 +53,9 @@ struct _GthEditMetadataDialogClass {
 };
 
 typedef struct _GthEditMetadataPage GthEditMetadataPage;
-typedef struct _GthEditMetadataPageIface GthEditMetadataPageIface;
+typedef struct _GthEditMetadataPageInterface GthEditMetadataPageInterface;
 
-struct _GthEditMetadataPageIface {
+struct _GthEditMetadataPageInterface {
 	GTypeInterface parent_iface;
 	void         (*set_file_list) (GthEditMetadataPage *self,
 				       GList               *file_list /* GthFileData list */);
diff --git a/extensions/edit_metadata/gth-tag-chooser-dialog.c b/extensions/edit_metadata/gth-tag-chooser-dialog.c
index ffb3687..5df2d31 100644
--- a/extensions/edit_metadata/gth-tag-chooser-dialog.c
+++ b/extensions/edit_metadata/gth-tag-chooser-dialog.c
@@ -33,14 +33,14 @@ enum {
 };
 
 
-static gpointer parent_class = NULL;
-
-
 struct _GthTagChooserDialogPrivate {
 	GtkBuilder *builder;
 };
 
 
+G_DEFINE_TYPE (GthTagChooserDialog, gth_tag_chooser_dialog, GTK_TYPE_DIALOG)
+
+
 static void
 gth_tag_chooser_dialog_finalize (GObject *object)
 {
@@ -50,7 +50,7 @@ gth_tag_chooser_dialog_finalize (GObject *object)
 
 	_g_object_unref (self->priv->builder);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_tag_chooser_dialog_parent_class)->finalize (object);
 }
 
 
@@ -59,7 +59,6 @@ gth_tag_chooser_dialog_class_init (GthTagChooserDialogClass *klass)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthTagChooserDialogPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -268,34 +267,6 @@ gth_tag_chooser_dialog_init (GthTagChooserDialog *self)
 }
 
 
-GType
-gth_tag_chooser_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthTagChooserDialogClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_tag_chooser_dialog_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthTagChooserDialog),
-			0,
-			(GInstanceInitFunc) gth_tag_chooser_dialog_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "GthTagChooserDialog",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GtkWidget *
 gth_tag_chooser_dialog_new (void)
 {
diff --git a/extensions/edit_metadata/gth-tag-task.c b/extensions/edit_metadata/gth-tag-task.c
index 4db9fce..62bf952 100644
--- a/extensions/edit_metadata/gth-tag-task.c
+++ b/extensions/edit_metadata/gth-tag-task.c
@@ -30,7 +30,7 @@ struct _GthTagTaskPrivate {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthTagTask, gth_tag_task, GTH_TYPE_TASK)
 
 
 static void
@@ -44,7 +44,7 @@ gth_tag_task_finalize (GObject *object)
 	_g_object_list_unref (self->priv->file_list);
 	_g_object_list_unref (self->priv->file_data_list);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_tag_task_parent_class)->finalize (object);
 }
 
 
@@ -145,7 +145,6 @@ gth_tag_task_class_init (GthTagTaskClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthTagTaskPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -165,34 +164,6 @@ gth_tag_task_init (GthTagTask *self)
 }
 
 
-GType
-gth_tag_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthTagTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_tag_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthTagTask),
-			0,
-			(GInstanceInitFunc) gth_tag_task_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthTagTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthTask *
 gth_tag_task_new (GList  *file_list,
 		  char  **tags)
diff --git a/extensions/exiv2_tools/gth-edit-exiv2-page.c b/extensions/exiv2_tools/gth-edit-exiv2-page.c
index a2e3f9a..d66ec9b 100644
--- a/extensions/exiv2_tools/gth-edit-exiv2-page.c
+++ b/extensions/exiv2_tools/gth-edit-exiv2-page.c
@@ -27,11 +27,17 @@
 #include "gth-edit-exiv2-page.h"
 
 
-#define GTH_EDIT_EXIV2_PAGE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTH_TYPE_EDIT_EXIV2_PAGE, GthEditExiv2PagePrivate))
 #define GET_WIDGET(name) _gtk_builder_get_widget (self->priv->builder, (name))
 
 
-static gpointer gth_edit_exiv2_page_parent_class = NULL;
+static void gth_edit_exiv2_page_gth_edit_exiv2_page_interface_init (GthEditMetadataPageInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthEditExiv2Page,
+			 gth_edit_exiv2_page,
+			 GTK_TYPE_VBOX,
+			 G_IMPLEMENT_INTERFACE (GTH_TYPE_EDIT_METADATA_PAGE,
+					        gth_edit_exiv2_page_gth_edit_exiv2_page_interface_init))
 
 
 struct _GthEditExiv2PagePrivate {
@@ -210,9 +216,7 @@ gth_edit_exiv2_page_finalize (GObject *object)
 static void
 gth_edit_exiv2_page_class_init (GthEditExiv2PageClass *klass)
 {
-	gth_edit_exiv2_page_parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthEditExiv2PagePrivate));
-
 	G_OBJECT_CLASS (klass)->finalize = gth_edit_exiv2_page_finalize;
 }
 
@@ -220,7 +224,7 @@ gth_edit_exiv2_page_class_init (GthEditExiv2PageClass *klass)
 static void
 gth_edit_exiv2_page_init (GthEditExiv2Page *self)
 {
-	self->priv = GTH_EDIT_EXIV2_PAGE_GET_PRIVATE (self);
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_EDIT_EXIV2_PAGE, GthEditExiv2PagePrivate);
 	self->priv->info = NULL;
 
 	gtk_container_set_border_width (GTK_CONTAINER (self), 12);
@@ -231,43 +235,9 @@ gth_edit_exiv2_page_init (GthEditExiv2Page *self)
 
 
 static void
-gth_edit_exiv2_page_gth_edit_exiv2_page_interface_init (GthEditMetadataPageIface *iface)
+gth_edit_exiv2_page_gth_edit_exiv2_page_interface_init (GthEditMetadataPageInterface *iface)
 {
 	iface->set_file_list = gth_edit_exiv2_page_real_set_file_list;
 	iface->update_info = gth_edit_exiv2_page_real_update_info;
 	iface->get_name = gth_edit_exiv2_page_real_get_name;
 }
-
-
-GType
-gth_edit_exiv2_page_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthEditExiv2PageClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_edit_exiv2_page_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthEditExiv2Page),
-			0,
-			(GInstanceInitFunc) gth_edit_exiv2_page_init,
-			NULL
-		};
-		static const GInterfaceInfo gth_edit_exiv2_page_info = {
-			(GInterfaceInitFunc) gth_edit_exiv2_page_gth_edit_exiv2_page_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_VBOX,
-					       "GthEditExiv2Page",
-					       &g_define_type_info,
-					       0);
-		g_type_add_interface_static (type, GTH_TYPE_EDIT_METADATA_PAGE, &gth_edit_exiv2_page_info);
-	}
-
-	return type;
-}
diff --git a/extensions/exiv2_tools/gth-metadata-provider-exiv2.c b/extensions/exiv2_tools/gth-metadata-provider-exiv2.c
index 99be2d9..d6fcb91 100644
--- a/extensions/exiv2_tools/gth-metadata-provider-exiv2.c
+++ b/extensions/exiv2_tools/gth-metadata-provider-exiv2.c
@@ -28,7 +28,7 @@
 #include "gth-metadata-provider-exiv2.h"
 
 
-static GthMetadataProviderClass *parent_class = NULL;
+G_DEFINE_TYPE (GthMetadataProviderExiv2, gth_metadata_provider_exiv2, GTH_TYPE_METADATA_PROVIDER)
 
 
 static gboolean
@@ -283,38 +283,18 @@ gth_metadata_provider_exiv2_write (GthMetadataProvider   *self,
 static void
 gth_metadata_provider_exiv2_class_init (GthMetadataProviderExiv2Class *klass)
 {
-	parent_class = g_type_class_peek_parent (klass);
+	GthMetadataProviderClass *mp_class;
 
-	GTH_METADATA_PROVIDER_CLASS (klass)->can_read = gth_metadata_provider_exiv2_can_read;
-	GTH_METADATA_PROVIDER_CLASS (klass)->can_write = gth_metadata_provider_exiv2_can_write;
-	GTH_METADATA_PROVIDER_CLASS (klass)->read = gth_metadata_provider_exiv2_read;
-	GTH_METADATA_PROVIDER_CLASS (klass)->write = gth_metadata_provider_exiv2_write;
+	mp_class = GTH_METADATA_PROVIDER_CLASS (klass);
+	mp_class->can_read = gth_metadata_provider_exiv2_can_read;
+	mp_class->can_write = gth_metadata_provider_exiv2_can_write;
+	mp_class->read = gth_metadata_provider_exiv2_read;
+	mp_class->write = gth_metadata_provider_exiv2_write;
 }
 
 
-GType
-gth_metadata_provider_exiv2_get_type (void)
+static void
+gth_metadata_provider_exiv2_init (GthMetadataProviderExiv2 *self)
 {
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthMetadataProviderExiv2Class),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_metadata_provider_exiv2_class_init,
-			NULL,
-			NULL,
-			sizeof (GthMetadataProviderExiv2),
-			0,
-			(GInstanceInitFunc) NULL
-		};
-
-		type = g_type_register_static (GTH_TYPE_METADATA_PROVIDER,
-					       "GthMetadataProviderExiv2",
-					       &type_info,
-					       0);
-	}
-
-	return type;
+	/* void */
 }
diff --git a/extensions/facebook/facebook-account-chooser-dialog.c b/extensions/facebook/facebook-account-chooser-dialog.c
index 8f98da9..8602075 100644
--- a/extensions/facebook/facebook-account-chooser-dialog.c
+++ b/extensions/facebook/facebook-account-chooser-dialog.c
@@ -34,14 +34,14 @@ enum {
 };
 
 
-static gpointer parent_class = NULL;
-
-
 struct _FacebookAccountChooserDialogPrivate {
 	GtkBuilder *builder;
 };
 
 
+G_DEFINE_TYPE (FacebookAccountChooserDialog, facebook_account_chooser_dialog, GTK_TYPE_DIALOG)
+
+
 static void
 facebook_account_chooser_dialog_finalize (GObject *object)
 {
@@ -51,7 +51,7 @@ facebook_account_chooser_dialog_finalize (GObject *object)
 
 	_g_object_unref (self->priv->builder);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (facebook_account_chooser_dialog_parent_class)->finalize (object);
 }
 
 
@@ -60,7 +60,6 @@ facebook_account_chooser_dialog_class_init (FacebookAccountChooserDialogClass *k
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (FacebookAccountChooserDialogPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -163,34 +162,6 @@ facebook_account_chooser_dialog_init (FacebookAccountChooserDialog *self)
 }
 
 
-GType
-facebook_account_chooser_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (FacebookAccountChooserDialogClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) facebook_account_chooser_dialog_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (FacebookAccountChooserDialog),
-			0,
-			(GInstanceInitFunc) facebook_account_chooser_dialog_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "FacebookAccountChooserDialog",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static void
 facebook_account_chooser_dialog_construct (FacebookAccountChooserDialog *self,
 				           GList                        *accounts,
diff --git a/extensions/facebook/facebook-account-manager-dialog.c b/extensions/facebook/facebook-account-manager-dialog.c
index da9ab59..c705b7e 100644
--- a/extensions/facebook/facebook-account-manager-dialog.c
+++ b/extensions/facebook/facebook-account-manager-dialog.c
@@ -34,14 +34,14 @@ enum {
 };
 
 
-static gpointer parent_class = NULL;
-
-
 struct _FacebookAccountManagerDialogPrivate {
 	GtkBuilder *builder;
 };
 
 
+G_DEFINE_TYPE (FacebookAccountManagerDialog, facebook_account_manager_dialog, GTK_TYPE_DIALOG)
+
+
 static void
 facebook_account_manager_dialog_finalize (GObject *object)
 {
@@ -51,7 +51,7 @@ facebook_account_manager_dialog_finalize (GObject *object)
 
 	_g_object_unref (self->priv->builder);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (facebook_account_manager_dialog_parent_class)->finalize (object);
 }
 
 
@@ -60,7 +60,6 @@ facebook_account_manager_dialog_class_init (FacebookAccountManagerDialogClass *k
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (FacebookAccountManagerDialogPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -160,34 +159,6 @@ facebook_account_manager_dialog_init (FacebookAccountManagerDialog *self)
 }
 
 
-GType
-facebook_account_manager_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (FacebookAccountManagerDialogClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) facebook_account_manager_dialog_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (FacebookAccountManagerDialog),
-			0,
-			(GInstanceInitFunc) facebook_account_manager_dialog_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "FacebookAccountManagerDialog",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static void
 facebook_account_manager_dialog_construct (FacebookAccountManagerDialog *self,
 				           GList                        *accounts)
diff --git a/extensions/facebook/facebook-account.c b/extensions/facebook/facebook-account.c
index 04fd391..50f9c57b 100644
--- a/extensions/facebook/facebook-account.c
+++ b/extensions/facebook/facebook-account.c
@@ -29,7 +29,14 @@
 #include "facebook-account.h"
 
 
-static gpointer facebook_account_parent_class = NULL;
+static void facebook_account_dom_domizable_interface_init (DomDomizableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (FacebookAccount,
+			 facebook_account,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+					        facebook_account_dom_domizable_interface_init))
 
 
 static void
@@ -51,7 +58,6 @@ facebook_account_finalize (GObject *obj)
 static void
 facebook_account_class_init (FacebookAccountClass *klass)
 {
-	facebook_account_parent_class = g_type_class_peek_parent (klass);
 	G_OBJECT_CLASS (klass)->finalize = facebook_account_finalize;
 }
 
@@ -118,7 +124,7 @@ facebook_account_dom_domizable_interface_init (DomDomizableInterface *iface)
 
 
 static void
-facebook_account_instance_init (FacebookAccount *self)
+facebook_account_init (FacebookAccount *self)
 {
 	self->user_id = NULL;
 	self->username = NULL;
@@ -128,41 +134,6 @@ facebook_account_instance_init (FacebookAccount *self)
 }
 
 
-GType
-facebook_account_get_type (void)
-{
-	static GType facebook_account_type_id = 0;
-
-	if (facebook_account_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (FacebookAccountClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) facebook_account_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (FacebookAccount),
-			0,
-			(GInstanceInitFunc) facebook_account_instance_init,
-			NULL
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) facebook_account_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		facebook_account_type_id = g_type_register_static (G_TYPE_OBJECT,
-								   "FacebookAccount",
-								   &g_define_type_info,
-								   0);
-		g_type_add_interface_static (facebook_account_type_id, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-	}
-
-	return facebook_account_type_id;
-}
-
-
 FacebookAccount *
 facebook_account_new (void)
 {
diff --git a/extensions/facebook/facebook-album-properties-dialog.c b/extensions/facebook/facebook-album-properties-dialog.c
index 29f0d19..6fadb1c 100644
--- a/extensions/facebook/facebook-album-properties-dialog.c
+++ b/extensions/facebook/facebook-album-properties-dialog.c
@@ -27,14 +27,14 @@
 #define GET_WIDGET(x) (_gtk_builder_get_widget (self->priv->builder, (x)))
 
 
-static gpointer parent_class = NULL;
-
-
 struct _FacebookAlbumPropertiesDialogPrivate {
 	GtkBuilder *builder;
 };
 
 
+G_DEFINE_TYPE (FacebookAlbumPropertiesDialog, facebook_album_properties_dialog, GTK_TYPE_DIALOG)
+
+
 static void
 facebook_album_properties_dialog_finalize (GObject *object)
 {
@@ -43,7 +43,7 @@ facebook_album_properties_dialog_finalize (GObject *object)
 	self = FACEBOOK_ALBUM_PROPERTIES_DIALOG (object);
 	_g_object_unref (self->priv->builder);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (facebook_album_properties_dialog_parent_class)->finalize (object);
 }
 
 
@@ -52,7 +52,6 @@ facebook_album_properties_dialog_class_init (FacebookAlbumPropertiesDialogClass
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (FacebookAlbumPropertiesDialogPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -84,34 +83,6 @@ facebook_album_properties_dialog_init (FacebookAlbumPropertiesDialog *self)
 }
 
 
-GType
-facebook_album_properties_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (FacebookAlbumPropertiesDialogClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) facebook_album_properties_dialog_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (FacebookAlbumPropertiesDialog),
-			0,
-			(GInstanceInitFunc) facebook_album_properties_dialog_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "FacebookAlbumPropertiesDialog",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static void
 facebook_album_properties_dialog_construct (FacebookAlbumPropertiesDialog *self,
 				            const char                    *name,
diff --git a/extensions/facebook/facebook-album.c b/extensions/facebook/facebook-album.c
index ebd5c9f..49659c3 100644
--- a/extensions/facebook/facebook-album.c
+++ b/extensions/facebook/facebook-album.c
@@ -26,7 +26,14 @@
 #include "facebook-album.h"
 
 
-static gpointer facebook_album_parent_class = NULL;
+static void facebook_album_dom_domizable_interface_init (DomDomizableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (FacebookAlbum,
+			 facebook_album,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+					        facebook_album_dom_domizable_interface_init))
 
 
 static void
@@ -49,7 +56,6 @@ facebook_album_finalize (GObject *obj)
 static void
 facebook_album_class_init (FacebookAlbumClass *klass)
 {
-	facebook_album_parent_class = g_type_class_peek_parent (klass);
 	G_OBJECT_CLASS (klass)->finalize = facebook_album_finalize;
 }
 
@@ -149,7 +155,7 @@ facebook_album_dom_domizable_interface_init (DomDomizableInterface *iface)
 
 
 static void
-facebook_album_instance_init (FacebookAlbum *self)
+facebook_album_init (FacebookAlbum *self)
 {
 	self->id = NULL;
 	self->name = NULL;
@@ -161,41 +167,6 @@ facebook_album_instance_init (FacebookAlbum *self)
 }
 
 
-GType
-facebook_album_get_type (void)
-{
-	static GType facebook_album_type_id = 0;
-
-	if (facebook_album_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (FacebookAlbumClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) facebook_album_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (FacebookAlbum),
-			0,
-			(GInstanceInitFunc) facebook_album_instance_init,
-			NULL
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) facebook_album_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		facebook_album_type_id = g_type_register_static (G_TYPE_OBJECT,
-								 "FacebookAlbum",
-								 &g_define_type_info,
-								 0);
-		g_type_add_interface_static (facebook_album_type_id, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-	}
-
-	return facebook_album_type_id;
-}
-
-
 FacebookAlbum *
 facebook_album_new (void)
 {
diff --git a/extensions/facebook/facebook-authentication.c b/extensions/facebook/facebook-authentication.c
index 72ec7e1..c75fe67 100644
--- a/extensions/facebook/facebook-authentication.c
+++ b/extensions/facebook/facebook-authentication.c
@@ -54,10 +54,12 @@ struct _FacebookAuthenticationPrivate
 };
 
 
-static GObjectClass *parent_class = NULL;
 static guint facebook_authentication_signals[LAST_SIGNAL] = { 0 };
 
 
+G_DEFINE_TYPE (FacebookAuthentication, facebook_authentication, G_TYPE_OBJECT)
+
+
 static void
 facebook_authentication_finalize (GObject *object)
 {
@@ -70,7 +72,7 @@ facebook_authentication_finalize (GObject *object)
 	_g_object_list_unref (self->priv->accounts);
 	_g_object_unref (self->priv->account);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (facebook_authentication_parent_class)->finalize (object);
 }
 
 
@@ -79,7 +81,6 @@ facebook_authentication_class_init (FacebookAuthenticationClass *class)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (FacebookAuthenticationPrivate));
 
 	object_class = (GObjectClass*) class;
@@ -119,34 +120,6 @@ facebook_authentication_init (FacebookAuthentication *self)
 }
 
 
-GType
-facebook_authentication_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) facebook_authentication_class_init,
-			NULL,
-			NULL,
-			sizeof (GthTask),
-			0,
-			(GInstanceInitFunc) facebook_authentication_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "FacebookAuthentication",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 FacebookAuthentication *
 facebook_authentication_new (FacebookConnection *conn,
 			     FacebookService    *service,
diff --git a/extensions/facebook/facebook-connection.c b/extensions/facebook/facebook-connection.c
index fbc005a..12ae105 100644
--- a/extensions/facebook/facebook-connection.c
+++ b/extensions/facebook/facebook-connection.c
@@ -63,7 +63,7 @@ struct _FacebookConnectionPrivate
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (FacebookConnection, facebook_connection, GTH_TYPE_TASK)
 
 
 static void
@@ -83,7 +83,7 @@ facebook_connection_finalize (GObject *object)
 	g_free (self->priv->token);
 	_g_object_unref (self->priv->session);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (facebook_connection_parent_class)->finalize (object);
 }
 
 
@@ -112,7 +112,6 @@ facebook_connection_class_init (FacebookConnectionClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (FacebookConnectionPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -141,34 +140,6 @@ facebook_connection_init (FacebookConnection *self)
 }
 
 
-GType
-facebook_connection_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (FacebookConnectionClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) facebook_connection_class_init,
-			NULL,
-			NULL,
-			sizeof (FacebookConnection),
-			0,
-			(GInstanceInitFunc) facebook_connection_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "FacebookConnection",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 FacebookConnection *
 facebook_connection_new (void)
 {
diff --git a/extensions/facebook/facebook-photo.c b/extensions/facebook/facebook-photo.c
index 94a91be..052739d 100644
--- a/extensions/facebook/facebook-photo.c
+++ b/extensions/facebook/facebook-photo.c
@@ -26,7 +26,14 @@
 #include "facebook-photo.h"
 
 
-static gpointer facebook_photo_parent_class = NULL;
+static void facebook_photo_dom_domizable_interface_init (DomDomizableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (FacebookPhoto,
+			 facebook_photo,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+					        facebook_photo_dom_domizable_interface_init))
 
 
 static void
@@ -48,7 +55,6 @@ facebook_photo_finalize (GObject *obj)
 static void
 facebook_photo_class_init (FacebookPhotoClass *klass)
 {
-	facebook_photo_parent_class = g_type_class_peek_parent (klass);
 	G_OBJECT_CLASS (klass)->finalize = facebook_photo_finalize;
 }
 
@@ -111,43 +117,9 @@ facebook_photo_dom_domizable_interface_init (DomDomizableInterface *iface)
 
 
 static void
-facebook_photo_instance_init (FacebookPhoto *self)
-{
-}
-
-
-GType
-facebook_photo_get_type (void)
-{
-	static GType facebook_photo_type_id = 0;
-
-	if (facebook_photo_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (FacebookPhotoClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) facebook_photo_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (FacebookPhoto),
-			0,
-			(GInstanceInitFunc) facebook_photo_instance_init,
-			NULL
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) facebook_photo_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		facebook_photo_type_id = g_type_register_static (G_TYPE_OBJECT,
-								  "FacebookPhoto",
-								  &g_define_type_info,
-								  0);
-		g_type_add_interface_static (facebook_photo_type_id, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-	}
-
-	return facebook_photo_type_id;
+facebook_photo_init (FacebookPhoto *self)
+{
+	/* void */
 }
 
 
diff --git a/extensions/facebook/facebook-service.c b/extensions/facebook/facebook-service.c
index bb7f42b..ccdaffd 100644
--- a/extensions/facebook/facebook-service.c
+++ b/extensions/facebook/facebook-service.c
@@ -71,7 +71,7 @@ struct _FacebookServicePrivate
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (FacebookService, facebook_service, G_TYPE_OBJECT)
 
 
 static void
@@ -85,7 +85,7 @@ facebook_service_finalize (GObject *object)
 	_g_object_unref (self->priv->user);
 	post_photos_data_free (self->priv->post_photos);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (facebook_service_parent_class)->finalize (object);
 }
 
 
@@ -94,7 +94,6 @@ facebook_service_class_init (FacebookServiceClass *klass)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (FacebookServicePrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -112,34 +111,6 @@ facebook_service_init (FacebookService *self)
 }
 
 
-GType
-facebook_service_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (FacebookServiceClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) facebook_service_class_init,
-			NULL,
-			NULL,
-			sizeof (FacebookService),
-			0,
-			(GInstanceInitFunc) facebook_service_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "FacebookService",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 FacebookService *
 facebook_service_new (FacebookConnection *conn)
 {
diff --git a/extensions/facebook/facebook-user.c b/extensions/facebook/facebook-user.c
index 1c58a59..89aa683 100644
--- a/extensions/facebook/facebook-user.c
+++ b/extensions/facebook/facebook-user.c
@@ -26,7 +26,14 @@
 #include "facebook-user.h"
 
 
-static gpointer facebook_user_parent_class = NULL;
+static void facebook_user_dom_domizable_interface_init (DomDomizableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (FacebookUser,
+			 facebook_user,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+					        facebook_user_dom_domizable_interface_init))
 
 
 static void
@@ -99,48 +106,13 @@ facebook_user_dom_domizable_interface_init (DomDomizableInterface *iface)
 
 
 static void
-facebook_user_instance_init (FacebookUser *self)
+facebook_user_init (FacebookUser *self)
 {
 	self->id = NULL;
 	self->username = NULL;
 }
 
 
-GType
-facebook_user_get_type (void)
-{
-	static GType facebook_user_type_id = 0;
-
-	if (facebook_user_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (FacebookUserClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) facebook_user_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (FacebookUser),
-			0,
-			(GInstanceInitFunc) facebook_user_instance_init,
-			NULL
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) facebook_user_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		facebook_user_type_id = g_type_register_static (G_TYPE_OBJECT,
-								"FacebookUser",
-								&g_define_type_info,
-								0);
-		g_type_add_interface_static (facebook_user_type_id, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-	}
-
-	return facebook_user_type_id;
-}
-
-
 FacebookUser *
 facebook_user_new (void)
 {
diff --git a/extensions/file_manager/gth-copy-task.c b/extensions/file_manager/gth-copy-task.c
index 257496f..5efacd9 100644
--- a/extensions/file_manager/gth-copy-task.c
+++ b/extensions/file_manager/gth-copy-task.c
@@ -32,7 +32,7 @@ struct _GthCopyTaskPrivate {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthCopyTask, gth_copy_task, GTH_TYPE_TASK)
 
 
 static void
@@ -46,7 +46,7 @@ gth_copy_task_finalize (GObject *object)
 	_g_object_unref (self->priv->file_source);
 	_g_object_unref (self->priv->destination);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_copy_task_parent_class)->finalize (object);
 }
 
 
@@ -118,7 +118,6 @@ gth_copy_task_class_init (GthCopyTaskClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthCopyTaskPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -136,34 +135,6 @@ gth_copy_task_init (GthCopyTask *self)
 }
 
 
-GType
-gth_copy_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthCopyTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_copy_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthCopyTask),
-			0,
-			(GInstanceInitFunc) gth_copy_task_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthCopyTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthTask *
 gth_copy_task_new (GthFileSource *file_source,
 		   GthFileData   *destination,
diff --git a/extensions/file_manager/gth-delete-task.c b/extensions/file_manager/gth-delete-task.c
index f3471d4..459ea49 100644
--- a/extensions/file_manager/gth-delete-task.c
+++ b/extensions/file_manager/gth-delete-task.c
@@ -28,7 +28,7 @@ struct _GthDeleteTaskPrivate {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthDeleteTask, gth_delete_task, GTH_TYPE_TASK)
 
 
 static void
@@ -40,7 +40,7 @@ gth_delete_task_finalize (GObject *object)
 
 	_g_object_list_unref (self->priv->file_list);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_delete_task_parent_class)->finalize (object);
 }
 
 
@@ -76,7 +76,6 @@ gth_delete_task_class_init (GthDeleteTaskClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthDeleteTaskPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -94,34 +93,6 @@ gth_delete_task_init (GthDeleteTask *self)
 }
 
 
-GType
-gth_delete_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthDeleteTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_delete_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthDeleteTask),
-			0,
-			(GInstanceInitFunc) gth_delete_task_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthDeleteTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthTask *
 gth_delete_task_new (GList *file_list)
 {
diff --git a/extensions/file_manager/gth-duplicate-task.c b/extensions/file_manager/gth-duplicate-task.c
index d219a2b..76c2a13 100644
--- a/extensions/file_manager/gth-duplicate-task.c
+++ b/extensions/file_manager/gth-duplicate-task.c
@@ -30,7 +30,7 @@ struct _GthDuplicateTaskPrivate {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthDuplicateTask, gth_duplicate_task, GTH_TYPE_TASK)
 
 
 static void
@@ -43,7 +43,7 @@ gth_duplicate_task_finalize (GObject *object)
 	_g_object_list_unref (self->priv->file_list);
 	_g_object_unref (self->priv->destination);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_duplicate_task_parent_class)->finalize (object);
 }
 
 
@@ -56,6 +56,7 @@ copy_progress_cb (GObject    *object,
 		  gpointer    user_data)
 {
 	GthDuplicateTask *self = user_data;
+
 	gth_task_progress (GTH_TASK (self), description, details, pulse, fraction);
 }
 
@@ -153,7 +154,6 @@ gth_duplicate_task_class_init (GthDuplicateTaskClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthDuplicateTaskPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -172,34 +172,6 @@ gth_duplicate_task_init (GthDuplicateTask *self)
 }
 
 
-GType
-gth_duplicate_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthDuplicateTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_duplicate_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthDuplicateTask),
-			0,
-			(GInstanceInitFunc) gth_duplicate_task_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthDuplicateTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthTask *
 gth_duplicate_task_new (GList *file_list)
 {
diff --git a/extensions/file_manager/gth-reorder-task.c b/extensions/file_manager/gth-reorder-task.c
index 75d1cba..d760bc3 100644
--- a/extensions/file_manager/gth-reorder-task.c
+++ b/extensions/file_manager/gth-reorder-task.c
@@ -32,7 +32,7 @@ struct _GthReorderTaskPrivate {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthReorderTask, gth_reorder_task, GTH_TYPE_TASK)
 
 
 static void
@@ -47,7 +47,7 @@ gth_reorder_task_finalize (GObject *object)
 	_g_object_unref (self->priv->destination);
 	_g_object_unref (self->priv->file_source);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_reorder_task_parent_class)->finalize (object);
 }
 
 
@@ -92,7 +92,6 @@ gth_reorder_task_class_init (GthReorderTaskClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthReorderTaskPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -111,34 +110,6 @@ gth_reorder_task_init (GthReorderTask *self)
 }
 
 
-GType
-gth_reorder_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthReorderTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_reorder_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthReorderTask),
-			0,
-			(GInstanceInitFunc) gth_reorder_task_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthReorderTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthTask *
 gth_reorder_task_new (GthFileSource *file_source,
 		      GthFileData   *destination,
diff --git a/extensions/file_tools/gth-file-tool-adjust-colors.c b/extensions/file_tools/gth-file-tool-adjust-colors.c
index 742cfed..664b16f 100644
--- a/extensions/file_tools/gth-file-tool-adjust-colors.c
+++ b/extensions/file_tools/gth-file-tool-adjust-colors.c
@@ -30,7 +30,7 @@
 #define APPLY_DELAY 150
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthFileToolAdjustColors, gth_file_tool_adjust_colors, GTH_TYPE_FILE_TOOL)
 
 
 struct _GthFileToolAdjustColorsPrivate {
@@ -519,7 +519,7 @@ gth_file_tool_adjust_colors_activate (GthFileTool *base)
 
 
 static void
-gth_file_tool_adjust_colors_instance_init (GthFileToolAdjustColors *self)
+gth_file_tool_adjust_colors_init (GthFileToolAdjustColors *self)
 {
 	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_FILE_TOOL_ADJUST_COLORS, GthFileToolAdjustColorsPrivate);
 	self->priv->histogram = gth_histogram_new ();
@@ -544,8 +544,7 @@ gth_file_tool_adjust_colors_finalize (GObject *object)
 	_g_object_unref (self->priv->builder);
 	_g_object_unref (self->priv->histogram);
 
-	/* Chain up */
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_file_tool_adjust_colors_parent_class)->finalize (object);
 }
 
 
@@ -555,7 +554,6 @@ gth_file_tool_adjust_colors_class_init (GthFileToolAdjustColorsClass *class)
 	GObjectClass     *gobject_class;
 	GthFileToolClass *file_tool_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (GthFileToolAdjustColorsPrivate));
 
 	gobject_class = (GObjectClass*) class;
@@ -567,25 +565,3 @@ gth_file_tool_adjust_colors_class_init (GthFileToolAdjustColorsClass *class)
 	file_tool_class->get_options = gth_file_tool_adjust_colors_get_options;
 	file_tool_class->destroy_options = gth_file_tool_adjust_colors_destroy_options;
 }
-
-
-GType
-gth_file_tool_adjust_colors_get_type (void) {
-	static GType type_id = 0;
-	if (type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileToolAdjustColorsClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_tool_adjust_colors_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileToolAdjustColors),
-			0,
-			(GInstanceInitFunc) gth_file_tool_adjust_colors_instance_init,
-			NULL
-		};
-		type_id = g_type_register_static (GTH_TYPE_FILE_TOOL, "GthFileToolAdjustColors", &g_define_type_info, 0);
-	}
-	return type_id;
-}
diff --git a/extensions/file_tools/gth-file-tool-crop.c b/extensions/file_tools/gth-file-tool-crop.c
index abc30e6..78e05c6 100644
--- a/extensions/file_tools/gth-file-tool-crop.c
+++ b/extensions/file_tools/gth-file-tool-crop.c
@@ -30,7 +30,7 @@
 #define GET_WIDGET(x) (_gtk_builder_get_widget (self->priv->builder, (x)))
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthFileToolCrop, gth_file_tool_crop, GTH_TYPE_FILE_TOOL)
 
 
 struct _GthFileToolCropPrivate {
@@ -589,7 +589,7 @@ gth_file_tool_crop_activate (GthFileTool *base)
 
 
 static void
-gth_file_tool_crop_instance_init (GthFileToolCrop *self)
+gth_file_tool_crop_init (GthFileToolCrop *self)
 {
 	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_FILE_TOOL_CROP, GthFileToolCropPrivate);
 	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-crop", _("Crop..."), _("Crop"), FALSE);
@@ -610,7 +610,7 @@ gth_file_tool_crop_finalize (GObject *object)
 	_g_object_unref (self->priv->builder);
 
 	/* Chain up */
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_file_tool_crop_parent_class)->finalize (object);
 }
 
 
@@ -620,7 +620,6 @@ gth_file_tool_crop_class_init (GthFileToolCropClass *class)
 	GObjectClass     *gobject_class;
 	GthFileToolClass *file_tool_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (GthFileToolCropPrivate));
 
 	gobject_class = (GObjectClass*) class;
@@ -632,25 +631,3 @@ gth_file_tool_crop_class_init (GthFileToolCropClass *class)
 	file_tool_class->get_options = gth_file_tool_crop_get_options;
 	file_tool_class->destroy_options = gth_file_tool_crop_destroy_options;
 }
-
-
-GType
-gth_file_tool_crop_get_type (void) {
-	static GType type_id = 0;
-	if (type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileToolCropClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_tool_crop_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileToolCrop),
-			0,
-			(GInstanceInitFunc) gth_file_tool_crop_instance_init,
-			NULL
-		};
-		type_id = g_type_register_static (GTH_TYPE_FILE_TOOL, "GthFileToolCrop", &g_define_type_info, 0);
-	}
-	return type_id;
-}
diff --git a/extensions/file_tools/gth-file-tool-desaturate.c b/extensions/file_tools/gth-file-tool-desaturate.c
index 772abb5..3e719ed 100644
--- a/extensions/file_tools/gth-file-tool-desaturate.c
+++ b/extensions/file_tools/gth-file-tool-desaturate.c
@@ -25,6 +25,9 @@
 #include "gth-file-tool-desaturate.h"
 
 
+G_DEFINE_TYPE (GthFileToolDesaturate, gth_file_tool_desaturate, GTH_TYPE_FILE_TOOL)
+
+
 typedef struct {
 	GtkWidget       *viewer_page;
 	cairo_surface_t *source;
@@ -184,37 +187,18 @@ gth_file_tool_desaturate_activate (GthFileTool *base)
 
 
 static void
-gth_file_tool_desaturate_instance_init (GthFileToolDesaturate *self)
+gth_file_tool_desaturate_class_init (GthFileToolDesaturateClass *klass)
 {
-	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-desaturate", _("Desaturate"), _("Desaturate"), FALSE);
+	GthFileToolClass *file_tool_class;
+
+	file_tool_class = GTH_FILE_TOOL_CLASS (klass);
+	file_tool_class->update_sensitivity = gth_file_tool_desaturate_update_sensitivity;
+	file_tool_class->activate = gth_file_tool_desaturate_activate;
 }
 
 
 static void
-gth_file_tool_desaturate_class_init (GthFileToolClass *klass)
+gth_file_tool_desaturate_init (GthFileToolDesaturate *self)
 {
-	klass->update_sensitivity = gth_file_tool_desaturate_update_sensitivity;
-	klass->activate = gth_file_tool_desaturate_activate;
-}
-
-
-GType
-gth_file_tool_desaturate_get_type (void) {
-	static GType type_id = 0;
-	if (type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileToolDesaturateClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_tool_desaturate_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileToolDesaturate),
-			0,
-			(GInstanceInitFunc) gth_file_tool_desaturate_instance_init,
-			NULL
-		};
-		type_id = g_type_register_static (GTH_TYPE_FILE_TOOL, "GthFileToolDesaturate", &g_define_type_info, 0);
-	}
-	return type_id;
+	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-desaturate", _("Desaturate"), _("Desaturate"), FALSE);
 }
diff --git a/extensions/file_tools/gth-file-tool-enhance.c b/extensions/file_tools/gth-file-tool-enhance.c
index f872e15..34a6dd2 100644
--- a/extensions/file_tools/gth-file-tool-enhance.c
+++ b/extensions/file_tools/gth-file-tool-enhance.c
@@ -26,6 +26,9 @@
 #include "gth-file-tool-enhance.h"
 
 
+G_DEFINE_TYPE (GthFileToolEnhance, gth_file_tool_enhance, GTH_TYPE_FILE_TOOL)
+
+
 typedef struct {
 	double gamma[GTH_HISTOGRAM_N_CHANNELS];
 	double low_input[GTH_HISTOGRAM_N_CHANNELS];
@@ -334,7 +337,7 @@ gth_file_tool_enhance_update_sensitivity (GthFileTool *base)
 
 
 static void
-gth_file_tool_enhance_instance_init (GthFileToolEnhance *self)
+gth_file_tool_enhance_init (GthFileToolEnhance *self)
 {
 	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-enhance", _("Enhance Colors"), NULL, TRUE);
 	gtk_widget_set_tooltip_text (GTK_WIDGET (self), _("Automatic white balance correction"));
@@ -342,30 +345,11 @@ gth_file_tool_enhance_instance_init (GthFileToolEnhance *self)
 
 
 static void
-gth_file_tool_enhance_class_init (GthFileToolClass *klass)
+gth_file_tool_enhance_class_init (GthFileToolEnhanceClass *klass)
 {
-	klass->update_sensitivity = gth_file_tool_enhance_update_sensitivity;
-	klass->activate = gth_file_tool_enhance_activate;
-}
+	GthFileToolClass *file_tool_class;
 
-
-GType
-gth_file_tool_enhance_get_type (void) {
-	static GType type_id = 0;
-	if (type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileToolEnhanceClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_tool_enhance_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileToolEnhance),
-			0,
-			(GInstanceInitFunc) gth_file_tool_enhance_instance_init,
-			NULL
-		};
-		type_id = g_type_register_static (GTH_TYPE_FILE_TOOL, "GthFileToolEnhance", &g_define_type_info, 0);
-	}
-	return type_id;
+	file_tool_class = GTH_FILE_TOOL_CLASS (klass);
+	file_tool_class->update_sensitivity = gth_file_tool_enhance_update_sensitivity;
+	file_tool_class->activate = gth_file_tool_enhance_activate;
 }
diff --git a/extensions/file_tools/gth-file-tool-equalize.c b/extensions/file_tools/gth-file-tool-equalize.c
index 9a77612..22adda9 100644
--- a/extensions/file_tools/gth-file-tool-equalize.c
+++ b/extensions/file_tools/gth-file-tool-equalize.c
@@ -26,6 +26,9 @@
 #include "gth-file-tool-equalize.h"
 
 
+G_DEFINE_TYPE (GthFileToolEqualize, gth_file_tool_equalize, GTH_TYPE_FILE_TOOL)
+
+
 typedef struct {
 	GtkWidget        *viewer_page;
 	cairo_surface_t  *source;
@@ -256,38 +259,19 @@ gth_file_tool_equalize_update_sensitivity (GthFileTool *base)
 
 
 static void
-gth_file_tool_equalize_instance_init (GthFileToolEqualize *self)
+gth_file_tool_equalize_class_init (GthFileToolEqualizeClass *klass)
 {
-	gth_file_tool_construct (GTH_FILE_TOOL (self), "histogram", _("Equalize"), NULL, FALSE);
-	gtk_widget_set_tooltip_text (GTK_WIDGET (self), _("Equalize image histogram"));
+	GthFileToolClass *file_tool_class;
+
+	file_tool_class = GTH_FILE_TOOL_CLASS (klass);
+	file_tool_class->update_sensitivity = gth_file_tool_equalize_update_sensitivity;
+	file_tool_class->activate = gth_file_tool_equalize_activate;
 }
 
 
 static void
-gth_file_tool_equalize_class_init (GthFileToolClass *klass)
+gth_file_tool_equalize_init (GthFileToolEqualize *self)
 {
-	klass->update_sensitivity = gth_file_tool_equalize_update_sensitivity;
-	klass->activate = gth_file_tool_equalize_activate;
-}
-
-
-GType
-gth_file_tool_equalize_get_type (void) {
-	static GType type_id = 0;
-	if (type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileToolEqualizeClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_tool_equalize_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileToolEqualize),
-			0,
-			(GInstanceInitFunc) gth_file_tool_equalize_instance_init,
-			NULL
-		};
-		type_id = g_type_register_static (GTH_TYPE_FILE_TOOL, "GthFileToolEqualize", &g_define_type_info, 0);
-	}
-	return type_id;
+	gth_file_tool_construct (GTH_FILE_TOOL (self), "histogram", _("Equalize"), NULL, FALSE);
+	gtk_widget_set_tooltip_text (GTK_WIDGET (self), _("Equalize image histogram"));
 }
diff --git a/extensions/file_tools/gth-file-tool-flip.c b/extensions/file_tools/gth-file-tool-flip.c
index 6385bb2..c4b8ab7 100644
--- a/extensions/file_tools/gth-file-tool-flip.c
+++ b/extensions/file_tools/gth-file-tool-flip.c
@@ -26,6 +26,9 @@
 #include "gth-file-tool-flip.h"
 
 
+G_DEFINE_TYPE (GthFileToolFlip, gth_file_tool_flip, GTH_TYPE_FILE_TOOL)
+
+
 static void
 gth_file_tool_flip_activate (GthFileTool *base)
 {
@@ -68,38 +71,19 @@ gth_file_tool_flip_update_sensitivity (GthFileTool *base)
 
 
 static void
-gth_file_tool_flip_instance_init (GthFileToolFlip *self)
+gth_file_tool_flip_class_init (GthFileToolFlipClass *klass)
 {
-	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-flip", _("Flip"), NULL, FALSE);
-	gtk_widget_set_tooltip_text (GTK_WIDGET (self), _("Flip the image vertically"));
+	GthFileToolClass *file_tool_class;
+
+	file_tool_class = GTH_FILE_TOOL_CLASS (klass);
+	file_tool_class->update_sensitivity = gth_file_tool_flip_update_sensitivity;
+	file_tool_class->activate = gth_file_tool_flip_activate;
 }
 
 
 static void
-gth_file_tool_flip_class_init (GthFileToolClass *klass)
+gth_file_tool_flip_init (GthFileToolFlip *self)
 {
-	klass->update_sensitivity = gth_file_tool_flip_update_sensitivity;
-	klass->activate = gth_file_tool_flip_activate;
-}
-
-
-GType
-gth_file_tool_flip_get_type (void) {
-	static GType type_id = 0;
-	if (type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileToolFlipClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_tool_flip_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileToolFlip),
-			0,
-			(GInstanceInitFunc) gth_file_tool_flip_instance_init,
-			NULL
-		};
-		type_id = g_type_register_static (GTH_TYPE_FILE_TOOL, "GthFileToolFlip", &g_define_type_info, 0);
-	}
-	return type_id;
+	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-flip", _("Flip"), NULL, FALSE);
+	gtk_widget_set_tooltip_text (GTK_WIDGET (self), _("Flip the image vertically"));
 }
diff --git a/extensions/file_tools/gth-file-tool-mirror.c b/extensions/file_tools/gth-file-tool-mirror.c
index c34abec..de50a0e 100644
--- a/extensions/file_tools/gth-file-tool-mirror.c
+++ b/extensions/file_tools/gth-file-tool-mirror.c
@@ -26,6 +26,9 @@
 #include "gth-file-tool-mirror.h"
 
 
+G_DEFINE_TYPE (GthFileToolMirror, gth_file_tool_mirror, GTH_TYPE_FILE_TOOL)
+
+
 static void
 gth_file_tool_mirror_activate (GthFileTool *base)
 {
@@ -68,38 +71,19 @@ gth_file_tool_mirror_update_sensitivity (GthFileTool *base)
 
 
 static void
-gth_file_tool_mirror_instance_init (GthFileToolMirror *self)
+gth_file_tool_mirror_class_init (GthFileToolMirrorClass *klass)
 {
-	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-mirror", _("Mirror"), NULL, FALSE);
-	gtk_widget_set_tooltip_text (GTK_WIDGET (self), _("Mirror the image horizontally"));
+	GthFileToolClass *file_tool_class;
+
+	file_tool_class = GTH_FILE_TOOL_CLASS (klass);
+	file_tool_class->update_sensitivity = gth_file_tool_mirror_update_sensitivity;
+	file_tool_class->activate = gth_file_tool_mirror_activate;
 }
 
 
 static void
-gth_file_tool_mirror_class_init (GthFileToolClass *klass)
+gth_file_tool_mirror_init (GthFileToolMirror *self)
 {
-	klass->update_sensitivity = gth_file_tool_mirror_update_sensitivity;
-	klass->activate = gth_file_tool_mirror_activate;
-}
-
-
-GType
-gth_file_tool_mirror_get_type (void) {
-	static GType type_id = 0;
-	if (type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileToolMirrorClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_tool_mirror_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileToolMirror),
-			0,
-			(GInstanceInitFunc) gth_file_tool_mirror_instance_init,
-			NULL
-		};
-		type_id = g_type_register_static (GTH_TYPE_FILE_TOOL, "GthFileToolMirror", &g_define_type_info, 0);
-	}
-	return type_id;
+	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-mirror", _("Mirror"), NULL, FALSE);
+	gtk_widget_set_tooltip_text (GTK_WIDGET (self), _("Mirror the image horizontally"));
 }
diff --git a/extensions/file_tools/gth-file-tool-negative.c b/extensions/file_tools/gth-file-tool-negative.c
index 898fcc0..b3fc044 100644
--- a/extensions/file_tools/gth-file-tool-negative.c
+++ b/extensions/file_tools/gth-file-tool-negative.c
@@ -25,6 +25,9 @@
 #include "gth-file-tool-negative.h"
 
 
+G_DEFINE_TYPE (GthFileToolNegative, gth_file_tool_negative, GTH_TYPE_FILE_TOOL)
+
+
 typedef struct {
 	GtkWidget       *viewer_page;
 	cairo_surface_t *source;
@@ -178,37 +181,18 @@ gth_file_tool_negative_activate (GthFileTool *base)
 
 
 static void
-gth_file_tool_negative_instance_init (GthFileToolNegative *self)
+gth_file_tool_negative_class_init (GthFileToolNegativeClass *klass)
 {
-	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-invert", _("Negative"), _("Negative"), FALSE);
+	GthFileToolClass *file_tool_class;
+
+	file_tool_class = GTH_FILE_TOOL_CLASS (klass);
+	file_tool_class->update_sensitivity = gth_file_tool_negative_update_sensitivity;
+	file_tool_class->activate = gth_file_tool_negative_activate;
 }
 
 
 static void
-gth_file_tool_negative_class_init (GthFileToolClass *klass)
+gth_file_tool_negative_init (GthFileToolNegative *self)
 {
-	klass->update_sensitivity = gth_file_tool_negative_update_sensitivity;
-	klass->activate = gth_file_tool_negative_activate;
-}
-
-
-GType
-gth_file_tool_negative_get_type (void) {
-	static GType type_id = 0;
-	if (type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileToolNegativeClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_tool_negative_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileToolNegative),
-			0,
-			(GInstanceInitFunc) gth_file_tool_negative_instance_init,
-			NULL
-		};
-		type_id = g_type_register_static (GTH_TYPE_FILE_TOOL, "GthFileToolNegative", &g_define_type_info, 0);
-	}
-	return type_id;
+	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-invert", _("Negative"), _("Negative"), FALSE);
 }
diff --git a/extensions/file_tools/gth-file-tool-redo.c b/extensions/file_tools/gth-file-tool-redo.c
index 0fbccf2..329ae32 100644
--- a/extensions/file_tools/gth-file-tool-redo.c
+++ b/extensions/file_tools/gth-file-tool-redo.c
@@ -25,6 +25,9 @@
 #include "gth-file-tool-redo.h"
 
 
+G_DEFINE_TYPE (GthFileToolRedo, gth_file_tool_redo, GTH_TYPE_FILE_TOOL)
+
+
 static void
 gth_file_tool_redo_update_sensitivity (GthFileTool *base)
 {
@@ -37,7 +40,6 @@ gth_file_tool_redo_update_sensitivity (GthFileTool *base)
 		gtk_widget_set_sensitive (GTK_WIDGET (base), FALSE);
 	else
 		gtk_widget_set_sensitive (GTK_WIDGET (base), gth_image_history_can_redo (gth_image_viewer_page_get_history (GTH_IMAGE_VIEWER_PAGE (viewer_page))));
-
 }
 
 
@@ -57,37 +59,18 @@ gth_file_tool_redo_activate (GthFileTool *base)
 
 
 static void
-gth_file_tool_redo_instance_init (GthFileToolRedo *self)
+gth_file_tool_redo_class_init (GthFileToolRedoClass *klass)
 {
-	gth_file_tool_construct (GTH_FILE_TOOL (self), "redo", _("Redo"), _("Redo"), FALSE);
+	GthFileToolClass *file_tool_class;
+
+	file_tool_class = GTH_FILE_TOOL_CLASS (klass);
+	file_tool_class->update_sensitivity = gth_file_tool_redo_update_sensitivity;
+	file_tool_class->activate = gth_file_tool_redo_activate;
 }
 
 
 static void
-gth_file_tool_redo_class_init (GthFileToolClass *klass)
+gth_file_tool_redo_init (GthFileToolRedo *self)
 {
-	klass->update_sensitivity = gth_file_tool_redo_update_sensitivity;
-	klass->activate = gth_file_tool_redo_activate;
-}
-
-
-GType
-gth_file_tool_redo_get_type (void) {
-	static GType type_id = 0;
-	if (type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileToolRedoClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_tool_redo_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileToolRedo),
-			0,
-			(GInstanceInitFunc) gth_file_tool_redo_instance_init,
-			NULL
-		};
-		type_id = g_type_register_static (GTH_TYPE_FILE_TOOL, "GthFileToolRedo", &g_define_type_info, 0);
-	}
-	return type_id;
+	gth_file_tool_construct (GTH_FILE_TOOL (self), "redo", _("Redo"), _("Redo"), FALSE);
 }
diff --git a/extensions/file_tools/gth-file-tool-resize.c b/extensions/file_tools/gth-file-tool-resize.c
index abbc62d..2ea2a3d 100644
--- a/extensions/file_tools/gth-file-tool-resize.c
+++ b/extensions/file_tools/gth-file-tool-resize.c
@@ -33,7 +33,7 @@
 #define PIXELS_UNIT_POSITION 0
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthFileToolResize, gth_file_tool_resize, GTH_TYPE_FILE_TOOL)
 
 
 struct _GthFileToolResizePrivate {
@@ -624,14 +624,6 @@ gth_file_tool_resize_activate (GthFileTool *base)
 
 
 static void
-gth_file_tool_resize_instance_init (GthFileToolResize *self)
-{
-	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_FILE_TOOL_RESIZE, GthFileToolResizePrivate);
-	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-resize", _("Resize..."), _("Resize"), FALSE);
-}
-
-
-static void
 gth_file_tool_resize_finalize (GObject *object)
 {
 	GthFileToolResize *self;
@@ -646,23 +638,22 @@ gth_file_tool_resize_finalize (GObject *object)
 	_g_object_unref (self->priv->builder);
 
 	/* Chain up */
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_file_tool_resize_parent_class)->finalize (object);
 }
 
 
 static void
-gth_file_tool_resize_class_init (GthFileToolResizeClass *class)
+gth_file_tool_resize_class_init (GthFileToolResizeClass *klass)
 {
 	GObjectClass     *gobject_class;
 	GthFileToolClass *file_tool_class;
 
-	parent_class = g_type_class_peek_parent (class);
-	g_type_class_add_private (class, sizeof (GthFileToolResizePrivate));
+	g_type_class_add_private (klass, sizeof (GthFileToolResizePrivate));
 
-	gobject_class = (GObjectClass*) class;
+	gobject_class = (GObjectClass*) klass;
 	gobject_class->finalize = gth_file_tool_resize_finalize;
 
-	file_tool_class = (GthFileToolClass *) class;
+	file_tool_class = (GthFileToolClass *) klass;
 	file_tool_class->update_sensitivity = gth_file_tool_resize_update_sensitivity;
 	file_tool_class->activate = gth_file_tool_resize_activate;
 	file_tool_class->get_options = gth_file_tool_resize_get_options;
@@ -670,23 +661,9 @@ gth_file_tool_resize_class_init (GthFileToolResizeClass *class)
 }
 
 
-GType
-gth_file_tool_resize_get_type (void) {
-	static GType type_id = 0;
-	if (type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileToolResizeClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_tool_resize_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileToolResize),
-			0,
-			(GInstanceInitFunc) gth_file_tool_resize_instance_init,
-			NULL
-		};
-		type_id = g_type_register_static (GTH_TYPE_FILE_TOOL, "GthFileToolResize", &g_define_type_info, 0);
-	}
-	return type_id;
+static void
+gth_file_tool_resize_init (GthFileToolResize *self)
+{
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_FILE_TOOL_RESIZE, GthFileToolResizePrivate);
+	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-resize", _("Resize..."), _("Resize"), FALSE);
 }
diff --git a/extensions/file_tools/gth-file-tool-rotate-left.c b/extensions/file_tools/gth-file-tool-rotate-left.c
index 341f3af..dafbed1 100644
--- a/extensions/file_tools/gth-file-tool-rotate-left.c
+++ b/extensions/file_tools/gth-file-tool-rotate-left.c
@@ -26,6 +26,9 @@
 #include "gth-file-tool-rotate-left.h"
 
 
+G_DEFINE_TYPE (GthFileToolRotateLeft, gth_file_tool_rotate_left, GTH_TYPE_FILE_TOOL)
+
+
 static void
 gth_file_tool_rotate_left_activate (GthFileTool *base)
 {
@@ -68,38 +71,19 @@ gth_file_tool_rotate_left_update_sensitivity (GthFileTool *base)
 
 
 static void
-gth_file_tool_rotate_left_instance_init (GthFileToolRotateLeft *self)
+gth_file_tool_rotate_left_class_init (GthFileToolRotateLeftClass *klass)
 {
-	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-rotate-270", _("Rotate Left"), NULL, FALSE);
-	gtk_widget_set_tooltip_text (GTK_WIDGET (self), _("Rotate the image by 90 degrees counterclockwise"));
+	GthFileToolClass *file_tool_class;
+
+	file_tool_class = (GthFileToolClass *) klass;
+	file_tool_class->update_sensitivity = gth_file_tool_rotate_left_update_sensitivity;
+	file_tool_class->activate = gth_file_tool_rotate_left_activate;
 }
 
 
 static void
-gth_file_tool_rotate_left_class_init (GthFileToolClass *klass)
+gth_file_tool_rotate_left_init (GthFileToolRotateLeft *self)
 {
-	klass->update_sensitivity = gth_file_tool_rotate_left_update_sensitivity;
-	klass->activate = gth_file_tool_rotate_left_activate;
-}
-
-
-GType
-gth_file_tool_rotate_left_get_type (void) {
-	static GType type_id = 0;
-	if (type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileToolRotateLeftClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_tool_rotate_left_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileToolRotateLeft),
-			0,
-			(GInstanceInitFunc) gth_file_tool_rotate_left_instance_init,
-			NULL
-		};
-		type_id = g_type_register_static (GTH_TYPE_FILE_TOOL, "GthFileToolRotateLeft", &g_define_type_info, 0);
-	}
-	return type_id;
+	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-rotate-270", _("Rotate Left"), NULL, FALSE);
+	gtk_widget_set_tooltip_text (GTK_WIDGET (self), _("Rotate the image by 90 degrees counterclockwise"));
 }
diff --git a/extensions/file_tools/gth-file-tool-rotate-right.c b/extensions/file_tools/gth-file-tool-rotate-right.c
index ed11e89..e1d12a7 100644
--- a/extensions/file_tools/gth-file-tool-rotate-right.c
+++ b/extensions/file_tools/gth-file-tool-rotate-right.c
@@ -26,6 +26,9 @@
 #include "gth-file-tool-rotate-right.h"
 
 
+G_DEFINE_TYPE (GthFileToolRotateRight, gth_file_tool_rotate_right, GTH_TYPE_FILE_TOOL)
+
+
 static void
 gth_file_tool_rotate_right_activate (GthFileTool *base)
 {
@@ -68,38 +71,19 @@ gth_file_tool_rotate_right_update_sensitivity (GthFileTool *base)
 
 
 static void
-gth_file_tool_rotate_right_instance_init (GthFileToolRotateRight *self)
+gth_file_tool_rotate_right_class_init (GthFileToolRotateRightClass *klass)
 {
-	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-rotate-90", _("Rotate Right"), NULL, TRUE);
-	gtk_widget_set_tooltip_text (GTK_WIDGET (self), _("Rotate the image by 90 degrees clockwise"));
+	GthFileToolClass *file_tool_class;
+
+	file_tool_class = (GthFileToolClass *) klass;
+	file_tool_class->update_sensitivity = gth_file_tool_rotate_right_update_sensitivity;
+	file_tool_class->activate = gth_file_tool_rotate_right_activate;
 }
 
 
 static void
-gth_file_tool_rotate_right_class_init (GthFileToolClass *klass)
+gth_file_tool_rotate_right_init (GthFileToolRotateRight *self)
 {
-	klass->update_sensitivity = gth_file_tool_rotate_right_update_sensitivity;
-	klass->activate = gth_file_tool_rotate_right_activate;
-}
-
-
-GType
-gth_file_tool_rotate_right_get_type (void) {
-	static GType type_id = 0;
-	if (type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileToolRotateRightClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_tool_rotate_right_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileToolRotateRight),
-			0,
-			(GInstanceInitFunc) gth_file_tool_rotate_right_instance_init,
-			NULL
-		};
-		type_id = g_type_register_static (GTH_TYPE_FILE_TOOL, "GthFileToolRotateRight", &g_define_type_info, 0);
-	}
-	return type_id;
+	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-rotate-90", _("Rotate Right"), NULL, TRUE);
+	gtk_widget_set_tooltip_text (GTK_WIDGET (self), _("Rotate the image by 90 degrees clockwise"));
 }
diff --git a/extensions/file_tools/gth-file-tool-rotate.c b/extensions/file_tools/gth-file-tool-rotate.c
index 200939e..fb3231d 100644
--- a/extensions/file_tools/gth-file-tool-rotate.c
+++ b/extensions/file_tools/gth-file-tool-rotate.c
@@ -34,7 +34,7 @@
 #define GET_WIDGET(x) (_gtk_builder_get_widget (self->priv->builder, (x)))
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthFileToolRotate, gth_file_tool_rotate, GTH_TYPE_FILE_TOOL)
 
 
 struct _GthFileToolRotatePrivate {
@@ -589,16 +589,6 @@ gth_file_tool_rotate_activate (GthFileTool *base)
 
 
 static void
-gth_file_tool_rotate_instance_init (GthFileToolRotate *self)
-{
-	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_FILE_TOOL_ROTATE, GthFileToolRotatePrivate);
-
-	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-rotate", _("Rotate..."), _("Rotate"), TRUE);
-	gtk_widget_set_tooltip_text (GTK_WIDGET (self), _("Freely rotate the image"));
-}
-
-
-static void
 gth_file_tool_rotate_finalize (GObject *object)
 {
 	GthFileToolRotate *self;
@@ -612,23 +602,22 @@ gth_file_tool_rotate_finalize (GObject *object)
 	_g_object_unref (self->priv->builder);
 
 	/* Chain up */
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_file_tool_rotate_parent_class)->finalize (object);
 }
 
 
 static void
-gth_file_tool_rotate_class_init (GthFileToolRotateClass *class)
+gth_file_tool_rotate_class_init (GthFileToolRotateClass *klass)
 {
 	GObjectClass     *gobject_class;
 	GthFileToolClass *file_tool_class;
 
-	parent_class = g_type_class_peek_parent (class);
-	g_type_class_add_private (class, sizeof (GthFileToolRotatePrivate));
+	g_type_class_add_private (klass, sizeof (GthFileToolRotatePrivate));
 
-	gobject_class = (GObjectClass*) class;
+	gobject_class = (GObjectClass*) klass;
 	gobject_class->finalize = gth_file_tool_rotate_finalize;
 
-	file_tool_class = (GthFileToolClass *) class;
+	file_tool_class = (GthFileToolClass *) klass;
 	file_tool_class->update_sensitivity = gth_file_tool_rotate_update_sensitivity;
 	file_tool_class->activate = gth_file_tool_rotate_activate;
 	file_tool_class->get_options = gth_file_tool_rotate_get_options;
@@ -636,23 +625,11 @@ gth_file_tool_rotate_class_init (GthFileToolRotateClass *class)
 }
 
 
-GType
-gth_file_tool_rotate_get_type (void) {
-	static GType type_id = 0;
-	if (type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileToolRotateClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_tool_rotate_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileToolRotate),
-			0,
-			(GInstanceInitFunc) gth_file_tool_rotate_instance_init,
-			NULL
-		};
-		type_id = g_type_register_static (GTH_TYPE_FILE_TOOL, "GthFileToolRotate", &g_define_type_info, 0);
-	}
-	return type_id;
+static void
+gth_file_tool_rotate_init (GthFileToolRotate *self)
+{
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_FILE_TOOL_ROTATE, GthFileToolRotatePrivate);
+
+	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-rotate", _("Rotate..."), _("Rotate"), TRUE);
+	gtk_widget_set_tooltip_text (GTK_WIDGET (self), _("Freely rotate the image"));
 }
diff --git a/extensions/file_tools/gth-file-tool-save-as.c b/extensions/file_tools/gth-file-tool-save-as.c
index 495c145..6354406 100644
--- a/extensions/file_tools/gth-file-tool-save-as.c
+++ b/extensions/file_tools/gth-file-tool-save-as.c
@@ -24,6 +24,9 @@
 #include "gth-file-tool-save-as.h"
 
 
+G_DEFINE_TYPE (GthFileToolSaveAs, gth_file_tool_save_as, GTH_TYPE_FILE_TOOL)
+
+
 static void
 gth_file_tool_save_as_update_sensitivity (GthFileTool *base)
 {
@@ -51,37 +54,18 @@ gth_file_tool_save_as_activate (GthFileTool *tool)
 
 
 static void
-gth_file_tool_save_as_instance_init (GthFileToolSaveAs *self)
+gth_file_tool_save_as_class_init (GthFileToolSaveAsClass *klass)
 {
-	gth_file_tool_construct (GTH_FILE_TOOL (self), GTK_STOCK_SAVE_AS, _("Save As"), NULL, FALSE);
+	GthFileToolClass *file_tool_class;
+
+	file_tool_class = (GthFileToolClass *) klass;
+	file_tool_class->update_sensitivity = gth_file_tool_save_as_update_sensitivity;
+	file_tool_class->activate = gth_file_tool_save_as_activate;
 }
 
 
 static void
-gth_file_tool_save_as_class_init (GthFileToolClass *klass)
+gth_file_tool_save_as_init (GthFileToolSaveAs *self)
 {
-	klass->update_sensitivity = gth_file_tool_save_as_update_sensitivity;
-	klass->activate = gth_file_tool_save_as_activate;
-}
-
-
-GType
-gth_file_tool_save_as_get_type (void) {
-	static GType type_id = 0;
-	if (type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileToolSaveAsClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_tool_save_as_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileToolSaveAs),
-			0,
-			(GInstanceInitFunc) gth_file_tool_save_as_instance_init,
-			NULL
-		};
-		type_id = g_type_register_static (GTH_TYPE_FILE_TOOL, "GthFileToolSaveAs", &g_define_type_info, 0);
-	}
-	return type_id;
+	gth_file_tool_construct (GTH_FILE_TOOL (self), GTK_STOCK_SAVE_AS, _("Save As"), NULL, FALSE);
 }
diff --git a/extensions/file_tools/gth-file-tool-save.c b/extensions/file_tools/gth-file-tool-save.c
index d90cb63..1b599b5 100644
--- a/extensions/file_tools/gth-file-tool-save.c
+++ b/extensions/file_tools/gth-file-tool-save.c
@@ -24,6 +24,9 @@
 #include "gth-file-tool-save.h"
 
 
+G_DEFINE_TYPE (GthFileToolSave, gth_file_tool_save, GTH_TYPE_FILE_TOOL)
+
+
 static void
 gth_file_tool_save_update_sensitivity (GthFileTool *base)
 {
@@ -47,37 +50,18 @@ gth_file_tool_save_activate (GthFileTool *tool)
 
 
 static void
-gth_file_tool_save_instance_init (GthFileToolSave *self)
+gth_file_tool_save_class_init (GthFileToolSaveClass *klass)
 {
-	gth_file_tool_construct (GTH_FILE_TOOL (self), GTK_STOCK_SAVE, _("Save"), _("Save"), FALSE);
+	GthFileToolClass *file_tool_class;
+
+	file_tool_class = (GthFileToolClass *) klass;
+	file_tool_class->update_sensitivity = gth_file_tool_save_update_sensitivity;
+	file_tool_class->activate = gth_file_tool_save_activate;
 }
 
 
 static void
-gth_file_tool_save_class_init (GthFileToolClass *klass)
+gth_file_tool_save_init (GthFileToolSave *self)
 {
-	klass->update_sensitivity = gth_file_tool_save_update_sensitivity;
-	klass->activate = gth_file_tool_save_activate;
-}
-
-
-GType
-gth_file_tool_save_get_type (void) {
-	static GType type_id = 0;
-	if (type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileToolSaveClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_tool_save_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileToolSave),
-			0,
-			(GInstanceInitFunc) gth_file_tool_save_instance_init,
-			NULL
-		};
-		type_id = g_type_register_static (GTH_TYPE_FILE_TOOL, "GthFileToolSave", &g_define_type_info, 0);
-	}
-	return type_id;
+	gth_file_tool_construct (GTH_FILE_TOOL (self), GTK_STOCK_SAVE, _("Save"), _("Save"), FALSE);
 }
diff --git a/extensions/file_tools/gth-file-tool-sharpen.c b/extensions/file_tools/gth-file-tool-sharpen.c
index a4a803f..1ceb062 100644
--- a/extensions/file_tools/gth-file-tool-sharpen.c
+++ b/extensions/file_tools/gth-file-tool-sharpen.c
@@ -33,7 +33,7 @@
 #define DEFAULT_THRESHOLD 0.0
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthFileToolSharpen, gth_file_tool_sharpen, GTH_TYPE_FILE_TOOL)
 
 
 struct _GthFileToolSharpenPrivate {
@@ -409,19 +409,6 @@ gth_file_tool_sharpen_activate (GthFileTool *base)
 
 
 static void
-gth_file_tool_sharpen_instance_init (GthFileToolSharpen *self)
-{
-	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_FILE_TOOL_SHARPEN, GthFileToolSharpenPrivate);
-	self->priv->source = NULL;
-	self->priv->destination = NULL;
-	self->priv->builder = NULL;
-	self->priv->show_preview = TRUE;
-
-	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-sharpen", _("Enhance Focus..."), _("Enhance Focus"), FALSE);
-}
-
-
-static void
 gth_file_tool_sharpen_finalize (GObject *object)
 {
 	GthFileToolSharpen *self;
@@ -436,7 +423,7 @@ gth_file_tool_sharpen_finalize (GObject *object)
 	_g_object_unref (self->priv->builder);
 
 	/* Chain up */
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_file_tool_sharpen_parent_class)->finalize (object);
 }
 
 
@@ -446,7 +433,6 @@ gth_file_tool_sharpen_class_init (GthFileToolSharpenClass *klass)
 	GObjectClass     *gobject_class;
 	GthFileToolClass *file_tool_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthFileToolSharpenPrivate));
 
 	gobject_class = (GObjectClass*) klass;
@@ -460,23 +446,14 @@ gth_file_tool_sharpen_class_init (GthFileToolSharpenClass *klass)
 }
 
 
-GType
-gth_file_tool_sharpen_get_type (void) {
-	static GType type_id = 0;
-	if (type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileToolSharpenClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_tool_sharpen_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileToolSharpen),
-			0,
-			(GInstanceInitFunc) gth_file_tool_sharpen_instance_init,
-			NULL
-		};
-		type_id = g_type_register_static (GTH_TYPE_FILE_TOOL, "GthFileToolSharpen", &g_define_type_info, 0);
-	}
-	return type_id;
+static void
+gth_file_tool_sharpen_init (GthFileToolSharpen *self)
+{
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_FILE_TOOL_SHARPEN, GthFileToolSharpenPrivate);
+	self->priv->source = NULL;
+	self->priv->destination = NULL;
+	self->priv->builder = NULL;
+	self->priv->show_preview = TRUE;
+
+	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-sharpen", _("Enhance Focus..."), _("Enhance Focus"), FALSE);
 }
diff --git a/extensions/file_tools/gth-file-tool-undo.c b/extensions/file_tools/gth-file-tool-undo.c
index e8f77d4..e392de4 100644
--- a/extensions/file_tools/gth-file-tool-undo.c
+++ b/extensions/file_tools/gth-file-tool-undo.c
@@ -25,6 +25,9 @@
 #include "gth-file-tool-undo.h"
 
 
+G_DEFINE_TYPE (GthFileToolUndo, gth_file_tool_undo, GTH_TYPE_FILE_TOOL)
+
+
 static void
 gth_file_tool_undo_update_sensitivity (GthFileTool *base)
 {
@@ -56,37 +59,18 @@ gth_file_tool_undo_activate (GthFileTool *base)
 
 
 static void
-gth_file_tool_undo_instance_init (GthFileToolUndo *self)
+gth_file_tool_undo_class_init (GthFileToolUndoClass *klass)
 {
-	gth_file_tool_construct (GTH_FILE_TOOL (self), "undo", _("Undo"), _("Undo"), TRUE);
+	GthFileToolClass *file_tool_class;
+
+	file_tool_class = (GthFileToolClass *) klass;
+	file_tool_class->update_sensitivity = gth_file_tool_undo_update_sensitivity;
+	file_tool_class->activate = gth_file_tool_undo_activate;
 }
 
 
 static void
-gth_file_tool_undo_class_init (GthFileToolClass *klass)
+gth_file_tool_undo_init (GthFileToolUndo *self)
 {
-	klass->update_sensitivity = gth_file_tool_undo_update_sensitivity;
-	klass->activate = gth_file_tool_undo_activate;
-}
-
-
-GType
-gth_file_tool_undo_get_type (void) {
-	static GType type_id = 0;
-	if (type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileToolUndoClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_tool_undo_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileToolUndo),
-			0,
-			(GInstanceInitFunc) gth_file_tool_undo_instance_init,
-			NULL
-		};
-		type_id = g_type_register_static (GTH_TYPE_FILE_TOOL, "GthFileToolUndo", &g_define_type_info, 0);
-	}
-	return type_id;
+	gth_file_tool_construct (GTH_FILE_TOOL (self), "undo", _("Undo"), _("Undo"), TRUE);
 }
diff --git a/extensions/file_tools/gth-image-line-tool.c b/extensions/file_tools/gth-image-line-tool.c
index fa72f8e..6a77052 100644
--- a/extensions/file_tools/gth-image-line-tool.c
+++ b/extensions/file_tools/gth-image-line-tool.c
@@ -36,10 +36,6 @@ enum {
 };
 
 
-static guint signals[LAST_SIGNAL] = { 0 };
-static gpointer parent_class = NULL;
-
-
 struct _GthImageLineToolPrivate {
 	GthImageViewer        *viewer;
 
@@ -64,6 +60,19 @@ struct _GthImageLineToolPrivate {
 };
 
 
+static guint signals[LAST_SIGNAL] = { 0 };
+
+
+static void gth_image_line_tool_gth_image_tool_interface_init (GthImageViewerToolInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthImageLineTool,
+			 gth_image_line_tool,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (GTH_TYPE_IMAGE_VIEWER_TOOL,
+					        gth_image_line_tool_gth_image_tool_interface_init))
+
+
 static void
 gth_image_line_tool_set_viewer (GthImageViewerTool *base,
 			        GthImageViewer     *viewer)
@@ -285,11 +294,21 @@ gth_image_line_tool_zoom_changed (GthImageViewerTool *base)
 
 
 static void
-gth_image_line_tool_instance_init (GthImageLineTool *self)
+gth_image_line_tool_gth_image_tool_interface_init (GthImageViewerToolInterface *iface)
 {
-	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_IMAGE_LINE_TOOL, GthImageLineToolPrivate);
-	self->priv->preview_image = NULL;
-	self->priv->first_point_set = FALSE;
+	iface->set_viewer = gth_image_line_tool_set_viewer;
+	iface->unset_viewer = gth_image_line_tool_unset_viewer;
+	iface->realize = gth_image_line_tool_realize;
+	iface->unrealize = gth_image_line_tool_unrealize;
+	iface->size_allocate = gth_image_line_tool_size_allocate;
+	iface->map = gth_image_line_tool_map;
+	iface->unmap = gth_image_line_tool_unmap;
+	iface->draw = gth_image_line_tool_draw;
+	iface->button_press = gth_image_line_tool_button_press;
+	iface->button_release = gth_image_line_tool_button_release;
+	iface->motion_notify = gth_image_line_tool_motion_notify;
+	iface->image_changed = gth_image_line_tool_image_changed;
+	iface->zoom_changed = gth_image_line_tool_zoom_changed;
 }
 
 
@@ -306,7 +325,7 @@ gth_image_line_tool_finalize (GObject *object)
 		cairo_surface_destroy (self->priv->preview_image);
 
 	/* Chain up */
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_image_line_tool_parent_class)->finalize (object);
 }
 
 
@@ -315,7 +334,6 @@ gth_image_line_tool_class_init (GthImageLineToolClass *class)
 {
 	GObjectClass *gobject_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (GthImageLineToolPrivate));
 
 	gobject_class = (GObjectClass*) class;
@@ -333,55 +351,11 @@ gth_image_line_tool_class_init (GthImageLineToolClass *class)
 
 
 static void
-gth_image_line_tool_gth_image_tool_interface_init (GthImageViewerToolIface *iface)
-{
-	iface->set_viewer = gth_image_line_tool_set_viewer;
-	iface->unset_viewer = gth_image_line_tool_unset_viewer;
-	iface->realize = gth_image_line_tool_realize;
-	iface->unrealize = gth_image_line_tool_unrealize;
-	iface->size_allocate = gth_image_line_tool_size_allocate;
-	iface->map = gth_image_line_tool_map;
-	iface->unmap = gth_image_line_tool_unmap;
-	iface->draw = gth_image_line_tool_draw;
-	iface->button_press = gth_image_line_tool_button_press;
-	iface->button_release = gth_image_line_tool_button_release;
-	iface->motion_notify = gth_image_line_tool_motion_notify;
-	iface->image_changed = gth_image_line_tool_image_changed;
-	iface->zoom_changed = gth_image_line_tool_zoom_changed;
-}
-
-
-GType
-gth_image_line_tool_get_type (void)
+gth_image_line_tool_init (GthImageLineTool *self)
 {
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthImageLineToolClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_image_line_tool_class_init,
-			NULL,
-			NULL,
-			sizeof (GthImageLineTool),
-			0,
-			(GInstanceInitFunc) gth_image_line_tool_instance_init
-		};
-		static const GInterfaceInfo gth_image_tool_info = {
-			(GInterfaceInitFunc) gth_image_line_tool_gth_image_tool_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthImageLineTool",
-					       &type_info,
-					       0);
-		g_type_add_interface_static (type, GTH_TYPE_IMAGE_VIEWER_TOOL, &gth_image_tool_info);
-	}
-
-	return type;
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_IMAGE_LINE_TOOL, GthImageLineToolPrivate);
+	self->priv->preview_image = NULL;
+	self->priv->first_point_set = FALSE;
 }
 
 
diff --git a/extensions/file_tools/gth-image-rotator.c b/extensions/file_tools/gth-image-rotator.c
index 5edf8e9..943a28c 100644
--- a/extensions/file_tools/gth-image-rotator.c
+++ b/extensions/file_tools/gth-image-rotator.c
@@ -43,7 +43,17 @@ enum {
 
 
 static guint signals[LAST_SIGNAL] = { 0 };
-static gpointer parent_class = NULL;
+
+
+static void gth_image_rotator_gth_image_tool_interface_init (GthImageViewerToolInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthImageRotator,
+			 gth_image_rotator,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (GTH_TYPE_IMAGE_VIEWER_TOOL,
+					        gth_image_rotator_gth_image_tool_interface_init))
+
 
 
 struct _GthImageRotatorPrivate {
@@ -582,26 +592,6 @@ gth_image_rotator_zoom_changed (GthImageViewerTool *base)
 
 
 static void
-gth_image_rotator_instance_init (GthImageRotator *self)
-{
-	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_IMAGE_ROTATOR, GthImageRotatorPrivate);
-	self->priv->preview_image = NULL;
-	self->priv->grid_type = GTH_GRID_NONE;
-	self->priv->resize = GTH_TRANSFORM_RESIZE_BOUNDING_BOX;
-	self->priv->background_color.r = 0.0;
-	self->priv->background_color.g = 0.0;
-	self->priv->background_color.b = 0.0;
-	self->priv->background_color.a = 1.0;
-	self->priv->enable_crop = FALSE;
-	self->priv->crop_region.x = 0;
-	self->priv->crop_region.y = 0;
-	self->priv->crop_region.width = 0;
-	self->priv->crop_region.height = 0;
-	self->priv->dragging = FALSE;
-}
-
-
-static void
 gth_image_rotator_finalize (GObject *object)
 {
 	GthImageRotator *self;
@@ -614,7 +604,7 @@ gth_image_rotator_finalize (GObject *object)
 		cairo_surface_destroy (self->priv->preview_image);
 
 	/* Chain up */
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_image_rotator_parent_class)->finalize (object);
 }
 
 
@@ -623,7 +613,6 @@ gth_image_rotator_class_init (GthImageRotatorClass *class)
 {
 	GObjectClass *gobject_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (GthImageRotatorPrivate));
 
 	gobject_class = (GObjectClass*) class;
@@ -660,7 +649,7 @@ gth_image_rotator_class_init (GthImageRotatorClass *class)
 
 
 static void
-gth_image_rotator_gth_image_tool_interface_init (GthImageViewerToolIface *iface)
+gth_image_rotator_gth_image_tool_interface_init (GthImageViewerToolInterface *iface)
 {
 	iface->set_viewer = gth_image_rotator_set_viewer;
 	iface->unset_viewer = gth_image_rotator_unset_viewer;
@@ -678,37 +667,23 @@ gth_image_rotator_gth_image_tool_interface_init (GthImageViewerToolIface *iface)
 }
 
 
-GType
-gth_image_rotator_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthImageRotatorClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_image_rotator_class_init,
-			NULL,
-			NULL,
-			sizeof (GthImageRotator),
-			0,
-			(GInstanceInitFunc) gth_image_rotator_instance_init
-		};
-		static const GInterfaceInfo gth_image_tool_info = {
-			(GInterfaceInitFunc) gth_image_rotator_gth_image_tool_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthImageRotator",
-					       &type_info,
-					       0);
-		g_type_add_interface_static (type, GTH_TYPE_IMAGE_VIEWER_TOOL, &gth_image_tool_info);
-	}
-
-	return type;
+static void
+gth_image_rotator_init (GthImageRotator *self)
+{
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_IMAGE_ROTATOR, GthImageRotatorPrivate);
+	self->priv->preview_image = NULL;
+	self->priv->grid_type = GTH_GRID_NONE;
+	self->priv->resize = GTH_TRANSFORM_RESIZE_BOUNDING_BOX;
+	self->priv->background_color.r = 0.0;
+	self->priv->background_color.g = 0.0;
+	self->priv->background_color.b = 0.0;
+	self->priv->background_color.a = 1.0;
+	self->priv->enable_crop = FALSE;
+	self->priv->crop_region.x = 0;
+	self->priv->crop_region.y = 0;
+	self->priv->crop_region.width = 0;
+	self->priv->crop_region.height = 0;
+	self->priv->dragging = FALSE;
 }
 
 
diff --git a/extensions/file_viewer/gth-file-viewer-page.c b/extensions/file_viewer/gth-file-viewer-page.c
index 9e93653..43ccd42 100644
--- a/extensions/file_viewer/gth-file-viewer-page.c
+++ b/extensions/file_viewer/gth-file-viewer-page.c
@@ -45,7 +45,14 @@ struct _GthFileViewerPagePrivate {
 };
 
 
-static gpointer gth_file_viewer_page_parent_class = NULL;
+static void gth_viewer_page_interface_init (GthViewerPageInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthFileViewerPage,
+			 gth_file_viewer_page,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (GTH_TYPE_VIEWER_PAGE,
+					 	gth_viewer_page_interface_init))
 
 
 static gboolean
@@ -330,15 +337,13 @@ gth_file_viewer_page_finalize (GObject *obj)
 static void
 gth_file_viewer_page_class_init (GthFileViewerPageClass *klass)
 {
-	gth_file_viewer_page_parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthFileViewerPagePrivate));
-
 	G_OBJECT_CLASS (klass)->finalize = gth_file_viewer_page_finalize;
 }
 
 
 static void
-gth_viewer_page_interface_init (GthViewerPageIface *iface)
+gth_viewer_page_interface_init (GthViewerPageInterface *iface)
 {
 	iface->activate = gth_file_viewer_page_real_activate;
 	iface->deactivate = gth_file_viewer_page_real_deactivate;
@@ -356,36 +361,9 @@ gth_viewer_page_interface_init (GthViewerPageIface *iface)
 
 
 static void
-gth_file_viewer_page_instance_init (GthFileViewerPage *self)
+gth_file_viewer_page_init (GthFileViewerPage *self)
 {
 	self->priv = GTH_FILE_VIEWER_PAGE_GET_PRIVATE (self);
 	self->priv->thumb_loader = NULL;
 	self->priv->file_data = NULL;
 }
-
-
-GType gth_file_viewer_page_get_type (void) {
-	static GType gth_file_viewer_page_type_id = 0;
-	if (gth_file_viewer_page_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileViewerPageClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_viewer_page_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileViewerPage),
-			0,
-			(GInstanceInitFunc) gth_file_viewer_page_instance_init,
-			NULL
-		};
-		static const GInterfaceInfo gth_viewer_page_info = {
-			(GInterfaceInitFunc) gth_viewer_page_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		gth_file_viewer_page_type_id = g_type_register_static (G_TYPE_OBJECT, "GthFileViewerPage", &g_define_type_info, 0);
-		g_type_add_interface_static (gth_file_viewer_page_type_id, GTH_TYPE_VIEWER_PAGE, &gth_viewer_page_info);
-	}
-	return gth_file_viewer_page_type_id;
-}
diff --git a/extensions/find_duplicates/gth-find-duplicates.c b/extensions/find_duplicates/gth-find-duplicates.c
index 7666d80..77fddbe 100644
--- a/extensions/find_duplicates/gth-find-duplicates.c
+++ b/extensions/find_duplicates/gth-find-duplicates.c
@@ -88,7 +88,7 @@ struct _GthFindDuplicatesPrivate
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthFindDuplicates, gth_find_duplicates, G_TYPE_OBJECT)
 
 
 typedef struct {
@@ -149,7 +149,7 @@ gth_find_duplicates_finalize (GObject *object)
 	_g_object_unref (self->priv->file_stream);
 	g_hash_table_unref (self->priv->duplicated);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_find_duplicates_parent_class)->finalize (object);
 }
 
 
@@ -158,7 +158,6 @@ gth_find_duplicates_class_init (GthFindDuplicatesClass *klass)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthFindDuplicatesPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -192,34 +191,6 @@ gth_find_duplicates_init (GthFindDuplicates *self)
 }
 
 
-GType
-gth_find_duplicates_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthFindDuplicatesClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_find_duplicates_class_init,
-			NULL,
-			NULL,
-			sizeof (GthFindDuplicates),
-			0,
-			(GInstanceInitFunc) gth_find_duplicates_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthFindDuplicates",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static void
 update_file_list_sensitivity (GthFindDuplicates *self)
 {
diff --git a/extensions/find_duplicates/gth-folder-chooser-dialog.c b/extensions/find_duplicates/gth-folder-chooser-dialog.c
index 12bf56b..0e5443f 100644
--- a/extensions/find_duplicates/gth-folder-chooser-dialog.c
+++ b/extensions/find_duplicates/gth-folder-chooser-dialog.c
@@ -33,7 +33,7 @@ enum {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthFolderChooserDialog, gth_folder_chooser_dialog, GTK_TYPE_DIALOG)
 
 
 struct _GthFolderChooserDialogPrivate {
@@ -50,7 +50,7 @@ gth_folder_chooser_dialog_finalize (GObject *object)
 
 	_g_object_unref (self->priv->builder);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_folder_chooser_dialog_parent_class)->finalize (object);
 }
 
 
@@ -59,7 +59,6 @@ gth_folder_chooser_dialog_class_init (GthFolderChooserDialogClass *klass)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthFolderChooserDialogPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -125,34 +124,6 @@ gth_folder_chooser_dialog_init (GthFolderChooserDialog *self)
 }
 
 
-GType
-gth_folder_chooser_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFolderChooserDialogClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_folder_chooser_dialog_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFolderChooserDialog),
-			0,
-			(GInstanceInitFunc) gth_folder_chooser_dialog_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "GthFolderChooserDialog",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static void
 gth_folder_chooser_dialog_construct (GthFolderChooserDialog *self,
 				     GList                  *folders)
diff --git a/extensions/flicker_utils/flickr-account-chooser-dialog.c b/extensions/flicker_utils/flickr-account-chooser-dialog.c
index 3b2bc21..9f17757 100644
--- a/extensions/flicker_utils/flickr-account-chooser-dialog.c
+++ b/extensions/flicker_utils/flickr-account-chooser-dialog.c
@@ -34,7 +34,7 @@ enum {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (FlickrAccountChooserDialog, flickr_account_chooser_dialog, GTK_TYPE_DIALOG)
 
 
 struct _FlickrAccountChooserDialogPrivate {
@@ -51,7 +51,7 @@ flickr_account_chooser_dialog_finalize (GObject *object)
 
 	_g_object_unref (self->priv->builder);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (flickr_account_chooser_dialog_parent_class)->finalize (object);
 }
 
 
@@ -60,7 +60,6 @@ flickr_account_chooser_dialog_class_init (FlickrAccountChooserDialogClass *klass
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (FlickrAccountChooserDialogPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -163,34 +162,6 @@ flickr_account_chooser_dialog_init (FlickrAccountChooserDialog *self)
 }
 
 
-GType
-flickr_account_chooser_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (FlickrAccountChooserDialogClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) flickr_account_chooser_dialog_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (FlickrAccountChooserDialog),
-			0,
-			(GInstanceInitFunc) flickr_account_chooser_dialog_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "FlickrAccountChooserDialog",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static void
 flickr_account_chooser_dialog_construct (FlickrAccountChooserDialog *self,
 				         GList                      *accounts,
diff --git a/extensions/flicker_utils/flickr-account-manager-dialog.c b/extensions/flicker_utils/flickr-account-manager-dialog.c
index bbb83a1..ccdda25 100644
--- a/extensions/flicker_utils/flickr-account-manager-dialog.c
+++ b/extensions/flicker_utils/flickr-account-manager-dialog.c
@@ -34,7 +34,7 @@ enum {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (FlickrAccountManagerDialog, flickr_account_manager_dialog, GTK_TYPE_DIALOG)
 
 
 struct _FlickrAccountManagerDialogPrivate {
@@ -51,7 +51,7 @@ flickr_account_manager_dialog_finalize (GObject *object)
 
 	_g_object_unref (self->priv->builder);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (flickr_account_manager_dialog_parent_class)->finalize (object);
 }
 
 
@@ -60,7 +60,6 @@ flickr_account_manager_dialog_class_init (FlickrAccountManagerDialogClass *klass
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (FlickrAccountManagerDialogPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -160,34 +159,6 @@ flickr_account_manager_dialog_init (FlickrAccountManagerDialog *self)
 }
 
 
-GType
-flickr_account_manager_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (FlickrAccountManagerDialogClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) flickr_account_manager_dialog_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (FlickrAccountManagerDialog),
-			0,
-			(GInstanceInitFunc) flickr_account_manager_dialog_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "FlickrAccountManagerDialog",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static void
 flickr_account_manager_dialog_construct (FlickrAccountManagerDialog *self,
 				         GList                      *accounts)
diff --git a/extensions/flicker_utils/flickr-account.c b/extensions/flicker_utils/flickr-account.c
index 160d900..ac28d09 100644
--- a/extensions/flicker_utils/flickr-account.c
+++ b/extensions/flicker_utils/flickr-account.c
@@ -29,7 +29,14 @@
 #include "flickr-account.h"
 
 
-static gpointer flickr_account_parent_class = NULL;
+static void flickr_account_dom_domizable_interface_init (DomDomizableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (FlickrAccount,
+			 flickr_account,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+					        flickr_account_dom_domizable_interface_init))
 
 
 static void
@@ -49,7 +56,6 @@ flickr_account_finalize (GObject *obj)
 static void
 flickr_account_class_init (FlickrAccountClass *klass)
 {
-	flickr_account_parent_class = g_type_class_peek_parent (klass);
 	G_OBJECT_CLASS (klass)->finalize = flickr_account_finalize;
 }
 
@@ -109,43 +115,9 @@ flickr_account_dom_domizable_interface_init (DomDomizableInterface *iface)
 
 
 static void
-flickr_account_instance_init (FlickrAccount *self)
-{
-}
-
-
-GType
-flickr_account_get_type (void)
+flickr_account_init (FlickrAccount *self)
 {
-	static GType flickr_account_type_id = 0;
-
-	if (flickr_account_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (FlickrAccountClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) flickr_account_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (FlickrAccount),
-			0,
-			(GInstanceInitFunc) flickr_account_instance_init,
-			NULL
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) flickr_account_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		flickr_account_type_id = g_type_register_static (G_TYPE_OBJECT,
-								   "FlickrAccount",
-								   &g_define_type_info,
-								   0);
-		g_type_add_interface_static (flickr_account_type_id, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-	}
-
-	return flickr_account_type_id;
+	/* void */
 }
 
 
diff --git a/extensions/flicker_utils/flickr-authentication.c b/extensions/flicker_utils/flickr-authentication.c
index 9e8f6ba..a1a32a9 100644
--- a/extensions/flicker_utils/flickr-authentication.c
+++ b/extensions/flicker_utils/flickr-authentication.c
@@ -53,10 +53,12 @@ struct _FlickrAuthenticationPrivate
 };
 
 
-static GObjectClass *parent_class = NULL;
 static guint flickr_authentication_signals[LAST_SIGNAL] = { 0 };
 
 
+G_DEFINE_TYPE (FlickrAuthentication, flickr_authentication, G_TYPE_OBJECT)
+
+
 static void
 flickr_authentication_finalize (GObject *object)
 {
@@ -69,7 +71,7 @@ flickr_authentication_finalize (GObject *object)
 	_g_object_list_unref (self->priv->accounts);
 	_g_object_unref (self->priv->account);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (flickr_authentication_parent_class)->finalize (object);
 }
 
 
@@ -78,7 +80,6 @@ flickr_authentication_class_init (FlickrAuthenticationClass *class)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (FlickrAuthenticationPrivate));
 
 	object_class = (GObjectClass*) class;
@@ -118,34 +119,6 @@ flickr_authentication_init (FlickrAuthentication *self)
 }
 
 
-GType
-flickr_authentication_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) flickr_authentication_class_init,
-			NULL,
-			NULL,
-			sizeof (GthTask),
-			0,
-			(GInstanceInitFunc) flickr_authentication_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "FlickrAuthentication",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 FlickrAuthentication *
 flickr_authentication_new (FlickrConnection *conn,
 			   FlickrService    *service,
diff --git a/extensions/flicker_utils/flickr-connection.c b/extensions/flicker_utils/flickr-connection.c
index f153fd1..3dbf147 100644
--- a/extensions/flicker_utils/flickr-connection.c
+++ b/extensions/flicker_utils/flickr-connection.c
@@ -58,7 +58,7 @@ struct _FlickrConnectionPrivate
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (FlickrConnection, flickr_connection, GTH_TYPE_TASK)
 
 
 static void
@@ -75,7 +75,7 @@ flickr_connection_finalize (GObject *object)
 	g_free (self->priv->frob);
 	_g_object_unref (self->priv->session);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (flickr_connection_parent_class)->finalize (object);
 }
 
 
@@ -104,7 +104,6 @@ flickr_connection_class_init (FlickrConnectionClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (FlickrConnectionPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -130,34 +129,6 @@ flickr_connection_init (FlickrConnection *self)
 }
 
 
-GType
-flickr_connection_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (FlickrConnectionClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) flickr_connection_class_init,
-			NULL,
-			NULL,
-			sizeof (FlickrConnection),
-			0,
-			(GInstanceInitFunc) flickr_connection_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "FlickrConnection",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 FlickrConnection *
 flickr_connection_new (FlickrServer *server)
 {
diff --git a/extensions/flicker_utils/flickr-photo.c b/extensions/flicker_utils/flickr-photo.c
index cef3d3d..da03ab9 100644
--- a/extensions/flicker_utils/flickr-photo.c
+++ b/extensions/flicker_utils/flickr-photo.c
@@ -42,7 +42,14 @@ struct _FlickrPhotoPrivate {
 };
 
 
-static gpointer flickr_photo_parent_class = NULL;
+static void flickr_photo_dom_domizable_interface_init (DomDomizableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (FlickrPhoto,
+			 flickr_photo,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+					        flickr_photo_dom_domizable_interface_init))
 
 
 static void
@@ -70,7 +77,6 @@ flickr_photo_finalize (GObject *obj)
 static void
 flickr_photo_class_init (FlickrPhotoClass *klass)
 {
-	flickr_photo_parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (FlickrPhotoPrivate));
 	G_OBJECT_CLASS (klass)->finalize = flickr_photo_finalize;
 }
@@ -140,7 +146,7 @@ flickr_photo_dom_domizable_interface_init (DomDomizableInterface *iface)
 
 
 static void
-flickr_photo_instance_init (FlickrPhoto *self)
+flickr_photo_init (FlickrPhoto *self)
 {
 	int i;
 
@@ -159,41 +165,6 @@ flickr_photo_instance_init (FlickrPhoto *self)
 }
 
 
-GType
-flickr_photo_get_type (void)
-{
-	static GType flickr_photo_type_id = 0;
-
-	if (flickr_photo_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (FlickrPhotoClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) flickr_photo_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (FlickrPhoto),
-			0,
-			(GInstanceInitFunc) flickr_photo_instance_init,
-			NULL
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) flickr_photo_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		flickr_photo_type_id = g_type_register_static (G_TYPE_OBJECT,
-								  "FlickrPhoto",
-								  &g_define_type_info,
-								  0);
-		g_type_add_interface_static (flickr_photo_type_id, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-	}
-
-	return flickr_photo_type_id;
-}
-
-
 FlickrPhoto *
 flickr_photo_new (FlickrServer *server)
 {
diff --git a/extensions/flicker_utils/flickr-photoset.c b/extensions/flicker_utils/flickr-photoset.c
index 349c15e..be52bcb 100644
--- a/extensions/flicker_utils/flickr-photoset.c
+++ b/extensions/flicker_utils/flickr-photoset.c
@@ -26,7 +26,14 @@
 #include "flickr-photoset.h"
 
 
-static gpointer flickr_photoset_parent_class = NULL;
+static void flickr_photoset_dom_domizable_interface_init (DomDomizableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (FlickrPhotoset,
+			 flickr_photoset,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+					        flickr_photoset_dom_domizable_interface_init))
 
 
 static void
@@ -51,7 +58,6 @@ flickr_photoset_finalize (GObject *obj)
 static void
 flickr_photoset_class_init (FlickrPhotosetClass *klass)
 {
-	flickr_photoset_parent_class = g_type_class_peek_parent (klass);
 	G_OBJECT_CLASS (klass)->finalize = flickr_photoset_finalize;
 }
 
@@ -131,7 +137,7 @@ flickr_photoset_dom_domizable_interface_init (DomDomizableInterface *iface)
 
 
 static void
-flickr_photoset_instance_init (FlickrPhotoset *self)
+flickr_photoset_init (FlickrPhotoset *self)
 {
 	self->id = NULL;
 	self->title = NULL;
@@ -144,41 +150,6 @@ flickr_photoset_instance_init (FlickrPhotoset *self)
 }
 
 
-GType
-flickr_photoset_get_type (void)
-{
-	static GType flickr_photoset_type_id = 0;
-
-	if (flickr_photoset_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (FlickrPhotosetClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) flickr_photoset_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (FlickrPhotoset),
-			0,
-			(GInstanceInitFunc) flickr_photoset_instance_init,
-			NULL
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) flickr_photoset_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		flickr_photoset_type_id = g_type_register_static (G_TYPE_OBJECT,
-								   "FlickrPhotoset",
-								   &g_define_type_info,
-								   0);
-		g_type_add_interface_static (flickr_photoset_type_id, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-	}
-
-	return flickr_photoset_type_id;
-}
-
-
 FlickrPhotoset *
 flickr_photoset_new (void)
 {
diff --git a/extensions/flicker_utils/flickr-service.c b/extensions/flicker_utils/flickr-service.c
index 372d16d..909e974 100644
--- a/extensions/flicker_utils/flickr-service.c
+++ b/extensions/flicker_utils/flickr-service.c
@@ -34,6 +34,9 @@
 #define IMAGES_PER_PAGE 500
 
 
+G_DEFINE_TYPE (FlickrService, flickr_service, G_TYPE_OBJECT)
+
+
 typedef struct {
 	FlickrPrivacyType    privacy_level;
 	FlickrSafetyType     safety_level;
@@ -97,9 +100,6 @@ struct _FlickrServicePrivate
 };
 
 
-static gpointer parent_class = NULL;
-
-
 static void
 flickr_service_finalize (GObject *object)
 {
@@ -112,7 +112,7 @@ flickr_service_finalize (GObject *object)
 	post_photos_data_free (self->priv->post_photos);
 	add_photos_data_free (self->priv->add_photos);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (flickr_service_parent_class)->finalize (object);
 }
 
 
@@ -121,7 +121,6 @@ flickr_service_class_init (FlickrServiceClass *klass)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (FlickrServicePrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -139,34 +138,6 @@ flickr_service_init (FlickrService *self)
 }
 
 
-GType
-flickr_service_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (FlickrServiceClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) flickr_service_class_init,
-			NULL,
-			NULL,
-			sizeof (FlickrService),
-			0,
-			(GInstanceInitFunc) flickr_service_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "FlickrService",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 FlickrService *
 flickr_service_new (FlickrConnection *conn)
 {
diff --git a/extensions/flicker_utils/flickr-user.c b/extensions/flicker_utils/flickr-user.c
index 4679db3..426ed66 100644
--- a/extensions/flicker_utils/flickr-user.c
+++ b/extensions/flicker_utils/flickr-user.c
@@ -26,7 +26,14 @@
 #include "flickr-user.h"
 
 
-static gpointer flickr_user_parent_class = NULL;
+static void flickr_user_dom_domizable_interface_init (DomDomizableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (FlickrUser,
+			 flickr_user,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+					        flickr_user_dom_domizable_interface_init))
 
 
 static void
@@ -46,12 +53,11 @@ flickr_user_finalize (GObject *obj)
 static void
 flickr_user_class_init (FlickrUserClass *klass)
 {
-	flickr_user_parent_class = g_type_class_peek_parent (klass);
 	G_OBJECT_CLASS (klass)->finalize = flickr_user_finalize;
 }
 
 
-static DomElement*
+static DomElement *
 flickr_user_create_element (DomDomizable *base,
 			    DomDocument  *doc)
 {
@@ -113,48 +119,13 @@ flickr_user_dom_domizable_interface_init (DomDomizableInterface *iface)
 
 
 static void
-flickr_user_instance_init (FlickrUser *self)
+flickr_user_init (FlickrUser *self)
 {
 	self->id = NULL;
 	self->username = NULL;
 }
 
 
-GType
-flickr_user_get_type (void)
-{
-	static GType flickr_user_type_id = 0;
-
-	if (flickr_user_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (FlickrUserClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) flickr_user_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (FlickrUser),
-			0,
-			(GInstanceInitFunc) flickr_user_instance_init,
-			NULL
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) flickr_user_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		flickr_user_type_id = g_type_register_static (G_TYPE_OBJECT,
-								   "FlickrUser",
-								   &g_define_type_info,
-								   0);
-		g_type_add_interface_static (flickr_user_type_id, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-	}
-
-	return flickr_user_type_id;
-}
-
-
 FlickrUser *
 flickr_user_new (void)
 {
diff --git a/extensions/gstreamer_tools/gth-media-viewer-page.c b/extensions/gstreamer_tools/gth-media-viewer-page.c
index d7efe78..bd73184 100644
--- a/extensions/gstreamer_tools/gth-media-viewer-page.c
+++ b/extensions/gstreamer_tools/gth-media-viewer-page.c
@@ -31,11 +31,20 @@
 #include "gth-media-viewer-page.h"
 
 
-#define GTH_MEDIA_VIEWER_PAGE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTH_TYPE_MEDIA_VIEWER_PAGE, GthMediaViewerPagePrivate))
 #define GET_WIDGET(x) (_gtk_builder_get_widget (self->priv->builder, (x)))
 #define PROGRESS_DELAY 500
 
 
+static void gth_viewer_page_interface_init (GthViewerPageInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthMediaViewerPage,
+			 gth_media_viewer_page,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (GTH_TYPE_VIEWER_PAGE,
+					 	gth_viewer_page_interface_init))
+
+
 struct _GthMediaViewerPagePrivate {
 	GthBrowser     *browser;
 	GtkActionGroup *actions;
@@ -68,7 +77,6 @@ struct _GthMediaViewerPagePrivate {
 };
 
 
-static gpointer gth_media_viewer_page_parent_class = NULL;
 static double default_rates[] = { 0.03, 0.06, 0.12, 0.25, 0.33, 0.50, 0.66, 1.0, 1.50, 2.0, 3.0, 4.0, 8.0, 16.0, 32.0 };
 
 
@@ -1300,7 +1308,7 @@ gth_media_viewer_page_class_init (GthMediaViewerPageClass *klass)
 
 
 static void
-gth_viewer_page_interface_init (GthViewerPageIface *iface)
+gth_viewer_page_interface_init (GthViewerPageInterface *iface)
 {
 	iface->activate = gth_media_viewer_page_real_activate;
 	iface->deactivate = gth_media_viewer_page_real_deactivate;
@@ -1321,9 +1329,9 @@ gth_viewer_page_interface_init (GthViewerPageIface *iface)
 
 
 static void
-gth_media_viewer_page_instance_init (GthMediaViewerPage *self)
+gth_media_viewer_page_init (GthMediaViewerPage *self)
 {
-	self->priv = GTH_MEDIA_VIEWER_PAGE_GET_PRIVATE (self);
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_MEDIA_VIEWER_PAGE, GthMediaViewerPagePrivate);
 	self->priv->update_progress_id = 0;
 	self->priv->xwin_assigned = FALSE;
 	self->priv->has_video = FALSE;
@@ -1336,34 +1344,6 @@ gth_media_viewer_page_instance_init (GthMediaViewerPage *self)
 }
 
 
-GType
-gth_media_viewer_page_get_type (void) {
-	static GType gth_media_viewer_page_type_id = 0;
-	if (gth_media_viewer_page_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthMediaViewerPageClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_media_viewer_page_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthMediaViewerPage),
-			0,
-			(GInstanceInitFunc) gth_media_viewer_page_instance_init,
-			NULL
-		};
-		static const GInterfaceInfo gth_viewer_page_info = {
-			(GInterfaceInitFunc) gth_viewer_page_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		gth_media_viewer_page_type_id = g_type_register_static (G_TYPE_OBJECT, "GthMediaViewerPage", &g_define_type_info, 0);
-		g_type_add_interface_static (gth_media_viewer_page_type_id, GTH_TYPE_VIEWER_PAGE, &gth_viewer_page_info);
-	}
-	return gth_media_viewer_page_type_id;
-}
-
-
 GthBrowser *
 gth_media_viewer_page_get_browser (GthMediaViewerPage *self)
 {
diff --git a/extensions/gstreamer_tools/gth-metadata-provider-gstreamer.c b/extensions/gstreamer_tools/gth-metadata-provider-gstreamer.c
index 8d2c26b..5033aee 100644
--- a/extensions/gstreamer_tools/gth-metadata-provider-gstreamer.c
+++ b/extensions/gstreamer_tools/gth-metadata-provider-gstreamer.c
@@ -26,7 +26,7 @@
 #include "gth-metadata-provider-gstreamer.h"
 
 
-static GthMetadataProviderClass *parent_class = NULL;
+G_DEFINE_TYPE (GthMetadataProviderGstreamer, gth_metadata_provider_gstreamer, GTH_TYPE_METADATA_PROVIDER)
 
 
 static gboolean
@@ -73,36 +73,16 @@ gth_metadata_provider_gstreamer_read (GthMetadataProvider *self,
 static void
 gth_metadata_provider_gstreamer_class_init (GthMetadataProviderGstreamerClass *klass)
 {
-	parent_class = g_type_class_peek_parent (klass);
+	GthMetadataProviderClass *metadata_provider_class;
 
-	GTH_METADATA_PROVIDER_CLASS (klass)->can_read = gth_metadata_provider_gstreamer_can_read;
-	GTH_METADATA_PROVIDER_CLASS (klass)->read = gth_metadata_provider_gstreamer_read;
+	metadata_provider_class = GTH_METADATA_PROVIDER_CLASS (klass);
+	metadata_provider_class->can_read = gth_metadata_provider_gstreamer_can_read;
+	metadata_provider_class->read = gth_metadata_provider_gstreamer_read;
 }
 
 
-GType
-gth_metadata_provider_gstreamer_get_type (void)
+static void
+gth_metadata_provider_gstreamer_init (GthMetadataProviderGstreamer *self)
 {
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthMetadataProviderGstreamerClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_metadata_provider_gstreamer_class_init,
-			NULL,
-			NULL,
-			sizeof (GthMetadataProviderGstreamer),
-			0,
-			(GInstanceInitFunc) NULL
-		};
-
-		type = g_type_register_static (GTH_TYPE_METADATA_PROVIDER,
-					       "GthMetadataProviderGstreamer",
-					       &type_info,
-					       0);
-	}
-
-	return type;
+	/* void */
 }
diff --git a/extensions/image_print/gth-image-print-job.c b/extensions/image_print/gth-image-print-job.c
index 6d4772d..cdace73 100644
--- a/extensions/image_print/gth-image-print-job.c
+++ b/extensions/image_print/gth-image-print-job.c
@@ -33,7 +33,7 @@
 #define GET_WIDGET(name) _gtk_builder_get_widget (self->priv->builder, (name))
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthImagePrintJob, gth_image_print_job, G_TYPE_OBJECT)
 
 
 struct _GthImagePrintJobPrivate {
@@ -114,7 +114,7 @@ gth_image_print_job_finalize (GObject *base)
 	_g_object_unref (self->priv->builder);
 	g_free (self->priv->event_name);
 
-	G_OBJECT_CLASS (parent_class)->finalize (base);
+	G_OBJECT_CLASS (gth_image_print_job_parent_class)->finalize (base);
 }
 
 
@@ -123,7 +123,6 @@ gth_image_print_job_class_init (GthImagePrintJobClass *klass)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthImagePrintJobPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -158,34 +157,6 @@ gth_image_print_job_init (GthImagePrintJob *self)
 }
 
 
-GType
-gth_image_print_job_get_type (void)
-{
-        static GType type = 0;
-
-        if (! type) {
-                GTypeInfo type_info = {
-			sizeof (GthImagePrintJobClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_image_print_job_class_init,
-			NULL,
-			NULL,
-			sizeof (GthImagePrintJob),
-			0,
-			(GInstanceInitFunc) gth_image_print_job_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthImagePrintJob",
-					       &type_info,
-					       0);
-	}
-
-        return type;
-}
-
-
 static double
 get_text_height (GthImagePrintJob *self,
 		 PangoLayout      *pango_layout,
diff --git a/extensions/image_print/gth-load-image-info-task.c b/extensions/image_print/gth-load-image-info-task.c
index d49c130..a7d4711 100644
--- a/extensions/image_print/gth-load-image-info-task.c
+++ b/extensions/image_print/gth-load-image-info-task.c
@@ -32,7 +32,7 @@ struct _GthLoadImageInfoTaskPrivate {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthLoadImageInfoTask, gth_load_image_info_task, GTH_TYPE_TASK)
 
 
 static void
@@ -49,7 +49,7 @@ gth_load_image_info_task_finalize (GObject *object)
 	g_free (self->priv->attributes);
 	g_object_unref (self->priv->loader);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_load_image_info_task_parent_class)->finalize (object);
 }
 
 
@@ -209,7 +209,6 @@ gth_load_image_info_task_class_init (GthLoadImageInfoTaskClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthLoadImageInfoTaskPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -229,34 +228,6 @@ gth_load_image_info_task_init (GthLoadImageInfoTask *self)
 }
 
 
-GType
-gth_load_image_info_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthLoadImageInfoTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_load_image_info_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthLoadImageInfoTask),
-			0,
-			(GInstanceInitFunc) gth_load_image_info_task_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthLoadImageInfoTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthTask *
 gth_load_image_info_task_new (GthImageInfo **images,
 			      int            n_images,
diff --git a/extensions/image_rotation/gth-reset-orientation-task.c b/extensions/image_rotation/gth-reset-orientation-task.c
index 97ed75a..7f076d5 100644
--- a/extensions/image_rotation/gth-reset-orientation-task.c
+++ b/extensions/image_rotation/gth-reset-orientation-task.c
@@ -23,6 +23,9 @@
 #include "gth-reset-orientation-task.h"
 
 
+G_DEFINE_TYPE (GthResetOrientationTask, gth_reset_orientation_task, GTH_TYPE_TASK)
+
+
 struct _GthResetOrientationTaskPrivate {
 	GthBrowser    *browser;
 	GList         *file_list;
@@ -33,9 +36,6 @@ struct _GthResetOrientationTaskPrivate {
 };
 
 
-static gpointer parent_class = NULL;
-
-
 static void
 gth_reset_orientation_task_finalize (GObject *object)
 {
@@ -46,7 +46,7 @@ gth_reset_orientation_task_finalize (GObject *object)
 	_g_object_unref (self->priv->file_data);
 	_g_object_list_unref (self->priv->file_list);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_reset_orientation_task_parent_class)->finalize (object);
 }
 
 
@@ -173,7 +173,6 @@ gth_reset_orientation_task_class_init (GthResetOrientationTaskClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthResetOrientationTaskPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -192,34 +191,6 @@ gth_reset_orientation_task_init (GthResetOrientationTask *self)
 }
 
 
-GType
-gth_reset_orientation_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthResetOrientationTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_reset_orientation_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthResetOrientationTask),
-			0,
-			(GInstanceInitFunc) gth_reset_orientation_task_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthResetOrientationTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthTask *
 gth_reset_orientation_task_new (GthBrowser *browser,
 				GList      *file_list)
diff --git a/extensions/image_rotation/gth-transform-task.c b/extensions/image_rotation/gth-transform-task.c
index 5ac5e17..9ad1208 100644
--- a/extensions/image_rotation/gth-transform-task.c
+++ b/extensions/image_rotation/gth-transform-task.c
@@ -24,6 +24,9 @@
 #include "rotation-utils.h"
 
 
+G_DEFINE_TYPE (GthTransformTask, gth_transform_task, GTH_TYPE_TASK)
+
+
 struct _GthTransformTaskPrivate {
 	GthBrowser    *browser;
 	GList         *file_list;
@@ -36,9 +39,6 @@ struct _GthTransformTaskPrivate {
 };
 
 
-static gpointer parent_class = NULL;
-
-
 static void
 gth_transform_task_finalize (GObject *object)
 {
@@ -49,7 +49,7 @@ gth_transform_task_finalize (GObject *object)
 	_g_object_unref (self->priv->file_data);
 	_g_object_list_unref (self->priv->file_list);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_transform_task_parent_class)->finalize (object);
 }
 
 
@@ -198,7 +198,6 @@ gth_transform_task_class_init (GthTransformTaskClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthTransformTaskPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -218,34 +217,6 @@ gth_transform_task_init (GthTransformTask *self)
 }
 
 
-GType
-gth_transform_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthTransformTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_transform_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthTransformTask),
-			0,
-			(GInstanceInitFunc) gth_transform_task_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthTransformTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthTask *
 gth_transform_task_new (GthBrowser   *browser,
 			GList        *file_list,
diff --git a/extensions/image_viewer/gth-image-histogram.c b/extensions/image_viewer/gth-image-histogram.c
index dcc6aea..98a3b27 100644
--- a/extensions/image_viewer/gth-image-histogram.c
+++ b/extensions/image_viewer/gth-image-histogram.c
@@ -26,11 +26,21 @@
 #include "gth-image-histogram.h"
 #include "gth-image-viewer-page.h"
 
-#define GTH_IMAGE_HISTOGRAM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTH_TYPE_IMAGE_HISTOGRAM, GthImageHistogramPrivate))
+
 #define MIN_HISTOGRAM_HEIGHT 250
 
 
-static gpointer parent_class = NULL;
+static void gth_image_histogram_gth_multipage_child_interface_init (GthMultipageChildInterface *iface);
+static void gth_image_histogram_gth_property_view_interface_init (GthPropertyViewInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthImageHistogram,
+			 gth_image_histogram,
+			 GTK_TYPE_VBOX,
+			 G_IMPLEMENT_INTERFACE (GTH_TYPE_MULTIPAGE_CHILD,
+					        gth_image_histogram_gth_multipage_child_interface_init)
+		         G_IMPLEMENT_INTERFACE (GTH_TYPE_PROPERTY_VIEW,
+		        		        gth_image_histogram_gth_property_view_interface_init))
 
 
 struct _GthImageHistogramPrivate {
@@ -88,39 +98,20 @@ gth_image_histogram_finalize (GObject *base)
 	GthImageHistogram *self = GTH_IMAGE_HISTOGRAM (base);
 
 	g_object_unref (self->priv->histogram);
-	G_OBJECT_CLASS (parent_class)->finalize (base);
+	G_OBJECT_CLASS (gth_image_histogram_parent_class)->finalize (base);
 }
 
 
 static void
 gth_image_histogram_class_init (GthImageHistogramClass *klass)
 {
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthImageHistogramPrivate));
-
 	G_OBJECT_CLASS (klass)->finalize = gth_image_histogram_finalize;
 }
 
 
 static void
-gth_image_histogram_init (GthImageHistogram *self)
-{
-	self->priv = GTH_IMAGE_HISTOGRAM_GET_PRIVATE (self);
-	self->priv->histogram = gth_histogram_new ();
-
-	gtk_box_set_spacing (GTK_BOX (self), 6);
-	gtk_container_set_border_width (GTK_CONTAINER (self), 2);
-
-	self->priv->histogram_view = gth_histogram_view_new (self->priv->histogram);
-	gth_histogram_view_show_info (GTH_HISTOGRAM_VIEW (self->priv->histogram_view), TRUE);
-	gtk_widget_set_size_request (self->priv->histogram_view, -1, MIN_HISTOGRAM_HEIGHT);
-	gtk_widget_show (self->priv->histogram_view);
-	gtk_box_pack_start (GTK_BOX (self), self->priv->histogram_view, FALSE, FALSE, 0);
-}
-
-
-static void
-gth_image_histogram_gth_multipage_child_interface_init (GthMultipageChildIface *iface)
+gth_image_histogram_gth_multipage_child_interface_init (GthMultipageChildInterface *iface)
 {
 	iface->get_name = gth_image_histogram_real_get_name;
 	iface->get_icon = gth_image_histogram_real_get_icon;
@@ -128,47 +119,24 @@ gth_image_histogram_gth_multipage_child_interface_init (GthMultipageChildIface *
 
 
 static void
-gth_image_histogram_gth_property_view_interface_init (GthPropertyViewIface *iface)
+gth_image_histogram_gth_property_view_interface_init (GthPropertyViewInterface *iface)
 {
 	iface->set_file = gth_image_histogram_real_set_file;
 }
 
 
-GType
-gth_image_histogram_get_type (void)
+static void
+gth_image_histogram_init (GthImageHistogram *self)
 {
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthImageHistogramClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_image_histogram_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthImageHistogram),
-			0,
-			(GInstanceInitFunc) gth_image_histogram_init,
-			NULL
-		};
-		static const GInterfaceInfo gth_multipage_child_info = {
-			(GInterfaceInitFunc) gth_image_histogram_gth_multipage_child_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		static const GInterfaceInfo gth_property_view_info = {
-			(GInterfaceInitFunc) gth_image_histogram_gth_property_view_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_VBOX,
-					       "GthImageHistogram",
-					       &g_define_type_info,
-					       0);
-		g_type_add_interface_static (type, GTH_TYPE_MULTIPAGE_CHILD, &gth_multipage_child_info);
-		g_type_add_interface_static (type, GTH_TYPE_PROPERTY_VIEW, &gth_property_view_info);
-	}
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_IMAGE_HISTOGRAM, GthImageHistogramPrivate);
+	self->priv->histogram = gth_histogram_new ();
 
-	return type;
+	gtk_box_set_spacing (GTK_BOX (self), 6);
+	gtk_container_set_border_width (GTK_CONTAINER (self), 2);
+
+	self->priv->histogram_view = gth_histogram_view_new (self->priv->histogram);
+	gth_histogram_view_show_info (GTH_HISTOGRAM_VIEW (self->priv->histogram_view), TRUE);
+	gtk_widget_set_size_request (self->priv->histogram_view, -1, MIN_HISTOGRAM_HEIGHT);
+	gtk_widget_show (self->priv->histogram_view);
+	gtk_box_pack_start (GTK_BOX (self), self->priv->histogram_view, FALSE, FALSE, 0);
 }
diff --git a/extensions/image_viewer/gth-image-viewer-page.c b/extensions/image_viewer/gth-image-viewer-page.c
index af6eb05..69c307c 100644
--- a/extensions/image_viewer/gth-image-viewer-page.c
+++ b/extensions/image_viewer/gth-image-viewer-page.c
@@ -26,10 +26,20 @@
 #include "gth-image-viewer-page.h"
 #include "preferences.h"
 
-#define GTH_IMAGE_VIEWER_PAGE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTH_TYPE_IMAGE_VIEWER_PAGE, GthImageViewerPagePrivate))
+
 #define GCONF_NOTIFICATIONS 8
 
 
+static void gth_viewer_page_interface_init (GthViewerPageInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthImageViewerPage,
+			 gth_image_viewer_page,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (GTH_TYPE_VIEWER_PAGE,
+					        gth_viewer_page_interface_init))
+
+
 struct _GthImageViewerPagePrivate {
 	GthBrowser        *browser;
 	GtkWidget         *image_navigator;
@@ -50,7 +60,6 @@ struct _GthImageViewerPagePrivate {
 	gboolean           can_paste;
 };
 
-static gpointer gth_image_viewer_page_parent_class = NULL;
 
 static const char *image_viewer_ui_info =
 "<ui>"
@@ -1391,7 +1400,7 @@ gth_image_viewer_page_class_init (GthImageViewerPageClass *klass)
 
 
 static void
-gth_viewer_page_interface_init (GthViewerPageIface *iface)
+gth_viewer_page_interface_init (GthViewerPageInterface *iface)
 {
 	iface->activate = gth_image_viewer_page_real_activate;
 	iface->deactivate = gth_image_viewer_page_real_deactivate;
@@ -1413,9 +1422,9 @@ gth_viewer_page_interface_init (GthViewerPageIface *iface)
 
 
 static void
-gth_image_viewer_page_instance_init (GthImageViewerPage *self)
+gth_image_viewer_page_init (GthImageViewerPage *self)
 {
-	self->priv = GTH_IMAGE_VIEWER_PAGE_GET_PRIVATE (self);
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_IMAGE_VIEWER_PAGE, GthImageViewerPagePrivate);
 	self->priv->history = gth_image_history_new ();
 	self->priv->shrink_wrap = FALSE;
 	self->priv->last_loaded = NULL;
@@ -1424,34 +1433,6 @@ gth_image_viewer_page_instance_init (GthImageViewerPage *self)
 }
 
 
-GType
-gth_image_viewer_page_get_type (void) {
-	static GType gth_image_viewer_page_type_id = 0;
-	if (gth_image_viewer_page_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthImageViewerPageClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_image_viewer_page_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthImageViewerPage),
-			0,
-			(GInstanceInitFunc) gth_image_viewer_page_instance_init,
-			NULL
-		};
-		static const GInterfaceInfo gth_viewer_page_info = {
-			(GInterfaceInitFunc) gth_viewer_page_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		gth_image_viewer_page_type_id = g_type_register_static (G_TYPE_OBJECT, "GthImageViewerPage", &g_define_type_info, 0);
-		g_type_add_interface_static (gth_image_viewer_page_type_id, GTH_TYPE_VIEWER_PAGE, &gth_viewer_page_info);
-	}
-	return gth_image_viewer_page_type_id;
-}
-
-
 GtkWidget *
 gth_image_viewer_page_get_image_viewer (GthImageViewerPage *self)
 {
diff --git a/extensions/image_viewer/gth-metadata-provider-image.c b/extensions/image_viewer/gth-metadata-provider-image.c
index 75fad87..b03217c 100644
--- a/extensions/image_viewer/gth-metadata-provider-image.c
+++ b/extensions/image_viewer/gth-metadata-provider-image.c
@@ -30,7 +30,10 @@
 #include "gth-metadata-provider-image.h"
 
 
-static GthMetadataProviderClass *parent_class = NULL;
+#define BUFFER_SIZE 32
+
+
+G_DEFINE_TYPE (GthMetadataProviderImage, gth_metadata_provider_image, GTH_TYPE_METADATA_PROVIDER)
 
 
 static gboolean
@@ -48,9 +51,6 @@ gth_metadata_provider_image_can_read (GthMetadataProvider  *self,
 }
 
 
-#define BUFFER_SIZE 32
-
-
 static void
 gth_metadata_provider_image_read (GthMetadataProvider *self,
 				  GthFileData         *file_data,
@@ -198,36 +198,16 @@ gth_metadata_provider_image_read (GthMetadataProvider *self,
 static void
 gth_metadata_provider_image_class_init (GthMetadataProviderImageClass *klass)
 {
-	parent_class = g_type_class_peek_parent (klass);
+	GthMetadataProviderClass *metadata_provider_class;
 
-	GTH_METADATA_PROVIDER_CLASS (klass)->can_read = gth_metadata_provider_image_can_read;
-	GTH_METADATA_PROVIDER_CLASS (klass)->read = gth_metadata_provider_image_read;
+	metadata_provider_class = GTH_METADATA_PROVIDER_CLASS (klass);
+	metadata_provider_class->can_read = gth_metadata_provider_image_can_read;
+	metadata_provider_class->read = gth_metadata_provider_image_read;
 }
 
 
-GType
-gth_metadata_provider_image_get_type (void)
+static void
+gth_metadata_provider_image_init (GthMetadataProviderImage *self)
 {
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthMetadataProviderImageClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_metadata_provider_image_class_init,
-			NULL,
-			NULL,
-			sizeof (GthMetadataProviderImage),
-			0,
-			(GInstanceInitFunc) NULL
-		};
-
-		type = g_type_register_static (GTH_TYPE_METADATA_PROVIDER,
-					       "GthMetadataProviderImage",
-					       &type_info,
-					       0);
-	}
-
-	return type;
+	/* void */
 }
diff --git a/extensions/importer/gth-import-destination-button.c b/extensions/importer/gth-import-destination-button.c
index 28859ba..0fba988 100644
--- a/extensions/importer/gth-import-destination-button.c
+++ b/extensions/importer/gth-import-destination-button.c
@@ -24,7 +24,7 @@
 #include "gth-import-destination-button.h"
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthImportDestinationButton, gth_import_destination_button, GTK_TYPE_BUTTON)
 
 
 struct _GthImportDestinationButtonPrivate {
@@ -83,7 +83,7 @@ _update_subfolder_label_color (GthImportDestinationButton *self)
 static void
 gth_import_destination_button_realize (GtkWidget *widget)
 {
-	GTK_WIDGET_CLASS (parent_class)->realize (widget);
+	GTK_WIDGET_CLASS (gth_import_destination_button_parent_class)->realize (widget);
 	_update_subfolder_label_color (GTH_IMPORT_DESTINATION_BUTTON (widget));
 }
 
@@ -93,7 +93,6 @@ gth_import_destination_button_class_init (GthImportDestinationButtonClass *klass
 {
 	GtkWidgetClass *widget_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthImportDestinationButtonPrivate));
 
 	widget_class = (GtkWidgetClass*) klass;
@@ -148,34 +147,6 @@ gth_import_destination_button_init (GthImportDestinationButton *self)
 }
 
 
-GType
-gth_import_destination_button_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthImportDestinationButtonClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_import_destination_button_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthImportDestinationButton),
-			0,
-			(GInstanceInitFunc) gth_import_destination_button_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_BUTTON,
-					       "GthImportDestinationButton",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static void
 preferences_dialog_destination_changed_cb (GthImportPreferencesDialog *dialog,
 					   GthImportDestinationButton *self)
diff --git a/extensions/importer/gth-import-preferences-dialog.c b/extensions/importer/gth-import-preferences-dialog.c
index 820bdb0..0976a68 100644
--- a/extensions/importer/gth-import-preferences-dialog.c
+++ b/extensions/importer/gth-import-preferences-dialog.c
@@ -30,6 +30,9 @@
 #define GET_WIDGET(x) (_gtk_builder_get_widget (self->priv->builder, (x)))
 
 
+G_DEFINE_TYPE (GthImportPreferencesDialog, gth_import_preferences_dialog, GTK_TYPE_DIALOG)
+
+
 /* Signals */
 enum {
 	DESTINATION_CHANGED,
@@ -37,7 +40,6 @@ enum {
 };
 
 
-static gpointer parent_class = NULL;
 static guint signals[LAST_SIGNAL] = { 0 };
 
 
@@ -60,7 +62,7 @@ gth_import_preferences_dialog_finalize (GObject *object)
 	_g_object_unref (self->priv->builder);
 	g_free (self->priv->event);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_import_preferences_dialog_parent_class)->finalize (object);
 }
 
 
@@ -69,7 +71,6 @@ gth_import_preferences_dialog_class_init (GthImportPreferencesDialogClass *klass
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthImportPreferencesDialogPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -411,34 +412,6 @@ gth_import_preferences_dialog_init (GthImportPreferencesDialog *self)
 }
 
 
-GType
-gth_import_preferences_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthImportPreferencesDialogClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_import_preferences_dialog_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthImportPreferencesDialog),
-			0,
-			(GInstanceInitFunc) gth_import_preferences_dialog_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "GthImportPreferencesDialog",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GtkWidget *
 gth_import_preferences_dialog_new (void)
 {
diff --git a/extensions/importer/gth-import-task.c b/extensions/importer/gth-import-task.c
index 9d9aba8..b509af8 100644
--- a/extensions/importer/gth-import-task.c
+++ b/extensions/importer/gth-import-task.c
@@ -31,6 +31,9 @@
 #define IMPORTED_KEY "imported"
 
 
+G_DEFINE_TYPE (GthImportTask, gth_import_task, GTH_TYPE_TASK)
+
+
 struct _GthImportTaskPrivate {
 	GthBrowser          *browser;
 	GList               *files;
@@ -62,9 +65,6 @@ struct _GthImportTaskPrivate {
 };
 
 
-static gpointer parent_class = NULL;
-
-
 static void
 gth_import_task_finalize (GObject *object)
 {
@@ -88,7 +88,7 @@ gth_import_task_finalize (GObject *object)
 	_g_object_unref (self->priv->imported_catalog);
 	g_object_unref (self->priv->browser);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_import_task_parent_class)->finalize (object);
 }
 
 
@@ -731,7 +731,6 @@ gth_import_task_class_init (GthImportTaskClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthImportTaskPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -756,34 +755,6 @@ gth_import_task_init (GthImportTask *self)
 }
 
 
-GType
-gth_import_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthImportTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_import_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthImportTask),
-			0,
-			(GInstanceInitFunc) gth_import_task_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthImportTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthTask *
 gth_import_task_new (GthBrowser         *browser,
 		     GList              *files,
diff --git a/extensions/list_tools/gth-script-editor-dialog.c b/extensions/list_tools/gth-script-editor-dialog.c
index da23528..8dae48f 100644
--- a/extensions/list_tools/gth-script-editor-dialog.c
+++ b/extensions/list_tools/gth-script-editor-dialog.c
@@ -31,7 +31,8 @@
 #define NO_SHORTCUT 0
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthScriptEditorDialog, gth_script_editor_dialog, GTK_TYPE_DIALOG)
+
 
 enum {
 	SHORTCUT_NAME_COLUMN = 0,
@@ -63,7 +64,7 @@ gth_script_editor_dialog_finalize (GObject *object)
 		dialog->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_script_editor_dialog_parent_class)->finalize (object);
 }
 
 
@@ -72,9 +73,7 @@ gth_script_editor_dialog_class_init (GthScriptEditorDialogClass *class)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	object_class = (GObjectClass*) class;
-
 	object_class->finalize = gth_script_editor_dialog_finalize;
 }
 
@@ -87,34 +86,6 @@ gth_script_editor_dialog_init (GthScriptEditorDialog *dialog)
 }
 
 
-GType
-gth_script_editor_dialog_get_type (void)
-{
-        static GType type = 0;
-
-        if (! type) {
-                GTypeInfo type_info = {
-			sizeof (GthScriptEditorDialogClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_script_editor_dialog_class_init,
-			NULL,
-			NULL,
-			sizeof (GthScriptEditorDialog),
-			0,
-			(GInstanceInitFunc) gth_script_editor_dialog_init
-		};
-
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "GthScriptEditorDialog",
-					       &type_info,
-					       0);
-	}
-
-        return type;
-}
-
-
 static void
 update_sensitivity (GthScriptEditorDialog *self)
 {
diff --git a/extensions/list_tools/gth-script-file.c b/extensions/list_tools/gth-script-file.c
index 733e08a..70b5331 100644
--- a/extensions/list_tools/gth-script-file.c
+++ b/extensions/list_tools/gth-script-file.c
@@ -42,22 +42,24 @@ struct _GthScriptFilePrivate
 };
 
 
-static gpointer parent_class = NULL;
 static guint gth_script_file_signals[LAST_SIGNAL] = { 0 };
 
+
 static GType gth_script_file_get_type (void);
 
 
+G_DEFINE_TYPE (GthScriptFile, gth_script_file, G_TYPE_OBJECT)
+
+
 static void
 gth_script_file_finalize (GObject *object)
 {
 	GthScriptFile *self;
 
 	self = GTH_SCRIPT_FILE (object);
-
 	_g_object_list_unref (self->priv->items);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_script_file_parent_class)->finalize (object);
 }
 
 
@@ -66,7 +68,6 @@ gth_script_file_class_init (GthScriptFileClass *klass)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthScriptFilePrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -93,34 +94,6 @@ gth_script_file_init (GthScriptFile *self)
 }
 
 
-static GType
-gth_script_file_get_type (void)
-{
-        static GType type = 0;
-
-        if (! type) {
-                GTypeInfo type_info = {
-			sizeof (GthScriptFileClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_script_file_class_init,
-			NULL,
-			NULL,
-			sizeof (GthScriptFile),
-			0,
-			(GInstanceInitFunc) gth_script_file_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthScriptFile",
-					       &type_info,
-					       0);
-	}
-
-        return type;
-}
-
-
 GthScriptFile *
 gth_script_file_get (void)
 {
diff --git a/extensions/list_tools/gth-script-task.c b/extensions/list_tools/gth-script-task.c
index 4175323..67f8b9c 100644
--- a/extensions/list_tools/gth-script-task.c
+++ b/extensions/list_tools/gth-script-task.c
@@ -23,6 +23,9 @@
 #include "gth-script-task.h"
 
 
+G_DEFINE_TYPE (GthScriptTask, gth_script_task, GTH_TYPE_TASK)
+
+
 struct _GthScriptTaskPrivate {
 	GthScript *script;
 	GtkWindow *parent;
@@ -35,20 +38,16 @@ struct _GthScriptTaskPrivate {
 };
 
 
-static gpointer parent_class = NULL;
-
-
 static void
 gth_script_task_finalize (GObject *object)
 {
 	GthScriptTask *self;
 
 	self = GTH_SCRIPT_TASK (object);
-
 	g_object_unref (self->priv->script);
 	_g_object_list_unref (self->priv->file_list);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_script_task_parent_class)->finalize (object);
 }
 
 
@@ -257,7 +256,6 @@ gth_script_task_class_init (GthScriptTaskClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthScriptTaskPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -277,34 +275,6 @@ gth_script_task_init (GthScriptTask *self)
 }
 
 
-GType
-gth_script_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthScriptTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_script_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthScriptTask),
-			0,
-			(GInstanceInitFunc) gth_script_task_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthScriptTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthTask *
 gth_script_task_new (GtkWindow *parent,
 		     GthScript *script,
diff --git a/extensions/list_tools/gth-script.c b/extensions/list_tools/gth-script.c
index ac89694..0dce0de 100644
--- a/extensions/list_tools/gth-script.c
+++ b/extensions/list_tools/gth-script.c
@@ -25,6 +25,19 @@
 #include "gth-script.h"
 
 
+static void gth_script_dom_domizable_interface_init (DomDomizableInterface *iface);
+static void gth_script_gth_duplicable_interface_init (GthDuplicableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthScript,
+			 gth_script,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+					        gth_script_dom_domizable_interface_init)
+		         G_IMPLEMENT_INTERFACE (GTH_TYPE_DUPLICABLE,
+		        		        gth_script_gth_duplicable_interface_init))
+
+
 enum {
         PROP_0,
         PROP_ID,
@@ -50,9 +63,6 @@ struct _GthScriptPrivate {
 };
 
 
-static gpointer *parent_class = NULL;
-
-
 static DomElement*
 gth_script_real_create_element (DomDomizable *base,
 				DomDocument  *doc)
@@ -139,12 +149,11 @@ gth_script_finalize (GObject *base)
 	GthScript *self;
 
 	self = GTH_SCRIPT (base);
-
 	g_free (self->priv->id);
 	g_free (self->priv->display_name);
 	g_free (self->priv->command);
 
-	G_OBJECT_CLASS (parent_class)->finalize (base);
+	G_OBJECT_CLASS (gth_script_parent_class)->finalize (base);
 }
 
 
@@ -245,7 +254,6 @@ gth_script_class_init (GthScriptClass *klass)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthScriptPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -325,7 +333,7 @@ gth_script_dom_domizable_interface_init (DomDomizableInterface *iface)
 
 
 static void
-gth_script_gth_duplicable_interface_init (GthDuplicableIface *iface)
+gth_script_gth_duplicable_interface_init (GthDuplicableInterface *iface)
 {
 	iface->duplicate = gth_script_real_duplicate;
 }
@@ -341,46 +349,6 @@ gth_script_init (GthScript *self)
 }
 
 
-GType
-gth_script_get_type (void)
-{
-        static GType type = 0;
-
-        if (! type) {
-                GTypeInfo type_info = {
-			sizeof (GthScriptClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_script_class_init,
-			NULL,
-			NULL,
-			sizeof (GthScript),
-			0,
-			(GInstanceInitFunc) gth_script_init
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) gth_script_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		static const GInterfaceInfo gth_duplicable_info = {
-			(GInterfaceInitFunc) gth_script_gth_duplicable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthScript",
-					       &type_info,
-					       0);
-		g_type_add_interface_static (type, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-		g_type_add_interface_static (type, GTH_TYPE_DUPLICABLE, &gth_duplicable_info);
-	}
-
-        return type;
-}
-
-
 GthScript*
 gth_script_new (void)
 {
diff --git a/extensions/map_view/gth-map-view.c b/extensions/map_view/gth-map-view.c
index 91b6abe..6f80740 100644
--- a/extensions/map_view/gth-map-view.c
+++ b/extensions/map_view/gth-map-view.c
@@ -32,7 +32,16 @@
 #define LABEL_MAX_WIDTH 200
 
 
-static gpointer parent_class = NULL;
+static void gth_map_view_gth_multipage_child_interface_init (GthMultipageChildInterface *iface);
+static void gth_map_view_gth_property_view_interface_init (GthPropertyViewInterface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (GthMapView,
+			 gth_map_view,
+			 GTK_TYPE_VBOX,
+			 G_IMPLEMENT_INTERFACE (GTH_TYPE_MULTIPAGE_CHILD,
+					        gth_map_view_gth_multipage_child_interface_init)
+		         G_IMPLEMENT_INTERFACE (GTH_TYPE_PROPERTY_VIEW,
+		        		        gth_map_view_gth_property_view_interface_init))
 
 
 struct _GthMapViewPrivate {
@@ -207,7 +216,7 @@ gth_map_view_real_get_icon (GthMultipageChild *self)
 static void
 gth_map_view_finalize (GObject *base)
 {
-	G_OBJECT_CLASS (parent_class)->finalize (base);
+	G_OBJECT_CLASS (gth_map_view_parent_class)->finalize (base);
 }
 
 
@@ -218,7 +227,7 @@ gth_map_view_realize (GtkWidget *widget)
 
 	self = GTH_MAP_VIEW (widget);
 
-	GTK_WIDGET_CLASS (parent_class)->realize (widget);
+	GTK_WIDGET_CLASS (gth_map_view_parent_class)->realize (widget);
 	if (! gtk_widget_get_visible (self->priv->no_gps_label))
 		gtk_widget_show (self->priv->embed);
 }
@@ -231,7 +240,7 @@ gth_map_view_unrealize (GtkWidget *widget)
 
 	self = GTH_MAP_VIEW (widget);
 
-	GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
+	GTK_WIDGET_CLASS (gth_map_view_parent_class)->unrealize (widget);
 	gtk_widget_hide (self->priv->embed);
 }
 
@@ -241,7 +250,6 @@ gth_map_view_class_init (GthMapViewClass *klass)
 {
 	GtkWidgetClass *widget_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthMapViewPrivate));
 
 	G_OBJECT_CLASS (klass)->finalize = gth_map_view_finalize;
@@ -300,7 +308,7 @@ gth_map_view_init (GthMapView *self)
 
 
 static void
-gth_map_view_gth_multipage_child_interface_init (GthMultipageChildIface *iface)
+gth_map_view_gth_multipage_child_interface_init (GthMultipageChildInterface *iface)
 {
 	iface->get_name = gth_map_view_real_get_name;
 	iface->get_icon = gth_map_view_real_get_icon;
@@ -308,47 +316,7 @@ gth_map_view_gth_multipage_child_interface_init (GthMultipageChildIface *iface)
 
 
 static void
-gth_map_view_gth_property_view_interface_init (GthPropertyViewIface *iface)
+gth_map_view_gth_property_view_interface_init (GthPropertyViewInterface *iface)
 {
 	iface->set_file = gth_map_view_real_set_file;
 }
-
-
-GType
-gth_map_view_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthMapViewClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_map_view_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthMapView),
-			0,
-			(GInstanceInitFunc) gth_map_view_init,
-			NULL
-		};
-		static const GInterfaceInfo gth_multipage_child_info = {
-			(GInterfaceInitFunc) gth_map_view_gth_multipage_child_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		static const GInterfaceInfo gth_property_view_info = {
-			(GInterfaceInitFunc) gth_map_view_gth_property_view_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_VBOX,
-					       "GthMapView",
-					       &g_define_type_info,
-					       0);
-		g_type_add_interface_static (type, GTH_TYPE_MULTIPAGE_CHILD, &gth_multipage_child_info);
-		g_type_add_interface_static (type, GTH_TYPE_PROPERTY_VIEW, &gth_property_view_info);
-	}
-
-	return type;
-}
diff --git a/extensions/oauth/oauth-account-chooser-dialog.c b/extensions/oauth/oauth-account-chooser-dialog.c
index 6fdcf73..b618cfb 100644
--- a/extensions/oauth/oauth-account-chooser-dialog.c
+++ b/extensions/oauth/oauth-account-chooser-dialog.c
@@ -26,6 +26,9 @@
 #define GET_WIDGET(x) (_gtk_builder_get_widget (self->priv->builder, (x)))
 
 
+G_DEFINE_TYPE (OAuthAccountChooserDialog, oauth_account_chooser_dialog, GTK_TYPE_DIALOG)
+
+
 enum {
 	ACCOUNT_DATA_COLUMN,
 	ACCOUNT_NAME_COLUMN,
@@ -34,9 +37,6 @@ enum {
 };
 
 
-static gpointer parent_class = NULL;
-
-
 struct _OAuthAccountChooserDialogPrivate {
 	GtkBuilder *builder;
 };
@@ -51,7 +51,7 @@ oauth_account_chooser_dialog_finalize (GObject *object)
 
 	_g_object_unref (self->priv->builder);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (oauth_account_chooser_dialog_parent_class)->finalize (object);
 }
 
 
@@ -60,7 +60,6 @@ oauth_account_chooser_dialog_class_init (OAuthAccountChooserDialogClass *klass)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (OAuthAccountChooserDialogPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -163,34 +162,6 @@ oauth_account_chooser_dialog_init (OAuthAccountChooserDialog *self)
 }
 
 
-GType
-oauth_account_chooser_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (OAuthAccountChooserDialogClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) oauth_account_chooser_dialog_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (OAuthAccountChooserDialog),
-			0,
-			(GInstanceInitFunc) oauth_account_chooser_dialog_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "OAuthAccountChooserDialog",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static void
 oauth_account_chooser_dialog_construct (OAuthAccountChooserDialog *self,
 				         GList                      *accounts,
diff --git a/extensions/oauth/oauth-account-manager-dialog.c b/extensions/oauth/oauth-account-manager-dialog.c
index f245a58..480ecf9 100644
--- a/extensions/oauth/oauth-account-manager-dialog.c
+++ b/extensions/oauth/oauth-account-manager-dialog.c
@@ -28,15 +28,15 @@
 #define GET_WIDGET(x) (_gtk_builder_get_widget (self->priv->builder, (x)))
 
 
+G_DEFINE_TYPE (OAuthAccountManagerDialog, oauth_account_manager_dialog, GTK_TYPE_DIALOG)
+
+
 enum {
 	ACCOUNT_DATA_COLUMN,
 	ACCOUNT_NAME_COLUMN,
 };
 
 
-static gpointer parent_class = NULL;
-
-
 struct _OAuthAccountManagerDialogPrivate {
 	GtkBuilder *builder;
 };
@@ -51,7 +51,7 @@ oauth_account_manager_dialog_finalize (GObject *object)
 
 	_g_object_unref (self->priv->builder);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (oauth_account_manager_dialog_parent_class)->finalize (object);
 }
 
 
@@ -60,7 +60,6 @@ oauth_account_manager_dialog_class_init (OAuthAccountManagerDialogClass *klass)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (OAuthAccountManagerDialogPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -160,34 +159,6 @@ oauth_account_manager_dialog_init (OAuthAccountManagerDialog *self)
 }
 
 
-GType
-oauth_account_manager_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (OAuthAccountManagerDialogClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) oauth_account_manager_dialog_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (OAuthAccountManagerDialog),
-			0,
-			(GInstanceInitFunc) oauth_account_manager_dialog_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "OAuthAccountManagerDialog",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static void
 oauth_account_manager_dialog_construct (OAuthAccountManagerDialog *self,
 				         GList                      *accounts)
diff --git a/extensions/oauth/oauth-account.c b/extensions/oauth/oauth-account.c
index 30b90b9..e7ad067 100644
--- a/extensions/oauth/oauth-account.c
+++ b/extensions/oauth/oauth-account.c
@@ -29,7 +29,14 @@
 #include "oauth-account.h"
 
 
-static gpointer oauth_account_parent_class = NULL;
+static void oauth_account_dom_domizable_interface_init (DomDomizableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (OAuthAccount,
+			 oauth_account,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+					        oauth_account_dom_domizable_interface_init))
 
 
 static void
@@ -50,7 +57,6 @@ oauth_account_finalize (GObject *obj)
 static void
 oauth_account_class_init (OAuthAccountClass *klass)
 {
-	oauth_account_parent_class = g_type_class_peek_parent (klass);
 	G_OBJECT_CLASS (klass)->finalize = oauth_account_finalize;
 }
 
@@ -110,43 +116,9 @@ oauth_account_dom_domizable_interface_init (DomDomizableInterface *iface)
 
 
 static void
-oauth_account_instance_init (OAuthAccount *self)
-{
-}
-
-
-GType
-oauth_account_get_type (void)
+oauth_account_init (OAuthAccount *self)
 {
-	static GType oauth_account_type_id = 0;
-
-	if (oauth_account_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (OAuthAccountClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) oauth_account_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (OAuthAccount),
-			0,
-			(GInstanceInitFunc) oauth_account_instance_init,
-			NULL
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) oauth_account_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		oauth_account_type_id = g_type_register_static (G_TYPE_OBJECT,
-								   "OAuthAccount",
-								   &g_define_type_info,
-								   0);
-		g_type_add_interface_static (oauth_account_type_id, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-	}
-
-	return oauth_account_type_id;
+	/* void */
 }
 
 
diff --git a/extensions/oauth/oauth-authentication.c b/extensions/oauth/oauth-authentication.c
index a232ac4..56daf7a 100644
--- a/extensions/oauth/oauth-authentication.c
+++ b/extensions/oauth/oauth-authentication.c
@@ -34,6 +34,9 @@
 #define OAUTH_AUTHENTICATION_RESPONSE_CHOOSE_ACCOUNT 1
 
 
+G_DEFINE_TYPE (OAuthAuthentication, oauth_authentication, G_TYPE_OBJECT)
+
+
 /* Signals */
 enum {
 	READY,
@@ -52,7 +55,6 @@ struct _OAuthAuthenticationPrivate
 };
 
 
-static GObjectClass *parent_class = NULL;
 static guint oauth_authentication_signals[LAST_SIGNAL] = { 0 };
 
 
@@ -67,7 +69,7 @@ oauth_authentication_finalize (GObject *object)
 	_g_object_list_unref (self->priv->accounts);
 	_g_object_unref (self->priv->account);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (oauth_authentication_parent_class)->finalize (object);
 }
 
 
@@ -76,7 +78,6 @@ oauth_authentication_class_init (OAuthAuthenticationClass *class)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (OAuthAuthenticationPrivate));
 
 	object_class = (GObjectClass*) class;
@@ -115,34 +116,6 @@ oauth_authentication_init (OAuthAuthentication *self)
 }
 
 
-GType
-oauth_authentication_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) oauth_authentication_class_init,
-			NULL,
-			NULL,
-			sizeof (GthTask),
-			0,
-			(GInstanceInitFunc) oauth_authentication_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "OAuthAuthentication",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 OAuthAuthentication *
 oauth_authentication_new (OAuthConnection *conn,
 			  GType            account_type,
diff --git a/extensions/oauth/oauth-connection.c b/extensions/oauth/oauth-connection.c
index 4a7a48f..efcc33f 100644
--- a/extensions/oauth/oauth-connection.c
+++ b/extensions/oauth/oauth-connection.c
@@ -31,6 +31,9 @@
 #define OAUTH_SIGNATURE_METHOD "HMAC-SHA1"
 
 
+G_DEFINE_TYPE (OAuthConnection, oauth_connection, GTH_TYPE_TASK)
+
+
 GQuark
 oauth_connection_error_quark (void)
 {
@@ -60,9 +63,6 @@ struct _OAuthConnectionPrivate
 };
 
 
-static gpointer parent_class = NULL;
-
-
 static void
 oauth_connection_finalize (GObject *object)
 {
@@ -79,7 +79,7 @@ oauth_connection_finalize (GObject *object)
 	g_free (self->priv->timestamp);
 	_g_object_unref (self->priv->session);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (oauth_connection_parent_class)->finalize (object);
 }
 
 
@@ -108,7 +108,6 @@ oauth_connection_class_init (OAuthConnectionClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (OAuthConnectionPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -136,34 +135,6 @@ oauth_connection_init (OAuthConnection *self)
 }
 
 
-GType
-oauth_connection_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (OAuthConnectionClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) oauth_connection_class_init,
-			NULL,
-			NULL,
-			sizeof (OAuthConnection),
-			0,
-			(GInstanceInitFunc) oauth_connection_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "OAuthConnection",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 OAuthConnection *
 oauth_connection_new (OAuthConsumer *consumer)
 {
diff --git a/extensions/photobucket/photobucket-account.c b/extensions/photobucket/photobucket-account.c
index 10a1155..7180f9e 100644
--- a/extensions/photobucket/photobucket-account.c
+++ b/extensions/photobucket/photobucket-account.c
@@ -26,7 +26,14 @@
 #include "photobucket-account.h"
 
 
-static gpointer photobucket_account_parent_class = NULL;
+static void photobucket_account_dom_domizable_interface_init (DomDomizableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (PhotobucketAccount,
+			 photobucket_account,
+			 OAUTH_TYPE_ACCOUNT,
+			 G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+					        photobucket_account_dom_domizable_interface_init))
 
 
 static void
@@ -47,7 +54,6 @@ photobucket_account_finalize (GObject *obj)
 static void
 photobucket_account_class_init (PhotobucketAccountClass *klass)
 {
-	photobucket_account_parent_class = g_type_class_peek_parent (klass);
 	G_OBJECT_CLASS (klass)->finalize = photobucket_account_finalize;
 }
 
@@ -113,7 +119,7 @@ photobucket_account_dom_domizable_interface_init (DomDomizableInterface *iface)
 
 
 static void
-photobucket_account_instance_init (PhotobucketAccount *self)
+photobucket_account_init (PhotobucketAccount *self)
 {
 	self->subdomain = NULL;
 	self->home_url = NULL;
@@ -123,41 +129,6 @@ photobucket_account_instance_init (PhotobucketAccount *self)
 }
 
 
-GType
-photobucket_account_get_type (void)
-{
-	static GType photobucket_account_type_id = 0;
-
-	if (photobucket_account_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (PhotobucketAccountClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) photobucket_account_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (PhotobucketAccount),
-			0,
-			(GInstanceInitFunc) photobucket_account_instance_init,
-			NULL
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) photobucket_account_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		photobucket_account_type_id = g_type_register_static (OAUTH_TYPE_ACCOUNT,
-								      "PhotobucketAccount",
-								      &g_define_type_info,
-								      0);
-		g_type_add_interface_static (photobucket_account_type_id, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-	}
-
-	return photobucket_account_type_id;
-}
-
-
 OAuthAccount *
 photobucket_account_new (void)
 {
diff --git a/extensions/photobucket/photobucket-album-properties-dialog.c b/extensions/photobucket/photobucket-album-properties-dialog.c
index 8e74753..637bee4 100644
--- a/extensions/photobucket/photobucket-album-properties-dialog.c
+++ b/extensions/photobucket/photobucket-album-properties-dialog.c
@@ -27,6 +27,9 @@
 #define GET_WIDGET(x) (_gtk_builder_get_widget (self->priv->builder, (x)))
 
 
+G_DEFINE_TYPE (PhotobucketAlbumPropertiesDialog, photobucket_album_properties_dialog, GTK_TYPE_DIALOG)
+
+
 enum {
 	ALBUM_DATA_COLUMN,
 	ALBUM_ICON_COLUMN,
@@ -35,9 +38,6 @@ enum {
 };
 
 
-static gpointer parent_class = NULL;
-
-
 struct _PhotobucketAlbumPropertiesDialogPrivate {
 	GtkBuilder *builder;
 };
@@ -51,7 +51,7 @@ photobucket_album_properties_dialog_finalize (GObject *object)
 	self = PHOTOBUCKET_ALBUM_PROPERTIES_DIALOG (object);
 	_g_object_unref (self->priv->builder);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (photobucket_album_properties_dialog_parent_class)->finalize (object);
 }
 
 
@@ -60,7 +60,6 @@ photobucket_album_properties_dialog_class_init (PhotobucketAlbumPropertiesDialog
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (PhotobucketAlbumPropertiesDialogPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -118,34 +117,6 @@ photobucket_album_properties_dialog_init (PhotobucketAlbumPropertiesDialog *self
 }
 
 
-GType
-photobucket_album_properties_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (PhotobucketAlbumPropertiesDialogClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) photobucket_album_properties_dialog_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (PhotobucketAlbumPropertiesDialog),
-			0,
-			(GInstanceInitFunc) photobucket_album_properties_dialog_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "PhotobucketAlbumPropertiesDialog",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static void
 photobucket_album_properties_dialog_construct (PhotobucketAlbumPropertiesDialog *self,
 				               const char                       *name,
diff --git a/extensions/photobucket/photobucket-album.c b/extensions/photobucket/photobucket-album.c
index ef0e2e8..aae2fa7 100644
--- a/extensions/photobucket/photobucket-album.c
+++ b/extensions/photobucket/photobucket-album.c
@@ -26,7 +26,14 @@
 #include "photobucket-album.h"
 
 
-static gpointer photobucket_album_parent_class = NULL;
+static void photobucket_album_dom_domizable_interface_init (DomDomizableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (PhotobucketAlbum,
+			 photobucket_album,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+					        photobucket_album_dom_domizable_interface_init))
 
 
 static void
@@ -45,12 +52,11 @@ photobucket_album_finalize (GObject *obj)
 static void
 photobucket_album_class_init (PhotobucketAlbumClass *klass)
 {
-	photobucket_album_parent_class = g_type_class_peek_parent (klass);
 	G_OBJECT_CLASS (klass)->finalize = photobucket_album_finalize;
 }
 
 
-static DomElement*
+static DomElement *
 photobucket_album_create_element (DomDomizable *base,
 			          DomDocument  *doc)
 {
@@ -90,7 +96,7 @@ photobucket_album_dom_domizable_interface_init (DomDomizableInterface *iface)
 
 
 static void
-photobucket_album_instance_init (PhotobucketAlbum *self)
+photobucket_album_init (PhotobucketAlbum *self)
 {
 	self->name = NULL;
 	self->photo_count = 0;
@@ -98,41 +104,6 @@ photobucket_album_instance_init (PhotobucketAlbum *self)
 }
 
 
-GType
-photobucket_album_get_type (void)
-{
-	static GType photobucket_album_type_id = 0;
-
-	if (photobucket_album_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (PhotobucketAlbumClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) photobucket_album_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (PhotobucketAlbum),
-			0,
-			(GInstanceInitFunc) photobucket_album_instance_init,
-			NULL
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) photobucket_album_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		photobucket_album_type_id = g_type_register_static (G_TYPE_OBJECT,
-								 "PhotobucketAlbum",
-								 &g_define_type_info,
-								 0);
-		g_type_add_interface_static (photobucket_album_type_id, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-	}
-
-	return photobucket_album_type_id;
-}
-
-
 PhotobucketAlbum *
 photobucket_album_new (void)
 {
diff --git a/extensions/photobucket/photobucket-photo.c b/extensions/photobucket/photobucket-photo.c
index 80e8de0..1694864 100644
--- a/extensions/photobucket/photobucket-photo.c
+++ b/extensions/photobucket/photobucket-photo.c
@@ -26,7 +26,14 @@
 #include "photobucket-photo.h"
 
 
-static gpointer photobucket_photo_parent_class = NULL;
+static void photobucket_photo_dom_domizable_interface_init (DomDomizableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (PhotobucketPhoto,
+			 photobucket_photo,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+					        photobucket_photo_dom_domizable_interface_init))
 
 
 static void
@@ -50,14 +57,13 @@ photobucket_photo_finalize (GObject *obj)
 static void
 photobucket_photo_class_init (PhotobucketPhotoClass *klass)
 {
-	photobucket_photo_parent_class = g_type_class_peek_parent (klass);
 	G_OBJECT_CLASS (klass)->finalize = photobucket_photo_finalize;
 }
 
 
 static DomElement*
 photobucket_photo_create_element (DomDomizable *base,
-				DomDocument  *doc)
+				  DomDocument  *doc)
 {
 	PhotobucketPhoto *self;
 	DomElement  *element;
@@ -119,43 +125,9 @@ photobucket_photo_dom_domizable_interface_init (DomDomizableInterface *iface)
 
 
 static void
-photobucket_photo_instance_init (PhotobucketPhoto *self)
-{
-}
-
-
-GType
-photobucket_photo_get_type (void)
+photobucket_photo_init (PhotobucketPhoto *self)
 {
-	static GType photobucket_photo_type_id = 0;
-
-	if (photobucket_photo_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (PhotobucketPhotoClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) photobucket_photo_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (PhotobucketPhoto),
-			0,
-			(GInstanceInitFunc) photobucket_photo_instance_init,
-			NULL
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) photobucket_photo_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		photobucket_photo_type_id = g_type_register_static (G_TYPE_OBJECT,
-								    "PhotobucketPhoto",
-								    &g_define_type_info,
-								    0);
-		g_type_add_interface_static (photobucket_photo_type_id, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-	}
-
-	return photobucket_photo_type_id;
+	/* void */
 }
 
 
diff --git a/extensions/photobucket/photobucket-service.c b/extensions/photobucket/photobucket-service.c
index 27b5fd3..69d7131 100644
--- a/extensions/photobucket/photobucket-service.c
+++ b/extensions/photobucket/photobucket-service.c
@@ -29,6 +29,9 @@
 #include "photobucket-service.h"
 
 
+G_DEFINE_TYPE (PhotobucketService, photobucket_service, G_TYPE_OBJECT)
+
+
 typedef struct {
 	PhotobucketAccount  *account;
 	PhotobucketAlbum    *album;
@@ -67,9 +70,6 @@ struct _PhotobucketServicePrivate
 };
 
 
-static gpointer parent_class = NULL;
-
-
 static void
 photobucket_service_finalize (GObject *object)
 {
@@ -80,7 +80,7 @@ photobucket_service_finalize (GObject *object)
 	_g_object_unref (self->priv->conn);
 	post_photos_data_free (self->priv->post_photos);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (photobucket_service_parent_class)->finalize (object);
 }
 
 
@@ -89,7 +89,6 @@ photobucket_service_class_init (PhotobucketServiceClass *klass)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (PhotobucketServicePrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -106,34 +105,6 @@ photobucket_service_init (PhotobucketService *self)
 }
 
 
-GType
-photobucket_service_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (PhotobucketServiceClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) photobucket_service_class_init,
-			NULL,
-			NULL,
-			sizeof (PhotobucketService),
-			0,
-			(GInstanceInitFunc) photobucket_service_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "PhotobucketService",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 PhotobucketService *
 photobucket_service_new (OAuthConnection *conn)
 {
diff --git a/extensions/picasaweb/google-connection.c b/extensions/picasaweb/google-connection.c
index dfd134b..57ec49e 100644
--- a/extensions/picasaweb/google-connection.c
+++ b/extensions/picasaweb/google-connection.c
@@ -30,6 +30,9 @@
 #define GTHUMB_SOURCE ("GNOME-" PACKAGE "-" VERSION)
 
 
+G_DEFINE_TYPE (GoogleConnection, google_connection, GTH_TYPE_TASK)
+
+
 GQuark
 google_connection_error_quark (void)
 {
@@ -57,9 +60,6 @@ struct _GoogleConnectionPrivate
 };
 
 
-static gpointer parent_class = NULL;
-
-
 static void
 google_connection_finalize (GObject *object)
 {
@@ -74,7 +74,7 @@ google_connection_finalize (GObject *object)
 	_g_object_unref (self->priv->session);
 	g_free (self->priv->service);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (google_connection_parent_class)->finalize (object);
 }
 
 
@@ -103,7 +103,6 @@ google_connection_class_init (GoogleConnectionClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GoogleConnectionPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -129,34 +128,6 @@ google_connection_init (GoogleConnection *self)
 }
 
 
-GType
-google_connection_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GoogleConnectionClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) google_connection_class_init,
-			NULL,
-			NULL,
-			sizeof (GoogleConnection),
-			0,
-			(GInstanceInitFunc) google_connection_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "GoogleConnection",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GoogleConnection *
 google_connection_new (const char *service)
 {
diff --git a/extensions/picasaweb/picasa-account-chooser-dialog.c b/extensions/picasaweb/picasa-account-chooser-dialog.c
index 8578c40..e715a2e 100644
--- a/extensions/picasaweb/picasa-account-chooser-dialog.c
+++ b/extensions/picasaweb/picasa-account-chooser-dialog.c
@@ -26,6 +26,9 @@
 #define GET_WIDGET(x) (_gtk_builder_get_widget (self->priv->builder, (x)))
 
 
+G_DEFINE_TYPE (PicasaAccountChooserDialog, picasa_account_chooser_dialog, GTK_TYPE_DIALOG)
+
+
 typedef enum {
 	ITEM_TYPE_COMMAND,
 	ITEM_TYPE_ENTRY,
@@ -42,9 +45,6 @@ enum {
 };
 
 
-static gpointer parent_class = NULL;
-
-
 struct _PicasaAccountChooserDialogPrivate {
 	GtkBuilder *builder;
 };
@@ -59,7 +59,7 @@ picasa_account_chooser_dialog_finalize (GObject *object)
 
 	_g_object_unref (self->priv->builder);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (picasa_account_chooser_dialog_parent_class)->finalize (object);
 }
 
 
@@ -68,7 +68,6 @@ picasa_account_chooser_dialog_class_init (PicasaAccountChooserDialogClass *klass
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (PicasaAccountChooserDialogPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -105,34 +104,6 @@ picasa_account_chooser_dialog_init (PicasaAccountChooserDialog *self)
 }
 
 
-GType
-picasa_account_chooser_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (PicasaAccountChooserDialogClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) picasa_account_chooser_dialog_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (PicasaAccountChooserDialog),
-			0,
-			(GInstanceInitFunc) picasa_account_chooser_dialog_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "PicasaAccountChooserDialog",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static void
 picasa_account_chooser_dialog_construct (PicasaAccountChooserDialog *self,
 				         GList                      *accounts,
diff --git a/extensions/picasaweb/picasa-account-manager-dialog.c b/extensions/picasaweb/picasa-account-manager-dialog.c
index 2f52a31..05de03e 100644
--- a/extensions/picasaweb/picasa-account-manager-dialog.c
+++ b/extensions/picasaweb/picasa-account-manager-dialog.c
@@ -28,15 +28,15 @@
 #define GET_WIDGET(x) (_gtk_builder_get_widget (self->priv->builder, (x)))
 
 
+G_DEFINE_TYPE (PicasaAccountManagerDialog, picasa_account_manager_dialog, GTK_TYPE_DIALOG)
+
+
 enum {
 	ACCOUNT_DATA_COLUMN,
 	ACCOUNT_NAME_COLUMN,
 };
 
 
-static gpointer parent_class = NULL;
-
-
 struct _PicasaAccountManagerDialogPrivate {
 	GtkBuilder *builder;
 };
@@ -51,7 +51,7 @@ picasa_account_manager_dialog_finalize (GObject *object)
 
 	_g_object_unref (self->priv->builder);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (picasa_account_manager_dialog_parent_class)->finalize (object);
 }
 
 
@@ -60,7 +60,6 @@ picasa_account_manager_dialog_class_init (PicasaAccountManagerDialogClass *klass
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (PicasaAccountManagerDialogPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -181,34 +180,6 @@ picasa_account_manager_dialog_init (PicasaAccountManagerDialog *self)
 }
 
 
-GType
-picasa_account_manager_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (PicasaAccountManagerDialogClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) picasa_account_manager_dialog_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (PicasaAccountManagerDialog),
-			0,
-			(GInstanceInitFunc) picasa_account_manager_dialog_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "PicasaAccountManagerDialog",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static void
 picasa_account_manager_dialog_construct (PicasaAccountManagerDialog *self,
 				         GList                      *accounts)
diff --git a/extensions/picasaweb/picasa-account-properties-dialog.c b/extensions/picasaweb/picasa-account-properties-dialog.c
index b7588e3..44911db 100644
--- a/extensions/picasaweb/picasa-account-properties-dialog.c
+++ b/extensions/picasaweb/picasa-account-properties-dialog.c
@@ -27,7 +27,7 @@
 #define GET_WIDGET(x) (_gtk_builder_get_widget (self->priv->builder, (x)))
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (PicasaAccountPropertiesDialog, picasa_account_properties_dialog, GTK_TYPE_DIALOG)
 
 
 struct _PicasaAccountPropertiesDialogPrivate {
@@ -45,7 +45,7 @@ picasa_account_properties_dialog_finalize (GObject *object)
 	_g_object_unref (self->priv->builder);
 	g_object_unref (self->priv->cancellable);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (picasa_account_properties_dialog_parent_class)->finalize (object);
 }
 
 
@@ -54,7 +54,6 @@ picasa_account_properties_dialog_class_init (PicasaAccountPropertiesDialogClass
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (PicasaAccountPropertiesDialogPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -91,34 +90,6 @@ picasa_account_properties_dialog_init (PicasaAccountPropertiesDialog *self)
 }
 
 
-GType
-picasa_account_properties_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (PicasaAccountPropertiesDialogClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) picasa_account_properties_dialog_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (PicasaAccountPropertiesDialog),
-			0,
-			(GInstanceInitFunc) picasa_account_properties_dialog_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "PicasaAccountPropertiesDialog",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static void
 image_buffer_ready_cb (void     **buffer,
 		       gsize      count,
diff --git a/extensions/picasaweb/picasa-album-properties-dialog.c b/extensions/picasaweb/picasa-album-properties-dialog.c
index 7c808ca..e5a52fe 100644
--- a/extensions/picasaweb/picasa-album-properties-dialog.c
+++ b/extensions/picasaweb/picasa-album-properties-dialog.c
@@ -27,7 +27,7 @@
 #define GET_WIDGET(x) (_gtk_builder_get_widget (self->priv->builder, (x)))
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (PicasaAlbumPropertiesDialog, picasa_album_properties_dialog, GTK_TYPE_DIALOG)
 
 
 struct _PicasaAlbumPropertiesDialogPrivate {
@@ -43,7 +43,7 @@ picasa_album_properties_dialog_finalize (GObject *object)
 	self = PICASA_ALBUM_PROPERTIES_DIALOG (object);
 	_g_object_unref (self->priv->builder);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (picasa_album_properties_dialog_parent_class)->finalize (object);
 }
 
 
@@ -52,7 +52,6 @@ picasa_album_properties_dialog_class_init (PicasaAlbumPropertiesDialogClass *kla
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (PicasaAlbumPropertiesDialogPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -84,34 +83,6 @@ picasa_album_properties_dialog_init (PicasaAlbumPropertiesDialog *self)
 }
 
 
-GType
-picasa_album_properties_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (PicasaAlbumPropertiesDialogClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) picasa_album_properties_dialog_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (PicasaAlbumPropertiesDialog),
-			0,
-			(GInstanceInitFunc) picasa_album_properties_dialog_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "PicasaAlbumPropertiesDialog",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static void
 picasa_album_properties_dialog_construct (PicasaAlbumPropertiesDialog *self,
 				          const char                  *name,
diff --git a/extensions/picasaweb/picasa-web-album.c b/extensions/picasaweb/picasa-web-album.c
index 43a57c3..429e323 100644
--- a/extensions/picasaweb/picasa-web-album.c
+++ b/extensions/picasaweb/picasa-web-album.c
@@ -26,7 +26,14 @@
 #include "picasa-web-album.h"
 
 
-static gpointer picasa_web_album_parent_class = NULL;
+static void picasa_web_album_dom_domizable_interface_init (DomDomizableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (PicasaWebAlbum,
+			 picasa_web_album,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+					        picasa_web_album_dom_domizable_interface_init))
 
 
 static void
@@ -48,7 +55,6 @@ picasa_web_album_finalize (GObject *obj)
 static void
 picasa_web_album_class_init (PicasaWebAlbumClass *klass)
 {
-	picasa_web_album_parent_class = g_type_class_peek_parent (klass);
 	G_OBJECT_CLASS (klass)->finalize = picasa_web_album_finalize;
 }
 
@@ -178,43 +184,9 @@ picasa_web_album_dom_domizable_interface_init (DomDomizableInterface *iface)
 
 
 static void
-picasa_web_album_instance_init (PicasaWebAlbum *self)
-{
-}
-
-
-GType
-picasa_web_album_get_type (void)
+picasa_web_album_init (PicasaWebAlbum *self)
 {
-	static GType picasa_web_album_type_id = 0;
-
-	if (picasa_web_album_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (PicasaWebAlbumClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) picasa_web_album_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (PicasaWebAlbum),
-			0,
-			(GInstanceInitFunc) picasa_web_album_instance_init,
-			NULL
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) picasa_web_album_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		picasa_web_album_type_id = g_type_register_static (G_TYPE_OBJECT,
-								   "PicasaWebAlbum",
-								   &g_define_type_info,
-								   0);
-		g_type_add_interface_static (picasa_web_album_type_id, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-	}
-
-	return picasa_web_album_type_id;
+	/* void */
 }
 
 
diff --git a/extensions/picasaweb/picasa-web-photo.c b/extensions/picasaweb/picasa-web-photo.c
index fa341da..36a1701 100644
--- a/extensions/picasaweb/picasa-web-photo.c
+++ b/extensions/picasaweb/picasa-web-photo.c
@@ -26,7 +26,14 @@
 #include "picasa-web-photo.h"
 
 
-static gpointer picasa_web_photo_parent_class = NULL;
+static void picasa_web_photo_dom_domizable_interface_init (DomDomizableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (PicasaWebPhoto,
+			 picasa_web_photo,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+					        picasa_web_photo_dom_domizable_interface_init))
 
 
 static void
@@ -51,14 +58,13 @@ picasa_web_photo_finalize (GObject *obj)
 static void
 picasa_web_photo_class_init (PicasaWebPhotoClass *klass)
 {
-	picasa_web_photo_parent_class = g_type_class_peek_parent (klass);
 	G_OBJECT_CLASS (klass)->finalize = picasa_web_photo_finalize;
 }
 
 
-static DomElement*
+static DomElement *
 picasa_web_photo_create_element (DomDomizable *base,
-				DomDocument  *doc)
+				 DomDocument  *doc)
 {
 	PicasaWebPhoto *self;
 	DomElement     *element;
@@ -124,7 +130,7 @@ picasa_web_photo_create_element (DomDomizable *base,
 
 static void
 picasa_web_photo_load_from_element (DomDomizable *base,
-				   DomElement   *element)
+				    DomElement   *element)
 {
 	PicasaWebPhoto *self;
 	DomElement     *node;
@@ -211,43 +217,9 @@ picasa_web_photo_dom_domizable_interface_init (DomDomizableInterface *iface)
 
 
 static void
-picasa_web_photo_instance_init (PicasaWebPhoto *self)
-{
-}
-
-
-GType
-picasa_web_photo_get_type (void)
+picasa_web_photo_init (PicasaWebPhoto *self)
 {
-	static GType picasa_web_photo_type_id = 0;
-
-	if (picasa_web_photo_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (PicasaWebPhotoClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) picasa_web_photo_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (PicasaWebPhoto),
-			0,
-			(GInstanceInitFunc) picasa_web_photo_instance_init,
-			NULL
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) picasa_web_photo_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		picasa_web_photo_type_id = g_type_register_static (G_TYPE_OBJECT,
-								  "PicasaWebPhoto",
-								  &g_define_type_info,
-								  0);
-		g_type_add_interface_static (picasa_web_photo_type_id, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-	}
-
-	return picasa_web_photo_type_id;
+	/* void */
 }
 
 
diff --git a/extensions/picasaweb/picasa-web-service.c b/extensions/picasaweb/picasa-web-service.c
index e2a9795..c6ee378 100644
--- a/extensions/picasaweb/picasa-web-service.c
+++ b/extensions/picasaweb/picasa-web-service.c
@@ -28,6 +28,9 @@
 #include "picasa-web-service.h"
 
 
+G_DEFINE_TYPE (PicasaWebService, picasa_web_service, G_TYPE_OBJECT)
+
+
 typedef struct {
 	PicasaWebAlbum      *album;
 	GList               *file_list;
@@ -63,9 +66,6 @@ struct _PicasaWebServicePrivate
 };
 
 
-static gpointer parent_class = NULL;
-
-
 static void
 picasa_web_service_finalize (GObject *object)
 {
@@ -77,7 +77,7 @@ picasa_web_service_finalize (GObject *object)
 	_g_object_unref (self->priv->user);
 	post_photos_data_free (self->priv->post_photos);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (picasa_web_service_parent_class)->finalize (object);
 }
 
 
@@ -86,7 +86,6 @@ picasa_web_service_class_init (PicasaWebServiceClass *klass)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (PicasaWebServicePrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -104,34 +103,6 @@ picasa_web_service_init (PicasaWebService *self)
 }
 
 
-GType
-picasa_web_service_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (PicasaWebServiceClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) picasa_web_service_class_init,
-			NULL,
-			NULL,
-			sizeof (PicasaWebService),
-			0,
-			(GInstanceInitFunc) picasa_web_service_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "PicasaWebService",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 PicasaWebService *
 picasa_web_service_new (GoogleConnection *conn)
 {
diff --git a/extensions/picasaweb/picasa-web-user.c b/extensions/picasaweb/picasa-web-user.c
index 4c6353c..6ebacec 100644
--- a/extensions/picasaweb/picasa-web-user.c
+++ b/extensions/picasaweb/picasa-web-user.c
@@ -26,7 +26,14 @@
 #include "picasa-web-user.h"
 
 
-static gpointer picasa_web_user_parent_class = NULL;
+static void picasa_web_user_dom_domizable_interface_init (DomDomizableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (PicasaWebUser,
+			 picasa_web_user,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+					        picasa_web_user_dom_domizable_interface_init))
 
 
 static void
@@ -47,7 +54,6 @@ picasa_web_user_finalize (GObject *obj)
 static void
 picasa_web_user_class_init (PicasaWebUserClass *klass)
 {
-	picasa_web_user_parent_class = g_type_class_peek_parent (klass);
 	G_OBJECT_CLASS (klass)->finalize = picasa_web_user_finalize;
 }
 
@@ -131,43 +137,9 @@ picasa_web_user_dom_domizable_interface_init (DomDomizableInterface *iface)
 
 
 static void
-picasa_web_user_instance_init (PicasaWebUser *self)
-{
-}
-
-
-GType
-picasa_web_user_get_type (void)
+picasa_web_user_init (PicasaWebUser *self)
 {
-	static GType picasa_web_user_type_id = 0;
-
-	if (picasa_web_user_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (PicasaWebUserClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) picasa_web_user_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (PicasaWebUser),
-			0,
-			(GInstanceInitFunc) picasa_web_user_instance_init,
-			NULL
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) picasa_web_user_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		picasa_web_user_type_id = g_type_register_static (G_TYPE_OBJECT,
-								  "PicasaWebUser",
-								  &g_define_type_info,
-								  0);
-		g_type_add_interface_static (picasa_web_user_type_id, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-	}
-
-	return picasa_web_user_type_id;
+	/* void */
 }
 
 
diff --git a/extensions/pixbuf_savers/gth-jpeg-saver.c b/extensions/pixbuf_savers/gth-jpeg-saver.c
index 03cce0a..bf36b3e 100644
--- a/extensions/pixbuf_savers/gth-jpeg-saver.c
+++ b/extensions/pixbuf_savers/gth-jpeg-saver.c
@@ -35,24 +35,15 @@
 #include "preferences.h"
 
 
+G_DEFINE_TYPE (GthJpegSaver, gth_jpeg_saver, GTH_TYPE_PIXBUF_SAVER)
+
+
 struct _GthJpegSaverPrivate {
 	GtkBuilder *builder;
 	char       *default_ext;
 };
 
 
-static gpointer parent_class = NULL;
-
-
-static void
-gth_jpeg_saver_init (GthJpegSaver *self)
-{
-	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_JPEG_SAVER, GthJpegSaverPrivate);
-	self->priv->builder = NULL;
-	self->priv->default_ext = NULL;
-}
-
-
 static void
 gth_jpeg_saver_finalize (GObject *object)
 {
@@ -61,7 +52,7 @@ gth_jpeg_saver_finalize (GObject *object)
 	_g_object_unref (self->priv->builder);
 	g_free (self->priv->default_ext);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_jpeg_saver_parent_class)->finalize (object);
 }
 
 
@@ -516,7 +507,6 @@ gth_jpeg_saver_class_init (GthJpegSaverClass *klass)
 	GObjectClass        *object_class;
 	GthPixbufSaverClass *pixbuf_saver_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthJpegSaverPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -535,29 +525,10 @@ gth_jpeg_saver_class_init (GthJpegSaverClass *klass)
 }
 
 
-GType
-gth_jpeg_saver_get_type (void)
+static void
+gth_jpeg_saver_init (GthJpegSaver *self)
 {
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthJpegSaverClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_jpeg_saver_class_init,
-			NULL,
-			NULL,
-			sizeof (GthJpegSaver),
-			0,
-			(GInstanceInitFunc) gth_jpeg_saver_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_PIXBUF_SAVER,
-					       "GthJpegSaver",
-					       &type_info,
-					       0);
-	}
-
-	return type;
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_JPEG_SAVER, GthJpegSaverPrivate);
+	self->priv->builder = NULL;
+	self->priv->default_ext = NULL;
 }
diff --git a/extensions/pixbuf_savers/gth-png-saver.c b/extensions/pixbuf_savers/gth-png-saver.c
index f471618..824fe7c 100644
--- a/extensions/pixbuf_savers/gth-png-saver.c
+++ b/extensions/pixbuf_savers/gth-png-saver.c
@@ -26,28 +26,21 @@
 #include "preferences.h"
 
 
+G_DEFINE_TYPE (GthPngSaver, gth_png_saver, GTH_TYPE_PIXBUF_SAVER)
+
+
 struct _GthPngSaverPrivate {
 	GtkBuilder *builder;
 };
 
 
-static gpointer parent_class = NULL;
-
-
-static void
-gth_png_saver_init (GthPngSaver *self)
-{
-	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_PNG_SAVER, GthPngSaverPrivate);
-}
-
-
 static void
 gth_png_saver_finalize (GObject *object)
 {
 	GthPngSaver *self = GTH_PNG_SAVER (object);
 
 	_g_object_unref (self->priv->builder);
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_png_saver_parent_class)->finalize (object);
 }
 
 
@@ -134,7 +127,6 @@ gth_png_saver_class_init (GthPngSaverClass *klass)
 	GObjectClass        *object_class;
 	GthPixbufSaverClass *pixbuf_saver_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthPngSaverPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -153,29 +145,8 @@ gth_png_saver_class_init (GthPngSaverClass *klass)
 }
 
 
-GType
-gth_png_saver_get_type (void)
+static void
+gth_png_saver_init (GthPngSaver *self)
 {
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthPngSaverClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_png_saver_class_init,
-			NULL,
-			NULL,
-			sizeof (GthPngSaver),
-			0,
-			(GInstanceInitFunc) gth_png_saver_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_PIXBUF_SAVER,
-					       "GthPngSaver",
-					       &type_info,
-					       0);
-	}
-
-	return type;
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_PNG_SAVER, GthPngSaverPrivate);
 }
diff --git a/extensions/pixbuf_savers/gth-tga-saver.c b/extensions/pixbuf_savers/gth-tga-saver.c
index 45e4224..29617d9 100644
--- a/extensions/pixbuf_savers/gth-tga-saver.c
+++ b/extensions/pixbuf_savers/gth-tga-saver.c
@@ -26,28 +26,21 @@
 #include "preferences.h"
 
 
+G_DEFINE_TYPE (GthTgaSaver, gth_tga_saver, GTH_TYPE_PIXBUF_SAVER)
+
+
 struct _GthTgaSaverPrivate {
 	GtkBuilder *builder;
 };
 
 
-static gpointer parent_class = NULL;
-
-
-static void
-gth_tga_saver_init (GthTgaSaver *self)
-{
-	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_TGA_SAVER, GthTgaSaverPrivate);
-}
-
-
 static void
 gth_tga_saver_finalize (GObject *object)
 {
 	GthTgaSaver *self = GTH_TGA_SAVER (object);
 
 	_g_object_unref (self->priv->builder);
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_tga_saver_parent_class)->finalize (object);
 }
 
 
@@ -367,7 +360,6 @@ gth_tga_saver_class_init (GthTgaSaverClass *klass)
 	GObjectClass        *object_class;
 	GthPixbufSaverClass *pixbuf_saver_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthTgaSaverPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -386,29 +378,8 @@ gth_tga_saver_class_init (GthTgaSaverClass *klass)
 }
 
 
-GType
-gth_tga_saver_get_type (void)
+static void
+gth_tga_saver_init (GthTgaSaver *self)
 {
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthTgaSaverClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_tga_saver_class_init,
-			NULL,
-			NULL,
-			sizeof (GthTgaSaver),
-			0,
-			(GInstanceInitFunc) gth_tga_saver_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_PIXBUF_SAVER,
-					       "GthTgaSaver",
-					       &type_info,
-					       0);
-	}
-
-	return type;
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_TGA_SAVER, GthTgaSaverPrivate);
 }
diff --git a/extensions/pixbuf_savers/gth-tiff-saver.c b/extensions/pixbuf_savers/gth-tiff-saver.c
index 4ec5f93..52907df 100644
--- a/extensions/pixbuf_savers/gth-tiff-saver.c
+++ b/extensions/pixbuf_savers/gth-tiff-saver.c
@@ -30,24 +30,15 @@
 #include "preferences.h"
 
 
+G_DEFINE_TYPE (GthTiffSaver, gth_tiff_saver, GTH_TYPE_PIXBUF_SAVER)
+
+
 struct _GthTiffSaverPrivate {
 	GtkBuilder *builder;
 	char       *default_ext;
 };
 
 
-static gpointer parent_class = NULL;
-
-
-static void
-gth_tiff_saver_init (GthTiffSaver *self)
-{
-	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_TIFF_SAVER, GthTiffSaverPrivate);
-	self->priv->builder = NULL;
-	self->priv->default_ext = NULL;
-}
-
-
 static void
 gth_tiff_saver_finalize (GObject *object)
 {
@@ -56,7 +47,7 @@ gth_tiff_saver_finalize (GObject *object)
 	_g_object_unref (self->priv->builder);
 	g_free (self->priv->default_ext);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_tiff_saver_parent_class)->finalize (object);
 }
 
 
@@ -71,6 +62,7 @@ gth_tiff_saver_get_default_ext (GthPixbufSaver *base)
 	return self->priv->default_ext;
 }
 
+
 static GtkWidget *
 gth_tiff_saver_get_control (GthPixbufSaver *base)
 {
@@ -531,7 +523,6 @@ gth_tiff_saver_class_init (GthTiffSaverClass *klass)
 	GObjectClass        *object_class;
 	GthPixbufSaverClass *pixbuf_saver_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthTiffSaverPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -550,29 +541,10 @@ gth_tiff_saver_class_init (GthTiffSaverClass *klass)
 }
 
 
-GType
-gth_tiff_saver_get_type (void)
+static void
+gth_tiff_saver_init (GthTiffSaver *self)
 {
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthTiffSaverClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_tiff_saver_class_init,
-			NULL,
-			NULL,
-			sizeof (GthTiffSaver),
-			0,
-			(GInstanceInitFunc) gth_tiff_saver_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_PIXBUF_SAVER,
-					       "GthTiffSaver",
-					       &type_info,
-					       0);
-	}
-
-	return type;
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_TIFF_SAVER, GthTiffSaverPrivate);
+	self->priv->builder = NULL;
+	self->priv->default_ext = NULL;
 }
diff --git a/extensions/red_eye_removal/gth-file-tool-red-eye.c b/extensions/red_eye_removal/gth-file-tool-red-eye.c
index 8e083fc..0b09e53 100644
--- a/extensions/red_eye_removal/gth-file-tool-red-eye.c
+++ b/extensions/red_eye_removal/gth-file-tool-red-eye.c
@@ -32,7 +32,6 @@
 static const double RED_FACTOR = 0.5133333;
 static const double GREEN_FACTOR  = 1.0;
 static const double BLUE_FACTOR =  0.1933333;
-static gpointer parent_class = NULL;
 
 
 struct _GthFileToolRedEyePrivate {
@@ -45,6 +44,9 @@ struct _GthFileToolRedEyePrivate {
 };
 
 
+G_DEFINE_TYPE (GthFileToolRedEye, gth_file_tool_red_eye, GTH_TYPE_FILE_TOOL)
+
+
 static void
 gth_file_tool_red_eye_update_sensitivity (GthFileTool *base)
 {
@@ -461,17 +463,6 @@ gth_file_tool_red_eye_activate (GthFileTool *base)
 
 
 static void
-gth_file_tool_red_eye_instance_init (GthFileToolRedEye *self)
-{
-	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_FILE_TOOL_RED_EYE, GthFileToolRedEyePrivate);
-	self->priv->new_pixbuf = NULL;
-	self->priv->is_red = NULL;
-	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-red-eye", _("Red Eye Removal..."), _("Red Eye Removal"), FALSE);
-	gtk_widget_set_tooltip_text (GTK_WIDGET (self), _("Remove the red eye effect caused by camera flashes"));
-}
-
-
-static void
 gth_file_tool_red_eye_finalize (GObject *object)
 {
 	GthFileToolRedEye *self;
@@ -487,7 +478,7 @@ gth_file_tool_red_eye_finalize (GObject *object)
 	_g_object_unref (self->priv->builder);
 
 	/* Chain up */
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_file_tool_red_eye_parent_class)->finalize (object);
 }
 
 
@@ -497,7 +488,6 @@ gth_file_tool_red_eye_class_init (GthFileToolRedEyeClass *class)
 	GObjectClass     *gobject_class;
 	GthFileToolClass *file_tool_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (GthFileToolRedEyePrivate));
 
 	gobject_class = (GObjectClass*) class;
@@ -511,23 +501,12 @@ gth_file_tool_red_eye_class_init (GthFileToolRedEyeClass *class)
 }
 
 
-GType
-gth_file_tool_red_eye_get_type (void) {
-	static GType type_id = 0;
-	if (type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileToolRedEyeClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_tool_red_eye_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileToolRedEye),
-			0,
-			(GInstanceInitFunc) gth_file_tool_red_eye_instance_init,
-			NULL
-		};
-		type_id = g_type_register_static (GTH_TYPE_FILE_TOOL, "GthFileToolRedEye", &g_define_type_info, 0);
-	}
-	return type_id;
+static void
+gth_file_tool_red_eye_init (GthFileToolRedEye *self)
+{
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_FILE_TOOL_RED_EYE, GthFileToolRedEyePrivate);
+	self->priv->new_pixbuf = NULL;
+	self->priv->is_red = NULL;
+	gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-red-eye", _("Red Eye Removal..."), _("Red Eye Removal"), FALSE);
+	gtk_widget_set_tooltip_text (GTK_WIDGET (self), _("Remove the red eye effect caused by camera flashes"));
 }
diff --git a/extensions/rename_series/gth-rename-task.c b/extensions/rename_series/gth-rename-task.c
index 6866ea9..66a6709 100644
--- a/extensions/rename_series/gth-rename-task.c
+++ b/extensions/rename_series/gth-rename-task.c
@@ -23,6 +23,9 @@
 #include "gth-rename-task.h"
 
 
+G_DEFINE_TYPE (GthRenameTask, gth_rename_task, GTH_TYPE_TASK)
+
+
 struct _GthRenameTaskPrivate {
 	GList                 *old_files;
 	GList                 *new_files;
@@ -36,9 +39,6 @@ struct _GthRenameTaskPrivate {
 };
 
 
-static gpointer parent_class = NULL;
-
-
 static void
 gth_rename_task_finalize (GObject *object)
 {
@@ -51,7 +51,7 @@ gth_rename_task_finalize (GObject *object)
 	_g_object_list_unref (self->priv->old_files);
 	_g_object_list_unref (self->priv->new_files);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_rename_task_parent_class)->finalize (object);
 }
 
 
@@ -246,7 +246,6 @@ gth_rename_task_class_init (GthRenameTaskClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthRenameTaskPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -265,34 +264,6 @@ gth_rename_task_init (GthRenameTask *self)
 }
 
 
-GType
-gth_rename_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthRenameTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_rename_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthRenameTask),
-			0,
-			(GInstanceInitFunc) gth_rename_task_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthRenameTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthTask *
 gth_rename_task_new (GList  *old_files,
 		     GList  *new_files)
diff --git a/extensions/rename_series/gth-template-editor-dialog.c b/extensions/rename_series/gth-template-editor-dialog.c
index 3385220..ba4b105 100644
--- a/extensions/rename_series/gth-template-editor-dialog.c
+++ b/extensions/rename_series/gth-template-editor-dialog.c
@@ -30,7 +30,7 @@
 #define GET_WIDGET(name) _gtk_builder_get_widget (self->priv->builder, (name))
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthTemplateEditorDialog, gth_template_editor_dialog, GTK_TYPE_DIALOG)
 
 
 struct _GthTemplateEditorDialogPrivate {
@@ -55,7 +55,7 @@ gth_template_editor_dialog_finalize (GObject *object)
 		dialog->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_template_editor_dialog_parent_class)->finalize (object);
 }
 
 
@@ -64,9 +64,7 @@ gth_template_editor_dialog_class_init (GthTemplateEditorDialogClass *class)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	object_class = (GObjectClass*) class;
-
 	object_class->finalize = gth_template_editor_dialog_finalize;
 }
 
@@ -79,34 +77,6 @@ gth_template_editor_dialog_init (GthTemplateEditorDialog *dialog)
 }
 
 
-GType
-gth_template_editor_dialog_get_type (void)
-{
-        static GType type = 0;
-
-        if (! type) {
-                GTypeInfo type_info = {
-			sizeof (GthTemplateEditorDialogClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_template_editor_dialog_class_init,
-			NULL,
-			NULL,
-			sizeof (GthTemplateEditorDialog),
-			0,
-			(GInstanceInitFunc) gth_template_editor_dialog_init
-		};
-
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "GthTemplateEditorDialog",
-					       &type_info,
-					       0);
-	}
-
-        return type;
-}
-
-
 static void
 _gth_template_editor_update_sensitivity (GthTemplateEditorDialog *self)
 {
diff --git a/extensions/rename_series/gth-template-selector.c b/extensions/rename_series/gth-template-selector.c
index 5a69dd3..48ee043 100644
--- a/extensions/rename_series/gth-template-selector.c
+++ b/extensions/rename_series/gth-template-selector.c
@@ -28,6 +28,9 @@
 #define GET_WIDGET(x) (_gtk_builder_get_widget (self->priv->builder, (x)))
 
 
+G_DEFINE_TYPE (GthTemplateSelector, gth_template_selector, GTK_TYPE_HBOX)
+
+
 enum {
 	TYPE_DATA_COLUMN,
 	TYPE_NAME_COLUMN,
@@ -59,9 +62,7 @@ struct _GthTemplateSelectorPrivate {
 };
 
 static char * Date_Formats[] = { "%Y-%m-%d--%H.%M.%S", "%Y-%m-%d", "%x %X", "%x", NULL };
-
-static gpointer parent_class = NULL;
-static guint gth_template_selector_signals[LAST_SIGNAL] = { 0 };
+static guint  gth_template_selector_signals[LAST_SIGNAL] = { 0 };
 
 
 static void
@@ -77,15 +78,13 @@ gth_template_selector_finalize (GObject *object)
 		selector->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_template_selector_parent_class)->finalize (object);
 }
 
 
 static void
 gth_template_selector_class_init (GthTemplateSelectorClass *klass)
 {
-	parent_class = g_type_class_peek_parent (klass);
-
 	G_OBJECT_CLASS (klass)->finalize = gth_template_selector_finalize;
 
 	/* signals */
@@ -112,40 +111,13 @@ gth_template_selector_class_init (GthTemplateSelectorClass *klass)
 
 
 static void
-gth_template_selector_instance_init (GthTemplateSelector *self)
+gth_template_selector_init (GthTemplateSelector *self)
 {
 	self->priv = g_new0 (GthTemplateSelectorPrivate, 1);
 	self->priv->builder = NULL;
 }
 
 
-GType
-gth_template_selector_get_type (void)
-{
-	static GType type_id = 0;
-
-	if (type_id == 0) {
-		static const GTypeInfo type_info = {
-			sizeof (GthTemplateSelectorClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_template_selector_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthTemplateSelector),
-			0,
-			(GInstanceInitFunc) gth_template_selector_instance_init,
-			NULL
-		};
-		type_id = g_type_register_static (GTK_TYPE_HBOX,
-						  "GthTemplateSelector",
-						  &type_info,
-						  0);
-	}
-	return type_id;
-}
-
-
 static void
 add_button_clicked_cb (GtkButton           *button,
 		       GthTemplateSelector *self)
diff --git a/extensions/search/gth-search-editor-dialog.c b/extensions/search/gth-search-editor-dialog.c
index 7b63fc6..cf828fa 100644
--- a/extensions/search/gth-search-editor-dialog.c
+++ b/extensions/search/gth-search-editor-dialog.c
@@ -27,7 +27,7 @@
 #include "gth-search-editor-dialog.h"
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthSearchEditorDialog, gth_search_editor_dialog, GTK_TYPE_DIALOG)
 
 
 struct _GthSearchEditorDialogPrivate {
@@ -47,7 +47,7 @@ gth_search_editor_dialog_finalize (GObject *object)
 		dialog->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_search_editor_dialog_parent_class)->finalize (object);
 }
 
 static void
@@ -55,9 +55,7 @@ gth_search_editor_dialog_class_init (GthSearchEditorDialogClass *class)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	object_class = (GObjectClass*) class;
-
 	object_class->finalize = gth_search_editor_dialog_finalize;
 }
 
@@ -69,34 +67,6 @@ gth_search_editor_dialog_init (GthSearchEditorDialog *dialog)
 }
 
 
-GType
-gth_search_editor_dialog_get_type (void)
-{
-        static GType type = 0;
-
-        if (! type) {
-                GTypeInfo type_info = {
-			sizeof (GthSearchEditorDialogClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_search_editor_dialog_class_init,
-			NULL,
-			NULL,
-			sizeof (GthSearchEditorDialog),
-			0,
-			(GInstanceInitFunc) gth_search_editor_dialog_init
-		};
-
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "GthSearchEditorDialog",
-					       &type_info,
-					       0);
-	}
-
-        return type;
-}
-
-
 static void
 gth_search_editor_dialog_construct (GthSearchEditorDialog *self,
 				    const char            *title,
diff --git a/extensions/search/gth-search-editor.c b/extensions/search/gth-search-editor.c
index e6a5394..430513e 100644
--- a/extensions/search/gth-search-editor.c
+++ b/extensions/search/gth-search-editor.c
@@ -29,7 +29,7 @@
 #define GET_WIDGET(name) _gtk_builder_get_widget (self->priv->builder, (name))
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthSearchEditor, gth_search_editor, GTK_TYPE_VBOX)
 
 
 struct _GthSearchEditorPrivate {
@@ -52,7 +52,7 @@ gth_search_editor_finalize (GObject *object)
 		dialog->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_search_editor_parent_class)->finalize (object);
 }
 
 static void
@@ -60,9 +60,7 @@ gth_search_editor_class_init (GthSearchEditorClass *class)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	object_class = (GObjectClass*) class;
-
 	object_class->finalize = gth_search_editor_finalize;
 }
 
@@ -74,34 +72,6 @@ gth_search_editor_init (GthSearchEditor *dialog)
 }
 
 
-GType
-gth_search_editor_get_type (void)
-{
-        static GType type = 0;
-
-        if (! type) {
-                GTypeInfo type_info = {
-			sizeof (GthSearchEditorClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_search_editor_class_init,
-			NULL,
-			NULL,
-			sizeof (GthSearchEditor),
-			0,
-			(GInstanceInitFunc) gth_search_editor_init
-		};
-
-		type = g_type_register_static (GTK_TYPE_VBOX,
-					       "GthSearchEditor",
-					       &type_info,
-					       0);
-	}
-
-        return type;
-}
-
-
 static void
 update_sensitivity (GthSearchEditor *self)
 {
diff --git a/extensions/search/gth-search-task.c b/extensions/search/gth-search-task.c
index af693e1..817a24d 100644
--- a/extensions/search/gth-search-task.c
+++ b/extensions/search/gth-search-task.c
@@ -27,6 +27,9 @@
 #include "gth-search-task.h"
 
 
+G_DEFINE_TYPE (GthSearchTask, gth_search_task, GTH_TYPE_TASK)
+
+
 struct _GthSearchTaskPrivate
 {
 	GthBrowser    *browser;
@@ -43,9 +46,6 @@ struct _GthSearchTaskPrivate
 };
 
 
-static gpointer parent_class = NULL;
-
-
 static void
 browser_unref_cb (gpointer  data,
 		  GObject  *browser)
@@ -55,7 +55,7 @@ browser_unref_cb (gpointer  data,
 
 
 static void
-gth_task_finalize (GObject *object)
+gth_search_task_finalize (GObject *object)
 {
 	GthSearchTask *task;
 
@@ -72,7 +72,7 @@ gth_task_finalize (GObject *object)
 		task->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_search_task_parent_class)->finalize (object);
 }
 
 
@@ -419,10 +419,8 @@ gth_search_task_class_init (GthSearchTaskClass *class)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (class);
-
 	object_class = (GObjectClass*) class;
-	object_class->finalize = gth_task_finalize;
+	object_class->finalize = gth_search_task_finalize;
 
 	task_class = (GthTaskClass*) class;
 	task_class->exec = gth_search_task_exec;
@@ -437,34 +435,6 @@ gth_search_task_init (GthSearchTask *task)
 }
 
 
-GType
-gth_search_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthSearchTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_search_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthSearchTask),
-			0,
-			(GInstanceInitFunc) gth_search_task_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthSearchTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthTask *
 gth_search_task_new (GthBrowser *browser,
 		     GthSearch  *search,
diff --git a/extensions/search/gth-search.c b/extensions/search/gth-search.c
index b6d7c32..7c45756 100644
--- a/extensions/search/gth-search.c
+++ b/extensions/search/gth-search.c
@@ -28,6 +28,19 @@
 #define SEARCH_FORMAT "1.0"
 
 
+static void gth_search_dom_domizable_interface_init (DomDomizableInterface *iface);
+static void gth_search_gth_duplicable_interface_init (GthDuplicableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthSearch,
+			 gth_search,
+			 GTH_TYPE_CATALOG,
+			 G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+					        gth_search_dom_domizable_interface_init)
+		         G_IMPLEMENT_INTERFACE (GTH_TYPE_DUPLICABLE,
+		        		        gth_search_gth_duplicable_interface_init))
+
+
 struct _GthSearchPrivate {
 	GFile        *folder;
 	gboolean      recursive;
@@ -35,9 +48,8 @@ struct _GthSearchPrivate {
 };
 
 
-static gpointer           *parent_class = NULL;
 static DomDomizableInterface  *dom_domizable_parent_iface = NULL;
-static GthDuplicableIface *gth_duplicable_parent_iface = NULL;
+static GthDuplicableInterface *gth_duplicable_parent_iface = NULL;
 
 
 static DomElement *
@@ -60,7 +72,7 @@ gth_search_read_from_doc (GthCatalog *base,
 	g_return_if_fail (DOM_IS_ELEMENT (root));
 
 	self = GTH_SEARCH (base);
-	GTH_CATALOG_CLASS (parent_class)->read_from_doc (GTH_CATALOG (self), root);
+	GTH_CATALOG_CLASS (gth_search_parent_class)->read_from_doc (GTH_CATALOG (self), root);
 
 	gth_search_set_test (self, NULL);
 	for (node = root->first_child; node; node = node->next_sibling) {
@@ -108,7 +120,7 @@ gth_search_write_to_doc (GthCatalog  *catalog,
 			 DomDocument *doc,
 			 DomElement  *root)
 {
-	GTH_CATALOG_CLASS (parent_class)->write_to_doc (catalog, doc, root);
+	GTH_CATALOG_CLASS (gth_search_parent_class)->write_to_doc (catalog, doc, root);
 	_gth_search_write_to_doc (GTH_SEARCH (catalog), doc, root);
 }
 
@@ -184,7 +196,7 @@ gth_search_finalize (GObject *object)
 		search->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_search_parent_class)->finalize (object);
 }
 
 
@@ -194,8 +206,6 @@ gth_search_class_init (GthSearchClass *class)
 	GObjectClass    *object_class;
 	GthCatalogClass *catalog_class;
 	
-	parent_class = g_type_class_peek_parent (class);
-
 	object_class = G_OBJECT_CLASS (class);
 	object_class->finalize = gth_search_finalize;
 	
@@ -216,7 +226,7 @@ gth_search_dom_domizable_interface_init (DomDomizableInterface *iface)
 
 
 static void
-gth_search_gth_duplicable_interface_init (GthDuplicableIface *iface)
+gth_search_gth_duplicable_interface_init (GthDuplicableInterface *iface)
 {
 	gth_duplicable_parent_iface = g_type_interface_peek_parent (iface);
 	iface->duplicate = gth_search_real_duplicate;
@@ -230,46 +240,6 @@ gth_search_init (GthSearch *search)
 }
 
 
-GType
-gth_search_get_type (void)
-{
-        static GType type = 0;
-
-        if (! type) {
-                GTypeInfo type_info = {
-			sizeof (GthSearchClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_search_class_init,
-			NULL,
-			NULL,
-			sizeof (GthSearch),
-			0,
-			(GInstanceInitFunc) gth_search_init
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) gth_search_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		static const GInterfaceInfo gth_duplicable_info = {
-			(GInterfaceInitFunc) gth_search_gth_duplicable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		type = g_type_register_static (GTH_TYPE_CATALOG,
-					       "GthSearch",
-					       &type_info,
-					       0);
-		g_type_add_interface_static (type, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-		g_type_add_interface_static (type, GTH_TYPE_DUPLICABLE, &gth_duplicable_info);
-	}
-
-        return type;
-}
-
-
 GthSearch *
 gth_search_new (void)
 {
diff --git a/extensions/slideshow/gth-slideshow-preferences.c b/extensions/slideshow/gth-slideshow-preferences.c
index 9eb3806..c09de12 100644
--- a/extensions/slideshow/gth-slideshow-preferences.c
+++ b/extensions/slideshow/gth-slideshow-preferences.c
@@ -25,6 +25,9 @@
 #include "gth-transition.h"
 
 
+G_DEFINE_TYPE (GthSlideshowPreferences, gth_slideshow_preferences, GTK_TYPE_VBOX)
+
+
 enum {
 	TRANSITION_COLUMN_ID,
 	TRANSITION_COLUMN_DISPLAY_NAME
@@ -44,25 +47,13 @@ struct _GthSlideshowPreferencesPrivate {
 };
 
 
-static gpointer parent_class = NULL;
-
-
-static void
-gth_slideshow_preferences_init (GthSlideshowPreferences *self)
-{
-	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_SLIDESHOW_PREFERENCES, GthSlideshowPreferencesPrivate);
-	self->priv->builder = NULL;
-}
-
-
 static void
 gth_slideshow_preferences_finalize (GObject *object)
 {
 	GthSlideshowPreferences *self = GTH_SLIDESHOW_PREFERENCES (object);
 
 	g_object_unref (self->priv->builder);
-
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_slideshow_preferences_parent_class)->finalize (object);
 }
 
 
@@ -71,7 +62,6 @@ gth_slideshow_preferences_class_init (GthSlideshowPreferencesClass *klass)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthSlideshowPreferencesPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -79,35 +69,14 @@ gth_slideshow_preferences_class_init (GthSlideshowPreferencesClass *klass)
 }
 
 
-GType
-gth_slideshow_preferences_get_type (void)
+static void
+gth_slideshow_preferences_init (GthSlideshowPreferences *self)
 {
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthSlideshowPreferencesClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_slideshow_preferences_class_init,
-			NULL,
-			NULL,
-			sizeof (GthSlideshowPreferences),
-			0,
-			(GInstanceInitFunc) gth_slideshow_preferences_init
-		};
-
-		type = g_type_register_static (GTK_TYPE_VBOX,
-					       "GthSlideshowPreferences",
-					       &type_info,
-					       0);
-	}
-
-	return type;
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_SLIDESHOW_PREFERENCES, GthSlideshowPreferencesPrivate);
+	self->priv->builder = NULL;
 }
 
 
-
 static void
 personalize_checkbutton_toggled_cb (GtkToggleButton *button,
 				    gpointer         user_data)
diff --git a/extensions/slideshow/gth-slideshow.c b/extensions/slideshow/gth-slideshow.c
index 0944fcb..74d0908 100644
--- a/extensions/slideshow/gth-slideshow.c
+++ b/extensions/slideshow/gth-slideshow.c
@@ -38,6 +38,9 @@
 #define DEFAULT_DELAY 2000
 
 
+G_DEFINE_TYPE (GthSlideshow, gth_slideshow, GTK_TYPE_WINDOW)
+
+
 typedef enum {
 	GTH_SLIDESHOW_DIRECTION_FORWARD,
 	GTH_SLIDESHOW_DIRECTION_BACKWARD
@@ -88,9 +91,6 @@ struct _GthSlideshowPrivate {
 };
 
 
-static gpointer parent_class = NULL;
-
-
 static void
 _gth_slideshow_close (GthSlideshow *self)
 {
@@ -269,35 +269,6 @@ image_preloader_requested_ready_cb (GthImagePreloader  *preloader,
 
 
 static void
-gth_slideshow_init (GthSlideshow *self)
-{
-	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_SLIDESHOW, GthSlideshowPrivate);
-	self->priv->file_list = NULL;
-	self->priv->next_event = 0;
-	self->priv->delay = DEFAULT_DELAY;
-	self->priv->automatic = FALSE;
-	self->priv->wrap_around = FALSE;
-	self->priv->transitions = NULL;
-	self->priv->n_transitions = 0;
-	self->priv->rand = g_rand_new ();
-	self->priv->first_show = TRUE;
-	self->priv->audio_files = NULL;
-	self->priv->paused = FALSE;
-	self->priv->animating = FALSE;
-	self->priv->direction = GTH_SLIDESHOW_DIRECTION_FORWARD;
-	self->priv->random_order = FALSE;
-	self->priv->current_pixbuf = NULL;
-	self->priv->screensaver = gth_screensaver_new (NULL);
-
-	self->priv->preloader = gth_image_preloader_new (GTH_LOAD_POLICY_ONE_STEP, 3);
-	g_signal_connect (self->priv->preloader,
-			  "requested_ready",
-			  G_CALLBACK (image_preloader_requested_ready_cb),
-			  self);
-}
-
-
-static void
 gth_slideshow_finalize (GObject *object)
 {
 	GthSlideshow *self = GTH_SLIDESHOW (object);
@@ -329,7 +300,7 @@ gth_slideshow_finalize (GObject *object)
 		g_object_unref (self->priv->screensaver);
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_slideshow_parent_class)->finalize (object);
 }
 
 
@@ -338,7 +309,6 @@ gth_slideshow_class_init (GthSlideshowClass *klass)
 {
 	GObjectClass *gobject_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthSlideshowPrivate));
 
 	gobject_class = G_OBJECT_CLASS (klass);
@@ -346,34 +316,6 @@ gth_slideshow_class_init (GthSlideshowClass *klass)
 }
 
 
-GType
-gth_slideshow_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthSlideshowClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_slideshow_class_init,
-			NULL,
-			NULL,
-			sizeof (GthSlideshow),
-			0,
-			(GInstanceInitFunc) gth_slideshow_init
-		};
-
-		type = g_type_register_static (GTK_TYPE_WINDOW,
-					       "GthSlideshow",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static gboolean
 hide_cursor_cb (gpointer data)
 {
@@ -467,6 +409,35 @@ gth_slideshow_show_cb (GtkWidget    *widget,
 
 
 static void
+gth_slideshow_init (GthSlideshow *self)
+{
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_SLIDESHOW, GthSlideshowPrivate);
+	self->priv->file_list = NULL;
+	self->priv->next_event = 0;
+	self->priv->delay = DEFAULT_DELAY;
+	self->priv->automatic = FALSE;
+	self->priv->wrap_around = FALSE;
+	self->priv->transitions = NULL;
+	self->priv->n_transitions = 0;
+	self->priv->rand = g_rand_new ();
+	self->priv->first_show = TRUE;
+	self->priv->audio_files = NULL;
+	self->priv->paused = FALSE;
+	self->priv->animating = FALSE;
+	self->priv->direction = GTH_SLIDESHOW_DIRECTION_FORWARD;
+	self->priv->random_order = FALSE;
+	self->priv->current_pixbuf = NULL;
+	self->priv->screensaver = gth_screensaver_new (NULL);
+
+	self->priv->preloader = gth_image_preloader_new (GTH_LOAD_POLICY_ONE_STEP, 3);
+	g_signal_connect (self->priv->preloader,
+			  "requested_ready",
+			  G_CALLBACK (image_preloader_requested_ready_cb),
+			  self);
+}
+
+
+static void
 _gth_slideshow_construct (GthSlideshow *self,
 			  GthProjector *projector,
 			  GthBrowser   *browser,
diff --git a/extensions/slideshow/gth-transition.c b/extensions/slideshow/gth-transition.c
index 75dad5c..6b67c45 100644
--- a/extensions/slideshow/gth-transition.c
+++ b/extensions/slideshow/gth-transition.c
@@ -23,6 +23,9 @@
 #include "gth-transition.h"
 
 
+G_DEFINE_TYPE (GthTransition, gth_transition, G_TYPE_OBJECT)
+
+
 /* Properties */
 enum {
         PROP_0,
@@ -39,19 +42,6 @@ struct _GthTransitionPrivate {
 };
 
 
-static gpointer parent_class = NULL;
-
-
-static void
-gth_transition_init (GthTransition *self)
-{
-	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_TRANSITION, GthTransitionPrivate);
-	self->priv->id = g_strdup ("");
-	self->priv->display_name = g_strdup ("");
-	self->priv->frame_func = NULL;
-}
-
-
 static void
 gth_transition_finalize (GObject *object)
 {
@@ -60,7 +50,7 @@ gth_transition_finalize (GObject *object)
 	g_free (self->priv->id);
 	g_free (self->priv->display_name);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_transition_parent_class)->finalize (object);
 }
 
 
@@ -129,7 +119,6 @@ gth_transition_class_init (GthTransitionClass *klass)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthTransitionPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -160,31 +149,13 @@ gth_transition_class_init (GthTransitionClass *klass)
 }
 
 
-GType
-gth_transition_get_type (void)
+static void
+gth_transition_init (GthTransition *self)
 {
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthTransitionClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_transition_class_init,
-			NULL,
-			NULL,
-			sizeof (GthTransition),
-			0,
-			(GInstanceInitFunc) gth_transition_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthTransition",
-					       &type_info,
-					       0);
-	}
-
-	return type;
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_TRANSITION, GthTransitionPrivate);
+	self->priv->id = g_strdup ("");
+	self->priv->display_name = g_strdup ("");
+	self->priv->frame_func = NULL;
 }
 
 
diff --git a/extensions/webalbums/gth-web-exporter.c b/extensions/webalbums/gth-web-exporter.c
index 999decc..ff4a6d5 100644
--- a/extensions/webalbums/gth-web-exporter.c
+++ b/extensions/webalbums/gth-web-exporter.c
@@ -53,6 +53,9 @@
 #define DEFAULT_WEB_DIR_THEME_FILES  "theme"
 
 
+G_DEFINE_TYPE (GthWebExporter, gth_web_exporter, GTH_TYPE_TASK)
+
+
 typedef enum {
 	GTH_TEMPLATE_TYPE_INDEX,
 	GTH_TEMPLATE_TYPE_IMAGE,
@@ -75,7 +78,6 @@ typedef enum {
 
 extern GFileInputStream *yy_istream;
 
-static GObjectClass *parent_class = NULL;
 
 typedef struct {
 	GthFileData *file_data;
@@ -3100,7 +3102,7 @@ gth_web_exporter_finalize (GObject *object)
 	}
 	_g_object_list_unref (self->priv->gfile_list);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_web_exporter_parent_class)->finalize (object);
 }
 
 
@@ -3110,7 +3112,6 @@ gth_web_exporter_class_init (GthWebExporterClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthWebExporterPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -3166,34 +3167,6 @@ gth_web_exporter_init (GthWebExporter *self)
 }
 
 
-GType
-gth_web_exporter_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthWebExporterClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_web_exporter_class_init,
-			NULL,
-			NULL,
-			sizeof (GthWebExporter),
-			0,
-			(GInstanceInitFunc) gth_web_exporter_init
-                };
-
-                type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthWebExporter",
-					       &type_info,
-					       0);
-        }
-
-	return type;
-}
-
-
 GthTask *
 gth_web_exporter_new (GthBrowser *browser,
 		      GList      *file_list)
diff --git a/gthumb/gth-async-task.c b/gthumb/gth-async-task.c
index 3af4bc7..4ca4963 100644
--- a/gthumb/gth-async-task.c
+++ b/gthumb/gth-async-task.c
@@ -53,7 +53,7 @@ struct _GthAsyncTaskPrivate {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthAsyncTask, gth_async_task, GTH_TYPE_TASK)
 
 
 static void
@@ -74,7 +74,7 @@ gth_async_task_finalize (GObject *object)
 
 	g_mutex_free (self->priv->data_mutex);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_async_task_parent_class)->finalize (object);
 }
 
 
@@ -250,7 +250,6 @@ gth_async_task_class_init (GthAsyncTaskClass *class)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (GthAsyncTaskPrivate));
 
 	object_class = G_OBJECT_CLASS (class);
@@ -308,34 +307,6 @@ gth_async_task_init (GthAsyncTask *self)
 }
 
 
-GType
-gth_async_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthAsyncTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_async_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthAsyncTask),
-			0,
-			(GInstanceInitFunc) gth_async_task_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthAsyncTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthTask *
 gth_async_task_new (GthAsyncInitFunc    before_func,
 		    GthAsyncThreadFunc  exec_func,
diff --git a/gthumb/gth-cell-renderer-thumbnail.c b/gthumb/gth-cell-renderer-thumbnail.c
index 74cf549..7a4b1ba 100644
--- a/gthumb/gth-cell-renderer-thumbnail.c
+++ b/gthumb/gth-cell-renderer-thumbnail.c
@@ -58,7 +58,7 @@ struct _GthCellRendererThumbnailPrivate
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthCellRendererThumbnail, gth_cell_renderer_thumbnail, GTK_TYPE_CELL_RENDERER)
 
 
 static void
@@ -68,14 +68,10 @@ gth_cell_renderer_thumbnail_finalize (GObject *object)
 
 	cell_renderer = GTH_CELL_RENDERER_THUMBNAIL (object);
 
-	if (cell_renderer->priv != NULL) {
-		_g_object_unref (cell_renderer->priv->thumbnail);
-		_g_object_unref (cell_renderer->priv->file);
-		g_free (cell_renderer->priv);
-		cell_renderer->priv = NULL;
-	}
+	_g_object_unref (cell_renderer->priv->thumbnail);
+	_g_object_unref (cell_renderer->priv->file);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_cell_renderer_thumbnail_parent_class)->finalize (object);
 }
 
 
@@ -167,12 +163,12 @@ gth_cell_renderer_thumbnail_get_size (GtkCellRenderer    *cell,
 				      int                *height)
 {
 	GthCellRendererThumbnail *self;
-	int   image_width;
-	int   image_height;
-	int   calc_width;
-	int   calc_height;
-	int   xpad;
-	int   ypad;
+	int                       image_width;
+	int                       image_height;
+	int                       calc_width;
+	int                       calc_height;
+	int                       xpad;
+	int                       ypad;
 
 	self = (GthCellRendererThumbnail *) cell;
 
@@ -413,13 +409,14 @@ gth_cell_renderer_thumbnail_class_init (GthCellRendererThumbnailClass *klass)
 	GObjectClass         *object_class;
 	GtkCellRendererClass *cell_renderer;
 
-	parent_class = g_type_class_peek_parent (klass);
-	object_class = G_OBJECT_CLASS (klass);
-	cell_renderer = GTK_CELL_RENDERER_CLASS (klass);
+	g_type_class_add_private (klass, sizeof (GthCellRendererThumbnailPrivate));
 
+	object_class = G_OBJECT_CLASS (klass);
 	object_class->finalize = gth_cell_renderer_thumbnail_finalize;
 	object_class->get_property = gth_cell_renderer_thumbnail_get_property;
 	object_class->set_property = gth_cell_renderer_thumbnail_set_property;
+
+	cell_renderer = GTK_CELL_RENDERER_CLASS (klass);
 	cell_renderer->get_size = gth_cell_renderer_thumbnail_get_size;
 	cell_renderer->render = gth_cell_renderer_thumbnail_render;
 
@@ -482,36 +479,14 @@ gth_cell_renderer_thumbnail_class_init (GthCellRendererThumbnailClass *klass)
 static void
 gth_cell_renderer_thumbnail_init (GthCellRendererThumbnail *self)
 {
-	self->priv = g_new0 (GthCellRendererThumbnailPrivate, 1);
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_CELL_RENDERER_THUMBNAIL, GthCellRendererThumbnailPrivate);
 	self->priv->size = DEFAULT_THUMBNAIL_SIZE;
+	self->priv->is_icon = FALSE;
+	self->priv->thumbnail = NULL;
+	self->priv->file = NULL;
 	self->priv->checked = TRUE;
-}
-
-
-GType
-gth_cell_renderer_thumbnail_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		GTypeInfo type_info = {
-			sizeof (GthCellRendererThumbnailClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_cell_renderer_thumbnail_class_init,
-			NULL,
-			NULL,
-			sizeof (GthCellRendererThumbnail),
-			0,
-			(GInstanceInitFunc) gth_cell_renderer_thumbnail_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_CELL_RENDERER,
-					       "GthCellRendererThumbnail",
-					       &type_info,
-					       0);
-	}
-	return type;
+	self->priv->selected = FALSE;
+	self->priv->fixed_size = TRUE;
 }
 
 
diff --git a/gthumb/gth-dumb-notebook.c b/gthumb/gth-dumb-notebook.c
index 428d52e..34e6b88 100644
--- a/gthumb/gth-dumb-notebook.c
+++ b/gthumb/gth-dumb-notebook.c
@@ -32,7 +32,7 @@ struct _GthDumbNotebookPrivate {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthDumbNotebook, gth_dumb_notebook, GTK_TYPE_CONTAINER)
 
 
 static void
@@ -45,7 +45,7 @@ gth_dumb_notebook_finalize (GObject *object)
 		dumb_notebook->priv = NULL;
 	}
 	
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_dumb_notebook_parent_class)->finalize (object);
 }
 
 
@@ -284,8 +284,6 @@ gth_dumb_notebook_class_init (GthDumbNotebookClass *klass)
 	GtkWidgetClass    *widget_class;
 	GtkContainerClass *container_class;
 	
-	parent_class = g_type_class_peek_parent (klass);
-
 	gobject_class = G_OBJECT_CLASS (klass);
 	gobject_class->finalize = gth_dumb_notebook_finalize;
 	
@@ -316,34 +314,6 @@ gth_dumb_notebook_init (GthDumbNotebook *notebook)
 }
 
 
-GType 
-gth_dumb_notebook_get_type (void) 
-{
-	static GType type = 0;
-	
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = { 
-			sizeof (GthDumbNotebookClass), 
-			(GBaseInitFunc) NULL, 
-			(GBaseFinalizeFunc) NULL, 
-			(GClassInitFunc) gth_dumb_notebook_class_init, 
-			(GClassFinalizeFunc) NULL, 
-			NULL, 
-			sizeof (GthDumbNotebook), 
-			0, 
-			(GInstanceInitFunc) gth_dumb_notebook_init, 
-			NULL 
-		};
-		type = g_type_register_static (GTK_TYPE_CONTAINER, 
-					       "GthDumbNotebook", 
-					       &g_define_type_info, 
-					       0);
-	}
-	
-	return type;
-}
-
-
 GtkWidget *
 gth_dumb_notebook_new (void) 
 {
diff --git a/gthumb/gth-duplicable.c b/gthumb/gth-duplicable.c
index 02908f2..9563539 100644
--- a/gthumb/gth-duplicable.c
+++ b/gthumb/gth-duplicable.c
@@ -23,34 +23,18 @@
 #include "gth-duplicable.h"
 
 
-GObject * 
-gth_duplicable_duplicate (GthDuplicable *self) 
+G_DEFINE_INTERFACE (GthDuplicable, gth_duplicable, 0)
+
+
+static void
+gth_duplicable_default_init (GthDuplicableInterface *iface)
 {
-	return GTH_DUPLICABLE_GET_INTERFACE (self)->duplicate (self);
+	/* void */
 }
 
 
-GType 
-gth_duplicable_get_type (void) 
+GObject *
+gth_duplicable_duplicate (GthDuplicable *self)
 {
-	static GType type_id = 0;
-	if (type_id == 0) {
-		static const GTypeInfo g_define_type_info = { 
-			sizeof (GthDuplicableIface), 
-			(GBaseInitFunc) NULL, 
-			(GBaseFinalizeFunc) NULL, 
-			(GClassInitFunc) NULL, 
-			(GClassFinalizeFunc) NULL, 
-			NULL, 
-			0, 
-			0, 
-			(GInstanceInitFunc) NULL, 
-			NULL 
-		};
-		type_id = g_type_register_static (G_TYPE_INTERFACE, 
-						  "GthDuplicable", 
-						  &g_define_type_info, 
-						  0);
-	}
-	return type_id;
+	return GTH_DUPLICABLE_GET_INTERFACE (self)->duplicate (self);
 }
diff --git a/gthumb/gth-duplicable.h b/gthumb/gth-duplicable.h
index b8cedc4..6a13e04 100644
--- a/gthumb/gth-duplicable.h
+++ b/gthumb/gth-duplicable.h
@@ -30,12 +30,12 @@ G_BEGIN_DECLS
 #define GTH_TYPE_DUPLICABLE               (gth_duplicable_get_type ())
 #define GTH_DUPLICABLE(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTH_TYPE_DUPLICABLE, GthDuplicable))
 #define GTH_IS_DUPLICABLE(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTH_TYPE_DUPLICABLE))
-#define GTH_DUPLICABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTH_TYPE_DUPLICABLE, GthDuplicableIface))
+#define GTH_DUPLICABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTH_TYPE_DUPLICABLE, GthDuplicableInterface))
 
 typedef struct _GthDuplicable GthDuplicable;
-typedef struct _GthDuplicableIface GthDuplicableIface;
+typedef struct _GthDuplicableInterface GthDuplicableInterface;
 
-struct _GthDuplicableIface {
+struct _GthDuplicableInterface {
 	GTypeInterface parent_iface;
 	
 	GObject * (*duplicate) (GthDuplicable *self);
diff --git a/gthumb/gth-embedded-dialog.c b/gthumb/gth-embedded-dialog.c
index 2d6d859..1ffbd08 100644
--- a/gthumb/gth-embedded-dialog.c
+++ b/gthumb/gth-embedded-dialog.c
@@ -24,9 +24,6 @@
 #include "gth-embedded-dialog.h"
 
 
-static gpointer parent_class = NULL;
-
-
 struct _GthEmbeddedDialogPrivate {
 	GtkWidget *icon_image;
 	GtkWidget *primary_text_label;
@@ -34,68 +31,18 @@ struct _GthEmbeddedDialogPrivate {
 };
 
 
-static void
-gth_embedded_dialog_finalize (GObject *object)
-{
-	GthEmbeddedDialog *dialog;
-
-	dialog = GTH_EMBEDDED_DIALOG (object);
-
-	if (dialog->priv != NULL)
-		dialog->priv = NULL;
+G_DEFINE_TYPE (GthEmbeddedDialog, gth_embedded_dialog, GEDIT_TYPE_MESSAGE_AREA)
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
-}
 
 static void
-gth_embedded_dialog_class_init (GthEmbeddedDialogClass *class)
+gth_embedded_dialog_class_init (GthEmbeddedDialogClass *klass)
 {
-	GObjectClass *object_class;
-
-	parent_class = g_type_class_peek_parent (class);
-	object_class = (GObjectClass*) class;
-
-	object_class->finalize = gth_embedded_dialog_finalize;
+	g_type_class_add_private (klass, sizeof (GthEmbeddedDialogPrivate));
 }
 
 
 static void
-gth_embedded_dialog_init (GthEmbeddedDialog *dialog)
-{
-	dialog->priv = g_new0 (GthEmbeddedDialogPrivate, 1);
-}
-
-
-GType
-gth_embedded_dialog_get_type (void)
-{
-        static GType type = 0;
-
-        if (! type) {
-                GTypeInfo type_info = {
-			sizeof (GthEmbeddedDialogClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_embedded_dialog_class_init,
-			NULL,
-			NULL,
-			sizeof (GthEmbeddedDialog),
-			0,
-			(GInstanceInitFunc) gth_embedded_dialog_init
-		};
-
-		type = g_type_register_static (GEDIT_TYPE_MESSAGE_AREA,
-					       "GthEmbeddedDialog",
-					       &type_info,
-					       0);
-	}
-
-        return type;
-}
-
-
-static void
-gth_embedded_dialog_construct (GthEmbeddedDialog *self)
+gth_embedded_dialog_init (GthEmbeddedDialog *self)
 {
 	GtkWidget *hbox_content;
 	GtkWidget *image;
@@ -103,6 +50,8 @@ gth_embedded_dialog_construct (GthEmbeddedDialog *self)
 	GtkWidget *primary_label;
 	GtkWidget *secondary_label;
 	
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_EMBEDDED_DIALOG, GthEmbeddedDialogPrivate);
+
 	hbox_content = gtk_hbox_new (FALSE, 8);
 	gtk_widget_show (hbox_content);
 
@@ -140,12 +89,7 @@ gth_embedded_dialog_construct (GthEmbeddedDialog *self)
 GtkWidget *
 gth_embedded_dialog_new (void)
 {
-	GthEmbeddedDialog *self;
-
-	self = g_object_new (GTH_TYPE_EMBEDDED_DIALOG, NULL);
-	gth_embedded_dialog_construct (self);
-	
-	return (GtkWidget *) self;
+	return g_object_new (GTH_TYPE_EMBEDDED_DIALOG, NULL);
 }
 
 
diff --git a/gthumb/gth-empty-list.c b/gthumb/gth-empty-list.c
index fca756c..fa59d71 100644
--- a/gthumb/gth-empty-list.c
+++ b/gthumb/gth-empty-list.c
@@ -33,14 +33,15 @@ struct _GthEmptyListPrivate {
 	PangoLayout *layout;
 };
 
-static gpointer parent_class = NULL;
+
+G_DEFINE_TYPE (GthEmptyList, gth_empty_list, GTK_TYPE_SCROLLED_WINDOW)
 
 
 static void 
 gth_empty_list_finalize (GObject *obj) 
 {
 	g_free (GTH_EMPTY_LIST (obj)->priv->text);
-	G_OBJECT_CLASS (parent_class)->finalize (obj);
+	G_OBJECT_CLASS (gth_empty_list_parent_class)->finalize (obj);
 }
 
 
@@ -181,7 +182,7 @@ gth_empty_list_unrealize (GtkWidget *widget)
 		self->priv->layout = NULL;
 	}
 
-	(* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
+	(* GTK_WIDGET_CLASS (gth_empty_list_parent_class)->unrealize) (widget);
 }
 
 
@@ -295,16 +296,14 @@ gth_empty_list_class_init (GthEmptyListClass *klass)
 	GObjectClass   *object_class;
 	GtkWidgetClass *widget_class;
 	
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthEmptyListPrivate));
 
 	object_class = (GObjectClass*) (klass);
-	widget_class = (GtkWidgetClass*) klass;
-	
 	object_class->set_property = gth_empty_list_set_property;
 	object_class->get_property = gth_empty_list_get_property;
 	object_class->finalize = gth_empty_list_finalize;
 	
+	widget_class = (GtkWidgetClass*) klass;
 	widget_class->realize = gth_empty_list_realize;
 	widget_class->unrealize = gth_empty_list_unrealize;
 	widget_class->map = gth_empty_list_map;
@@ -326,45 +325,17 @@ gth_empty_list_class_init (GthEmptyListClass *klass)
 
 
 static void 
-gth_empty_list_instance_init (GthEmptyList *self) 
+gth_empty_list_init (GthEmptyList *self)
 {
 	GtkStyleContext *style_context;
 
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_EMPTY_LIST, GthEmptyListPrivate);
+
 	style_context = gtk_widget_get_style_context (GTK_WIDGET (self));
 	gtk_style_context_add_class (style_context, GTK_STYLE_CLASS_VIEW);
 	gtk_style_context_add_class (style_context, GTK_STYLE_CLASS_FRAME);
 
 	gtk_widget_set_can_focus (GTK_WIDGET (self), TRUE);
-
-	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_EMPTY_LIST, GthEmptyListPrivate);
-}
-
-
-GType 
-gth_empty_list_get_type (void) 
-{
-	static GType type = 0;
-	
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = { 
-			sizeof (GthEmptyListClass), 
-			NULL, 
-			NULL, 
-			(GClassInitFunc) gth_empty_list_class_init, 
-			NULL, 
-			NULL, 
-			sizeof (GthEmptyList), 
-			0, 
-			(GInstanceInitFunc) gth_empty_list_instance_init, 
-			NULL 
-		};
-		type = g_type_register_static (GTK_TYPE_SCROLLED_WINDOW,
-					       "GthEmptyList", 
-					       &g_define_type_info, 
-					       0);
-	}
-	
-	return type;
 }
 
 
diff --git a/gthumb/gth-extensions.c b/gthumb/gth-extensions.c
index 03a11de..580d87d 100644
--- a/gthumb/gth-extensions.c
+++ b/gthumb/gth-extensions.c
@@ -32,7 +32,7 @@
 /* -- gth_extension --  */
 
 
-static gpointer gth_extension_parent_class = NULL;
+G_DEFINE_TYPE (GthExtension, gth_extension, G_TYPE_OBJECT)
 
 
 static gboolean
@@ -89,8 +89,6 @@ gth_extension_base_configure (GthExtension *self,
 static void
 gth_extension_class_init (GthExtensionClass *klass)
 {
-	gth_extension_parent_class = g_type_class_peek_parent (klass);
-
 	klass->open = gth_extension_base_open;
 	klass->close = gth_extension_base_close;
 	klass->activate = gth_extension_base_activate;
@@ -101,36 +99,13 @@ gth_extension_class_init (GthExtensionClass *klass)
 
 
 static void
-gth_extension_instance_init (GthExtension *self)
+gth_extension_init (GthExtension *self)
 {
 	self->initialized = FALSE;
 	self->active = FALSE;
 }
 
 
-GType
-gth_extension_get_type (void)
-{
-	static GType gth_extension_type_id = 0;
-	if (gth_extension_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthExtensionClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_extension_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthExtension),
-			0,
-			(GInstanceInitFunc) gth_extension_instance_init,
-			NULL
-		};
-		gth_extension_type_id = g_type_register_static (G_TYPE_OBJECT, "GthExtension", &g_define_type_info, 0);
-	}
-	return gth_extension_type_id;
-}
-
-
 gboolean
 gth_extension_open (GthExtension  *self,
 		    GError       **error)
@@ -194,7 +169,7 @@ struct _GthExtensionModulePrivate {
 };
 
 
-static gpointer gth_extension_module_parent_class = NULL;
+G_DEFINE_TYPE (GthExtensionModule, gth_extension_module, GTH_TYPE_EXTENSION)
 
 
 static gboolean
@@ -379,7 +354,6 @@ gth_extension_module_class_init (GthExtensionModuleClass *klass)
 {
 	GthExtensionClass *elc;
 
-	gth_extension_module_parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthExtensionModulePrivate));
 
 	G_OBJECT_CLASS (klass)->finalize = gth_extension_module_finalize;
@@ -395,35 +369,12 @@ gth_extension_module_class_init (GthExtensionModuleClass *klass)
 
 
 static void
-gth_extension_module_instance_init (GthExtensionModule *self)
+gth_extension_module_init (GthExtensionModule *self)
 {
 	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_EXTENSION_MODULE, GthExtensionModulePrivate);
 }
 
 
-GType
-gth_extension_module_get_type (void)
-{
-	static GType gth_extension_module_type_id = 0;
-	if (gth_extension_module_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthExtensionModuleClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_extension_module_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthExtensionModule),
-			0,
-			(GInstanceInitFunc) gth_extension_module_instance_init,
-			NULL
-		};
-		gth_extension_module_type_id = g_type_register_static (GTH_TYPE_EXTENSION, "GthExtensionModule", &g_define_type_info, 0);
-	}
-	return gth_extension_module_type_id;
-}
-
-
 GthExtension *
 gth_extension_module_new (const char *module_name)
 {
@@ -445,7 +396,7 @@ struct _GthExtensionDescriptionPrivate {
 };
 
 
-static gpointer gth_extension_description_parent_class = NULL;
+G_DEFINE_TYPE (GthExtensionDescription, gth_extension_description, G_TYPE_OBJECT)
 
 
 static void
@@ -477,15 +428,13 @@ gth_extension_description_finalize (GObject *obj)
 static void
 gth_extension_description_class_init (GthExtensionDescriptionClass *klass)
 {
-	gth_extension_description_parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthExtensionDescriptionPrivate));
-
 	G_OBJECT_CLASS (klass)->finalize = gth_extension_description_finalize;
 }
 
 
 static void
-gth_extension_description_instance_init (GthExtensionDescription *self)
+gth_extension_description_init (GthExtensionDescription *self)
 {
 	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_EXTENSION_DESCRIPTION, GthExtensionDescriptionPrivate);
 	self->priv->opened = FALSE;
@@ -493,29 +442,6 @@ gth_extension_description_instance_init (GthExtensionDescription *self)
 }
 
 
-GType
-gth_extension_description_get_type (void)
-{
-	static GType gth_extension_description_type_id = 0;
-	if (gth_extension_description_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthExtensionDescriptionClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_extension_description_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthExtensionDescription),
-			0,
-			(GInstanceInitFunc) gth_extension_description_instance_init,
-			NULL
-		};
-		gth_extension_description_type_id = g_type_register_static (G_TYPE_OBJECT, "GthExtensionDescription", &g_define_type_info, 0);
-	}
-	return gth_extension_description_type_id;
-}
-
-
 static gboolean
 gth_extension_description_load_from_file (GthExtensionDescription *desc,
 					  GFile                   *file)
@@ -586,14 +512,14 @@ gth_extension_description_get_extension (GthExtensionDescription *desc)
 /* -- gth_extension_manager --  */
 
 
-static gpointer gth_extension_manager_parent_class = NULL;
-
-
 struct _GthExtensionManagerPrivate {
 	GHashTable *extensions;
 };
 
 
+G_DEFINE_TYPE (GthExtensionManager, gth_extension_manager, G_TYPE_OBJECT)
+
+
 static void
 gth_extension_manager_finalize (GObject *obj)
 {
@@ -611,43 +537,19 @@ gth_extension_manager_finalize (GObject *obj)
 static void
 gth_extension_manager_class_init (GthExtensionManagerClass *klass)
 {
-	gth_extension_manager_parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthExtensionManagerPrivate));
-
 	G_OBJECT_CLASS (klass)->finalize = gth_extension_manager_finalize;
 }
 
 
 static void
-gth_extension_manager_instance_init (GthExtensionManager *self)
+gth_extension_manager_init (GthExtensionManager *self)
 {
 	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_EXTENSION_MANAGER, GthExtensionManagerPrivate);
 	self->priv->extensions = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
 }
 
 
-GType
-gth_extension_manager_get_type (void) {
-	static GType gth_extension_manager_type_id = 0;
-	if (gth_extension_manager_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthExtensionManagerClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_extension_manager_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthExtensionManager),
-			0,
-			(GInstanceInitFunc) gth_extension_manager_instance_init,
-			NULL
-		};
-		gth_extension_manager_type_id = g_type_register_static (G_TYPE_OBJECT, "GthExtensionManager", &g_define_type_info, 0);
-	}
-	return gth_extension_manager_type_id;
-}
-
-
 static void
 gth_extension_manager_load_extensions (GthExtensionManager *self)
 {
diff --git a/gthumb/gth-file-chooser-dialog.c b/gthumb/gth-file-chooser-dialog.c
index 79b586f..cee80bc 100644
--- a/gthumb/gth-file-chooser-dialog.c
+++ b/gthumb/gth-file-chooser-dialog.c
@@ -35,7 +35,7 @@ typedef struct {
 } Format;
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthFileChooserDialog, gth_file_chooser_dialog, GTK_TYPE_FILE_CHOOSER_DIALOG)
 
 
 struct _GthFileChooserDialogPrivate {
@@ -54,7 +54,7 @@ gth_file_chooser_dialog_finalize (GObject *object)
 	g_list_foreach (self->priv->supported_formats, (GFunc) g_free, NULL);
 	g_list_free (self->priv->supported_formats);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_file_chooser_dialog_parent_class)->finalize (object);
 }
 
 
@@ -63,7 +63,6 @@ gth_file_chooser_dialog_class_init (GthFileChooserDialogClass *class)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (GthFileChooserDialogPrivate));
 
 	object_class = (GObjectClass*) class;
@@ -79,34 +78,6 @@ gth_file_chooser_dialog_init (GthFileChooserDialog *self)
 }
 
 
-GType
-gth_file_chooser_dialog_get_type (void)
-{
-        static GType type = 0;
-
-        if (! type) {
-                GTypeInfo type_info = {
-			sizeof (GthFileChooserDialogClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_file_chooser_dialog_class_init,
-			NULL,
-			NULL,
-			sizeof (GthFileChooserDialog),
-			0,
-			(GInstanceInitFunc) gth_file_chooser_dialog_init
-		};
-
-		type = g_type_register_static (GTK_TYPE_FILE_CHOOSER_DIALOG,
-					       "GthFileChooserDialog",
-					       &type_info,
-					       0);
-	}
-
-        return type;
-}
-
-
 static void
 format_chooser_selection_changed_cb (EggFileFormatChooser *format_chooser,
 				     GthFileChooserDialog *self)
diff --git a/gthumb/gth-file-data.c b/gthumb/gth-file-data.c
index d48bc69..6da5551 100644
--- a/gthumb/gth-file-data.c
+++ b/gthumb/gth-file-data.c
@@ -28,9 +28,6 @@
 #include "gth-string-list.h"
 
 
-#define GTH_FILE_DATA_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTH_TYPE_FILE_DATA, GthFileDataPrivate))
-
-
 const char *FileDataDigitalizationTags[] = {
 	"Exif::Photo::DateTimeOriginal",
 	"Xmp::exif::DateTimeOriginal",
@@ -51,7 +48,15 @@ struct _GthFileDataPrivate {
 	char     *sort_key;
 };
 
-static gpointer gth_file_data_parent_class = NULL;
+
+static void gth_file_data_gth_duplicable_interface_init (GthDuplicableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthFileData,
+			 gth_file_data,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (GTH_TYPE_DUPLICABLE,
+					 	gth_file_data_gth_duplicable_interface_init))
 
 
 static void
@@ -59,10 +64,8 @@ gth_file_data_finalize (GObject *obj)
 {
 	GthFileData *self = GTH_FILE_DATA (obj);
 
-	if (self->file != NULL)
-		g_object_unref (self->file);
-	if (self->info != NULL)
-		g_object_unref (self->info);
+	_g_object_unref (self->file);
+	_g_object_unref (self->info);
 	g_free (self->priv->sort_key);
 
 	G_OBJECT_CLASS (gth_file_data_parent_class)->finalize (obj);
@@ -72,21 +75,12 @@ gth_file_data_finalize (GObject *obj)
 static void
 gth_file_data_class_init (GthFileDataClass *klass)
 {
-	gth_file_data_parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthFileDataPrivate));
 
 	G_OBJECT_CLASS (klass)->finalize = gth_file_data_finalize;
 }
 
 
-static void
-gth_file_data_instance_init (GthFileData *self)
-{
-	self->priv = GTH_FILE_DATA_GET_PRIVATE (self);
-	self->priv->dtime.tv_sec = 0;
-}
-
-
 static GObject *
 gth_file_data_real_duplicate (GthDuplicable *base)
 {
@@ -95,40 +89,20 @@ gth_file_data_real_duplicate (GthDuplicable *base)
 
 
 static void
-gth_file_data_gth_duplicable_interface_init (GthDuplicableIface *iface)
+gth_file_data_gth_duplicable_interface_init (GthDuplicableInterface *iface)
 {
 	iface->duplicate = gth_file_data_real_duplicate;
 }
 
 
-GType
-gth_file_data_get_type (void)
-{
-	static GType gth_file_data_type_id = 0;
-
-	if (gth_file_data_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileDataClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_data_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileData),
-			0,
-			(GInstanceInitFunc) gth_file_data_instance_init,
-			NULL
-		};
-		static const GInterfaceInfo gth_duplicable_info = {
-			(GInterfaceInitFunc) gth_file_data_gth_duplicable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		gth_file_data_type_id = g_type_register_static (G_TYPE_OBJECT, "GthFileData", &g_define_type_info, 0);
-		g_type_add_interface_static (gth_file_data_type_id, GTH_TYPE_DUPLICABLE, &gth_duplicable_info);
-	}
-
-	return gth_file_data_type_id;
+static void
+gth_file_data_init (GthFileData *self)
+{
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_FILE_DATA, GthFileDataPrivate);
+	self->priv->dtime.tv_sec = 0;
+	self->priv->sort_key = NULL;
+	self->file = NULL;
+	self->info = NULL;
 }
 
 
diff --git a/gthumb/gth-file-list.c b/gthumb/gth-file-list.c
index 69dcefe..c8b8095 100644
--- a/gthumb/gth-file-list.c
+++ b/gthumb/gth-file-list.c
@@ -253,7 +253,7 @@ _gth_file_list_queue_op (GthFileList   *file_list,
 /* -- gth_file_list -- */
 
 
-static GtkHBoxClass *parent_class = NULL;
+G_DEFINE_TYPE (GthFileList, gth_file_list, GTK_TYPE_VBOX)
 
 
 static void
@@ -275,7 +275,7 @@ gth_file_list_finalize (GObject *object)
 		file_list->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_file_list_parent_class)->finalize (object);
 }
 
 
@@ -314,7 +314,7 @@ gth_file_list_get_preferred_width (GtkWidget *widget,
 				      "scrollbar-spacing", &scrollbar_spacing,
 				      NULL);
 		*minimum_width += vscrollbar_minimum_width + scrollbar_spacing;
-	 }
+	}
 
 	*natural_width = *minimum_width;
 }
@@ -340,8 +340,6 @@ gth_file_list_class_init (GthFileListClass *class)
 	GObjectClass   *object_class;
 	GtkWidgetClass *widget_class;
 
-	parent_class = g_type_class_peek_parent (class);
-
 	object_class = (GObjectClass*) class;
 	object_class->finalize = gth_file_list_finalize;
 
@@ -779,34 +777,6 @@ gth_file_list_construct (GthFileList     *file_list,
 }
 
 
-GType
-gth_file_list_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthFileListClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_file_list_class_init,
-			NULL,
-			NULL,
-			sizeof (GthFileList),
-			0,
-			(GInstanceInitFunc) gth_file_list_init
-		};
-
-		type = g_type_register_static (GTK_TYPE_VBOX,
-					       "GthFileList",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GtkWidget*
 gth_file_list_new (GtkWidget       *file_view,
 		   GthFileListType  list_type,
diff --git a/gthumb/gth-file-properties.c b/gthumb/gth-file-properties.c
index 06c591c..0d74da3 100644
--- a/gthumb/gth-file-properties.c
+++ b/gthumb/gth-file-properties.c
@@ -50,9 +50,6 @@ enum {
 };
 
 
-static gpointer parent_class = NULL;
-
-
 struct _GthFilePropertiesPrivate {
 	GtkWidget     *tree_view;
 	GtkWidget     *comment_view;
@@ -62,6 +59,19 @@ struct _GthFilePropertiesPrivate {
 };
 
 
+static void gth_file_properties_gth_multipage_child_interface_init (GthMultipageChildInterface *iface);
+static void gth_file_properties_gth_property_view_interface_init (GthPropertyViewInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthFileProperties,
+			 gth_file_properties,
+			 GTK_TYPE_VBOX,
+			 G_IMPLEMENT_INTERFACE (GTH_TYPE_MULTIPAGE_CHILD,
+					 	gth_file_properties_gth_multipage_child_interface_init)
+		         G_IMPLEMENT_INTERFACE (GTH_TYPE_PROPERTY_VIEW,
+		        		 	gth_file_properties_gth_property_view_interface_init))
+
+
 static char *
 get_comment (GthFileData *file_data)
 {
@@ -219,14 +229,13 @@ gth_file_properties_finalize (GObject *base)
 	if (self->priv->popup_menu != NULL)
 		gtk_widget_destroy (self->priv->popup_menu);
 
-	G_OBJECT_CLASS (parent_class)->finalize (base);
+	G_OBJECT_CLASS (gth_file_properties_parent_class)->finalize (base);
 }
 
 
 static void
 gth_file_properties_class_init (GthFilePropertiesClass *klass)
 {
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthFilePropertiesPrivate));
 
 	G_OBJECT_CLASS (klass)->finalize = gth_file_properties_finalize;
@@ -427,7 +436,7 @@ gth_file_properties_init (GthFileProperties *self)
 
 
 static void
-gth_file_properties_gth_multipage_child_interface_init (GthMultipageChildIface *iface)
+gth_file_properties_gth_multipage_child_interface_init (GthMultipageChildInterface *iface)
 {
 	iface->get_name = gth_file_properties_real_get_name;
 	iface->get_icon = gth_file_properties_real_get_icon;
@@ -435,47 +444,7 @@ gth_file_properties_gth_multipage_child_interface_init (GthMultipageChildIface *
 
 
 static void
-gth_file_properties_gth_property_view_interface_init (GthPropertyViewIface *iface)
+gth_file_properties_gth_property_view_interface_init (GthPropertyViewInterface *iface)
 {
 	iface->set_file = gth_file_properties_real_set_file;
 }
-
-
-GType
-gth_file_properties_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFilePropertiesClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_properties_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileProperties),
-			0,
-			(GInstanceInitFunc) gth_file_properties_init,
-			NULL
-		};
-		static const GInterfaceInfo gth_multipage_child_info = {
-			(GInterfaceInitFunc) gth_file_properties_gth_multipage_child_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		static const GInterfaceInfo gth_property_view_info = {
-			(GInterfaceInitFunc) gth_file_properties_gth_property_view_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_VBOX,
-					       "GthFileProperties",
-					       &g_define_type_info,
-					       0);
-		g_type_add_interface_static (type, GTH_TYPE_MULTIPAGE_CHILD, &gth_multipage_child_info);
-		g_type_add_interface_static (type, GTH_TYPE_PROPERTY_VIEW, &gth_property_view_info);
-	}
-
-	return type;
-}
diff --git a/gthumb/gth-file-selection.c b/gthumb/gth-file-selection.c
index 8b5aecd..d9653ca 100644
--- a/gthumb/gth-file-selection.c
+++ b/gthumb/gth-file-selection.c
@@ -31,8 +31,11 @@ enum {
 static guint gth_file_selection_signals[LAST_SIGNAL] = { 0 };
 
 
+G_DEFINE_INTERFACE (GthFileSelection, gth_file_selection, 0)
+
+
 static void
-gth_file_selection_base_init (gpointer g_class)
+gth_file_selection_default_init (GthFileSelectionInterface *iface)
 {
 	static gboolean initialized = FALSE;
 
@@ -41,7 +44,7 @@ gth_file_selection_base_init (gpointer g_class)
 			g_signal_new ("file-selection-changed",
 				      GTH_TYPE_FILE_SELECTION,
 				      G_SIGNAL_RUN_LAST,
-				      G_STRUCT_OFFSET (GthFileSelectionIface, file_selection_changed),
+				      G_STRUCT_OFFSET (GthFileSelectionInterface, file_selection_changed),
 				      NULL, NULL,
 				      g_cclosure_marshal_VOID__VOID,
 				      G_TYPE_NONE, 0);
@@ -50,34 +53,6 @@ gth_file_selection_base_init (gpointer g_class)
 }
 
 
-GType
-gth_file_selection_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileSelectionIface),
-			(GBaseInitFunc) gth_file_selection_base_init,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) NULL,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			0,
-			0,
-			(GInstanceInitFunc) NULL,
-			NULL
-		};
-		type = g_type_register_static (G_TYPE_INTERFACE,
-					       "GthFileSelection",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 void
 gth_file_selection_set_selection_mode (GthFileSelection *self,
 				       GtkSelectionMode  mode)
diff --git a/gthumb/gth-file-selection.h b/gthumb/gth-file-selection.h
index 4b2f053..063f42b 100644
--- a/gthumb/gth-file-selection.h
+++ b/gthumb/gth-file-selection.h
@@ -31,12 +31,12 @@ G_BEGIN_DECLS
 #define GTH_TYPE_FILE_SELECTION               (gth_file_selection_get_type ())
 #define GTH_FILE_SELECTION(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTH_TYPE_FILE_SELECTION, GthFileSelection))
 #define GTH_IS_FILE_SELECTION(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTH_TYPE_FILE_SELECTION))
-#define GTH_FILE_SELECTION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTH_TYPE_FILE_SELECTION, GthFileSelectionIface))
+#define GTH_FILE_SELECTION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTH_TYPE_FILE_SELECTION, GthFileSelectionInterface))
 
 typedef struct _GthFileSelection GthFileSelection;
-typedef struct _GthFileSelectionIface GthFileSelectionIface;
+typedef struct _GthFileSelectionInterface GthFileSelectionInterface;
 
-struct _GthFileSelectionIface {
+struct _GthFileSelectionInterface {
 	GTypeInterface parent_iface;
 
 	/*< signals >*/
diff --git a/gthumb/gth-file-source-vfs.c b/gthumb/gth-file-source-vfs.c
index 0cdf3af..82f7c41 100644
--- a/gthumb/gth-file-source-vfs.c
+++ b/gthumb/gth-file-source-vfs.c
@@ -53,12 +53,14 @@ struct _GthFileSourceVfsPrivate
 };
 
 
-static GthFileSourceClass *parent_class = NULL;
 static guint mount_changed_event_id = 0;
 static guint mount_added_event_id = 0;
 static guint mount_removed_event_id = 0;
 
 
+G_DEFINE_TYPE (GthFileSourceVfs, gth_file_source_vfs, GTH_TYPE_FILE_SOURCE)
+
+
 static GList *
 gth_file_source_vfs_add_special_dir (GList         *list, 
 				     GthFileSource *file_source,
@@ -887,7 +889,7 @@ gth_file_source_vfs_finalize (GObject *object)
 		file_source_vfs->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_file_source_vfs_parent_class)->finalize (object);
 }
 
 
@@ -897,11 +899,10 @@ gth_file_source_vfs_class_init (GthFileSourceVfsClass *class)
 	GObjectClass       *object_class;
 	GthFileSourceClass *file_source_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	object_class = (GObjectClass*) class;
-	file_source_class = (GthFileSourceClass*) class;
-
 	object_class->finalize = gth_file_source_vfs_finalize;
+
+	file_source_class = (GthFileSourceClass*) class;
 	file_source_class->get_entry_points = gth_file_source_vfs_get_entry_points;
 	file_source_class->to_gio_file = gth_file_source_vfs_to_gio_file;
 	file_source_class->get_file_info = gth_file_source_vfs_get_file_info;
@@ -926,31 +927,3 @@ gth_file_source_vfs_init (GthFileSourceVfs *file_source)
 	for (i = 0; i < GTH_MONITOR_N_EVENTS; i++)
 		file_source->priv->monitor_queue[i] = NULL;
 }
-
-
-GType
-gth_file_source_vfs_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthFileSourceVfsClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_file_source_vfs_class_init,
-			NULL,
-			NULL,
-			sizeof (GthFileSourceVfs),
-			0,
-			(GInstanceInitFunc) gth_file_source_vfs_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_FILE_SOURCE,
-					       "GthFileSourceVfs",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
diff --git a/gthumb/gth-file-source.c b/gthumb/gth-file-source.c
index 8d6bc2b..a379862 100644
--- a/gthumb/gth-file-source.c
+++ b/gthumb/gth-file-source.c
@@ -39,7 +39,7 @@ struct _GthFileSourcePrivate
 };
 
 
-static GObjectClass *parent_class = NULL;
+G_DEFINE_TYPE (GthFileSource, gth_file_source, G_TYPE_OBJECT)
 
 
 /* -- queue -- */
@@ -846,7 +846,7 @@ gth_file_source_finalize (GObject *object)
 		file_source->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_file_source_parent_class)->finalize (object);
 }
 
 
@@ -855,10 +855,9 @@ gth_file_source_class_init (GthFileSourceClass *class)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	object_class = (GObjectClass*) class;
-
 	object_class->finalize = gth_file_source_finalize;
+
 	class->get_entry_points = base_get_entry_points;
 	class->get_current_list = base_get_current_list;
 	class->to_gio_file = base_to_gio_file;
@@ -885,34 +884,6 @@ gth_file_source_init (GthFileSource *file_source)
 }
 
 
-GType
-gth_file_source_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthFileSourceClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_file_source_class_init,
-			NULL,
-			NULL,
-			sizeof (GthFileSource),
-			0,
-			(GInstanceInitFunc) gth_file_source_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthFileSource",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 void
 gth_file_source_add_scheme (GthFileSource  *file_source,
 			    const char     *scheme)
diff --git a/gthumb/gth-file-store.c b/gthumb/gth-file-store.c
index b94e464..8bc1993 100644
--- a/gthumb/gth-file-store.c
+++ b/gthumb/gth-file-store.c
@@ -75,7 +75,17 @@ struct _GthFileStorePrivate
 };
 
 
-static GObjectClass *parent_class = NULL;
+static void gtk_tree_model_interface_init (GtkTreeModelIface *iface);
+static void gtk_tree_drag_source_interface_init (GtkTreeDragSourceIface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthFileStore,
+			 gth_file_store,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL,
+					        gtk_tree_model_interface_init)
+		         G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_DRAG_SOURCE,
+		        		 	gtk_tree_drag_source_interface_init))
 
 
 static GthFileRow *
@@ -202,23 +212,23 @@ gth_file_store_finalize (GObject *object)
 		file_store->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_file_store_parent_class)->finalize (object);
 }
 
 
 static void
-gth_file_store_class_init (GthFileStoreClass *class)
+gth_file_store_class_init (GthFileStoreClass *klass)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (class);
+	g_type_class_add_private (klass, sizeof (GthFileStorePrivate));
 
-	object_class = (GObjectClass*) class;
+	object_class = (GObjectClass*) klass;
 	object_class->finalize = gth_file_store_finalize;
 
 	gth_file_store_signals[CHECK_CHANGED] =
 		g_signal_new ("check_changed",
-			      G_TYPE_FROM_CLASS (class),
+			      G_TYPE_FROM_CLASS (klass),
 			      G_SIGNAL_RUN_LAST,
 			      G_STRUCT_OFFSET (GthFileStoreClass, check_changed),
 			      NULL, NULL,
@@ -227,7 +237,7 @@ gth_file_store_class_init (GthFileStoreClass *class)
 			      0);
 	gth_file_store_signals[VISIBILITY_CHANGED] =
 		g_signal_new ("visibility_changed",
-			      G_TYPE_FROM_CLASS (class),
+			      G_TYPE_FROM_CLASS (klass),
 			      G_SIGNAL_RUN_LAST,
 			      G_STRUCT_OFFSET (GthFileStoreClass, visibility_changed),
 			      NULL, NULL,
@@ -240,12 +250,20 @@ gth_file_store_class_init (GthFileStoreClass *class)
 static void
 gth_file_store_init (GthFileStore *file_store)
 {
-	file_store->priv = g_new0 (GthFileStorePrivate, 1);
+	file_store->priv = G_TYPE_INSTANCE_GET_PRIVATE (file_store, GTH_TYPE_FILE_STORE, GthFileStorePrivate);
+	file_store->priv->all_rows = NULL;
 	file_store->priv->rows = NULL;
 	file_store->priv->size = 0;
+	file_store->priv->tot_rows = 0;
 	file_store->priv->num_rows = 0;
 	file_store->priv->stamp = g_random_int ();
+	file_store->priv->load_thumbs = FALSE;
 	file_store->priv->filter = gth_test_new ();
+	file_store->priv->queue = NULL;
+	file_store->priv->cmp_func = NULL;
+	file_store->priv->inverse_sort = FALSE;
+	file_store->priv->update_filter = FALSE;
+	file_store->priv->check_changed = FALSE;
 
 	if (column_type[0] == G_TYPE_INVALID) {
 		column_type[GTH_FILE_STORE_FILE_DATA_COLUMN] = GTH_TYPE_FILE_DATA;
@@ -576,7 +594,7 @@ gth_file_store_drag_data_delete (GtkTreeDragSource *drag_source,
 
 
 static void
-gtk_tree_model_iface_init (GtkTreeModelIface *iface)
+gtk_tree_model_interface_init (GtkTreeModelIface *iface)
 {
 	iface->get_flags       = gth_file_store_get_flags;
 	iface->get_n_columns   = gth_file_store_get_n_columns;
@@ -594,7 +612,7 @@ gtk_tree_model_iface_init (GtkTreeModelIface *iface)
 
 
 static void
-gtk_tree_drag_source_iface_init (GtkTreeDragSourceIface *iface)
+gtk_tree_drag_source_interface_init (GtkTreeDragSourceIface *iface)
 {
 	iface->row_draggable = gth_file_store_row_draggable;
 	iface->drag_data_get = gth_file_store_drag_data_get;
@@ -602,43 +620,6 @@ gtk_tree_drag_source_iface_init (GtkTreeDragSourceIface *iface)
 }
 
 
-GType
-gth_file_store_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthFileStoreClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_file_store_class_init,
-			NULL,
-			NULL,
-			sizeof (GthFileStore),
-			0,
-			(GInstanceInitFunc) gth_file_store_init
-		};
-		static const GInterfaceInfo gtk_tree_model_info = {
-			(GInterfaceInitFunc) gtk_tree_model_iface_init,
-			NULL,
-			NULL
-		};
-		static const GInterfaceInfo gtk_tree_drag_source_info = {
-			(GInterfaceInitFunc) gtk_tree_drag_source_iface_init,
-			NULL,
-			NULL
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT, "GthFileStore", &type_info, 0);
-		g_type_add_interface_static (type, GTK_TYPE_TREE_MODEL, &gtk_tree_model_info);
-		g_type_add_interface_static (type, GTK_TYPE_TREE_DRAG_SOURCE, &gtk_tree_drag_source_info);
-	}
-
-	return type;
-}
-
-
 GthFileStore *
 gth_file_store_new (void)
 {
diff --git a/gthumb/gth-file-tool.c b/gthumb/gth-file-tool.c
index 3fb50e5..01b4392 100644
--- a/gthumb/gth-file-tool.c
+++ b/gthumb/gth-file-tool.c
@@ -30,7 +30,6 @@ enum {
 };
 
 
-static gpointer parent_class = NULL;
 static guint gth_file_tool_signals[LAST_SIGNAL] = { 0 };
 
 
@@ -43,6 +42,9 @@ struct _GthFileToolPrivate {
 };
 
 
+G_DEFINE_TYPE (GthFileTool, gth_file_tool, GTK_TYPE_BUTTON)
+
+
 static void
 gth_file_tool_base_update_sensitivity (GthFileTool *self)
 {
@@ -78,7 +80,7 @@ gth_file_tool_finalize (GObject *object)
 	g_return_if_fail (GTH_IS_FILE_TOOL (object));
 
 	/* Chain up */
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_file_tool_parent_class)->finalize (object);
 }
 
 
@@ -87,7 +89,6 @@ gth_file_tool_class_init (GthFileToolClass *klass)
 {
 	GObjectClass *gobject_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthFileToolPrivate));
 
 	gobject_class = (GObjectClass*) klass;
@@ -120,7 +121,7 @@ gth_file_tool_class_init (GthFileToolClass *klass)
 
 
 static void
-gth_file_tool_instance_init (GthFileTool *self)
+gth_file_tool_init (GthFileTool *self)
 {
 	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_FILE_TOOL, GthFileToolPrivate);
 	self->priv->icon_name = NULL;
@@ -131,28 +132,6 @@ gth_file_tool_instance_init (GthFileTool *self)
 }
 
 
-GType
-gth_file_tool_get_type (void) {
-	static GType type_id = 0;
-	if (type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileToolClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_file_tool_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthFileTool),
-			0,
-			(GInstanceInitFunc) gth_file_tool_instance_init,
-			NULL
-		};
-		type_id = g_type_register_static (GTK_TYPE_BUTTON, "GthFileTool", &g_define_type_info, 0);
-	}
-	return type_id;
-}
-
-
 void
 gth_file_tool_construct (GthFileTool *self,
 			 const char  *icon_name,
diff --git a/gthumb/gth-file-view.c b/gthumb/gth-file-view.c
index 241db8d..ea5910d 100644
--- a/gthumb/gth-file-view.c
+++ b/gthumb/gth-file-view.c
@@ -31,8 +31,11 @@ enum {
 static guint gth_file_view_signals[LAST_SIGNAL] = { 0 };
 
 
+G_DEFINE_INTERFACE (GthFileView, gth_file_view, 0)
+
+
 static void
-gth_file_view_base_init (gpointer g_class)
+gth_file_view_default_init (GthFileViewInterface *iface)
 {
 	static gboolean initialized = FALSE;
 
@@ -41,7 +44,7 @@ gth_file_view_base_init (gpointer g_class)
 			g_signal_new ("file-activated",
 				      GTH_TYPE_FILE_VIEW,
 				      G_SIGNAL_RUN_LAST,
-				      G_STRUCT_OFFSET (GthFileViewIface, file_activated),
+				      G_STRUCT_OFFSET (GthFileViewInterface, file_activated),
 				      NULL, NULL,
 				      g_cclosure_marshal_VOID__BOXED,
 				      G_TYPE_NONE, 1,
@@ -51,34 +54,6 @@ gth_file_view_base_init (gpointer g_class)
 }
 
 
-GType
-gth_file_view_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthFileViewIface),
-			(GBaseInitFunc) gth_file_view_base_init,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) NULL,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			0,
-			0,
-			(GInstanceInitFunc) NULL,
-			NULL
-		};
-		type = g_type_register_static (G_TYPE_INTERFACE,
-					       "GthFileView",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 void
 gth_file_view_set_model (GthFileView  *self,
 		         GtkTreeModel *model)
diff --git a/gthumb/gth-file-view.h b/gthumb/gth-file-view.h
index e30070c..100225f 100644
--- a/gthumb/gth-file-view.h
+++ b/gthumb/gth-file-view.h
@@ -31,10 +31,10 @@ G_BEGIN_DECLS
 #define GTH_TYPE_FILE_VIEW               (gth_file_view_get_type ())
 #define GTH_FILE_VIEW(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTH_TYPE_FILE_VIEW, GthFileView))
 #define GTH_IS_FILE_VIEW(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTH_TYPE_FILE_VIEW))
-#define GTH_FILE_VIEW_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTH_TYPE_FILE_VIEW, GthFileViewIface))
+#define GTH_FILE_VIEW_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTH_TYPE_FILE_VIEW, GthFileViewInterface))
 
 typedef struct _GthFileView GthFileView;
-typedef struct _GthFileViewIface GthFileViewIface;
+typedef struct _GthFileViewInterface GthFileViewInterface;
 
 #define THUMBNAIL_BORDER (8 * 2)
 
@@ -52,7 +52,7 @@ typedef enum {
 	GTH_FILE_VIEW_RENDERER_TEXT
 } GthFileViewRendererType;
 
-struct _GthFileViewIface {
+struct _GthFileViewInterface {
 	GTypeInterface parent_iface;
 
 	/*< signals >*/
diff --git a/gthumb/gth-filter-editor-dialog.c b/gthumb/gth-filter-editor-dialog.c
index fff49f2..da9baed 100644
--- a/gthumb/gth-filter-editor-dialog.c
+++ b/gthumb/gth-filter-editor-dialog.c
@@ -39,9 +39,6 @@ enum {
 #define GET_WIDGET(name) _gtk_builder_get_widget (self->priv->builder, (name))
 
 
-static gpointer parent_class = NULL;
-
-
 struct _GthFilterEditorDialogPrivate {
 	GtkBuilder *builder;
 	GtkWidget  *match_type_combobox;
@@ -53,6 +50,9 @@ struct _GthFilterEditorDialogPrivate {
 };
 
 
+G_DEFINE_TYPE (GthFilterEditorDialog, gth_filter_editor_dialog, GTK_TYPE_DIALOG)
+
+
 static void
 gth_filter_editor_dialog_finalize (GObject *object)
 {
@@ -67,7 +67,7 @@ gth_filter_editor_dialog_finalize (GObject *object)
 		dialog->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_filter_editor_dialog_parent_class)->finalize (object);
 }
 
 
@@ -76,9 +76,7 @@ gth_filter_editor_dialog_class_init (GthFilterEditorDialogClass *class)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	object_class = (GObjectClass*) class;
-
 	object_class->finalize = gth_filter_editor_dialog_finalize;
 }
 
@@ -90,34 +88,6 @@ gth_filter_editor_dialog_init (GthFilterEditorDialog *dialog)
 }
 
 
-GType
-gth_filter_editor_dialog_get_type (void)
-{
-        static GType type = 0;
-
-        if (! type) {
-                GTypeInfo type_info = {
-			sizeof (GthFilterEditorDialogClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_filter_editor_dialog_class_init,
-			NULL,
-			NULL,
-			sizeof (GthFilterEditorDialog),
-			0,
-			(GInstanceInitFunc) gth_filter_editor_dialog_init
-		};
-
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "GthFilterEditorDialog",
-					       &type_info,
-					       0);
-	}
-
-        return type;
-}
-
-
 static void
 update_sensitivity (GthFilterEditorDialog *self)
 {
diff --git a/gthumb/gth-filter.c b/gthumb/gth-filter.c
index 2cfa6d7..3c1e294 100644
--- a/gthumb/gth-filter.c
+++ b/gthumb/gth-filter.c
@@ -59,7 +59,17 @@ struct _GthFilterPrivate {
 };
 
 
-static gpointer parent_class = NULL;
+static void gth_filter_dom_domizable_interface_init (DomDomizableInterface *iface);
+static void gth_filter_gth_duplicable_interface_init (GthDuplicableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthFilter,
+			 gth_filter,
+			 GTH_TYPE_TEST,
+			 G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+					 	gth_filter_dom_domizable_interface_init)
+		         G_IMPLEMENT_INTERFACE (GTH_TYPE_DUPLICABLE,
+		        		 	gth_filter_gth_duplicable_interface_init))
 
 
 static DomElement*
@@ -170,7 +180,7 @@ gth_filter_set_file_list (GthTest *test,
 {
 	GthFilter *filter = GTH_FILTER (test);
 
-	GTH_TEST_CLASS (parent_class)->set_file_list (test, files);
+	GTH_TEST_CLASS (gth_filter_parent_class)->set_file_list (test, files);
 
 	if ((filter->priv->limit_type != GTH_LIMIT_TYPE_NONE)
 	    && (filter->priv->sort_name != NULL)
@@ -433,7 +443,7 @@ gth_filter_finalize (GObject *object)
 
 	_g_object_unref (filter->priv->test);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_filter_parent_class)->finalize (object);
 }
 
 
@@ -443,7 +453,6 @@ gth_filter_class_init (GthFilterClass *klass)
 	GObjectClass *object_class;
 	GthTestClass *test_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthFilterPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -466,7 +475,7 @@ gth_filter_dom_domizable_interface_init (DomDomizableInterface *iface)
 
 
 static void
-gth_filter_gth_duplicable_interface_init (GthDuplicableIface *iface)
+gth_filter_gth_duplicable_interface_init (GthDuplicableInterface *iface)
 {
 	iface->duplicate = gth_filter_real_duplicate;
 }
@@ -484,46 +493,6 @@ gth_filter_init (GthFilter *filter)
 }
 
 
-GType
-gth_filter_get_type (void)
-{
-        static GType type = 0;
-
-        if (! type) {
-                GTypeInfo type_info = {
-			sizeof (GthFilterClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_filter_class_init,
-			NULL,
-			NULL,
-			sizeof (GthFilter),
-			0,
-			(GInstanceInitFunc) gth_filter_init
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) gth_filter_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		static const GInterfaceInfo gth_duplicable_info = {
-			(GInterfaceInitFunc) gth_filter_gth_duplicable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		type = g_type_register_static (GTH_TYPE_TEST,
-					       "GthFilter",
-					       &type_info,
-					       0);
-		g_type_add_interface_static (type, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-		g_type_add_interface_static (type, GTH_TYPE_DUPLICABLE, &gth_duplicable_info);
-	}
-
-        return type;
-}
-
-
 GthFilter*
 gth_filter_new (void)
 {
diff --git a/gthumb/gth-filterbar.c b/gthumb/gth-filterbar.c
index 2abfecc..5e72255 100644
--- a/gthumb/gth-filterbar.c
+++ b/gthumb/gth-filterbar.c
@@ -63,10 +63,12 @@ struct _GthFilterbarPrivate
 };
 
 
-static GtkHBoxClass *parent_class = NULL;
 static guint gth_filterbar_signals[LAST_SIGNAL] = { 0 };
 
 
+G_DEFINE_TYPE (GthFilterbar, gth_filterbar, GTK_TYPE_HBOX)
+
+
 static void
 gth_filterbar_finalize (GObject *object)
 {
@@ -82,7 +84,7 @@ gth_filterbar_finalize (GObject *object)
 		filterbar->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_filterbar_parent_class)->finalize (object);
 }
 
 
@@ -91,8 +93,6 @@ gth_filterbar_class_init (GthFilterbarClass *class)
 {
 	GObjectClass   *object_class;
 
-	parent_class = g_type_class_peek_parent (class);
-
 	object_class = (GObjectClass*) class;
 	object_class->finalize = gth_filterbar_finalize;
 
@@ -429,34 +429,6 @@ gth_filterbar_construct (GthFilterbar *filterbar,
 }
 
 
-GType
-gth_filterbar_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthFilterbarClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_filterbar_class_init,
-			NULL,
-			NULL,
-			sizeof (GthFilterbar),
-			0,
-			(GInstanceInitFunc) gth_filterbar_init
-		};
-
-		type = g_type_register_static (GTK_TYPE_HBOX,
-					       "GthFilterbar",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GtkWidget*
 gth_filterbar_new (const char *selected_filter)
 {
diff --git a/gthumb/gth-folder-tree.c b/gthumb/gth-folder-tree.c
index 167dc28..0747f06 100644
--- a/gthumb/gth-folder-tree.c
+++ b/gthumb/gth-folder-tree.c
@@ -93,8 +93,10 @@ struct _GthFolderTreePrivate
 };
 
 
-static gpointer parent_class = NULL;
-static guint    gth_folder_tree_signals[LAST_SIGNAL] = { 0 };
+static guint gth_folder_tree_signals[LAST_SIGNAL] = { 0 };
+
+
+G_DEFINE_TYPE (GthFolderTree, gth_folder_tree, GTK_TYPE_TREE_VIEW)
 
 
 static void
@@ -116,7 +118,7 @@ gth_folder_tree_finalize (GObject *object)
 		folder_tree->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_folder_tree_parent_class)->finalize (object);
 }
 
 
@@ -126,8 +128,6 @@ gth_folder_tree_class_init (GthFolderTreeClass *class)
 	GObjectClass   *object_class;
 	GtkWidgetClass *widget_class;
 
-	parent_class = g_type_class_peek_parent (class);
-
 	object_class = (GObjectClass*) class;
 	object_class->finalize = gth_folder_tree_finalize;
 
@@ -1030,34 +1030,6 @@ gth_folder_tree_init (GthFolderTree *folder_tree)
 }
 
 
-GType
-gth_folder_tree_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthFolderTreeClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_folder_tree_class_init,
-			NULL,
-			NULL,
-			sizeof (GthFolderTree),
-			0,
-			(GInstanceInitFunc) gth_folder_tree_init
-		};
-
-		type = g_type_register_static (GTK_TYPE_TREE_VIEW,
-					       "GthFolderTree",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GtkWidget *
 gth_folder_tree_new (const char *uri)
 {
diff --git a/gthumb/gth-histogram-view.c b/gthumb/gth-histogram-view.c
index 4758cc9..7a835f3 100644
--- a/gthumb/gth-histogram-view.c
+++ b/gthumb/gth-histogram-view.c
@@ -48,8 +48,6 @@ enum {
 	CHANNEL_COLUMN_SENSITIVE
 };
 
-static gpointer gth_histogram_view_parent_class = NULL;
-
 
 struct _GthHistogramViewPrivate {
 	GthHistogram        *histogram;
@@ -70,6 +68,9 @@ struct _GthHistogramViewPrivate {
 };
 
 
+G_DEFINE_TYPE (GthHistogramView, gth_histogram_view, GTK_TYPE_VBOX)
+
+
 static void
 gth_histogram_set_property (GObject      *object,
 			    guint         property_id,
@@ -148,7 +149,6 @@ gth_histogram_view_class_init (GthHistogramViewClass *klass)
 {
 	GObjectClass   *object_class;
 
-	gth_histogram_view_parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthHistogramViewPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -764,7 +764,7 @@ self_notify_scale_type_cb (GObject    *gobject,
 
 
 static void
-gth_histogram_view_instance_init (GthHistogramView *self)
+gth_histogram_view_init (GthHistogramView *self)
 {
 	GtkWidget       *box;
 	GtkWidget       *sub_box;
@@ -969,28 +969,6 @@ gth_histogram_view_instance_init (GthHistogramView *self)
 }
 
 
-GType
-gth_histogram_view_get_type (void) {
-	static GType gth_histogram_view_type_id = 0;
-	if (gth_histogram_view_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthHistogramViewClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_histogram_view_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthHistogramView),
-			0,
-			(GInstanceInitFunc) gth_histogram_view_instance_init,
-			NULL
-		};
-		gth_histogram_view_type_id = g_type_register_static (GTK_TYPE_VBOX, "GthHistogramView", &g_define_type_info, 0);
-	}
-	return gth_histogram_view_type_id;
-}
-
-
 GtkWidget *
 gth_histogram_view_new (GthHistogram *histogram)
 {
diff --git a/gthumb/gth-histogram.c b/gthumb/gth-histogram.c
index 94bd61c..bbe5bea 100644
--- a/gthumb/gth-histogram.c
+++ b/gthumb/gth-histogram.c
@@ -39,10 +39,12 @@ struct _GthHistogramPrivate {
 };
 
 
-static gpointer parent_class = NULL;
 static guint gth_histogram_signals[LAST_SIGNAL] = { 0 };
 
 
+G_DEFINE_TYPE (GthHistogram, gth_histogram, G_TYPE_OBJECT)
+
+
 static void
 gth_histogram_finalize (GObject *object)
 {
@@ -56,7 +58,7 @@ gth_histogram_finalize (GObject *object)
 	g_free (self->priv->values);
 	g_free (self->priv->values_max);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_histogram_parent_class)->finalize (object);
 }
 
 
@@ -65,7 +67,6 @@ gth_histogram_class_init (GthHistogramClass *klass)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthHistogramPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -98,33 +99,6 @@ gth_histogram_init (GthHistogram *self)
 }
 
 
-GType
-gth_histogram_get_type (void)
-{
-        static GType type = 0;
-
-        if (! type) {
-                GTypeInfo type_info = {
-			sizeof (GthHistogramClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_histogram_class_init,
-			NULL,
-			NULL,
-			sizeof (GthHistogram),
-			0,
-			(GInstanceInitFunc) gth_histogram_init
-		};
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthHistogram",
-					       &type_info,
-					       0);
-	}
-
-        return type;
-}
-
-
 GthHistogram *
 gth_histogram_new (void)
 {
diff --git a/gthumb/gth-icon-view.c b/gthumb/gth-icon-view.c
index e197133..5e216d3 100644
--- a/gthumb/gth-icon-view.c
+++ b/gthumb/gth-icon-view.c
@@ -51,9 +51,21 @@ struct _GthIconViewPrivate {
 };
 
 
-static gpointer               parent_class = NULL;
-static GthFileViewIface      *gth_icon_view_gth_file_view_parent_iface = NULL;
-static GthFileSelectionIface *gth_icon_view_gth_file_selection_parent_iface = NULL;
+static GthFileViewInterface      *gth_icon_view_gth_file_view_parent_iface = NULL;
+static GthFileSelectionInterface *gth_icon_view_gth_file_selection_parent_iface = NULL;
+
+
+static void gth_icon_view_gth_file_view_interface_init (GthFileViewInterface *iface);
+static void gth_icon_view_gth_file_selection_interface_init (GthFileSelectionInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthIconView,
+			 gth_icon_view,
+			 GTK_TYPE_ICON_VIEW,
+			 G_IMPLEMENT_INTERFACE (GTH_TYPE_FILE_VIEW,
+					 	gth_icon_view_gth_file_view_interface_init)
+		         G_IMPLEMENT_INTERFACE (GTH_TYPE_FILE_SELECTION,
+		        		 	gth_icon_view_gth_file_selection_interface_init))
 
 
 void
@@ -540,7 +552,7 @@ gth_icon_view_finalize (GObject *object)
 		self->priv->drag_target_list = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_icon_view_parent_class)->finalize (object);
 }
 
 
@@ -551,7 +563,6 @@ gth_icon_view_class_init (GthIconViewClass *klass)
 	GtkWidgetClass *widget_class;
 	GtkBindingSet  *binding_set;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthIconViewPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -888,7 +899,7 @@ gth_icon_view_init (GthIconView *icon_view)
 
 
 static void
-gth_icon_view_gth_file_view_interface_init (GthFileViewIface *iface)
+gth_icon_view_gth_file_view_interface_init (GthFileViewInterface *iface)
 {
 	gth_icon_view_gth_file_view_parent_iface = g_type_interface_peek_parent (iface);
 	iface->set_model = gth_icon_view_real_set_model;
@@ -914,7 +925,7 @@ gth_icon_view_gth_file_view_interface_init (GthFileViewIface *iface)
 
 
 static void
-gth_icon_view_gth_file_selection_interface_init (GthFileSelectionIface *iface)
+gth_icon_view_gth_file_selection_interface_init (GthFileSelectionInterface *iface)
 {
 	gth_icon_view_gth_file_selection_parent_iface = g_type_interface_peek_parent (iface);
 	iface->set_selection_mode = gth_icon_view_real_set_selection_mode;
@@ -928,43 +939,3 @@ gth_icon_view_gth_file_selection_interface_init (GthFileSelectionIface *iface)
 	iface->get_last_selected = gth_icon_view_real_get_last_selected;
 	iface->get_n_selected = gth_icon_view_real_get_n_selected;
 }
-
-
-GType
-gth_icon_view_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthIconViewClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_icon_view_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthIconView),
-			0,
-			(GInstanceInitFunc) gth_icon_view_init,
-			NULL
-		};
-		static const GInterfaceInfo gth_file_view_info = {
-			(GInterfaceInitFunc) gth_icon_view_gth_file_view_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		static const GInterfaceInfo gth_file_selection_info = {
-			(GInterfaceInitFunc) gth_icon_view_gth_file_selection_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_ICON_VIEW,
-					       "GthIconView",
-					       &g_define_type_info,
-					       0);
-		g_type_add_interface_static (type, GTH_TYPE_FILE_VIEW, &gth_file_view_info);
-		g_type_add_interface_static (type, GTH_TYPE_FILE_SELECTION, &gth_file_selection_info);
-	}
-
-	return type;
-}
diff --git a/gthumb/gth-image-dragger.c b/gthumb/gth-image-dragger.c
index 60064d3..f0fe6a1 100644
--- a/gthumb/gth-image-dragger.c
+++ b/gthumb/gth-image-dragger.c
@@ -31,7 +31,14 @@ struct _GthImageDraggerPrivate {
 };
 
 
-static gpointer parent_class = NULL;
+static void gth_image_dragger_gth_image_tool_interface_init (GthImageViewerToolInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthImageDragger,
+			 gth_image_dragger,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (GTH_TYPE_IMAGE_VIEWER_TOOL,
+					        gth_image_dragger_gth_image_tool_interface_init))
 
 
 static void
@@ -41,7 +48,7 @@ gth_image_dragger_finalize (GObject *object)
 	g_return_if_fail (GTH_IS_IMAGE_DRAGGER (object));
 
 	/* Chain up */
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_image_dragger_parent_class)->finalize (object);
 }
 
 
@@ -50,7 +57,6 @@ gth_image_dragger_class_init (GthImageDraggerClass *class)
 {
 	GObjectClass *gobject_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (GthImageDraggerPrivate));
 
 	gobject_class = (GObjectClass*) class;
@@ -59,7 +65,7 @@ gth_image_dragger_class_init (GthImageDraggerClass *class)
 
 
 static void
-gth_image_dragger_instance_init (GthImageDragger *dragger)
+gth_image_dragger_init (GthImageDragger *dragger)
 {
 	dragger->priv = G_TYPE_INSTANCE_GET_PRIVATE (dragger, GTH_TYPE_IMAGE_DRAGGER, GthImageDraggerPrivate);
 }
@@ -283,7 +289,7 @@ gth_image_dragger_zoom_changed (GthImageViewerTool *self)
 
 
 static void
-gth_image_dragger_gth_image_tool_interface_init (GthImageViewerToolIface *iface)
+gth_image_dragger_gth_image_tool_interface_init (GthImageViewerToolInterface *iface)
 {
 	iface->set_viewer = gth_image_dragger_set_viewer;
 	iface->unset_viewer = gth_image_dragger_unset_viewer;
@@ -301,40 +307,6 @@ gth_image_dragger_gth_image_tool_interface_init (GthImageViewerToolIface *iface)
 }
 
 
-GType
-gth_image_dragger_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthImageDraggerClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_image_dragger_class_init,
-			NULL,
-			NULL,
-			sizeof (GthImageDragger),
-			0,
-			(GInstanceInitFunc) gth_image_dragger_instance_init
-		};
-		static const GInterfaceInfo gth_image_tool_info = {
-			(GInterfaceInitFunc) gth_image_dragger_gth_image_tool_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthImageDragger",
-					       &type_info,
-					       0);
-		g_type_add_interface_static (type, GTH_TYPE_IMAGE_VIEWER_TOOL, &gth_image_tool_info);
-	}
-
-	return type;
-}
-
-
 GthImageViewerTool *
 gth_image_dragger_new (void)
 {
diff --git a/gthumb/gth-image-history.c b/gthumb/gth-image-history.c
index 2e6d635..875b4d4 100644
--- a/gthumb/gth-image-history.c
+++ b/gthumb/gth-image-history.c
@@ -26,6 +26,9 @@
 #define MAX_UNDO_HISTORY_LEN 5
 
 
+G_DEFINE_TYPE (GthImageHistory, gth_image_history, G_TYPE_OBJECT)
+
+
 /* GthImageData */
 
 
@@ -94,8 +97,7 @@ enum {
 };
 
 
-static gpointer parent_class = NULL;
-static guint    gth_image_history_signals[LAST_SIGNAL] = { 0 };
+static guint gth_image_history_signals[LAST_SIGNAL] = { 0 };
 
 
 static void
@@ -112,7 +114,7 @@ gth_image_history_finalize (GObject *object)
 		history->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_image_history_parent_class)->finalize (object);
 }
 
 
@@ -121,8 +123,6 @@ gth_image_history_class_init (GthImageHistoryClass *class)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (class);
-
 	gth_image_history_signals[CHANGED] =
 		g_signal_new ("changed",
 			      G_TYPE_FROM_CLASS (class),
@@ -144,34 +144,6 @@ gth_image_history_init (GthImageHistory *history)
 }
 
 
-GType
-gth_image_history_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthImageHistoryClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_image_history_class_init,
-			NULL,
-			NULL,
-			sizeof (GthImageHistory),
-			0,
-			(GInstanceInitFunc) gth_image_history_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthImageHistory",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthImageHistory *
 gth_image_history_new (void)
 {
diff --git a/gthumb/gth-image-loader.c b/gthumb/gth-image-loader.c
index 4edf983..e3c7720 100644
--- a/gthumb/gth-image-loader.c
+++ b/gthumb/gth-image-loader.c
@@ -42,13 +42,13 @@ struct _GthImageLoaderPrivate {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthImageLoader, gth_image_loader, G_TYPE_OBJECT)
 
 
 static void
 gth_image_loader_finalize (GObject *object)
 {
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_image_loader_parent_class)->finalize (object);
 }
 
 
@@ -57,7 +57,6 @@ gth_image_loader_class_init (GthImageLoaderClass *class)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (GthImageLoaderPrivate));
 
 	object_class = G_OBJECT_CLASS (class);
@@ -77,34 +76,6 @@ gth_image_loader_init (GthImageLoader *self)
 }
 
 
-GType
-gth_image_loader_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthImageLoaderClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_image_loader_class_init,
-			NULL,
-			NULL,
-			sizeof (GthImageLoader),
-			0,
-			(GInstanceInitFunc) gth_image_loader_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthImageLoader",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthImageLoader *
 gth_image_loader_new (GthImageLoaderFunc loader_func,
 		      gpointer           loader_data)
diff --git a/gthumb/gth-image-preloader.c b/gthumb/gth-image-preloader.c
index 8ce4594..8132dc8 100644
--- a/gthumb/gth-image-preloader.c
+++ b/gthumb/gth-image-preloader.c
@@ -81,10 +81,12 @@ struct _GthImagePreloaderPrivate {
 };
 
 
-static gpointer parent_class = NULL;
 static guint gth_image_preloader_signals[LAST_SIGNAL] = { 0 };
 
 
+G_DEFINE_TYPE (GthImagePreloader, gth_image_preloader, G_TYPE_OBJECT)
+
+
 /* -- Preloader -- */
 
 
@@ -226,7 +228,7 @@ gth_image_preloader_finalize (GObject *object)
 	_g_object_unref (self->priv->requested_file);
 	g_object_unref (self->priv->cancellable);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_image_preloader_parent_class)->finalize (object);
 }
 
 
@@ -235,7 +237,6 @@ gth_image_preloader_class_init (GthImagePreloaderClass *class)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (GthImagePreloaderPrivate));
 
 	gth_image_preloader_signals[REQUESTED_READY] =
@@ -286,34 +287,6 @@ gth_image_preloader_init (GthImagePreloader *self)
 }
 
 
-GType
-gth_image_preloader_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthImagePreloaderClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_image_preloader_class_init,
-			NULL,
-			NULL,
-			sizeof (GthImagePreloader),
-			0,
-			(GInstanceInitFunc) gth_image_preloader_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthImagePreloader",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthImagePreloader *
 gth_image_preloader_new (GthLoadPolicy load_policy,
 			 int           n_preloaders)
diff --git a/gthumb/gth-image-selector.c b/gthumb/gth-image-selector.c
index 1c9234b..9214432 100644
--- a/gthumb/gth-image-selector.c
+++ b/gthumb/gth-image-selector.c
@@ -186,7 +186,6 @@ enum {
 
 
 static guint signals[LAST_SIGNAL] = { 0 };
-static gpointer parent_class = NULL;
 
 
 struct _GthImageSelectorPrivate {
@@ -222,6 +221,16 @@ struct _GthImageSelectorPrivate {
 };
 
 
+static void gth_image_selector_gth_image_tool_interface_init (GthImageViewerToolInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthImageSelector,
+			 gth_image_selector,
+			 G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (GTH_TYPE_IMAGE_VIEWER_TOOL,
+					 	gth_image_selector_gth_image_tool_interface_init))
+
+
 static gboolean
 point_in_rectangle (int                   x,
 		    int                   y,
@@ -1484,7 +1493,7 @@ gth_image_selector_zoom_changed (GthImageViewerTool *base)
 
 
 static void
-gth_image_selector_instance_init (GthImageSelector *self)
+gth_image_selector_init (GthImageSelector *self)
 {
 	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_IMAGE_SELECTOR, GthImageSelectorPrivate);
 
@@ -1509,7 +1518,7 @@ gth_image_selector_finalize (GObject *object)
 	cairo_surface_destroy (self->priv->surface);
 
 	/* Chain up */
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_image_selector_parent_class)->finalize (object);
 }
 
 
@@ -1518,7 +1527,6 @@ gth_image_selector_class_init (GthImageSelectorClass *class)
 {
 	GObjectClass *gobject_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (GthImageSelectorPrivate));
 
 	gobject_class = (GObjectClass*) class;
@@ -1572,7 +1580,7 @@ gth_image_selector_class_init (GthImageSelectorClass *class)
 
 
 static void
-gth_image_selector_gth_image_tool_interface_init (GthImageViewerToolIface *iface)
+gth_image_selector_gth_image_tool_interface_init (GthImageViewerToolInterface *iface)
 {
 	iface->set_viewer = gth_image_selector_set_viewer;
 	iface->unset_viewer = gth_image_selector_unset_viewer;
@@ -1590,40 +1598,6 @@ gth_image_selector_gth_image_tool_interface_init (GthImageViewerToolIface *iface
 }
 
 
-GType
-gth_image_selector_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthImageSelectorClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_image_selector_class_init,
-			NULL,
-			NULL,
-			sizeof (GthImageSelector),
-			0,
-			(GInstanceInitFunc) gth_image_selector_instance_init
-		};
-		static const GInterfaceInfo gth_image_tool_info = {
-			(GInterfaceInitFunc) gth_image_selector_gth_image_tool_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthImageSelector",
-					       &type_info,
-					       0);
-		g_type_add_interface_static (type, GTH_TYPE_IMAGE_VIEWER_TOOL, &gth_image_tool_info);
-	}
-
-	return type;
-}
-
-
 GthImageViewerTool *
 gth_image_selector_new (GthSelectorType type)
 {
diff --git a/gthumb/gth-image-viewer-tool.c b/gthumb/gth-image-viewer-tool.c
index 2a9a7bc..8fabee9 100644
--- a/gthumb/gth-image-viewer-tool.c
+++ b/gthumb/gth-image-viewer-tool.c
@@ -23,29 +23,13 @@
 #include "gth-image-viewer.h"
 
 
-GType
-gth_image_viewer_tool_get_type (void)
+G_DEFINE_INTERFACE (GthImageViewerTool, gth_image_viewer_tool, 0)
+
+
+static void
+gth_image_viewer_tool_default_init (GthImageViewerToolInterface *iface)
 {
-	static GType type_id = 0;
-	if (type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthImageViewerToolIface),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) NULL,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			0,
-			0,
-			(GInstanceInitFunc) NULL,
-			NULL
-		};
-		type_id = g_type_register_static (G_TYPE_INTERFACE,
-						  "GthImageViewerTool",
-						  &g_define_type_info,
-						  0);
-	}
-	return type_id;
+	/* void */
 }
 
 
diff --git a/gthumb/gth-image-viewer-tool.h b/gthumb/gth-image-viewer-tool.h
index 111257a..75fc6fa 100644
--- a/gthumb/gth-image-viewer-tool.h
+++ b/gthumb/gth-image-viewer-tool.h
@@ -29,12 +29,12 @@ G_BEGIN_DECLS
 #define GTH_TYPE_IMAGE_VIEWER_TOOL               (gth_image_viewer_tool_get_type ())
 #define GTH_IMAGE_VIEWER_TOOL(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTH_TYPE_IMAGE_VIEWER_TOOL, GthImageViewerTool))
 #define GTH_IS_IMAGE_VIEWER_TOOL(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTH_TYPE_IMAGE_VIEWER_TOOL))
-#define GTH_IMAGE_VIEWER_TOOL_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTH_TYPE_IMAGE_VIEWER_TOOL, GthImageViewerToolIface))
+#define GTH_IMAGE_VIEWER_TOOL_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTH_TYPE_IMAGE_VIEWER_TOOL, GthImageViewerToolInterface))
 
 typedef struct _GthImageViewerTool GthImageViewerTool;
-typedef struct _GthImageViewerToolIface GthImageViewerToolIface;
+typedef struct _GthImageViewerToolInterface GthImageViewerToolInterface;
 
-struct _GthImageViewerToolIface {
+struct _GthImageViewerToolInterface {
 	GTypeInterface parent_iface;
 
 	void      (*set_viewer)     (GthImageViewerTool   *self,
diff --git a/gthumb/gth-image.c b/gthumb/gth-image.c
index cfe4467..46a1683 100644
--- a/gthumb/gth-image.c
+++ b/gthumb/gth-image.c
@@ -39,7 +39,7 @@ struct _GthImagePrivate {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthImage, gth_image, G_TYPE_OBJECT)
 
 
 static void
@@ -76,7 +76,7 @@ gth_image_finalize (GObject *object)
 	_gth_image_free_data (GTH_IMAGE (object));
 
 	/* Chain up */
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_image_parent_class)->finalize (object);
 }
 
 
@@ -85,7 +85,6 @@ gth_image_class_init (GthImageClass *class)
 {
 	GObjectClass *gobject_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (GthImagePrivate));
 
 	gobject_class = (GObjectClass*) class;
@@ -94,7 +93,7 @@ gth_image_class_init (GthImageClass *class)
 
 
 static void
-gth_image_instance_init (GthImage *self)
+gth_image_init (GthImage *self)
 {
 	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_IMAGE, GthImagePrivate);
 	self->priv->format = GTH_IMAGE_FORMAT_CAIRO_SURFACE;
@@ -102,34 +101,6 @@ gth_image_instance_init (GthImage *self)
 }
 
 
-GType
-gth_image_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthImageClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_image_class_init,
-			NULL,
-			NULL,
-			sizeof (GthImage),
-			0,
-			(GInstanceInitFunc) gth_image_instance_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthImage",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthImage *
 gth_image_new (void)
 {
diff --git a/gthumb/gth-info-bar.c b/gthumb/gth-info-bar.c
index 49b18e2..c0daf34 100644
--- a/gthumb/gth-info-bar.c
+++ b/gthumb/gth-info-bar.c
@@ -24,9 +24,6 @@
 #include "gth-info-bar.h"
 
 
-static gpointer parent_class = NULL;
-
-
 struct _GthInfoBarPrivate {
 	GtkWidget *icon_image;
 	GtkWidget *primary_text_label;
@@ -34,10 +31,12 @@ struct _GthInfoBarPrivate {
 };
 
 
+G_DEFINE_TYPE (GthInfoBar, gth_info_bar, GTK_TYPE_INFO_BAR)
+
+
 static void
 gth_info_bar_class_init (GthInfoBarClass *klass)
 {
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthInfoBarPrivate));
 }
 
@@ -49,34 +48,6 @@ gth_info_bar_init (GthInfoBar *self)
 }
 
 
-GType
-gth_info_bar_get_type (void)
-{
-        static GType type = 0;
-
-        if (! type) {
-                GTypeInfo type_info = {
-			sizeof (GthInfoBarClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_info_bar_class_init,
-			NULL,
-			NULL,
-			sizeof (GthInfoBar),
-			0,
-			(GInstanceInitFunc) gth_info_bar_init
-		};
-
-		type = g_type_register_static (GTK_TYPE_INFO_BAR,
-					       "GthEmbeddedEditorDialog",
-					       &type_info,
-					       0);
-	}
-
-        return type;
-}
-
-
 static void
 gth_info_bar_construct (GthInfoBar *self)
 {
diff --git a/gthumb/gth-list-view.c b/gthumb/gth-list-view.c
index 6100f1b..3d9bf6c 100644
--- a/gthumb/gth-list-view.c
+++ b/gthumb/gth-list-view.c
@@ -34,9 +34,21 @@ struct _GthListViewPrivate {
 };
 
 
-static gpointer               parent_class = NULL;
-static GthFileViewIface      *gth_list_view_gth_file_view_parent_iface = NULL;
-static GthFileSelectionIface *gth_list_view_gth_file_selection_parent_iface = NULL;
+static GthFileViewInterface      *gth_list_view_gth_file_view_parent_iface = NULL;
+static GthFileSelectionInterface *gth_list_view_gth_file_selection_parent_iface = NULL;
+
+
+static void gth_list_view_gth_file_view_interface_init (GthFileViewInterface *iface);
+static void gth_list_view_gth_file_selection_interface_init (GthFileSelectionInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthListView,
+			 gth_list_view,
+			 GTK_TYPE_TREE_VIEW,
+			 G_IMPLEMENT_INTERFACE (GTH_TYPE_FILE_VIEW,
+					 	gth_list_view_gth_file_view_interface_init)
+		         G_IMPLEMENT_INTERFACE (GTH_TYPE_FILE_SELECTION,
+		        		 	gth_list_view_gth_file_selection_interface_init))
 
 
 void
@@ -499,26 +511,9 @@ gth_list_view_new_with_model (GtkTreeModel *model)
 
 
 static void
-gth_list_view_finalize (GObject *object)
-{
-	/*GthListView *self = GTH_LIST_VIEW (object);*/
-
-	/* FIXME */
-
-	G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-static void
 gth_list_view_class_init (GthListViewClass *klass)
 {
-	GObjectClass *object_class;
-
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthListViewPrivate));
-
-	object_class = (GObjectClass*) klass;
-	object_class->finalize = gth_list_view_finalize;
 }
 
 
@@ -568,7 +563,7 @@ gth_list_view_init (GthListView *list_view)
 
 
 static void
-gth_list_view_gth_file_view_interface_init (GthFileViewIface *iface)
+gth_list_view_gth_file_view_interface_init (GthFileViewInterface *iface)
 {
 	gth_list_view_gth_file_view_parent_iface = g_type_interface_peek_parent (iface);
 	iface->set_model = gth_list_view_real_set_model;
@@ -594,7 +589,7 @@ gth_list_view_gth_file_view_interface_init (GthFileViewIface *iface)
 
 
 static void
-gth_list_view_gth_file_selection_interface_init (GthFileSelectionIface *iface)
+gth_list_view_gth_file_selection_interface_init (GthFileSelectionInterface *iface)
 {
 	gth_list_view_gth_file_selection_parent_iface = g_type_interface_peek_parent (iface);
 	iface->set_selection_mode = gth_list_view_real_set_selection_mode;
@@ -608,43 +603,3 @@ gth_list_view_gth_file_selection_interface_init (GthFileSelectionIface *iface)
 	iface->get_last_selected = gth_list_view_real_get_last_selected;
 	iface->get_n_selected = gth_list_view_real_get_n_selected;
 }
-
-
-GType
-gth_list_view_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthListViewClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_list_view_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthListView),
-			0,
-			(GInstanceInitFunc) gth_list_view_init,
-			NULL
-		};
-		static const GInterfaceInfo gth_file_view_info = {
-			(GInterfaceInitFunc) gth_list_view_gth_file_view_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		static const GInterfaceInfo gth_file_selection_info = {
-			(GInterfaceInitFunc) gth_list_view_gth_file_selection_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_TREE_VIEW,
-					       "GthListView",
-					       &g_define_type_info,
-					       0);
-		g_type_add_interface_static (type, GTH_TYPE_FILE_VIEW, &gth_file_view_info);
-		g_type_add_interface_static (type, GTH_TYPE_FILE_SELECTION, &gth_file_selection_info);
-	}
-
-	return type;
-}
diff --git a/gthumb/gth-load-file-data-task.c b/gthumb/gth-load-file-data-task.c
index e93a40a..52f4119 100644
--- a/gthumb/gth-load-file-data-task.c
+++ b/gthumb/gth-load-file-data-task.c
@@ -36,7 +36,7 @@ struct _GthLoadFileDataTaskPrivate {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthLoadFileDataTask, gth_load_file_data_task, GTH_TYPE_TASK)
 
 
 static void
@@ -50,7 +50,7 @@ gth_load_file_data_task_finalize (GObject *object)
 	_g_object_list_unref (self->priv->file_data_list);
 	g_free (self->priv->attributes);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_load_file_data_task_parent_class)->finalize (object);
 }
 
 
@@ -142,7 +142,6 @@ gth_load_file_data_task_class_init (GthLoadFileDataTaskClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthLoadFileDataTaskPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -161,34 +160,6 @@ gth_load_file_data_task_init (GthLoadFileDataTask *self)
 }
 
 
-GType
-gth_load_file_data_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthLoadFileDataTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_load_file_data_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthLoadFileDataTask),
-			0,
-			(GInstanceInitFunc) gth_load_file_data_task_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthLoadFileDataTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthTask *
 gth_load_file_data_task_new (GList      *file_list,
 			     const char *attributes)
diff --git a/gthumb/gth-main.c b/gthumb/gth-main.c
index e457a31..7b7ee59 100644
--- a/gthumb/gth-main.c
+++ b/gthumb/gth-main.c
@@ -114,7 +114,7 @@ struct _GthMainPrivate
 };
 
 
-static GObjectClass *parent_class = NULL;
+G_DEFINE_TYPE (GthMain, gth_main, G_TYPE_OBJECT)
 
 
 static void
@@ -153,7 +153,7 @@ gth_main_finalize (GObject *object)
 		gth_main->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_main_parent_class)->finalize (object);
 }
 
 
@@ -162,9 +162,7 @@ gth_main_class_init (GthMainClass *class)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	object_class = (GObjectClass*) class;
-
 	object_class->finalize = gth_main_finalize;
 }
 
@@ -185,34 +183,6 @@ gth_main_init (GthMain *main)
 }
 
 
-GType
-gth_main_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthMainClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_main_class_init,
-			NULL,
-			NULL,
-			sizeof (GthMain),
-			0,
-			(GInstanceInitFunc) gth_main_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthMain",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 void
 gth_main_initialize (void)
 {
diff --git a/gthumb/gth-menu-button.c b/gthumb/gth-menu-button.c
index 0e2f774..21795fb 100644
--- a/gthumb/gth-menu-button.c
+++ b/gthumb/gth-menu-button.c
@@ -46,10 +46,13 @@ enum {
 	PROP_MENU
 };
 
-static gpointer parent_class = NULL;
+
 static int signals[LAST_SIGNAL];
 
 
+G_DEFINE_TYPE (GthMenuButton, gth_menu_button, GTK_TYPE_TOGGLE_BUTTON)
+
+
 static void
 gth_menu_button_state_changed (GtkWidget    *widget,
 			       GtkStateType  previous_state)
@@ -253,7 +256,6 @@ gth_menu_button_class_init (GthMenuButtonClass *klass)
 	GObjectClass   *object_class;
 	GtkWidgetClass *widget_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthMenuButtonPrivate));
 
 	object_class = (GObjectClass *) klass;
@@ -397,33 +399,6 @@ gth_menu_button_init (GthMenuButton *self)
 }
 
 
-GType
-gth_menu_button_get_type (void)
-{
-        static GType type = 0;
-
-        if (! type) {
-                GTypeInfo type_info = {
-			sizeof (GthMenuButtonClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_menu_button_class_init,
-			NULL,
-			NULL,
-			sizeof (GthMenuButton),
-			0,
-			(GInstanceInitFunc) gth_menu_button_init
-		};
-		type = g_type_register_static (GTK_TYPE_TOGGLE_BUTTON,
-					       "GthMenuButton",
-					       &type_info,
-					       0);
-	}
-
-        return type;
-}
-
-
 GtkWidget *
 gth_menu_button_new (void)
 {
diff --git a/gthumb/gth-metadata-chooser.c b/gthumb/gth-metadata-chooser.c
index baf5452..2bc60f7 100644
--- a/gthumb/gth-metadata-chooser.c
+++ b/gthumb/gth-metadata-chooser.c
@@ -57,14 +57,15 @@ struct _GthMetadataChooserPrivate {
 };
 
 
-static gpointer parent_class = NULL;
 static guint gth_metadata_chooser_signals[LAST_SIGNAL] = { 0 };
 
 
+G_DEFINE_TYPE (GthMetadataChooser, gth_metadata_chooser, GTK_TYPE_TREE_VIEW)
+
+
 static void
 gth_metadata_chooser_class_init (GthMetadataChooserClass *klass)
 {
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthMetadataChooserPrivate));
 
 	/* signals */
@@ -293,7 +294,7 @@ row_inserted_cb (GtkTreeModel *tree_model,
 
 
 static void
-gth_metadata_chooser_instance_init (GthMetadataChooser *self)
+gth_metadata_chooser_init (GthMetadataChooser *self)
 {
 	GtkListStore      *store;
 	GtkTreeViewColumn *column;
@@ -358,34 +359,6 @@ gth_metadata_chooser_instance_init (GthMetadataChooser *self)
 }
 
 
-GType
-gth_metadata_chooser_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthMetadataChooserClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_metadata_chooser_class_init,
-			NULL,
-			NULL,
-			sizeof (GthMetadataChooser),
-			0,
-			(GInstanceInitFunc) gth_metadata_chooser_instance_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_TREE_VIEW,
-					       "GthMetadataChooser",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GtkWidget *
 gth_metadata_chooser_new (GthMetadataFlags allowed_flags)
 {
diff --git a/gthumb/gth-metadata-provider-file.c b/gthumb/gth-metadata-provider-file.c
index a84841e..96fbd1d 100644
--- a/gthumb/gth-metadata-provider-file.c
+++ b/gthumb/gth-metadata-provider-file.c
@@ -25,10 +25,7 @@
 #include "gth-metadata-provider-file.h"
 
 
-#define GTH_METADATA_PROVIDER_FILE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTH_TYPE_METADATA_PROVIDER_COMMENT, GthMetadataProviderFilePrivate))
-
-
-static GthMetadataProviderClass *parent_class = NULL;
+G_DEFINE_TYPE (GthMetadataProviderFile, gth_metadata_provider_file, GTH_TYPE_METADATA_PROVIDER)
 
 
 static gboolean
@@ -82,36 +79,11 @@ gth_metadata_provider_file_read (GthMetadataProvider *self,
 static void
 gth_metadata_provider_file_class_init (GthMetadataProviderFileClass *klass)
 {
-	parent_class = g_type_class_peek_parent (klass);
-
 	GTH_METADATA_PROVIDER_CLASS (klass)->can_read = gth_metadata_provider_file_can_read;
 	GTH_METADATA_PROVIDER_CLASS (klass)->read = gth_metadata_provider_file_read;
 }
 
-
-GType
-gth_metadata_provider_file_get_type (void)
+static void
+gth_metadata_provider_file_init (GthMetadataProviderFile *self)
 {
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthMetadataProviderFileClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_metadata_provider_file_class_init,
-			NULL,
-			NULL,
-			sizeof (GthMetadataProviderFile),
-			0,
-			(GInstanceInitFunc) NULL
-		};
-
-		type = g_type_register_static (GTH_TYPE_METADATA_PROVIDER,
-					       "GthMetadataProviderFile",
-					       &type_info,
-					       0);
-	}
-
-	return type;
 }
diff --git a/gthumb/gth-metadata-provider.c b/gthumb/gth-metadata-provider.c
index b6bd08e..88c595b 100644
--- a/gthumb/gth-metadata-provider.c
+++ b/gthumb/gth-metadata-provider.c
@@ -29,7 +29,7 @@
 #define CHECK_THREAD_RATE 5
 
 
-static gpointer gth_metadata_provider_parent_class = NULL;
+G_DEFINE_TYPE (GthMetadataProvider, gth_metadata_provider, G_TYPE_OBJECT)
 
 
 static gboolean
@@ -74,8 +74,6 @@ gth_metadata_provider_real_write (GthMetadataProvider   *self,
 static void
 gth_metadata_provider_class_init (GthMetadataProviderClass * klass)
 {
-	gth_metadata_provider_parent_class = g_type_class_peek_parent (klass);
-
 	GTH_METADATA_PROVIDER_CLASS (klass)->can_read = gth_metadata_provider_real_can_read;
 	GTH_METADATA_PROVIDER_CLASS (klass)->can_write = gth_metadata_provider_real_can_write;
 	GTH_METADATA_PROVIDER_CLASS (klass)->read = gth_metadata_provider_real_read;
@@ -83,26 +81,10 @@ gth_metadata_provider_class_init (GthMetadataProviderClass * klass)
 }
 
 
-GType
-gth_metadata_provider_get_type (void)
+static void
+gth_metadata_provider_init (GthMetadataProvider *self)
 {
-	static GType gth_metadata_provider_type_id = 0;
-	if (gth_metadata_provider_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthMetadataProviderClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_metadata_provider_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthMetadataProvider),
-			0,
-			(GInstanceInitFunc) NULL,
-			NULL
-		};
-		gth_metadata_provider_type_id = g_type_register_static (G_TYPE_OBJECT, "GthMetadataProvider", &g_define_type_info, 0);
-	}
-	return gth_metadata_provider_type_id;
+	/* void */
 }
 
 
diff --git a/gthumb/gth-metadata.c b/gthumb/gth-metadata.c
index e51dcf8..05c975a 100644
--- a/gthumb/gth-metadata.c
+++ b/gthumb/gth-metadata.c
@@ -41,7 +41,8 @@ struct _GthMetadataPrivate {
 	char *value_type;
 };
 
-static gpointer gth_metadata_parent_class = NULL;
+
+G_DEFINE_TYPE (GthMetadata, gth_metadata, G_TYPE_OBJECT)
 
 
 static void
@@ -128,7 +129,6 @@ gth_metadata_finalize (GObject *obj)
 static void
 gth_metadata_class_init (GthMetadataClass *klass)
 {
-	gth_metadata_parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthMetadataPrivate));
 
 	G_OBJECT_CLASS (klass)->get_property = gth_metadata_get_property;
@@ -174,7 +174,7 @@ gth_metadata_class_init (GthMetadataClass *klass)
 
 
 static void
-gth_metadata_instance_init (GthMetadata *self)
+gth_metadata_init (GthMetadata *self)
 {
 	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_METADATA, GthMetadataPrivate);
 	self->priv->id = NULL;
@@ -185,30 +185,6 @@ gth_metadata_instance_init (GthMetadata *self)
 }
 
 
-GType
-gth_metadata_get_type (void)
-{
-	static GType gth_metadata_type_id = 0;
-
-	if (gth_metadata_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthMetadataClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_metadata_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthMetadata),
-			0,
-			(GInstanceInitFunc) gth_metadata_instance_init,
-			NULL
-		};
-		gth_metadata_type_id = g_type_register_static (G_TYPE_OBJECT, "GthMetadata", &g_define_type_info, 0);
-	}
-	return gth_metadata_type_id;
-}
-
-
 GthMetadata *
 gth_metadata_new (void)
 {
diff --git a/gthumb/gth-monitor.c b/gthumb/gth-monitor.c
index 3b3c342..80f5848 100644
--- a/gthumb/gth-monitor.c
+++ b/gthumb/gth-monitor.c
@@ -50,10 +50,12 @@ struct _GthMonitorPrivateData {
 };
 
 
-static GObjectClass *parent_class = NULL;
 static guint monitor_signals[LAST_SIGNAL] = { 0 };
 
 
+G_DEFINE_TYPE (GthMonitor, gth_monitor, G_TYPE_OBJECT)
+
+
 static void
 gth_monitor_finalize (GObject *object)
 {
@@ -61,7 +63,7 @@ gth_monitor_finalize (GObject *object)
 
 	g_hash_table_unref (self->priv->paused_files);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_monitor_parent_class)->finalize (object);
 }
 
 
@@ -79,7 +81,6 @@ gth_monitor_class_init (GthMonitorClass *class)
 {
 	GObjectClass  *gobject_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (GthMonitorPrivateData));
 
 	gobject_class = (GObjectClass*) class;
@@ -178,34 +179,6 @@ gth_monitor_class_init (GthMonitorClass *class)
 }
 
 
-GType
-gth_monitor_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthMonitorClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_monitor_class_init,
-			NULL,
-			NULL,
-			sizeof (GthMonitor),
-			0,
-			(GInstanceInitFunc) gth_monitor_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthMonitor",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthMonitor *
 gth_monitor_new (void)
 {
diff --git a/gthumb/gth-multipage.c b/gthumb/gth-multipage.c
index 3d728d9..015b9ac 100644
--- a/gthumb/gth-multipage.c
+++ b/gthumb/gth-multipage.c
@@ -40,7 +40,6 @@ enum {
 };
 
 
-static gpointer parent_class = NULL;
 static guint gth_multipage_signals[LAST_SIGNAL] = { 0 };
 
 
@@ -51,10 +50,12 @@ struct _GthMultipagePrivate {
 };
 
 
+G_DEFINE_TYPE (GthMultipage, gth_multipage, GTK_TYPE_VBOX)
+
+
 static void
 gth_multipage_class_init (GthMultipageClass *klass)
 {
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthMultipagePrivate));
 
 	/* signals */
@@ -136,34 +137,6 @@ gth_multipage_init (GthMultipage *multipage)
 }
 
 
-GType
-gth_multipage_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthMultipageClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_multipage_class_init,
-			NULL,
-			NULL,
-			sizeof (GthMultipage),
-			0,
-			(GInstanceInitFunc) gth_multipage_init
-		};
-
-		type = g_type_register_static (GTK_TYPE_VBOX,
-					       "GthMultipage",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GtkWidget *
 gth_multipage_new (void)
 {
@@ -213,25 +186,13 @@ gth_multipage_get_current (GthMultipage *multipage)
 /* -- gth_multipage_child -- */
 
 
-GType
-gth_multipage_child_get_type (void) {
-	static GType gth_multipage_child_type_id = 0;
-	if (gth_multipage_child_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthMultipageChildIface),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) NULL,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			0,
-			0,
-			(GInstanceInitFunc) NULL,
-			NULL
-		};
-		gth_multipage_child_type_id = g_type_register_static (G_TYPE_INTERFACE, "GthMultipageChild", &g_define_type_info, 0);
-	}
-	return gth_multipage_child_type_id;
+G_DEFINE_INTERFACE (GthMultipageChild, gth_multipage_child, 0)
+
+
+static void
+gth_multipage_child_default_init (GthMultipageChildInterface *iface)
+{
+	/* void */
 }
 
 
diff --git a/gthumb/gth-multipage.h b/gthumb/gth-multipage.h
index ce04f4e..3326dcf 100644
--- a/gthumb/gth-multipage.h
+++ b/gthumb/gth-multipage.h
@@ -36,7 +36,7 @@ G_BEGIN_DECLS
 #define GTH_TYPE_MULTIPAGE_CHILD               (gth_multipage_child_get_type ())
 #define GTH_MULTIPAGE_CHILD(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTH_TYPE_MULTIPAGE_CHILD, GthMultipageChild))
 #define GTH_IS_MULTIPAGE_CHILD(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTH_TYPE_MULTIPAGE_CHILD))
-#define GTH_MULTIPAGE_CHILD_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTH_TYPE_MULTIPAGE_CHILD, GthMultipageChildIface))
+#define GTH_MULTIPAGE_CHILD_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTH_TYPE_MULTIPAGE_CHILD, GthMultipageChildInterface))
 
 typedef struct _GthMultipage        GthMultipage;
 typedef struct _GthMultipageClass   GthMultipageClass;
@@ -56,9 +56,9 @@ struct _GthMultipageClass
 };
 
 typedef struct _GthMultipageChild GthMultipageChild;
-typedef struct _GthMultipageChildIface GthMultipageChildIface;
+typedef struct _GthMultipageChildInterface GthMultipageChildInterface;
 
-struct _GthMultipageChildIface {
+struct _GthMultipageChildInterface {
 	GTypeInterface parent_iface;
 	const char *  (*get_name)  (GthMultipageChild *self);
 	const char *  (*get_icon)  (GthMultipageChild *self);
diff --git a/gthumb/gth-overwrite-dialog.c b/gthumb/gth-overwrite-dialog.c
index 5be5b64..da4bc5a 100644
--- a/gthumb/gth-overwrite-dialog.c
+++ b/gthumb/gth-overwrite-dialog.c
@@ -33,9 +33,6 @@
 #define PREVIEW_SIZE 256
 
 
-static gpointer gth_overwrite_dialog_parent_class = NULL;
-
-
 struct _GthOverwriteDialogPrivate {
 	GtkBuilder     *builder;
 	GFile          *source;
@@ -50,6 +47,9 @@ struct _GthOverwriteDialogPrivate {
 };
 
 
+G_DEFINE_TYPE (GthOverwriteDialog, gth_overwrite_dialog, GTK_TYPE_DIALOG)
+
+
 static void
 gth_overwrite_dialog_finalize (GObject *object)
 {
@@ -73,9 +73,7 @@ gth_overwrite_dialog_finalize (GObject *object)
 static void
 gth_overwrite_dialog_class_init (GthOverwriteDialogClass *klass)
 {
-	gth_overwrite_dialog_parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthOverwriteDialogPrivate));
-
 	G_OBJECT_CLASS (klass)->finalize = gth_overwrite_dialog_finalize;
 }
 
@@ -89,34 +87,6 @@ gth_overwrite_dialog_init (GthOverwriteDialog *self)
 }
 
 
-GType
-gth_overwrite_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthOverwriteDialogClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_overwrite_dialog_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthOverwriteDialog),
-			0,
-			(GInstanceInitFunc) gth_overwrite_dialog_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "GthOverwriteDialog",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static void
 image_loader_ready_cb (GObject      *source_object,
                        GAsyncResult *result,
diff --git a/gthumb/gth-pixbuf-list-task.c b/gthumb/gth-pixbuf-list-task.c
index d14be9c..2ebf1d3 100644
--- a/gthumb/gth-pixbuf-list-task.c
+++ b/gthumb/gth-pixbuf-list-task.c
@@ -49,7 +49,7 @@ struct _GthPixbufListTaskPrivate {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthPixbufListTask, gth_pixbuf_list_task, GTH_TYPE_TASK)
 
 
 static void
@@ -70,7 +70,7 @@ gth_pixbuf_list_task_finalize (GObject *object)
 	_g_object_list_unref (self->priv->file_list);
 	_g_object_unref (self->priv->destination_file_data);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_pixbuf_list_task_parent_class)->finalize (object);
 }
 
 
@@ -470,7 +470,6 @@ gth_pixbuf_list_task_class_init (GthPixbufListTaskClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthPixbufListTaskPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -493,34 +492,6 @@ gth_pixbuf_list_task_init (GthPixbufListTask *self)
 }
 
 
-GType
-gth_pixbuf_list_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthPixbufListTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_pixbuf_list_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthPixbufListTask),
-			0,
-			(GInstanceInitFunc) gth_pixbuf_list_task_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthPixbufListTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthTask *
 gth_pixbuf_list_task_new (GthBrowser    *browser,
 			  GList         *file_list,
diff --git a/gthumb/gth-pixbuf-saver.c b/gthumb/gth-pixbuf-saver.c
index fb74115..031da6b 100644
--- a/gthumb/gth-pixbuf-saver.c
+++ b/gthumb/gth-pixbuf-saver.c
@@ -25,7 +25,7 @@
 #include "gth-pixbuf-saver.h"
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthPixbufSaver, gth_pixbuf_saver, G_TYPE_OBJECT)
 
 
 static GtkWidget *
@@ -65,8 +65,6 @@ base_save_pixbuf (GthPixbufSaver  *self,
 static void
 gth_pixbuf_saver_class_init (GthPixbufSaverClass *klass)
 {
-	parent_class = g_type_class_peek_parent (klass);
-
 	klass->id = "";
 	klass->display_name = "";
 	klass->get_control = base_get_control;
@@ -76,31 +74,10 @@ gth_pixbuf_saver_class_init (GthPixbufSaverClass *klass)
 }
 
 
-GType
-gth_pixbuf_saver_get_type (void)
+static void
+gth_pixbuf_saver_init (GthPixbufSaver *self)
 {
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthPixbufSaverClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_pixbuf_saver_class_init,
-			NULL,
-			NULL,
-			sizeof (GthPixbufSaver),
-			0,
-			(GInstanceInitFunc) NULL
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthPixbufSaver",
-					       &type_info,
-					       0);
-	}
-
-	return type;
+	/* void */
 }
 
 
diff --git a/gthumb/gth-pixbuf-task.c b/gthumb/gth-pixbuf-task.c
index 42d9381..33befa1 100644
--- a/gthumb/gth-pixbuf-task.c
+++ b/gthumb/gth-pixbuf-task.c
@@ -34,7 +34,7 @@ struct _GthPixbufTaskPrivate {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthPixbufTask, gth_pixbuf_task, GTH_TYPE_ASYNC_TASK)
 
 
 static void
@@ -64,7 +64,7 @@ gth_pixbuf_task_finalize (GObject *object)
 	if (self->priv->destroy_data_func != NULL)
 		(*self->priv->destroy_data_func) (self->data);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_pixbuf_task_parent_class)->finalize (object);
 }
 
 
@@ -180,7 +180,6 @@ gth_pixbuf_task_class_init (GthPixbufTaskClass *class)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (GthPixbufTaskPrivate));
 
 	object_class = G_OBJECT_CLASS (class);
@@ -210,34 +209,6 @@ gth_pixbuf_task_init (GthPixbufTask *self)
 }
 
 
-GType
-gth_pixbuf_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthPixbufTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_pixbuf_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthPixbufTask),
-			0,
-			(GInstanceInitFunc) gth_pixbuf_task_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_ASYNC_TASK,
-					       "GthPixbufTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthTask *
 gth_pixbuf_task_new (const char      *description,
 		     gboolean         single_step,
diff --git a/gthumb/gth-progress-dialog.c b/gthumb/gth-progress-dialog.c
index 78a3186..a35e2a0 100644
--- a/gthumb/gth-progress-dialog.c
+++ b/gthumb/gth-progress-dialog.c
@@ -58,7 +58,8 @@ struct _GthTaskProgressClass {
 	GtkHBoxClass parent_class;
 };
 
-static gpointer gth_task_progress_parent_class = NULL;
+
+G_DEFINE_TYPE (GthTaskProgress, gth_task_progress, GTK_TYPE_HBOX)
 
 
 static void
@@ -150,34 +151,6 @@ gth_task_progress_init (GthTaskProgress *self)
 }
 
 
-GType
-gth_task_progress_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthTaskProgressClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_task_progress_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthTaskProgress),
-			0,
-			(GInstanceInitFunc) gth_task_progress_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_HBOX,
-					       "GthTaskProgress",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static gboolean
 task_pulse_cb (gpointer user_data)
 {
@@ -266,9 +239,6 @@ gth_task_progress_new (GthTask *task)
 /* -- gth_progress_dialog -- */
 
 
-static gpointer gth_progress_dialog_parent_class = NULL;
-
-
 struct _GthProgressDialogPrivate {
 	GtkWindow *parent;
 	GtkWidget *task_box;
@@ -277,6 +247,9 @@ struct _GthProgressDialogPrivate {
 };
 
 
+G_DEFINE_TYPE (GthProgressDialog, gth_progress_dialog, GTK_TYPE_DIALOG)
+
+
 static void
 gth_progress_dialog_finalize (GObject *base)
 {
@@ -335,34 +308,6 @@ gth_progress_dialog_init (GthProgressDialog *self)
 }
 
 
-GType
-gth_progress_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthProgressDialogClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_progress_dialog_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthProgressDialog),
-			0,
-			(GInstanceInitFunc) gth_progress_dialog_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "GthProgressDialog",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GtkWidget *
 gth_progress_dialog_new (GtkWindow *parent)
 {
diff --git a/gthumb/gth-request-dialog.c b/gthumb/gth-request-dialog.c
index d04a8df..a5c990c 100644
--- a/gthumb/gth-request-dialog.c
+++ b/gthumb/gth-request-dialog.c
@@ -28,9 +28,6 @@
 #define REQUEST_ENTRY_WIDTH_IN_CHARS 40
 
 
-static gpointer gth_request_dialog_parent_class = NULL;
-
-
 struct _GthRequestDialogPrivate {
 	GtkWidget *entry;
 	GtkWidget *infobar;
@@ -38,6 +35,9 @@ struct _GthRequestDialogPrivate {
 };
 
 
+G_DEFINE_TYPE (GthRequestDialog, gth_request_dialog, GTK_TYPE_DIALOG)
+
+
 static void
 gth_request_dialog_finalize (GObject *base)
 {
@@ -67,34 +67,6 @@ gth_request_dialog_init (GthRequestDialog *self)
 }
 
 
-GType
-gth_request_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthRequestDialogClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_request_dialog_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthRequestDialog),
-			0,
-			(GInstanceInitFunc) gth_request_dialog_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "GthRequestDialog",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static void
 _gth_request_dialog_construct (GthRequestDialog *self,
 			       GtkWindow        *parent,
diff --git a/gthumb/gth-save-file-data-task.c b/gthumb/gth-save-file-data-task.c
index 1723eef..3631799 100644
--- a/gthumb/gth-save-file-data-task.c
+++ b/gthumb/gth-save-file-data-task.c
@@ -35,7 +35,7 @@ struct _GthSaveFileDataTaskPrivate {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthSaveFileDataTask, gth_save_file_data_task, GTH_TYPE_TASK)
 
 
 static void
@@ -48,7 +48,7 @@ gth_save_file_data_task_finalize (GObject *object)
 	_g_object_list_unref (self->priv->file_data_list);
 	g_free (self->priv->attributes);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_save_file_data_task_parent_class)->finalize (object);
 }
 
 
@@ -136,7 +136,6 @@ gth_save_file_data_task_class_init (GthSaveFileDataTaskClass *klass)
 	GObjectClass *object_class;
 	GthTaskClass *task_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthSaveFileDataTaskPrivate));
 
 	object_class = G_OBJECT_CLASS (klass);
@@ -156,34 +155,6 @@ gth_save_file_data_task_init (GthSaveFileDataTask *self)
 }
 
 
-GType
-gth_save_file_data_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthSaveFileDataTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_save_file_data_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthSaveFileDataTask),
-			0,
-			(GInstanceInitFunc) gth_save_file_data_task_init
-		};
-
-		type = g_type_register_static (GTH_TYPE_TASK,
-					       "GthSaveFileDataTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GthTask *
 gth_save_file_data_task_new (GList      *file_list,
 			     const char *attributes)
diff --git a/gthumb/gth-screensaver.c b/gthumb/gth-screensaver.c
index a0063bd..4053cca 100644
--- a/gthumb/gth-screensaver.c
+++ b/gthumb/gth-screensaver.c
@@ -41,7 +41,7 @@ struct _GthScreensaverPrivate {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthScreensaver, gth_screensaver, G_TYPE_OBJECT)
 
 
 static void
@@ -52,12 +52,10 @@ gth_screensaver_finalize (GObject *object)
 	self = GTH_SCREENSAVER (object);
 
 	g_free (self->priv->app_id);
-	if (self->priv->proxy != NULL) {
+	if (self->priv->proxy != NULL)
 		g_object_unref (self->priv->proxy);
-		self->priv->proxy = NULL;
-	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_screensaver_parent_class)->finalize (object);
 }
 
 
@@ -108,7 +106,6 @@ gth_screensaver_class_init (GthScreensaverClass *klass)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthScreensaverPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -138,34 +135,6 @@ gth_screensaver_init (GthScreensaver *self)
 }
 
 
-GType
-gth_screensaver_get_type (void)
-{
-        static GType type = 0;
-
-        if (! type) {
-                GTypeInfo type_info = {
-			sizeof (GthScreensaverClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_screensaver_class_init,
-			NULL,
-			NULL,
-			sizeof (GthScreensaver),
-			0,
-			(GInstanceInitFunc) gth_screensaver_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthScreensaver",
-					       &type_info,
-					       0);
-	}
-
-        return type;
-}
-
-
 GthScreensaver *
 gth_screensaver_new (const char *application_id)
 {
diff --git a/gthumb/gth-sidebar.c b/gthumb/gth-sidebar.c
index 4eb487f..ac809b1 100644
--- a/gthumb/gth-sidebar.c
+++ b/gthumb/gth-sidebar.c
@@ -38,9 +38,6 @@ enum {
 };
 
 
-static gpointer parent_class = NULL;
-
-
 struct _GthSidebarPrivate {
 	GtkWidget   *properties;
 	GtkWidget   *toolbox;
@@ -49,6 +46,9 @@ struct _GthSidebarPrivate {
 };
 
 
+G_DEFINE_TYPE (GthSidebar, gth_sidebar, GTK_TYPE_NOTEBOOK)
+
+
 static void
 gth_sidebar_finalize (GObject *object)
 {
@@ -57,7 +57,7 @@ gth_sidebar_finalize (GObject *object)
 	g_free (sidebar->priv->dirty);
 	_g_object_unref (sidebar->priv->file_data);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_sidebar_parent_class)->finalize (object);
 }
 
 
@@ -101,7 +101,6 @@ gth_sidebar_class_init (GthSidebarClass *klass)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthSidebarPrivate));
 
 	object_class = (GObjectClass *) klass;
@@ -121,34 +120,6 @@ gth_sidebar_init (GthSidebar *sidebar)
 }
 
 
-GType
-gth_sidebar_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthSidebarClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_sidebar_class_init,
-			NULL,
-			NULL,
-			sizeof (GthSidebar),
-			0,
-			(GInstanceInitFunc) gth_sidebar_init
-		};
-
-		type = g_type_register_static (GTK_TYPE_NOTEBOOK,
-					       "GthSidebar",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static void
 _gth_sidebar_add_property_views (GthSidebar *sidebar)
 {
@@ -291,25 +262,13 @@ gth_sidebar_update_sensitivity (GthSidebar *sidebar)
 /* -- gth_property_view -- */
 
 
-GType
-gth_property_view_get_type (void) {
-	static GType gth_property_view_type_id = 0;
-	if (gth_property_view_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthPropertyViewIface),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) NULL,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			0,
-			0,
-			(GInstanceInitFunc) NULL,
-			NULL
-		};
-		gth_property_view_type_id = g_type_register_static (G_TYPE_INTERFACE, "GthPropertyView", &g_define_type_info, 0);
-	}
-	return gth_property_view_type_id;
+G_DEFINE_INTERFACE (GthPropertyView, gth_property_view, 0)
+
+
+static void
+gth_property_view_default_init (GthPropertyViewInterface *iface)
+{
+	/* void */
 }
 
 
diff --git a/gthumb/gth-sidebar.h b/gthumb/gth-sidebar.h
index 7c8744a..148061f 100644
--- a/gthumb/gth-sidebar.h
+++ b/gthumb/gth-sidebar.h
@@ -37,7 +37,7 @@ G_BEGIN_DECLS
 #define GTH_TYPE_PROPERTY_VIEW               (gth_property_view_get_type ())
 #define GTH_PROPERTY_VIEW(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTH_TYPE_PROPERTY_VIEW, GthPropertyView))
 #define GTH_IS_PROPERTY_VIEW(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTH_TYPE_PROPERTY_VIEW))
-#define GTH_PROPERTY_VIEW_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTH_TYPE_PROPERTY_VIEW, GthPropertyViewIface))
+#define GTH_PROPERTY_VIEW_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTH_TYPE_PROPERTY_VIEW, GthPropertyViewInterface))
 
 typedef struct _GthSidebar        GthSidebar;
 typedef struct _GthSidebarClass   GthSidebarClass;
@@ -55,9 +55,9 @@ struct _GthSidebarClass
 };
 
 typedef struct _GthPropertyView GthPropertyView;
-typedef struct _GthPropertyViewIface GthPropertyViewIface;
+typedef struct _GthPropertyViewInterface GthPropertyViewInterface;
 
-struct _GthPropertyViewIface {
+struct _GthPropertyViewInterface {
 	GTypeInterface parent_iface;
 	void  (*set_file)  (GthPropertyView *self,
 			    GthFileData     *file_data);
diff --git a/gthumb/gth-source-tree.c b/gthumb/gth-source-tree.c
index 35c059c..b669163 100644
--- a/gthumb/gth-source-tree.c
+++ b/gthumb/gth-source-tree.c
@@ -38,7 +38,7 @@ struct _GthSourceTreePrivate {
 };
 
 
-static gpointer parent_class = NULL;
+G_DEFINE_TYPE (GthSourceTree, gth_source_tree, GTH_TYPE_FOLDER_TREE)
 
 
 /* -- monitor_event_data -- */
@@ -335,7 +335,7 @@ gth_source_tree_finalize (GObject *object)
 		source_tree->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_source_tree_parent_class)->finalize (object);
 }
 
 
@@ -344,41 +344,11 @@ gth_source_tree_class_init (GthSourceTreeClass *klass)
 {
 	GObjectClass *gobject_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	gobject_class = G_OBJECT_CLASS (klass);
-
 	gobject_class->finalize = gth_source_tree_finalize;
 }
 
 
-GType
-gth_source_tree_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthSourceTreeClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_source_tree_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthSourceTree),
-			0,
-			(GInstanceInitFunc) gth_source_tree_init,
-			NULL
-		};
-		type = g_type_register_static (GTH_TYPE_FOLDER_TREE,
-					       "GthSourceTree",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GtkWidget *
 gth_source_tree_new (GFile *root)
 {
diff --git a/gthumb/gth-statusbar.c b/gthumb/gth-statusbar.c
index 99a23a9..0ccfaaf 100644
--- a/gthumb/gth-statusbar.c
+++ b/gthumb/gth-statusbar.c
@@ -24,12 +24,6 @@
 #include "gth-statusbar.h"
 
 
-#define GTH_STATUSBAR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTH_TYPE_STATUSBAR, GthStatusbarPrivate))
-
-
-static gpointer gth_statusbar_parent_class = NULL;
-
-
 struct _GthStatusbarPrivate {
 	guint      list_info_cid;
 	GtkWidget *primary_text;
@@ -43,10 +37,12 @@ struct _GthStatusbarPrivate {
 };
 
 
+G_DEFINE_TYPE (GthStatusbar, gth_statusbar, GTK_TYPE_STATUSBAR)
+
+
 static void
 gth_statusbar_class_init (GthStatusbarClass *klass)
 {
-	gth_statusbar_parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthStatusbarPrivate));
 }
 
@@ -61,7 +57,7 @@ gth_statusbar_init (GthStatusbar *statusbar)
 
 	gtk_box_set_spacing (GTK_BOX (statusbar), 0);
 
-	statusbar->priv = GTH_STATUSBAR_GET_PRIVATE (statusbar);
+	statusbar->priv = G_TYPE_INSTANCE_GET_PRIVATE (statusbar, GTH_TYPE_STATUSBAR, GthStatusbarPrivate);
 	statusbar->priv->list_info_cid = gtk_statusbar_get_context_id (GTK_STATUSBAR (statusbar), "gth_list_info");
 
 	/* Progress info */
@@ -129,34 +125,6 @@ gth_statusbar_init (GthStatusbar *statusbar)
 }
 
 
-GType
-gth_statusbar_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthStatusbarClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_statusbar_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthStatusbar),
-			0,
-			(GInstanceInitFunc) gth_statusbar_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_STATUSBAR,
-					       "GthStatusbar",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GtkWidget *
 gth_statusbar_new (void)
 {
diff --git a/gthumb/gth-string-list.c b/gthumb/gth-string-list.c
index 4392f31..09505e2 100644
--- a/gthumb/gth-string-list.c
+++ b/gthumb/gth-string-list.c
@@ -28,12 +28,12 @@ struct _GthStringListPrivate {
 	GList *list;
 };
 
-#define GTH_STRING_LIST_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTH_TYPE_STRING_LIST, GthStringListPrivate))
-static gpointer gth_string_list_parent_class = NULL;
+
+G_DEFINE_TYPE (GthStringList, gth_string_list, G_TYPE_OBJECT)
 
 
 static void
-gth_string_list_finalize (GObject* obj)
+gth_string_list_finalize (GObject *obj)
 {
 	GthStringList *self;
 
@@ -46,38 +46,17 @@ gth_string_list_finalize (GObject* obj)
 
 
 static void
-gth_string_list_class_init (GthStringListClass * klass)
+gth_string_list_class_init (GthStringListClass *klass)
 {
-	gth_string_list_parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthStringListPrivate));
-
 	G_OBJECT_CLASS (klass)->finalize = gth_string_list_finalize;
 }
 
 
-static void gth_string_list_instance_init (GthStringList * self) {
-	self->priv = GTH_STRING_LIST_GET_PRIVATE (self);
-}
-
-
-GType gth_string_list_get_type (void) {
-	static GType gth_string_list_type_id = 0;
-	if (gth_string_list_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthStringListClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_string_list_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthStringList),
-			0,
-			(GInstanceInitFunc) gth_string_list_instance_init,
-			NULL
-		};
-		gth_string_list_type_id = g_type_register_static (G_TYPE_OBJECT, "GthStringList", &g_define_type_info, 0);
-	}
-	return gth_string_list_type_id;
+static void
+gth_string_list_init (GthStringList *self) {
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_STRING_LIST, GthStringListPrivate);
+	self->priv->list = NULL;
 }
 
 
diff --git a/gthumb/gth-tags-entry.c b/gthumb/gth-tags-entry.c
index 71ab4b6..b88183c 100644
--- a/gthumb/gth-tags-entry.c
+++ b/gthumb/gth-tags-entry.c
@@ -79,10 +79,12 @@ struct _GthTagsEntryPrivate {
 };
 
 
-static gpointer parent_class = NULL;
 static guint signals[LAST_SIGNAL] = { 0 };
 
 
+G_DEFINE_TYPE (GthTagsEntry, gth_tags_entry, GTK_TYPE_VBOX)
+
+
 static void
 gth_tags_entry_finalize (GObject *obj)
 {
@@ -97,7 +99,7 @@ gth_tags_entry_finalize (GObject *obj)
 	g_strfreev (self->priv->tags);
 	g_strfreev (self->priv->expanded_list.last_used);
 
-	G_OBJECT_CLASS (parent_class)->finalize (obj);
+	G_OBJECT_CLASS (gth_tags_entry_parent_class)->finalize (obj);
 }
 
 
@@ -116,7 +118,6 @@ gth_tags_entry_class_init (GthTagsEntryClass *klass)
 	GObjectClass   *object_class;
 	GtkWidgetClass *widget_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthTagsEntryPrivate));
 
 	object_class = (GObjectClass*) (klass);
@@ -668,7 +669,7 @@ expand_button_toggled_cb (GtkToggleButton *button,
 
 
 static void
-gth_tags_entry_instance_init (GthTagsEntry *self)
+gth_tags_entry_init (GthTagsEntry *self)
 {
 	GtkWidget         *hbox;
 	GtkTreeViewColumn *column;
@@ -786,34 +787,6 @@ gth_tags_entry_instance_init (GthTagsEntry *self)
 }
 
 
-GType
-gth_tags_entry_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthTagsEntryClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_tags_entry_class_init,
-			NULL,
-			NULL,
-			sizeof (GthTagsEntry),
-			0,
-			(GInstanceInitFunc) gth_tags_entry_instance_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_VBOX,
-					       "GthTagsEntry",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GtkWidget *
 gth_tags_entry_new (void)
 {
diff --git a/gthumb/gth-task.c b/gthumb/gth-task.c
index 4860191..261a13c 100644
--- a/gthumb/gth-task.c
+++ b/gthumb/gth-task.c
@@ -42,7 +42,6 @@ struct _GthTaskPrivate
 };
 
 
-static GObjectClass *parent_class = NULL;
 static guint gth_task_signals[LAST_SIGNAL] = { 0 };
 
 
@@ -53,6 +52,9 @@ gth_task_error_quark (void)
 }
 
 
+G_DEFINE_TYPE (GthTask, gth_task, G_TYPE_OBJECT)
+
+
 static void
 gth_task_finalize (GObject *object)
 {
@@ -65,21 +67,21 @@ gth_task_finalize (GObject *object)
 		g_object_unref (task->priv->cancellable);
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_task_parent_class)->finalize (object);
 }
 
 
 static void
 base_exec (GthTask *task)
 {
-	/*gth_task_completed (task, NULL);*/
+	/* void */
 }
 
 
 static void
 base_cancelled (GthTask *task)
 {
-	/*gth_task_completed (task, g_error_new_literal (GTH_TASK_ERROR, GTH_TASK_ERROR_CANCELLED, ""));*/
+	/* void */
 }
 
 
@@ -88,7 +90,6 @@ gth_task_class_init (GthTaskClass *class)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (GthTaskPrivate));
 
 	object_class = (GObjectClass*) class;
@@ -148,34 +149,6 @@ gth_task_init (GthTask *self)
 }
 
 
-GType
-gth_task_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthTaskClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_task_class_init,
-			NULL,
-			NULL,
-			sizeof (GthTask),
-			0,
-			(GInstanceInitFunc) gth_task_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthTask",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static void
 cancellable_cancelled_cb (GCancellable *cancellable,
 			  gpointer      user_data)
diff --git a/gthumb/gth-test-category.c b/gthumb/gth-test-category.c
index 9d8dc81..f099485 100644
--- a/gthumb/gth-test-category.c
+++ b/gthumb/gth-test-category.c
@@ -63,9 +63,21 @@ struct _GthTestCategoryPrivate
 };
 
 
-static gpointer parent_class = NULL;
 static DomDomizableInterface *dom_domizable_parent_iface = NULL;
-static GthDuplicableIface *gth_duplicable_parent_iface = NULL;
+static GthDuplicableInterface *gth_duplicable_parent_iface = NULL;
+
+
+static void gth_test_category_dom_domizable_interface_init (DomDomizableInterface * iface);
+static void gth_test_category_gth_duplicable_interface_init (GthDuplicableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthTestCategory,
+			 gth_test_category,
+			 GTH_TYPE_TEST,
+			 G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+					 	gth_test_category_dom_domizable_interface_init)
+		         G_IMPLEMENT_INTERFACE (GTH_TYPE_DUPLICABLE,
+		        		 	gth_test_category_gth_duplicable_interface_init))
 
 
 static void
@@ -85,7 +97,7 @@ gth_test_category_finalize (GObject *object)
 		test->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_test_category_parent_class)->finalize (object);
 }
 
 
@@ -405,11 +417,10 @@ gth_test_category_class_init (GthTestCategoryClass *class)
 	GObjectClass *object_class;
 	GthTestClass *test_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	object_class = (GObjectClass*) class;
-	test_class = (GthTestClass *) class;
-
 	object_class->finalize = gth_test_category_finalize;
+
+	test_class = (GthTestClass *) class;
 	test_class->create_control = gth_test_category_real_create_control;
 	test_class->update_from_control = gth_test_category_real_update_from_control;
 	test_class->match = gth_test_category_real_match;
@@ -426,7 +437,7 @@ gth_test_category_dom_domizable_interface_init (DomDomizableInterface * iface)
 
 
 static void
-gth_test_category_gth_duplicable_interface_init (GthDuplicableIface *iface)
+gth_test_category_gth_duplicable_interface_init (GthDuplicableInterface *iface)
 {
 	gth_duplicable_parent_iface = g_type_interface_peek_parent (iface);
 	iface->duplicate = gth_test_category_real_duplicate;
@@ -441,46 +452,6 @@ gth_test_category_init (GthTestCategory *test)
 }
 
 
-GType
-gth_test_category_get_type (void)
-{
-        static GType type = 0;
-
-        if (! type) {
-                GTypeInfo type_info = {
-			sizeof (GthTestCategoryClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_test_category_class_init,
-			NULL,
-			NULL,
-			sizeof (GthTestCategory),
-			0,
-			(GInstanceInitFunc) gth_test_category_init
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) gth_test_category_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		static const GInterfaceInfo gth_duplicable_info = {
-			(GInterfaceInitFunc) gth_test_category_gth_duplicable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		type = g_type_register_static (GTH_TYPE_TEST,
-					       "GthTestCategory",
-					       &type_info,
-					       0);
-		g_type_add_interface_static (type, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-		g_type_add_interface_static (type, GTH_TYPE_DUPLICABLE, &gth_duplicable_info);
-	}
-
-        return type;
-}
-
-
 void
 gth_test_category_set (GthTestCategory *self,
 		       GthTestOp        op,
diff --git a/gthumb/gth-test-chain.c b/gthumb/gth-test-chain.c
index 49973bd..c61121b 100644
--- a/gthumb/gth-test-chain.c
+++ b/gthumb/gth-test-chain.c
@@ -36,9 +36,21 @@ struct _GthTestChainPrivate
 };
 
 
-static GthTestClass *parent_class = NULL;
 static DomDomizableInterface *dom_domizable_parent_iface = NULL;
-static GthDuplicableIface *gth_duplicable_parent_iface = NULL;
+static GthDuplicableInterface *gth_duplicable_parent_iface = NULL;
+
+
+static void gth_test_chain_dom_domizable_interface_init (DomDomizableInterface * iface);
+static void gth_test_chain_gth_duplicable_interface_init (GthDuplicableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthTestChain,
+			 gth_test_chain,
+			 GTH_TYPE_TEST,
+			 G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+					        gth_test_chain_dom_domizable_interface_init)
+		         G_IMPLEMENT_INTERFACE (GTH_TYPE_DUPLICABLE,
+		        		        gth_test_chain_gth_duplicable_interface_init))
 
 
 static void
@@ -55,7 +67,7 @@ gth_test_chain_finalize (GObject *object)
 		test->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_test_chain_parent_class)->finalize (object);
 }
 
 
@@ -119,6 +131,21 @@ gth_test_chain_get_attributes (GthTest *test)
 }
 
 
+static void
+gth_test_chain_class_init (GthTestChainClass *class)
+{
+	GObjectClass *object_class;
+	GthTestClass *test_class;
+
+	object_class = (GObjectClass*) class;
+	object_class->finalize = gth_test_chain_finalize;
+
+	test_class = (GthTestClass *) class;
+	test_class->match = gth_test_chain_match;
+	test_class->get_attributes = gth_test_chain_get_attributes;
+}
+
+
 static DomElement*
 gth_test_chain_real_create_element (DomDomizable *base,
 				    DomDocument  *doc)
@@ -178,6 +205,15 @@ gth_test_chain_real_load_from_element (DomDomizable *base,
 }
 
 
+static void
+gth_test_chain_dom_domizable_interface_init (DomDomizableInterface * iface)
+{
+	dom_domizable_parent_iface = g_type_interface_peek_parent (iface);
+	iface->create_element = gth_test_chain_real_create_element;
+	iface->load_from_element = gth_test_chain_real_load_from_element;
+}
+
+
 GObject *
 gth_test_chain_real_duplicate (GthDuplicable *duplicable)
 {
@@ -198,32 +234,7 @@ gth_test_chain_real_duplicate (GthDuplicable *duplicable)
 
 
 static void
-gth_test_chain_class_init (GthTestChainClass *class)
-{
-	GObjectClass *object_class;
-	GthTestClass *test_class;
-
-	parent_class = g_type_class_peek_parent (class);
-	object_class = (GObjectClass*) class;
-	test_class = (GthTestClass *) class;
-
-	object_class->finalize = gth_test_chain_finalize;
-	test_class->match = gth_test_chain_match;
-	test_class->get_attributes = gth_test_chain_get_attributes;
-}
-
-
-static void
-gth_test_chain_dom_domizable_interface_init (DomDomizableInterface * iface)
-{
-	dom_domizable_parent_iface = g_type_interface_peek_parent (iface);
-	iface->create_element = gth_test_chain_real_create_element;
-	iface->load_from_element = gth_test_chain_real_load_from_element;
-}
-
-
-static void
-gth_test_chain_gth_duplicable_interface_init (GthDuplicableIface *iface)
+gth_test_chain_gth_duplicable_interface_init (GthDuplicableInterface *iface)
 {
 	gth_duplicable_parent_iface = g_type_interface_peek_parent (iface);
 	iface->duplicate = gth_test_chain_real_duplicate;
@@ -237,46 +248,6 @@ gth_test_chain_init (GthTestChain *test)
 }
 
 
-GType
-gth_test_chain_get_type (void)
-{
-        static GType type = 0;
-
-        if (! type) {
-                GTypeInfo type_info = {
-			sizeof (GthTestChainClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_test_chain_class_init,
-			NULL,
-			NULL,
-			sizeof (GthTestChain),
-			0,
-			(GInstanceInitFunc) gth_test_chain_init
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) gth_test_chain_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		static const GInterfaceInfo gth_duplicable_info = {
-			(GInterfaceInitFunc) gth_test_chain_gth_duplicable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		type = g_type_register_static (GTH_TYPE_TEST,
-					       "GthTestChain",
-					       &type_info,
-					       0);
-		g_type_add_interface_static (type, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-		g_type_add_interface_static (type, GTH_TYPE_DUPLICABLE, &gth_duplicable_info);
-	}
-
-        return type;
-}
-
-
 GthTest *
 gth_test_chain_new (GthMatchType  match_type,
 		    GthTest      *test,
diff --git a/gthumb/gth-test-selector.c b/gthumb/gth-test-selector.c
index f1a0fba..6fbb4c2 100644
--- a/gthumb/gth-test-selector.c
+++ b/gthumb/gth-test-selector.c
@@ -52,10 +52,12 @@ struct _GthTestSelectorPrivate {
 };
 
 
-static gpointer parent_class = NULL;
 static guint gth_test_selector_signals[LAST_SIGNAL] = { 0 };
 
 
+G_DEFINE_TYPE (GthTestSelector, gth_test_selector, GTK_TYPE_HBOX)
+
+
 static void
 gth_test_selector_finalize (GObject *object)
 {
@@ -70,15 +72,13 @@ gth_test_selector_finalize (GObject *object)
 		selector->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_test_selector_parent_class)->finalize (object);
 }
 
 
 static void
 gth_test_selector_class_init (GthTestSelectorClass *klass)
 {
-	parent_class = g_type_class_peek_parent (klass);
-
 	G_OBJECT_CLASS (klass)->finalize = gth_test_selector_finalize;
 
 	/* signals */
@@ -105,39 +105,12 @@ gth_test_selector_class_init (GthTestSelectorClass *klass)
 
 
 static void
-gth_test_selector_instance_init (GthTestSelector *self)
+gth_test_selector_init (GthTestSelector *self)
 {
 	self->priv = g_new0 (GthTestSelectorPrivate, 1);
 }
 
 
-GType
-gth_test_selector_get_type (void)
-{
-	static GType type_id = 0;
-
-	if (type_id == 0) {
-		static const GTypeInfo type_info = {
-			sizeof (GthTestSelectorClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_test_selector_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthTestSelector),
-			0,
-			(GInstanceInitFunc) gth_test_selector_instance_init,
-			NULL
-		};
-		type_id = g_type_register_static (GTK_TYPE_HBOX,
-						  "GthTestSelector",
-						  &type_info,
-						  0);
-	}
-	return type_id;
-}
-
-
 static void
 test_combo_box_changed_cb (GtkComboBox     *scope_combo_box,
                            GthTestSelector *self)
diff --git a/gthumb/gth-test-simple.c b/gthumb/gth-test-simple.c
index ad3643d..69bad94 100644
--- a/gthumb/gth-test-simple.c
+++ b/gthumb/gth-test-simple.c
@@ -112,9 +112,21 @@ struct _GthTestSimplePrivate
 };
 
 
-static GthTestClass *parent_class = NULL;
 static DomDomizableInterface* dom_domizable_parent_iface = NULL;
-static GthDuplicableIface *gth_duplicable_parent_iface = NULL;
+static GthDuplicableInterface *gth_duplicable_parent_iface = NULL;
+
+
+static void gth_test_simple_dom_domizable_interface_init (DomDomizableInterface * iface);
+static void gth_test_simple_gth_duplicable_interface_init (GthDuplicableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthTestSimple,
+			 gth_test_simple,
+			 GTH_TYPE_TEST,
+			 G_IMPLEMENT_INTERFACE (DOM_TYPE_DOMIZABLE,
+					 	gth_test_simple_dom_domizable_interface_init)
+			 G_IMPLEMENT_INTERFACE (GTH_TYPE_DUPLICABLE,
+					 	gth_test_simple_gth_duplicable_interface_init))
 
 
 static void
@@ -158,7 +170,7 @@ gth_test_simple_finalize (GObject *object)
 		test->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_test_simple_parent_class)->finalize (object);
 }
 
 
@@ -1056,13 +1068,12 @@ gth_test_simple_class_init (GthTestSimpleClass *class)
 	GObjectClass *object_class;
 	GthTestClass *test_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	object_class = (GObjectClass*) class;
-	test_class = (GthTestClass *) class;
-
 	object_class->set_property = gth_test_simple_set_property;
 	object_class->get_property = gth_test_simple_get_property;
 	object_class->finalize = gth_test_simple_finalize;
+
+	test_class = (GthTestClass *) class;
 	test_class->create_control = gth_test_simple_real_create_control;
 	test_class->update_from_control = gth_test_simple_real_update_from_control;
 	test_class->match = gth_test_simple_real_match;
@@ -1134,7 +1145,7 @@ gth_test_simple_dom_domizable_interface_init (DomDomizableInterface * iface)
 
 
 static void
-gth_test_simple_gth_duplicable_interface_init (GthDuplicableIface *iface)
+gth_test_simple_gth_duplicable_interface_init (GthDuplicableInterface *iface)
 {
 	gth_duplicable_parent_iface = g_type_interface_peek_parent (iface);
 	iface->duplicate = gth_test_simple_real_duplicate;
@@ -1148,46 +1159,6 @@ gth_test_simple_init (GthTestSimple *test)
 }
 
 
-GType
-gth_test_simple_get_type (void)
-{
-        static GType type = 0;
-
-        if (! type) {
-                GTypeInfo type_info = {
-			sizeof (GthTestSimpleClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_test_simple_class_init,
-			NULL,
-			NULL,
-			sizeof (GthTestSimple),
-			0,
-			(GInstanceInitFunc) gth_test_simple_init
-		};
-		static const GInterfaceInfo dom_domizable_info = {
-			(GInterfaceInitFunc) gth_test_simple_dom_domizable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-		static const GInterfaceInfo gth_duplicable_info = {
-			(GInterfaceInitFunc) gth_test_simple_gth_duplicable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		type = g_type_register_static (GTH_TYPE_TEST,
-					       "GthTestSimple",
-					       &type_info,
-					       0);
-		g_type_add_interface_static (type, DOM_TYPE_DOMIZABLE, &dom_domizable_info);
-		g_type_add_interface_static (type, GTH_TYPE_DUPLICABLE, &gth_duplicable_info);
-	}
-
-        return type;
-}
-
-
 void
 gth_test_simple_set_data_as_string (GthTestSimple *test,
 			            const char    *s)
diff --git a/gthumb/gth-test.c b/gthumb/gth-test.c
index dd0aa23..d1ae543 100644
--- a/gthumb/gth-test.c
+++ b/gthumb/gth-test.c
@@ -52,8 +52,7 @@ struct _GthTestPrivate {
 };
 
 
-static gpointer parent_class = NULL;
-static GthDuplicableIface *gth_duplicable_parent_iface = NULL;
+static GthDuplicableInterface *gth_duplicable_parent_iface = NULL;
 static guint gth_test_signals[LAST_SIGNAL] = { 0 };
 
 
@@ -64,6 +63,16 @@ gth_test_error_quark (void)
 }
 
 
+static void gth_test_gth_duplicable_interface_init (GthDuplicableInterface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthTest,
+		         gth_test,
+		         G_TYPE_OBJECT,
+		         G_IMPLEMENT_INTERFACE (GTH_TYPE_DUPLICABLE,
+		        		        gth_test_gth_duplicable_interface_init))
+
+
 static void
 gth_test_finalize (GObject *object)
 {
@@ -75,7 +84,7 @@ gth_test_finalize (GObject *object)
 	g_free (self->priv->display_name);
 	g_free (self->files);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_test_parent_class)->finalize (object);
 }
 
 
@@ -104,6 +113,7 @@ base_update_from_control (GthTest   *self,
 static void
 base_reset (GthTest *self)
 {
+	/* void */
 }
 
 
@@ -256,7 +266,6 @@ gth_test_class_init (GthTestClass *klass)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthTestPrivate));
 
 	object_class = (GObjectClass*) klass;
@@ -318,7 +327,7 @@ gth_test_class_init (GthTestClass *klass)
 
 
 static void
-gth_test_gth_duplicable_interface_init (GthDuplicableIface *iface)
+gth_test_gth_duplicable_interface_init (GthDuplicableInterface *iface)
 {
 	gth_duplicable_parent_iface = g_type_interface_peek_parent (iface);
 	iface->duplicate = gth_test_real_duplicate;
@@ -336,40 +345,6 @@ gth_test_init (GthTest *self)
 }
 
 
-GType
-gth_test_get_type (void)
-{
-        static GType type = 0;
-
-        if (! type) {
-                GTypeInfo type_info = {
-			sizeof (GthTestClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_test_class_init,
-			NULL,
-			NULL,
-			sizeof (GthTest),
-			0,
-			(GInstanceInitFunc) gth_test_init
-		};
-		static const GInterfaceInfo gth_duplicable_info = {
-			(GInterfaceInitFunc) gth_test_gth_duplicable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthTest",
-					       &type_info,
-					       0);
-		g_type_add_interface_static (type, GTH_TYPE_DUPLICABLE, &gth_duplicable_info);
-	}
-
-        return type;
-}
-
-
 GthTest *
 gth_test_new (void)
 {
diff --git a/gthumb/gth-thumb-loader.c b/gthumb/gth-thumb-loader.c
index 19e6ea7..ab23054 100644
--- a/gthumb/gth-thumb-loader.c
+++ b/gthumb/gth-thumb-loader.c
@@ -72,7 +72,7 @@ enum {
 };
 
 
-static GObjectClass *parent_class = NULL;
+G_DEFINE_TYPE (GthThumbLoader, gth_thumb_loader, G_TYPE_OBJECT)
 
 
 static void
@@ -84,7 +84,7 @@ gth_thumb_loader_finalize (GObject *object)
 	_g_object_unref (self->priv->iloader);
 	_g_object_unref (self->priv->tloader);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_thumb_loader_parent_class)->finalize (object);
 }
 
 
@@ -93,7 +93,6 @@ gth_thumb_loader_class_init (GthThumbLoaderClass *class)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (GthThumbLoaderPrivate));
 
 	object_class = G_OBJECT_CLASS (class);
@@ -111,34 +110,6 @@ gth_thumb_loader_init (GthThumbLoader *self)
 }
 
 
-GType
-gth_thumb_loader_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthThumbLoaderClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_thumb_loader_class_init,
-			NULL,
-			NULL,
-			sizeof (GthThumbLoader),
-			0,
-			(GInstanceInitFunc) gth_thumb_loader_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "GthThumbLoader",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static GthImage *
 generate_thumbnail (GthFileData   *file_data,
 		    int            requested_size,
diff --git a/gthumb/gth-time-selector.c b/gthumb/gth-time-selector.c
index 474aceb..919d21e 100644
--- a/gthumb/gth-time-selector.c
+++ b/gthumb/gth-time-selector.c
@@ -52,10 +52,12 @@ struct _GthTimeSelectorPrivate
 };
 
 
-static GtkHBoxClass *parent_class = NULL;
 static guint gth_time_selector_signals[LAST_SIGNAL] = { 0 };
 
 
+G_DEFINE_TYPE (GthTimeSelector, gth_time_selector, GTK_TYPE_HBOX);
+
+
 static void
 gth_time_selector_finalize (GObject *object)
 {
@@ -66,16 +68,15 @@ gth_time_selector_finalize (GObject *object)
 	gtk_widget_destroy (self->priv->calendar_popup);
 	gth_datetime_free (self->priv->date_time);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_time_selector_parent_class)->finalize (object);
 }
 
 
 static void
 gth_time_selector_class_init (GthTimeSelectorClass *class)
 {
-	GObjectClass   *object_class;
+	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (GthTimeSelectorPrivate));
 
 	object_class = (GObjectClass*) class;
@@ -533,34 +534,6 @@ gth_time_selector_construct (GthTimeSelector *self)
 }
 
 
-GType
-gth_time_selector_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthTimeSelectorClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_time_selector_class_init,
-			NULL,
-			NULL,
-			sizeof (GthTimeSelector),
-			0,
-			(GInstanceInitFunc) gth_time_selector_init
-		};
-
-		type = g_type_register_static (GTK_TYPE_HBOX,
-					       "GthTimeSelector",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GtkWidget *
 gth_time_selector_new (void)
 {
diff --git a/gthumb/gth-toggle-menu-tool-button.c b/gthumb/gth-toggle-menu-tool-button.c
index 8cf1043..ab8ab04 100644
--- a/gthumb/gth-toggle-menu-tool-button.c
+++ b/gthumb/gth-toggle-menu-tool-button.c
@@ -54,11 +54,21 @@ enum {
 	PROP_MENU
 };
 
-static gpointer parent_class = NULL;
+
 static GtkActivatableIface *parent_activatable_iface;
 static int signals[LAST_SIGNAL];
 
 
+static void gth_toggle_menu_tool_button_gtk_activable_interface_init (GtkActivatableIface *iface);
+
+
+G_DEFINE_TYPE_WITH_CODE (GthToggleMenuToolButton,
+			 gth_toggle_menu_tool_button,
+			 GTK_TYPE_TOOL_ITEM,
+			 G_IMPLEMENT_INTERFACE (GTK_TYPE_ACTIVATABLE,
+					 	gth_toggle_menu_tool_button_gtk_activable_interface_init))
+
+
 gchar *
 _gtk_toolbar_elide_underscores (const gchar *original)
 {
@@ -366,7 +376,7 @@ gth_toggle_menu_tool_button_update_icon_spacing (GthToggleMenuToolButton *button
 static void
 gth_toggle_menu_tool_button_style_updated (GtkWidget *widget)
 {
-	GTK_WIDGET_CLASS (parent_class)->style_updated (widget);
+	GTK_WIDGET_CLASS (gth_toggle_menu_tool_button_parent_class)->style_updated (widget);
 	gth_toggle_menu_tool_button_update_icon_spacing (GTH_TOGGLE_MENU_TOOL_BUTTON (widget));
 }
 
@@ -448,8 +458,8 @@ gth_toggle_menu_tool_button_property_notify (GObject    *object,
 	if (button->priv->contents_invalid || strcmp ("is-important", pspec->name) == 0)
 		gth_toggle_menu_tool_button_construct_contents (GTK_TOOL_ITEM (object));
 
-	if (G_OBJECT_CLASS (parent_class)->notify)
-		G_OBJECT_CLASS (parent_class)->notify (object, pspec);
+	if (G_OBJECT_CLASS (gth_toggle_menu_tool_button_parent_class)->notify)
+		G_OBJECT_CLASS (gth_toggle_menu_tool_button_parent_class)->notify (object, pspec);
 }
 
 
@@ -611,7 +621,7 @@ gth_toggle_menu_tool_button_finalize (GObject *object)
 		button->priv->toggle_button = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_toggle_menu_tool_button_parent_class)->finalize (object);
 }
 
 
@@ -682,7 +692,6 @@ gth_toggle_menu_tool_button_class_init (GthToggleMenuToolButtonClass *klass)
 	GtkWidgetClass   *widget_class;
 	GtkToolItemClass *tool_item_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthToggleMenuToolButtonPrivate));
 
 	object_class = (GObjectClass *) klass;
@@ -877,40 +886,6 @@ gth_toggle_menu_tool_button_gtk_activable_interface_init (GtkActivatableIface *i
 }
 
 
-GType
-gth_toggle_menu_tool_button_get_type (void)
-{
-        static GType type = 0;
-
-        if (! type) {
-                GTypeInfo type_info = {
-			sizeof (GthToggleMenuToolButtonClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_toggle_menu_tool_button_class_init,
-			NULL,
-			NULL,
-			sizeof (GthToggleMenuToolButton),
-			0,
-			(GInstanceInitFunc) gth_toggle_menu_tool_button_init
-		};
-		static const GInterfaceInfo gtk_activable_info = {
-			(GInterfaceInitFunc) gth_toggle_menu_tool_button_gtk_activable_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL
-		};
-
-		type = g_type_register_static (GTK_TYPE_TOOL_ITEM,
-					       "GthToggleMenuToolButton",
-					       &type_info,
-					       0);
-		g_type_add_interface_static (type, GTK_TYPE_ACTIVATABLE, &gtk_activable_info);
-	}
-
-        return type;
-}
-
-
 GtkToolItem *
 gth_toggle_menu_tool_button_new (void)
 {
diff --git a/gthumb/gth-toolbox.c b/gthumb/gth-toolbox.c
index 7391e7f..e1e8573 100644
--- a/gthumb/gth-toolbox.c
+++ b/gthumb/gth-toolbox.c
@@ -27,9 +27,6 @@
 #include "gtk-utils.h"
 
 
-#define GTH_TOOLBOX_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTH_TYPE_TOOLBOX, GthToolboxPrivate))
-
-
 enum {
 	GTH_TOOLBOX_LIST_PAGE = 0,
 	GTH_TOOLBOX_OPTIONS_PAGE
@@ -42,9 +39,6 @@ enum  {
 };
 
 
-static gpointer parent_class = NULL;
-
-
 struct _GthToolboxPrivate {
 	char      *name;
 	GtkWidget *box;
@@ -55,6 +49,9 @@ struct _GthToolboxPrivate {
 };
 
 
+G_DEFINE_TYPE (GthToolbox, gth_toolbox, GTK_TYPE_NOTEBOOK)
+
+
 static void
 gth_toolbox_set_name (GthToolbox *self,
 		      const char *name)
@@ -97,7 +94,7 @@ gth_toolbox_finalize (GObject *object)
 
 	g_free (self->priv->name);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_toolbox_parent_class)->finalize (object);
 }
 
 
@@ -106,7 +103,6 @@ gth_toolbox_class_init (GthToolboxClass *klass)
 {
 	GObjectClass *gobject_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GthToolboxPrivate));
 
 	gobject_class = (GObjectClass*) klass;
@@ -131,7 +127,7 @@ gth_toolbox_init (GthToolbox *toolbox)
 	GtkWidget *options_header;
 	GtkWidget *header_align;
 
-	toolbox->priv = GTH_TOOLBOX_GET_PRIVATE (toolbox);
+	toolbox->priv = G_TYPE_INSTANCE_GET_PRIVATE (toolbox, GTH_TYPE_TOOLBOX, GthToolboxPrivate);
 	gtk_notebook_set_show_tabs (GTK_NOTEBOOK (toolbox), FALSE);
 	gtk_notebook_set_show_border (GTK_NOTEBOOK (toolbox), FALSE);
 
@@ -183,34 +179,6 @@ gth_toolbox_init (GthToolbox *toolbox)
 }
 
 
-GType
-gth_toolbox_get_type (void)
-{
-	static GType type = 0;
-
-	if (! type) {
-		GTypeInfo type_info = {
-			sizeof (GthToolboxClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) gth_toolbox_class_init,
-			NULL,
-			NULL,
-			sizeof (GthToolbox),
-			0,
-			(GInstanceInitFunc) gth_toolbox_init
-		};
-
-		type = g_type_register_static (GTK_TYPE_NOTEBOOK,
-					       "GthToolbox",
-					       &type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 static void
 child_clicked_cb (GtkWidget *tool,
 		  gpointer   data)
diff --git a/gthumb/gth-uri-list.c b/gthumb/gth-uri-list.c
index 03cae6a..bb2cd4f 100644
--- a/gthumb/gth-uri-list.c
+++ b/gthumb/gth-uri-list.c
@@ -51,10 +51,12 @@ struct _GthUriListPrivate {
 };
 
 
-static gpointer parent_class = NULL;
 static guint uri_list_signals[LAST_SIGNAL] = { 0 };
 
 
+G_DEFINE_TYPE (GthUriList, gth_uri_list, GTK_TYPE_TREE_VIEW)
+
+
 static void
 add_columns (GtkTreeView *treeview)
 {
@@ -171,7 +173,7 @@ gth_uri_list_finalize (GObject *object)
 		uri_list->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gth_uri_list_parent_class)->finalize (object);
 }
 
 
@@ -180,7 +182,6 @@ gth_uri_list_class_init (GthUriListClass *klass)
 {
 	GObjectClass *gobject_class;
 
-	parent_class = g_type_class_peek_parent (klass);
 	gobject_class = G_OBJECT_CLASS (klass);
 
 	gobject_class->finalize = gth_uri_list_finalize;
@@ -197,34 +198,6 @@ gth_uri_list_class_init (GthUriListClass *klass)
 }
 
 
-GType
-gth_uri_list_get_type (void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthUriListClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) gth_uri_list_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (GthUriList),
-			0,
-			(GInstanceInitFunc) gth_uri_list_init,
-			NULL
-		};
-		type = g_type_register_static (GTK_TYPE_TREE_VIEW,
-					       "GthUriList",
-					       &g_define_type_info,
-					       0);
-	}
-
-	return type;
-}
-
-
 GtkWidget *
 gth_uri_list_new (void)
 {
diff --git a/gthumb/gth-viewer-page.c b/gthumb/gth-viewer-page.c
index 72fc2e1..0dfb828 100644
--- a/gthumb/gth-viewer-page.c
+++ b/gthumb/gth-viewer-page.c
@@ -32,8 +32,11 @@ enum {
 static guint gth_viewer_page_signals[LAST_SIGNAL] = { 0 };
 
 
+G_DEFINE_INTERFACE (GthViewerPage, gth_viewer_page, 0)
+
+
 static void
-gth_viewer_page_base_init (gpointer g_iface)
+gth_viewer_page_default_init (GthViewerPageInterface *iface)
 {
 	static gboolean initialized = FALSE;
 
@@ -44,7 +47,7 @@ gth_viewer_page_base_init (gpointer g_iface)
 	            g_signal_new ("file-loaded",
 	        		  GTH_TYPE_VIEWER_PAGE,
 	                          G_SIGNAL_RUN_LAST,
-	                          G_STRUCT_OFFSET (GthViewerPageIface, file_loaded),
+	                          G_STRUCT_OFFSET (GthViewerPageInterface, file_loaded),
 	                          NULL, NULL,
 	                          gth_marshal_VOID__OBJECT_BOOLEAN,
 	                          G_TYPE_NONE,
@@ -56,28 +59,6 @@ gth_viewer_page_base_init (gpointer g_iface)
 }
 
 
-GType
-gth_viewer_page_get_type (void) {
-	static GType gth_viewer_page_type_id = 0;
-	if (gth_viewer_page_type_id == 0) {
-		static const GTypeInfo g_define_type_info = {
-			sizeof (GthViewerPageIface),
-			(GBaseInitFunc) gth_viewer_page_base_init,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) NULL,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			0,
-			0,
-			(GInstanceInitFunc) NULL,
-			NULL
-		};
-		gth_viewer_page_type_id = g_type_register_static (G_TYPE_INTERFACE, "GthViewerPage", &g_define_type_info, 0);
-	}
-	return gth_viewer_page_type_id;
-}
-
-
 void
 gth_viewer_page_activate (GthViewerPage *self,
 			  GthBrowser    *browser)
diff --git a/gthumb/gth-viewer-page.h b/gthumb/gth-viewer-page.h
index e9eef08..9e912ab 100644
--- a/gthumb/gth-viewer-page.h
+++ b/gthumb/gth-viewer-page.h
@@ -31,17 +31,17 @@ G_BEGIN_DECLS
 #define GTH_TYPE_VIEWER_PAGE (gth_viewer_page_get_type ())
 #define GTH_VIEWER_PAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTH_TYPE_VIEWER_PAGE, GthViewerPage))
 #define GTH_IS_VIEWER_PAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTH_TYPE_VIEWER_PAGE))
-#define GTH_VIEWER_PAGE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTH_TYPE_VIEWER_PAGE, GthViewerPageIface))
+#define GTH_VIEWER_PAGE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTH_TYPE_VIEWER_PAGE, GthViewerPageInterface))
 
 typedef struct _GthViewerPage GthViewerPage;
-typedef struct _GthViewerPageIface GthViewerPageIface;
+typedef struct _GthViewerPageInterface GthViewerPageInterface;
 
 typedef void (*FileSavedFunc)  (GthViewerPage *viewer_page,
 				GthFileData   *file_data,
 				GError        *error,
 				gpointer       user_data);
 
-struct _GthViewerPageIface {
+struct _GthViewerPageInterface {
 	GTypeInterface parent_iface;
 
 	/*< virtual functions >*/



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