diff -uNr termit-1.1.3.orig/src/configs.c termit-1.1.3/src/configs.c
--- termit-1.1.3.orig/src/configs.c	2008-02-06 21:04:42.000000000 +0800
+++ termit-1.1.3/src/configs.c	2008-02-24 04:21:38.000000000 +0800
@@ -10,6 +10,10 @@
 static gchar *default_font = "Monospace 10";
 static gint scrollback_lines = 4096;
 static gchar *default_word_chars = "-A-Za-z0-9,./?%&#:_~";
+static gint default_geometry_x = 0;
+static gint default_geometry_y = 0;
+static gint default_geometry_cols = 80;
+static gint default_geometry_rows = 24;
 
 /**
  * print error message, free GError
@@ -81,6 +85,24 @@
         config_error(&error);
 
     TRACE_NUM(configs.enc_length);
+    
+    value = g_key_file_get_value(keyfile, "termit", "geometry", &error);
+    if (!value)
+    {
+	configs.geometry_x = default_geometry_x;
+	configs.geometry_y = default_geometry_y;
+	configs.geometry_rows = default_geometry_rows;
+	configs.geometry_cols = default_geometry_cols;
+    }
+    else
+    {
+	XParseGeometry ( value, &configs.geometry_x, &configs.geometry_y, &configs.geometry_cols, &configs.geometry_rows);
+	if ( configs.geometry_cols == 0 || configs.geometry_rows == 0 )
+	{
+	    configs.geometry_x = default_geometry_x;
+	    configs.geometry_y = default_geometry_y;
+	}
+    }
 }
 
 static void set_termit_options()
diff -uNr termit-1.1.3.orig/src/configs.h termit-1.1.3/src/configs.h
--- termit-1.1.3.orig/src/configs.h	2008-02-06 21:04:42.000000000 +0800
+++ termit-1.1.3/src/configs.h	2008-02-24 04:21:38.000000000 +0800
@@ -10,6 +10,10 @@
     gchar *default_word_chars;
     gchar **encodings;
     gint enc_length;
+    gint geometry_x;
+    gint geometry_y;
+    gint geometry_cols;
+    gint geometry_rows;
     GArray *bookmarks;
 };
 struct Bookmark
diff -uNr termit-1.1.3.orig/src/termit.c termit-1.1.3/src/termit.c
--- termit-1.1.3.orig/src/termit.c	2008-02-06 21:04:42.000000000 +0800
+++ termit-1.1.3/src/termit.c	2008-02-24 19:36:12.000000000 +0800
@@ -226,6 +226,7 @@
     
     termit.font = pango_font_description_from_string(configs.default_font);
     termit_set_font();
+    termit_set_vte_init_size();
 }
 
 int main(int argc, char **argv)
diff -uNr termit-1.1.3.orig/src/utils.c termit-1.1.3/src/utils.c
--- termit-1.1.3.orig/src/utils.c	2008-02-06 21:04:42.000000000 +0800
+++ termit-1.1.3/src/utils.c	2008-02-24 19:39:02.000000000 +0800
@@ -68,31 +68,71 @@
 
 }
 
+void termit_set_vte_init_size()
+{
+	struct TermitTab tab;
+        tab = g_array_index(termit.tabs, struct TermitTab, 0);
+        vte_terminal_set_size(tab.vte, configs.geometry_cols, configs.geometry_rows);
+}
+
 void termit_set_font()
 {
-    gint page_num = gtk_notebook_get_n_pages(GTK_NOTEBOOK(termit.notebook));
     struct TermitTab tab;
-    gint minWidth = 0, minHeight = 0;
-    /* Set the font for all tabs */
-    int i=0;
-    for (i=0; i<page_num; i++)
+
+    if (!GTK_WIDGET_MAPPED(termit.main_window))
     {
-        tab = g_array_index(termit.tabs, struct TermitTab, i);	
+        tab = g_array_index(termit.tabs, struct TermitTab, 0);
         vte_terminal_set_font(VTE_TERMINAL(tab.vte), termit.font);
-        minWidth = vte_terminal_get_char_width(VTE_TERMINAL(tab.vte))*80;
-        minHeight = vte_terminal_get_char_height(VTE_TERMINAL(tab.vte))*24;
     }
-    gint oldWidth, oldHeight;
-    gtk_window_get_size(GTK_WINDOW(termit.main_window), &oldWidth, &oldHeight);
-    
-    gint width = (minWidth > oldWidth) ? minWidth : oldWidth;
-    gint height = (minHeight > oldHeight) ? minHeight : oldHeight;
-    gtk_window_resize(GTK_WINDOW(termit.main_window), width, height);
-
-    GdkGeometry geom;
-    geom.min_width = minWidth;
-    geom.min_height = minHeight;
-    gtk_window_set_geometry_hints(GTK_WINDOW(termit.main_window), termit.main_window, &geom, GDK_HINT_MIN_SIZE);
+    else
+    {
+	struct TermitTab tab;
+        gint page_num = gtk_notebook_get_n_pages(GTK_NOTEBOOK(termit.notebook));
+
+        // Get original vte window size
+	gint xpad=0, ypad=0, OldVteWidth, OldVteHeight;
+	tab = g_array_index(termit.tabs, struct TermitTab, 0);
+
+	vte_terminal_get_padding(VTE_TERMINAL(tab.vte), &xpad, &ypad);
+	OldVteWidth = vte_terminal_get_char_width(VTE_TERMINAL(tab.vte)) * configs.geometry_cols + xpad;
+	OldVteHeight = vte_terminal_get_char_height(VTE_TERMINAL(tab.vte)) * configs.geometry_rows + ypad;
+
+        // Get original main window size
+        gint oldWinWidth, oldWinHeight;
+        gtk_window_get_size(GTK_WINDOW(termit.main_window), &oldWinWidth, &oldWinHeight);        
+
+        /* Set the font for all tabs */
+        int i=0;
+        for (i=0; i<page_num; i++)
+        {
+            tab = g_array_index(termit.tabs, struct TermitTab, i);
+            vte_terminal_set_font(VTE_TERMINAL(tab.vte), termit.font);
+        }
+
+	// Get new vte window size
+        gint NewVteWidth, NewVteHeight;
+        vte_terminal_get_padding(VTE_TERMINAL(tab.vte), &xpad, &ypad);
+        NewVteWidth = vte_terminal_get_char_width(VTE_TERMINAL(tab.vte)) * configs.geometry_cols + xpad;
+        NewVteHeight = vte_terminal_get_char_height(VTE_TERMINAL(tab.vte)) * configs.geometry_rows + ypad;	
+
+        // Fix the window size
+        gtk_window_resize(GTK_WINDOW(termit.main_window), 
+            oldWinWidth - OldVteWidth + NewVteWidth,
+	    oldWinHeight - OldVteHeight + NewVteHeight);
+
+        GdkGeometry geom;
+        geom.min_width = oldWinWidth - OldVteWidth + NewVteWidth;
+        geom.min_height = oldWinHeight - OldVteHeight + NewVteHeight;
+        gtk_window_set_geometry_hints(GTK_WINDOW(termit.main_window), termit.main_window, &geom, GDK_HINT_MIN_SIZE);
+    }
 }
 
 void termit_set_statusbar_encoding(gint page)
