diff --git a/src/gnome-terminal.schemas.in b/src/gnome-terminal.schemas.in
index a7612cf..a402fe6 100644
--- a/src/gnome-terminal.schemas.in
+++ b/src/gnome-terminal.schemas.in
@@ -110,7 +110,20 @@
          </long>
       </locale>
     </schema>
- 
+
+    <schema>
+      <key>/schemas/apps/gnome-terminal/global/tab_position</key>
+      <applyto>/apps/gnome-terminal/global/tab_position</applyto>
+      <owner>gnome-terminal</owner>
+      <type>string</type>
+      <default>top</default>
+      <locale name="C">
+         <short>Position of the tabs</short>
+         <long>
+	   Where to put the tabs. Possible strings are "top" and "bottom".
+         </long>
+      </locale>
+    </schema>
 
 
 
diff --git a/src/terminal-app.c b/src/terminal-app.c
index fdbaf07..e6289dc 100644
--- a/src/terminal-app.c
+++ b/src/terminal-app.c
@@ -94,6 +94,7 @@ struct _TerminalApp
   guint profile_list_notify_id;
   guint default_profile_notify_id;
   guint system_font_notify_id;
+  guint tab_position_notify_id;
   guint enable_mnemonics_notify_id;
   guint enable_menu_accels_notify_id;
 
@@ -106,6 +107,8 @@ struct _TerminalApp
   gboolean enable_mnemonics;
   gboolean enable_menu_accels;
 
+  GtkPositionType tab_position;
+
   gboolean use_factory;
 };
 
@@ -116,6 +119,7 @@ enum
   PROP_ENABLE_MENU_BAR_ACCEL,
   PROP_ENABLE_MNEMONICS,
   PROP_SYSTEM_FONT,
+  PROP_TAB_POSITION
 };
 
 enum
@@ -148,6 +152,8 @@ static TerminalApp *global_app = NULL;
 #define PROFILE_LIST_KEY CONF_GLOBAL_PREFIX "/profile_list"
 #define DEFAULT_PROFILE_KEY CONF_GLOBAL_PREFIX "/default_profile"
 
+#define TAB_POSITION_KEY CONF_GLOBAL_PREFIX "/tab_position"
+
 /* Helper functions */
 
 static GdkScreen*
@@ -907,6 +913,49 @@ terminal_app_system_font_notify_cb (GConfClient *client,
 }
 
 static void
