diff --git a/gladeui/glade-base-editor.c b/gladeui/glade-base-editor.c
index 40a2b90..4a5096d 100644
--- a/gladeui/glade-base-editor.c
+++ b/gladeui/glade-base-editor.c
@@ -316,13 +316,28 @@ glade_base_editor_get_child_selected (GladeBaseEditor *e, GtkTreeIter *iter)
 	return gtk_tree_selection_get_selected (sel, NULL, iter);
 }
 
+/* Forward declaration for glade_base_editor_project_widget_name_changed */
+static void
+glade_base_editor_project_widget_name_changed (GladeProject *project,
+					       GladeWidget  *widget,
+					       GladeBaseEditor *editor);
+
 static void
 glade_base_editor_name_activate (GtkEntry *entry, GladeWidget *gchild)
 {
 	const gchar *text = gtk_entry_get_text (GTK_ENTRY (entry));
-	
+	GladeBaseEditor *editor = g_object_get_data (G_OBJECT (entry), "editor");
+
 	if (strcmp (glade_widget_get_name (gchild), text))
+	{
+		g_signal_handlers_block_by_func (gchild->project,
+						 glade_base_editor_project_widget_name_changed,
+						 editor);
 		glade_command_set_name (gchild, text);
+		g_signal_handlers_unblock_by_func (gchild->project,
+						   glade_base_editor_project_widget_name_changed,
+						   editor);
+	}
 }
 
 static gboolean
@@ -1976,7 +1991,9 @@ glade_base_editor_add_default_properties (GladeBaseEditor *editor,
 	
 	entry = gtk_entry_new ();
 	gtk_entry_set_text (GTK_ENTRY (entry), glade_widget_get_name (gchild));
+	g_object_set_data (G_OBJECT (entry), "editor", editor);
 	g_signal_connect (entry, "activate", G_CALLBACK (glade_base_editor_name_activate), gchild);
+	g_signal_connect (entry, "changed", G_CALLBACK (glade_base_editor_name_activate), gchild);
 	g_signal_connect (entry, "focus-out-event", G_CALLBACK (glade_base_editor_name_focus_out), gchild);
 	glade_base_editor_table_attach (editor, label, entry);

