diff --git a/src/terminal-app.c b/src/terminal-app.c
index 6b5fc0e..4f12b8b 100644
--- a/src/terminal-app.c
+++ b/src/terminal-app.c
@@ -1736,32 +1736,38 @@ terminal_app_handle_options (TerminalApp *app,
   for (lw = options->initial_windows;  lw != NULL; lw = lw->next)
     {
       InitialWindow *iw = lw->data;
-      TerminalWindow *window;
+      TerminalWindow *window = NULL;
       GList *lt;
 
       g_assert (iw->tabs);
 
-      /* Create & setup new window */
-      window = terminal_app_new_window (app, gdk_screen);
+      if ( lw == options->initial_windows && ((InitialTab *)iw->tabs->data)->attach_window )
+        window = terminal_app_get_current_window(app, gdk_screen);
 
-      /* Restored windows shouldn't demand attention; see bug #586308. */
-      if (iw->source_tag == SOURCE_SESSION)
-        terminal_window_set_is_restored (window);
-
-      if (options->startup_id != NULL)
-        gtk_window_set_startup_id (GTK_WINDOW (window), options->startup_id);
-
-      /* Overwrite the default, unique window role set in terminal_window_init */
-      if (iw->role)
-        gtk_window_set_role (GTK_WINDOW (window), iw->role);
-
-      if (iw->force_menubar_state)
-        terminal_window_set_menubar_visible (window, iw->menubar_state);
-
-      if (iw->start_fullscreen)
-        gtk_window_fullscreen (GTK_WINDOW (window));
-      if (iw->start_maximized)
-        gtk_window_maximize (GTK_WINDOW (window));
+      if (!window)
+        {
+          /* Create & setup new window */
+          window = terminal_app_new_window (app, gdk_screen);
+ 
+          /* Restored windows shouldn't demand attention; see bug #586308. */
+          if (iw->source_tag == SOURCE_SESSION)
+            terminal_window_set_is_restored (window);
+ 
+          if (options->startup_id != NULL)
+            gtk_window_set_startup_id (GTK_WINDOW (window), options->startup_id);
+ 
+          /* Overwrite the default, unique window role set in terminal_window_init */
+          if (iw->role)
+            gtk_window_set_role (GTK_WINDOW (window), iw->role);
+ 
+          if (iw->force_menubar_state)
+            terminal_window_set_menubar_visible (window, iw->menubar_state);
+ 
+          if (iw->start_fullscreen)
+            gtk_window_fullscreen (GTK_WINDOW (window));
+          if (iw->start_maximized)
+            gtk_window_maximize (GTK_WINDOW (window));
+        }
 
       /* Now add the tabs */
       for (lt = iw->tabs; lt != NULL; lt = lt->next)
@@ -1824,6 +1830,23 @@ terminal_app_handle_options (TerminalApp *app,
   return TRUE;
 }
 
+/* Maintain the window that is to accept tabs as the last in the list */
+static gboolean 
+terminal_app_cur_window_changed (TerminalWindow *window, 
+                                 GdkEventFocus *event,
+                                 TerminalApp *app)
+{
+
+  /* We've lost focus or we're already on top */
+  if(!event->in || window == g_list_last(app->windows)->data)
+    return FALSE;
+
+  app->windows = g_list_remove(app->windows, window);
+  app->windows = g_list_append(app->windows, window);
+
+  return FALSE;
+}
+
 TerminalWindow *
 terminal_app_new_window (TerminalApp *app,
                          GdkScreen *screen)
@@ -1836,6 +1859,9 @@ terminal_app_new_window (TerminalApp *app,
   g_signal_connect (window, "destroy",
                     G_CALLBACK (terminal_window_destroyed), app);
 
+  g_signal_connect (window, "focus-in-event",
+                    G_CALLBACK (terminal_app_cur_window_changed), app);
+
   if (screen)
     gtk_window_set_screen (GTK_WINDOW (window), screen);
 
@@ -1889,13 +1915,33 @@ terminal_app_edit_encodings (TerminalApp     *app,
   terminal_encoding_dialog_show (transient_parent);
 }
 
+/*
+ * Get the current window of the given screen. If the screen is not provided,
+ * or if there is no gnome-terminal window on that screen, then the last used
+ * window is returned.
+ */
 TerminalWindow *
-terminal_app_get_current_window (TerminalApp *app)
+terminal_app_get_current_window (TerminalApp *app, GdkScreen *from_screen)
 {
+  GList *res = NULL;
+
   if (app->windows == NULL)
     return NULL;
 
-  return g_list_last (app->windows)->data;
+  res = g_list_last (app->windows);
+
+  if (from_screen != NULL)
+    {
+      while (res)
+        {
+          if (gtk_window_get_screen(GTK_WINDOW(res->data)) == from_screen)
+            return TERMINAL_WINDOW(res->data);
+
+          res = g_list_previous (res);
+        }
+    }
+
+  return TERMINAL_WINDOW(res->data);
 }
 
 /**
diff --git a/src/terminal-app.h b/src/terminal-app.h
index 1c82f50..95ef843 100644
--- a/src/terminal-app.h
+++ b/src/terminal-app.h
@@ -114,7 +114,7 @@ TerminalScreen *terminal_app_new_terminal (TerminalApp     *app,
                                            char           **child_env,
                                            double           zoom);
 
-TerminalWindow *terminal_app_get_current_window (TerminalApp *app);
+TerminalWindow *terminal_app_get_current_window (TerminalApp *app, GdkScreen *screen);
 
 void terminal_app_manage_profiles (TerminalApp     *app,
                                    GtkWindow       *transient_parent);
diff --git a/src/terminal-options.c b/src/terminal-options.c
index c2cd535..48e1442 100644
--- a/src/terminal-options.c
+++ b/src/terminal-options.c
@@ -51,6 +51,7 @@ initial_tab_new (const char *profile,
   it->zoom = 1.0;
   it->zoom_set = FALSE;
   it->active = FALSE;
+  it->attach_window = FALSE;
 
   return it;
 }
@@ -305,18 +306,22 @@ option_tab_callback (const gchar *option_name,
 {
   TerminalOptions *options = data;
   gboolean is_profile_id;
+  InitialWindow *iw;
+  InitialTab *it;
 
   is_profile_id = g_str_has_suffix (option_name, "-with-profile-internal-id");
 
   if (options->initial_windows)
     {
-      InitialWindow *iw;
-
       iw = g_list_last (options->initial_windows)->data;
       iw->tabs = g_list_append (iw->tabs, initial_tab_new (value, is_profile_id));
     }
   else
-    add_new_window (options, value, is_profile_id);
+    {
+      iw = add_new_window (options, value, is_profile_id);
+      it = g_list_last(iw->tabs)->data;
+      it->attach_window = TRUE;
+    }
 
   return TRUE;
 }
diff --git a/src/terminal-options.h b/src/terminal-options.h
index 59fa065..db45a00 100644
--- a/src/terminal-options.h
+++ b/src/terminal-options.h
@@ -65,6 +65,8 @@ typedef struct
   double zoom;
   guint zoom_set : 1;
   guint active : 1;
+
+  guint attach_window;
 } InitialTab;
 
 typedef struct
