diff -u gnome-terminal/src/terminal-screen.c gnome-terminal-resize/src/terminal-screen.c
--- gnome-terminal/src/terminal-screen.c	2006-07-08 17:15:22.000000000 -0500
+++ gnome-terminal-resize/src/terminal-screen.c	2006-08-16 11:57:26.000000000 -0500
@@ -244,6 +244,10 @@
       GtkAllocation *allocation)
 {
   GtkWidget *child;
+  GtkAllocation old_allocation;
+
+  old_allocation.width = widget->allocation.width;
+  old_allocation.height = widget->allocation.height;
 
   widget->allocation = *allocation;
 
@@ -251,6 +255,13 @@
   g_assert (child != NULL);
 
   gtk_widget_size_allocate (child, allocation);
+
+  if (old_allocation.width != allocation->width ||
+      old_allocation.height != allocation->height)
+    {
+      GtkWidget *term = TERMINAL_SCREEN (widget)->priv->term;
+      gtk_widget_queue_resize_no_redraw (term);
+    }
 }
 
 static void
diff -u gnome-terminal/src/terminal-window.c gnome-terminal-resize/src/terminal-window.c
--- gnome-terminal/src/terminal-window.c	2006-07-12 09:03:36.000000000 -0500
+++ gnome-terminal-resize/src/terminal-window.c	2006-08-16 12:32:38.000000000 -0500
@@ -154,7 +154,7 @@
                                            const char      *dir);
 static void new_window_callback           (GtkWidget      *menuitem,
                                            TerminalWindow *window);
-static void size_request_callback         (GtkWidget *widget,
+static void size_request_callback         (GtkWidget      *widget,
                                            GtkRequisition *requisition,
                                            TerminalWindow *window);
 static void new_tab_callback              (GtkWidget      *menuitem,
@@ -846,9 +846,9 @@
                     TRUE, TRUE, 0);  
 
   g_signal_connect (G_OBJECT (window->priv->main_vbox),
-                          "size_request",
-                          G_CALLBACK (size_request_callback),
-                          window);
+                    "size_request",
+                    G_CALLBACK (size_request_callback),
+                    window);
 
   mi = append_menuitem (window->priv->menubar,
                         "", NULL,
@@ -1507,28 +1507,11 @@
 terminal_window_set_active (TerminalWindow *window,
                             TerminalScreen *screen)
 {
-  GtkWidget *widget;
   TerminalProfile *profile;
   
   if (window->priv->active_term == screen)
     return;
   
-  /* Workaround to remove gtknotebook's feature of computing its size based on
-   * all pages. When the widget is hidden, its size will not be taken into
-   * account.
-   */
-  if (window->priv->active_term)
-  {
-    GtkWidget *old_widget;
-    old_widget = terminal_screen_get_widget (window->priv->active_term);
-    gtk_widget_hide (old_widget);
-  }
-  
-  widget = terminal_screen_get_widget (screen);
-  
-  /* Make sure that the widget is no longer hidden due to the workaround */
-  gtk_widget_show (widget);
-
   profile = terminal_screen_get_profile (screen);
 
   window->priv->active_term = screen;
@@ -1608,14 +1591,12 @@
   GtkWidget* page_widget;
   TerminalScreen *screen;
   GtkWidget *menu_item;
-  int old_grid_width, old_grid_height;
   GtkWidget *old_widget, *new_widget;
 
   if (window->priv->active_term == NULL)
     return;
 
   old_widget = terminal_screen_get_widget (window->priv->active_term);
-  terminal_widget_get_size (old_widget, &old_grid_width, &old_grid_height);
   
   page_widget = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook),
                                            page_num);
@@ -1626,11 +1607,25 @@
 
   g_assert (screen);
   
-  /* This is so that we maintain the same grid */
+  terminal_window_set_active (window, screen);
+  
   new_widget = terminal_screen_get_widget (screen);
-  terminal_widget_set_size (new_widget, old_grid_width, old_grid_height);
 
-  terminal_window_set_active (window, screen);
+  if (old_widget != new_widget) {
+    int old_grid_width, old_grid_height;
+    /* This is so that we maintain the same grid */
+    terminal_widget_get_size (old_widget, &old_grid_width, &old_grid_height);
+    terminal_widget_set_size (new_widget, old_grid_width, old_grid_height);
+    gtk_widget_queue_resize_no_redraw (new_widget);
+
+    /* Make sure that the widget is no longer hidden due to the workaround */
+    gtk_widget_show (new_widget);
+    /* Workaround to remove gtknotebook's feature of computing its size based on
+     * all pages. When the widget is hidden, its size will not be taken into
+     * account.
+     */
+    gtk_widget_hide (old_widget);
+  }
 
   update_tab_sensitivity (window);
   
@@ -2154,7 +2149,10 @@
              requisition->width, requisition->height);
 #endif
 
-  gtk_window_resize (GTK_WINDOW (window), requisition->width, requisition->height);
+  if (GTK_WIDGET_MAPPED (window)) {
+    gtk_window_resize (GTK_WINDOW (window), requisition->width,
+                       requisition->height);
+  }
   update_geometry (window);
 }
 
