Index: src/eog-application.c
===================================================================
--- src/eog-application.c	(Revision 4195)
+++ src/eog-application.c	(Arbeitskopie)
@@ -370,6 +370,23 @@
 					  "1.0");
 }
 
+void
+eog_application_reset_toolbars_model (EogApplication *app)
+{
+	g_return_if_fail (EOG_IS_APPLICATION (app));
+
+	g_object_unref (app->toolbars_model);
+
+	app->toolbars_model = egg_toolbars_model_new ();
+
+	egg_toolbars_model_load_names (app->toolbars_model,
+				       EOG_DATA_DIR "/eog-toolbar.xml");
+	egg_toolbars_model_load_toolbars (app->toolbars_model,
+					  EOG_DATA_DIR "/eog-toolbar.xml");
+	egg_toolbars_model_set_flags (app->toolbars_model, 0,
+				      EGG_TB_MODEL_NOT_REMOVABLE);
+}
+
 #ifdef HAVE_DBUS
 void
 eog_application_screensaver_enable (EogApplication *application)
Index: src/eog-window.c
===================================================================
--- src/eog-window.c	(Revision 4195)
+++ src/eog-window.c	(Arbeitskopie)
@@ -2400,17 +2400,35 @@
 	eog_dialog_show (EOG_DIALOG (pref_dlg));
 }
 
+#define EOG_TB_EDITOR_DLG_RESET_RESPONSE 128
+
 static void
 eog_window_cmd_edit_toolbar_cb (GtkDialog *dialog, gint response, gpointer data)
 {
 	EogWindow *window = EOG_WINDOW (data);
 
-        egg_editable_toolbar_set_edit_mode
-		(EGG_EDITABLE_TOOLBAR (window->priv->toolbar), FALSE);
+	if (response == EOG_TB_EDITOR_DLG_RESET_RESPONSE) {
+		EggToolbarsModel *model;
+		EggToolbarEditor *editor;
 
-	eog_application_save_toolbars_model (EOG_APP);
+		editor = g_object_get_data (G_OBJECT (dialog),
+					    "EggToolbarEditor");
 
-        gtk_widget_destroy (GTK_WIDGET (dialog));
+		g_return_if_fail (editor != NULL);
+
+		eog_application_reset_toolbars_model (EOG_APP);
+		model = eog_application_get_toolbars_model (EOG_APP);
+		egg_editable_toolbar_set_model 
+			(EGG_EDITABLE_TOOLBAR (window->priv->toolbar), model);
+		egg_toolbar_editor_set_model (editor, model);
+	} else {
+        	egg_editable_toolbar_set_edit_mode
+			(EGG_EDITABLE_TOOLBAR (window->priv->toolbar), FALSE);
+
+		eog_application_save_toolbars_model (EOG_APP);
+
+        	gtk_widget_destroy (GTK_WIDGET (dialog));
+	}
 }
 
 static void
@@ -2426,8 +2444,10 @@
 
 	dialog = gtk_dialog_new_with_buttons (_("Toolbar Editor"),
 					      GTK_WINDOW (window), 
-				              GTK_DIALOG_DESTROY_WITH_PARENT, 
-					      GTK_STOCK_CLOSE,
+				              GTK_DIALOG_DESTROY_WITH_PARENT,
+					      _("Reset to Default"),
+					      EOG_TB_EDITOR_DLG_RESET_RESPONSE,
+ 					      GTK_STOCK_CLOSE,
 					      GTK_RESPONSE_CLOSE, 
 					      NULL);
 
@@ -2454,6 +2474,8 @@
 	egg_editable_toolbar_set_edit_mode
 		(EGG_EDITABLE_TOOLBAR (window->priv->toolbar), TRUE);
 
