diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index a92e670..16b7f2a 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -2468,6 +2468,7 @@ gtk_entry_dispose (GObject *object)
   gtk_entry_set_icon_tooltip_markup (entry, GTK_ENTRY_ICON_PRIMARY, NULL);
   gtk_entry_set_icon_from_pixbuf (entry, GTK_ENTRY_ICON_SECONDARY, NULL);
   gtk_entry_set_icon_tooltip_markup (entry, GTK_ENTRY_ICON_SECONDARY, NULL);
+  gtk_entry_set_buffer (entry, NULL);
 
   G_OBJECT_CLASS (gtk_entry_parent_class)->dispose (object);
 }
@@ -2510,11 +2511,6 @@ gtk_entry_finalize (GObject *object)
 
   g_free (priv->im_module);
 
-  /* COMPAT: entry->text is a deprecated field, and the allocation 
-     is owned by the buffer. */
-
-  gtk_entry_set_buffer (entry, NULL);
-
   G_OBJECT_CLASS (gtk_entry_parent_class)->finalize (object);
 }
 
@@ -6692,9 +6688,6 @@ gtk_entry_set_buffer (GtkEntry       *entry,
     {
        buffer_connect_signals (entry);
 
-       gtk_editable_set_position (GTK_EDITABLE (entry), 0);
-       gtk_entry_recompute (entry);
-
       /* COMPAT: Deprecated. Not used. Setting these fields no longer necessary in GTK 3.x */
       entry->text = (char*)gtk_entry_buffer_get_text (priv->buffer);
       entry->text_length = gtk_entry_buffer_get_length (priv->buffer);
@@ -6711,6 +6704,9 @@ gtk_entry_set_buffer (GtkEntry       *entry,
   g_object_notify (obj, "invisible-char");
   g_object_notify (obj, "invisible-char-set");
   g_object_thaw_notify (obj);
+
+  gtk_editable_set_position (GTK_EDITABLE (entry), 0);
+  gtk_entry_recompute (entry);
 }
 
 /**