+terminal_app_tab_position_notify_cb (GConfClient *client,
+                                     guint        cnxn_id,
+                                     GConfEntry  *entry,
+                                     gpointer     user_data)
+{
+  TerminalApp *app = TERMINAL_APP (user_data);
+  GtkPositionType position = GTK_POS_TOP;
+  GConfValue *gconf_value;
+  const char *value;
+  GEnumClass *enum_class;
+  GEnumValue *enum_value;
+
+  if (strcmp (gconf_entry_get_key (entry), TAB_POSITION_KEY) != 0)
+    return;
+
+  gconf_value = gconf_entry_get_value (entry);
+  if (!gconf_value || gconf_value->type != GCONF_VALUE_STRING)
+    return;
+
+  value = gconf_value_get_string (gconf_value);
+  if (!value)
+    return;
+
+  enum_class = g_type_class_ref (GTK_TYPE_POSITION_TYPE);
+  enum_value = g_enum_get_value_by_nick (enum_class, value);
+  if (enum_value)
+    position = enum_value->value;
+  g_type_class_unref (enum_class);
+
+  if (position == app->tab_position)
+    return;
+
+  if (position == GTK_POS_LEFT || position == GTK_POS_RIGHT)
+    {
+      g_warning ("Tab position left/right is not supported\n");
+      return;
+    }
+
+  app->tab_position = position;
+  g_object_notify (G_OBJECT (app), TERMINAL_APP_TAB_POSITION);
+}
+
+static void
 terminal_app_enable_mnemonics_notify_cb (GConfClient *client,
                                          guint        cnxn_id,
                                          GConfEntry  *entry,
@@ -1421,6 +1470,8 @@ terminal_app_init (TerminalApp *app)
 {
   global_app = app;
 
+  app->tab_position = GTK_POS_TOP;
+
   app->profiles = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
 
   app->conf = gconf_client_get_default ();
@@ -1449,6 +1500,12 @@ terminal_app_init (TerminalApp *app)
                              terminal_app_system_font_notify_cb,
                              app, NULL, NULL);
 
+  app->tab_position_notify_id =
+    gconf_client_notify_add (app->conf,
+                             TAB_POSITION_KEY,
+                             terminal_app_tab_position_notify_cb,
+                             app, NULL, NULL);
+
   app->enable_mnemonics_notify_id =
     gconf_client_notify_add (app->conf,
                              ENABLE_MNEMONICS_KEY,
@@ -1464,6 +1521,7 @@ terminal_app_init (TerminalApp *app)
   gconf_client_notify (app->conf, PROFILE_LIST_KEY);
   gconf_client_notify (app->conf, DEFAULT_PROFILE_KEY);
   gconf_client_notify (app->conf, MONOSPACE_FONT_KEY);
+  gconf_client_notify (app->conf, TAB_POSITION_KEY);
   gconf_client_notify (app->conf, ENABLE_MENU_BAR_ACCEL_KEY);
   gconf_client_notify (app->conf, ENABLE_MNEMONICS_KEY);
 
@@ -1502,6 +1560,8 @@ terminal_app_finalize (GObject *object)
     gconf_client_notify_remove (app->conf, app->default_profile_notify_id);
   if (app->system_font_notify_id != 0)
     gconf_client_notify_remove (app->conf, app->system_font_notify_id);
+  if (app->tab_position_notify_id != 0)
+    gconf_client_notify_remove (app->conf, app->tab_position_notify_id);
   if (app->enable_menu_accels_notify_id != 0)
     gconf_client_notify_remove (app->conf, app->enable_menu_accels_notify_id);
   if (app->enable_mnemonics_notify_id != 0)
@@ -1551,6 +1611,9 @@ terminal_app_get_property (GObject *object,
       case PROP_DEFAULT_PROFILE:
         g_value_set_object (value, app->default_profile);
         break;
+      case PROP_TAB_POSITION:
+        g_value_set_enum (value, app->tab_position);
+        break;
       default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
         break;
@@ -1577,6 +1640,7 @@ terminal_app_set_property (GObject *object,
         break;
       case PROP_DEFAULT_PROFILE:
       case PROP_SYSTEM_FONT:
+      case PROP_TAB_POSITION:
         /* not writable */
       default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -1634,6 +1698,14 @@ terminal_app_class_init (TerminalAppClass *klass)
 
   g_object_class_install_property
     (object_class,
+     PROP_TAB_POSITION,
+     g_param_spec_enum (TERMINAL_APP_TAB_POSITION, NULL, NULL,
+                        GTK_TYPE_POSITION_TYPE,
+                        GTK_POS_TOP,
+                        G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+
+  g_object_class_install_property
+    (object_class,
      PROP_DEFAULT_PROFILE,
      g_param_spec_object (TERMINAL_APP_DEFAULT_PROFILE, NULL, NULL,
                           TERMINAL_TYPE_PROFILE,
diff --git a/src/terminal-app.h b/src/terminal-app.h
index 440f081..d6f6ccf 100644
--- a/src/terminal-app.h
+++ b/src/terminal-app.h
@@ -39,6 +39,7 @@ G_BEGIN_DECLS
 #define TERMINAL_APP_ENABLE_MENU_BAR_ACCEL  "enable-menu-accels"
 #define TERMINAL_APP_ENABLE_MNEMONICS       "enable-mnemonics"
 #define TERMINAL_APP_SYSTEM_FONT            "system-font"
+#define TERMINAL_APP_TAB_POSITION           "tab-position"
 
 /* TerminalApp */
 
diff --git a/src/terminal-window.c b/src/terminal-window.c
index 91c3005..6debf02 100644
--- a/src/terminal-window.c
+++ b/src/terminal-window.c
@@ -1432,6 +1432,23 @@ terminal_window_profile_list_changed_cb (TerminalApp *app,
 }
 
 static void
+terminal_window_tab_position_notify_cb (TerminalApp *app,
+                                        GParamSpec *pspec,
+                                        TerminalWindow *window)
+{
+  TerminalWindowPrivate *priv = window->priv;
+  int position;
+
+  g_object_get (app, TERMINAL_APP_TAB_POSITION, &position, NULL);
+  gtk_notebook_set_tab_pos (GTK_NOTEBOOK (priv->notebook), position);
+
+  /* If we wanted to support left/right, we would need to iterate over all
+   * tab labels here and change the packing properties, and also
+   * change how they get their size requests.
+   */
+}
+
+static void
 terminal_window_init (TerminalWindow *window)
 {
   const GtkActionEntry menu_entries[] =
@@ -1642,7 +1659,7 @@ terminal_window_init (TerminalWindow *window)
   g_signal_connect_data (priv->notebook, "page-reordered",
                          G_CALLBACK (terminal_window_update_tabs_menu_sensitivity),
                          window, NULL, G_CONNECT_SWAPPED | G_CONNECT_AFTER);
-  
+
   gtk_box_pack_end (GTK_BOX (main_vbox), priv->notebook, TRUE, TRUE, 0);
   gtk_widget_show (priv->notebook);
 
@@ -1704,7 +1721,11 @@ terminal_window_init (TerminalWindow *window)
   terminal_window_profile_list_changed_cb (app, window);
   g_signal_connect (app, "profile-list-changed",
                     G_CALLBACK (terminal_window_profile_list_changed_cb), window);
-  
+
+  terminal_window_tab_position_notify_cb (app, NULL, window);
+  g_signal_connect (app, "notify::" TERMINAL_APP_TAB_POSITION,
+                    G_CALLBACK (terminal_window_tab_position_notify_cb), window);
+
   terminal_window_set_menubar_visible (window, TRUE);
   priv->use_default_menubar_visibility = TRUE;
 