+	g_object_set_data (G_OBJECT (dialog), "EggToolbarEditor", editor);
+
 	g_signal_connect (dialog, 
                           "response",
 			  G_CALLBACK (eog_window_cmd_edit_toolbar_cb),
Index: src/eog-application.h
===================================================================
--- src/eog-application.h	(Revision 4195)
+++ src/eog-application.h	(Arbeitskopie)
@@ -99,6 +99,8 @@
 
 void              eog_application_save_toolbars_model (EogApplication *application);
 
+void		  eog_application_reset_toolbars_model (EogApplication *app);
+
 #ifdef HAVE_DBUS
 void              eog_application_screensaver_enable  (EogApplication *application);
 
Index: cut-n-paste/toolbar-editor/egg-toolbar-editor.c
===================================================================
--- cut-n-paste/toolbar-editor/egg-toolbar-editor.c	(Revision 4195)
+++ cut-n-paste/toolbar-editor/egg-toolbar-editor.c	(Arbeitskopie)
@@ -136,21 +136,43 @@
 }
 
 static void
+egg_toolbar_editor_disconnect_model (EggToolbarEditor *t)
+{
+  EggToolbarsModel *model = t->priv->model;
+
+  g_signal_handlers_disconnect_by_func
+    (model, G_CALLBACK (item_added_or_removed_cb), t);
+  g_signal_handlers_disconnect_by_func
+    (model, G_CALLBACK (toolbar_removed_cb), t);
+}
+
+void
 egg_toolbar_editor_set_model (EggToolbarEditor *t,
 			      EggToolbarsModel *model)
 {
   g_return_if_fail (EGG_IS_TOOLBAR_EDITOR (t));
+  g_return_if_fail (model != NULL);
 
-  t->priv->model = g_object_ref (model);
+  EggToolbarEditorPrivate *priv = t->priv;
+
+  if (priv->model)
+    {
+      if (G_UNLIKELY (priv->model == model)) return;
+
+      egg_toolbar_editor_disconnect_model (t);
+      g_object_unref (priv->model); 
+    }
+
+  priv->model = g_object_ref (model);
   
-  update_editor_sheet (t);
-
   g_signal_connect_object (model, "item_added",
 			   G_CALLBACK (item_added_or_removed_cb), t, 0);
   g_signal_connect_object (model, "item_removed",
 			   G_CALLBACK (item_added_or_removed_cb), t, 0);
   g_signal_connect_object (model, "toolbar_removed",
 			   G_CALLBACK (toolbar_removed_cb), t, 0);
+
+  update_editor_sheet (t);
 }
 
 static void
@@ -214,8 +236,7 @@
 						       "Model",
 						       "Toolbars Model",
 						       EGG_TYPE_TOOLBARS_MODEL,
-						       G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB |
-						       G_PARAM_CONSTRUCT_ONLY));
+						       G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
 
   g_type_class_add_private (object_class, sizeof (EggToolbarEditorPrivate));
 }
@@ -232,6 +253,7 @@
 
   if (editor->priv->model)
     {
+      egg_toolbar_editor_disconnect_model (editor);
       g_object_unref (editor->priv->model);
     }
 
@@ -540,7 +562,7 @@
   GtkWidget *viewport;
 
   g_return_if_fail (EGG_IS_TOOLBAR_EDITOR (editor));
-  
+
   /* Create new table. */
   table = gtk_table_new (0, 0, TRUE);
   editor->priv->table = table;
Index: cut-n-paste/toolbar-editor/egg-toolbar-editor.h
===================================================================
--- cut-n-paste/toolbar-editor/egg-toolbar-editor.h	(Revision 4195)
+++ cut-n-paste/toolbar-editor/egg-toolbar-editor.h	(Arbeitskopie)
@@ -56,6 +56,8 @@
 GType             egg_toolbar_editor_get_type     (void);
 GtkWidget        *egg_toolbar_editor_new          (GtkUIManager *manager,
 						   EggToolbarsModel *model);
+void		  egg_toolbar_editor_set_model	  (EggToolbarEditor *t,
+						   EggToolbarsModel *model);
 
 G_END_DECLS
 
