diff --git a/gedit/gedit-commands-file.c b/gedit/gedit-commands-file.c
index f554db1..537c47d 100644
--- a/gedit/gedit-commands-file.c
+++ b/gedit/gedit-commands-file.c
@@ -498,8 +498,6 @@ _gedit_cmd_file_open (GtkAction   *action,
 }
 
 /* File saving */
-static void file_save_as (GeditTab    *tab,
-			  GeditWindow *window);
 
 static gboolean
 is_read_only (GFile *location)
@@ -791,7 +789,7 @@ save_next_tab:
 		}
 
 		gedit_window_set_active_tab (window, tab);
-		file_save_as (tab, window);
+		_gedit_cmd_file_save_as (tab, window);
 	}
 }
 
@@ -827,9 +825,9 @@ confirm_overwrite_callback (GtkFileChooser *dialog,
 	return res;
 }
 
-static void
-file_save_as (GeditTab    *tab,
-	      GeditWindow *window)
+void
+_gedit_cmd_file_save_as (GeditTab    *tab,
+                         GeditWindow *window)
 {
 	GtkWidget *save_dialog;
 	GtkWindowGroup *wg;
@@ -928,9 +926,9 @@ file_save_as (GeditTab    *tab,
 	gtk_widget_show (save_dialog);
 }
 
-static void
-file_save (GeditTab    *tab,
-	   GeditWindow *window)
+void
+_gedit_cmd_file_save (GeditTab    *tab,
+                      GeditWindow *window)
 {
 	GeditDocument *doc;
 	gchar *uri_for_display;
@@ -948,8 +946,8 @@ file_save (GeditTab    *tab,
 	{
 		gedit_debug_message (DEBUG_COMMANDS, "Untitled or Readonly");
 
-		file_save_as (tab, window);
-		
+		_gedit_cmd_file_save_as (tab, window);
+
 		return;
 	}
 
@@ -965,8 +963,8 @@ file_save (GeditTab    *tab,
 }
 
 void
-_gedit_cmd_file_save (GtkAction   *action,
-		      GeditWindow *window)
+_gedit_cmd_file_save_from_action (GtkAction   *action,
+                                  GeditWindow *window)
 {
 	GeditTab *tab;
 
@@ -976,12 +974,12 @@ _gedit_cmd_file_save (GtkAction   *action,
 	if (tab == NULL)
 		return;
 
-	file_save (tab, window);
+	_gedit_cmd_file_save (tab, window);
 }
 
 void
-_gedit_cmd_file_save_as (GtkAction   *action,
-			 GeditWindow *window)
+_gedit_cmd_file_save_as_from_action (GtkAction   *action,
+                                     GeditWindow *window)
 {
 	GeditTab *tab;
 
@@ -991,7 +989,7 @@ _gedit_cmd_file_save_as (GtkAction   *action,
 	if (tab == NULL)
 		return;
 
-	file_save_as (tab, window);
+	_gedit_cmd_file_save_as (tab, window);
 }
 
 static gboolean
@@ -1058,7 +1056,7 @@ _gedit_cmd_file_save_documents_list (GeditWindow *window,
 			}
 			else
 			{
-				file_save (t, window);			
+				_gedit_cmd_file_save (t, window);
 			}
 		}
 		else
@@ -1113,7 +1111,7 @@ _gedit_cmd_file_save_documents_list (GeditWindow *window,
 		tab = GEDIT_TAB (tabs_to_save_as->data);
 
 		gedit_window_set_active_tab (window, tab);
-		file_save_as (tab, window);
+		_gedit_cmd_file_save_as (tab, window);
 	}
 }
 
@@ -1152,7 +1150,7 @@ gedit_commands_save_document (GeditWindow   *window,
 	gedit_debug (DEBUG_COMMANDS);
 	
 	tab = gedit_tab_get_from_document (document);
-	file_save (tab, window);
+	_gedit_cmd_file_save (tab, window);
 }
 
 /* File revert */
@@ -1452,7 +1450,7 @@ save_and_close (GeditTab    *tab,
 			  G_CALLBACK (tab_state_changed_while_saving),
 			  window);
 
-	file_save (tab, window);
+	_gedit_cmd_file_save (tab, window);
 }
 
 static void
@@ -1472,7 +1470,7 @@ save_as_and_close (GeditTab    *tab,
 			  window);
 
 	gedit_window_set_active_tab (window, tab);
-	file_save_as (tab, window);
+	_gedit_cmd_file_save_as (tab, window);
 }
 
 static void
diff --git a/gedit/gedit-commands.h b/gedit/gedit-commands.h
index 2c820d4..f21af88 100644
--- a/gedit/gedit-commands.h
+++ b/gedit/gedit-commands.h
@@ -73,9 +73,13 @@ void		_gedit_cmd_file_new			(GtkAction   *action,
 							 GeditWindow *window);
 void		_gedit_cmd_file_open			(GtkAction   *action,
 							 GeditWindow *window);
-void		_gedit_cmd_file_save			(GtkAction   *action,
+void		_gedit_cmd_file_save			(GeditTab    *tab,
 							 GeditWindow *window);
-void		_gedit_cmd_file_save_as			(GtkAction   *action,
+void		_gedit_cmd_file_save_as			(GeditTab    *tab,
+							 GeditWindow *window);
+void		_gedit_cmd_file_save_from_action	(GtkAction   *action,
+							 GeditWindow *window);
+void		_gedit_cmd_file_save_as_from_action	(GtkAction   *action,
 							 GeditWindow *window);
 void		_gedit_cmd_file_save_all		(GtkAction   *action,
 							 GeditWindow *window);
@@ -137,8 +141,8 @@ void		_gedit_cmd_search_clear_highlight	(GtkAction   *action,
 void		_gedit_cmd_search_goto_line		(GtkAction   *action,
 							 GeditWindow *window);
 void		_gedit_cmd_search_incremental_search	(GtkAction   *action,
-							 GeditWindow *window);							 
-							 
+							 GeditWindow *window);
+
 void		_gedit_cmd_documents_previous_document	(GtkAction   *action,
 							 GeditWindow *window);
 void		_gedit_cmd_documents_next_document	(GtkAction   *action,
diff --git a/gedit/gedit-marshal.list b/gedit/gedit-marshal.list
index 8ed0c94..d646838 100644
--- a/gedit/gedit-marshal.list
+++ b/gedit/gedit-marshal.list
@@ -3,6 +3,7 @@ BOOLEAN:OBJECT
 VOID:BOOLEAN
 VOID:BOOLEAN,POINTER
 VOID:BOXED,BOXED
+VOID:BOXED,OBJECT
 VOID:OBJECT
 VOID:OBJECT,OBJECT
 VOID:OBJECT,OBJECT,OBJECT,OBJECT
diff --git a/gedit/gedit-multi-notebook.c b/gedit/gedit-multi-notebook.c
index 63c0c6c..af18848 100644
--- a/gedit/gedit-multi-notebook.c
+++ b/gedit/gedit-multi-notebook.c
@@ -205,10 +205,11 @@ gedit_multi_notebook_class_init (GeditMultiNotebookClass *klass)
 			      G_SIGNAL_RUN_FIRST,
 			      G_STRUCT_OFFSET (GeditMultiNotebookClass, show_popup_menu),
 			      NULL, NULL,
-			      g_cclosure_marshal_VOID__BOXED,
+			      gedit_marshal_VOID__BOXED_OBJECT,
 			      G_TYPE_NONE,
-			      1,
-			      GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE);
+			      2,
+			      GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE,
+			      GEDIT_TYPE_TAB);
 
 	g_object_class_install_property (object_class,
 					 PROP_ACTIVE_NOTEBOOK,
@@ -231,9 +232,10 @@ gedit_multi_notebook_class_init (GeditMultiNotebookClass *klass)
 static void
 notebook_show_popup_menu (GtkNotebook        *notebook,
                           GdkEvent           *event,
+                          GeditTab           *tab,
                           GeditMultiNotebook *mnb)
 {
-	g_signal_emit (G_OBJECT (mnb), signals[SHOW_POPUP_MENU], 0, event);
+	g_signal_emit (G_OBJECT (mnb), signals[SHOW_POPUP_MENU], 0, event, tab);
 }
 
 static void 
diff --git a/gedit/gedit-multi-notebook.h b/gedit/gedit-multi-notebook.h
index 255ff4a..d954aad 100644
--- a/gedit/gedit-multi-notebook.h
+++ b/gedit/gedit-multi-notebook.h
@@ -80,7 +80,8 @@ struct _GeditMultiNotebookClass
 						 gint                y);
 	void	(* page_reordered)		(GeditMultiNotebook *mnb);
 	void	(* show_popup_menu)		(GeditMultiNotebook *mnb,
-						 GdkEvent           *event);
+						 GdkEvent           *event,
+						 GeditTab           *tab);
 };
 
 GType			 gedit_multi_notebook_get_type			(void) G_GNUC_CONST;
diff --git a/gedit/gedit-notebook.c b/gedit/gedit-notebook.c
index 031627a..ec924b2 100644
--- a/gedit/gedit-notebook.c
+++ b/gedit/gedit-notebook.c
@@ -49,6 +49,7 @@
 #include "gedit-window.h"
 #include "gedit-enum-types.h"
 #include "gedit-settings.h"
+#include "gedit-marshal.h"
 
 #define GEDIT_NOTEBOOK_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), GEDIT_TYPE_NOTEBOOK, GeditNotebookPrivate))
 
@@ -266,10 +267,11 @@ gedit_notebook_button_press (GtkWidget      *widget,
 		tab_clicked = find_tab_num_at_pos (nb, event->x_root, event->y_root);
 		if (tab_clicked >= 0)
 		{
-			/* switch to the page the mouse is over */
-			gtk_notebook_set_current_page (nb, tab_clicked);
+			GtkWidget *tab;
 
-			g_signal_emit (G_OBJECT (widget), signals[SHOW_POPUP_MENU], 0, event);
+			tab = gtk_notebook_get_nth_page (nb, tab_clicked);
+
+			g_signal_emit (G_OBJECT (widget), signals[SHOW_POPUP_MENU], 0, event, tab);
 
 			return TRUE;
 		}
@@ -535,10 +537,11 @@ gedit_notebook_class_init (GeditNotebookClass *klass)
 			      G_SIGNAL_RUN_FIRST,
 			      G_STRUCT_OFFSET (GeditNotebookClass, show_popup_menu),
 			      NULL, NULL,
-			      g_cclosure_marshal_VOID__BOXED,
+			      gedit_marshal_VOID__BOXED_OBJECT,
 			      G_TYPE_NONE,
-			      1,
-			      GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE);
+			      2,
+			      GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE,
+			      GEDIT_TYPE_TAB);
 
 	g_type_class_add_private (object_class, sizeof (GeditNotebookPrivate));
 }
diff --git a/gedit/gedit-notebook.h b/gedit/gedit-notebook.h
index 9be2e4f..e2765e7 100644
--- a/gedit/gedit-notebook.h
+++ b/gedit/gedit-notebook.h
@@ -90,7 +90,8 @@ struct _GeditNotebookClass
 	void	(* tab_close_request)	(GeditNotebook *notebook,
 					 GeditTab      *tab);
 	void	(* show_popup_menu)	(GeditNotebook *notebook,
-					 GdkEvent      *event);
+					 GdkEvent      *event,
+					 GeditTab      *tab);
 };
 
 /*
diff --git a/gedit/gedit-ui.h b/gedit/gedit-ui.h
index 21d6c16..4f67b17 100644
--- a/gedit/gedit-ui.h
+++ b/gedit/gedit-ui.h
@@ -74,9 +74,9 @@ static const GtkActionEntry gedit_menu_entries[] =
 {
 	/* File menu */
 	{ "FileSave", GTK_STOCK_SAVE, NULL, "<control>S",
-	  N_("Save the current file"), G_CALLBACK (_gedit_cmd_file_save) },
+	  N_("Save the current file"), G_CALLBACK (_gedit_cmd_file_save_from_action) },
 	{ "FileSaveAs", GTK_STOCK_SAVE_AS, N_("Save _As..."), "<shift><control>S",
-	  N_("Save the current file with a different name"), G_CALLBACK (_gedit_cmd_file_save_as) },
+	  N_("Save the current file with a different name"), G_CALLBACK (_gedit_cmd_file_save_as_from_action) },
 	{ "FileRevert", GTK_STOCK_REVERT_TO_SAVED, NULL, NULL,
 	  N_("Revert to a saved version of the file"), G_CALLBACK (_gedit_cmd_file_revert) },
 	{ "FilePrintPreview", GTK_STOCK_PRINT_PREVIEW, N_("Print Previe_w"),"<control><shift>P",
diff --git a/gedit/gedit-ui.xml b/gedit/gedit-ui.xml
index e8ff81c..2569172 100644
--- a/gedit/gedit-ui.xml
+++ b/gedit/gedit-ui.xml
@@ -191,17 +191,4 @@
     <toolitem action="LeaveFullscreen"/>
   </toolbar>
 
-  <popup name="NotebookPopup" action="NotebookPopupAction">
-    <menuitem action="DocumentsMoveToNewWindow"/>
-    <separator/>
-    <menuitem action="FileSave"/>
-    <menuitem action="FileSaveAs"/>
-    <separator/>
-    <menuitem action="FilePrint"/>
-    <separator/>
-    <placeholder name="NotebookPupupOps_1"/>   
-    <separator/>
-    <menuitem name="FileCloseMenu" action="FileClose"/>
-  </popup>
-
 </ui>
diff --git a/gedit/gedit-window.c b/gedit/gedit-window.c
index 53c70b6..b5e3d74 100644
--- a/gedit/gedit-window.c
+++ b/gedit/gedit-window.c
@@ -70,6 +70,7 @@
 #define TAB_WIDTH_DATA "GeditWindowTabWidthData"
 #define LANGUAGE_DATA "GeditWindowLanguageData"
 #define FULLSCREEN_ANIMATION_SPEED 4
+#define GEDIT_WINDOW_TAB_MENU_DATA "gedit-window-tab-menu-data"
 
 #define GEDIT_WINDOW_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object),\
 					 GEDIT_TYPE_WINDOW,                    \
@@ -3781,17 +3782,132 @@ on_tab_close_request (GeditMultiNotebook *multi,
 }
 
 static void
+on_move_to_new_window_menuitem_activate (GtkMenuItem *menuitem,
+                                         GeditWindow *window)
+{
+	GeditTab *tab;
+
+	tab = g_object_get_data (G_OBJECT (menuitem), GEDIT_WINDOW_TAB_MENU_DATA);
+
+	_gedit_window_move_tab_to_new_window (window, tab);
+}
+
+static void
+on_file_save_menuitem_activate (GtkMenuItem *menuitem,
+                                   GeditWindow *window)
+{
+	GeditTab *tab;
+
+	tab = g_object_get_data (G_OBJECT (menuitem), GEDIT_WINDOW_TAB_MENU_DATA);
+
+	_gedit_cmd_file_save (tab, window);
+}
+
+static void
+on_file_save_as_menuitem_activate (GtkMenuItem *menuitem,
+                                   GeditWindow *window)
+{
+	GeditTab *tab;
+
+	tab = g_object_get_data (G_OBJECT (menuitem), GEDIT_WINDOW_TAB_MENU_DATA);
+
+	_gedit_cmd_file_save_as (tab, window);
+}
+
+static void
+on_file_print_menuitem_activate (GtkMenuItem *menuitem,
+                                 GeditWindow *window)
+{
+	GeditTab *tab;
+
+	tab = g_object_get_data (G_OBJECT (menuitem), GEDIT_WINDOW_TAB_MENU_DATA);
+
+	_gedit_tab_print (tab);
+}
+
+static void
+on_file_close_menuitem_activate (GtkMenuItem *menuitem,
+                                 GeditWindow *window)
+{
+	GeditTab *tab;
+
+	tab = g_object_get_data (G_OBJECT (menuitem), GEDIT_WINDOW_TAB_MENU_DATA);
+
+	_gedit_cmd_file_close_tab (tab, window);
+}
+
+static void
 on_show_popup_menu (GeditMultiNotebook *multi,
-		    GdkEventButton     *event,
-		    GeditWindow        *window)
+                    GdkEventButton     *event,
+                    GeditTab           *tab,
+                    GeditWindow        *window)
 {
 	GtkWidget *menu;
+	GtkWidget *menu_item;
+	GtkWidget *image;
 
 	if (event == NULL)
 		return;
 
-	menu = gtk_ui_manager_get_widget (window->priv->manager, "/NotebookPopup");
-	g_return_if_fail (menu != NULL);
+	menu = gtk_menu_new ();
+	gtk_widget_show (menu);
+
+	/* Keep in sync with the respective GtkActions */
+	menu_item = gtk_menu_item_new_with_mnemonic (_("_Move to New Window"));
+	g_object_set_data (G_OBJECT (menu_item), GEDIT_WINDOW_TAB_MENU_DATA, tab);
+	g_signal_connect (menu_item, "activate",
+	                  G_CALLBACK (on_move_to_new_window_menuitem_activate),
+	                  window);
+	gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item);
+	gtk_widget_show (menu_item);
+
+	menu_item = gtk_separator_menu_item_new ();
+	gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item);
+	gtk_widget_show (menu_item);
+
+	menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_SAVE, NULL);
+	g_object_set_data (G_OBJECT (menu_item), GEDIT_WINDOW_TAB_MENU_DATA, tab);
+	g_signal_connect (menu_item, "activate",
+	                  G_CALLBACK (on_file_save_menuitem_activate),
+	                  window);
+	gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item);
+	gtk_widget_show (menu_item);
+
+	menu_item = gtk_image_menu_item_new_with_mnemonic (_("Save _As..."));
+	g_object_set_data (G_OBJECT (menu_item), GEDIT_WINDOW_TAB_MENU_DATA, tab);
+	image = gtk_image_new_from_stock (GTK_STOCK_SAVE_AS, GTK_ICON_SIZE_MENU);
+	gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image);
+	g_signal_connect (menu_item, "activate",
+	                  G_CALLBACK (on_file_save_as_menuitem_activate),
+	                  window);
+	gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item);
+	gtk_widget_show (menu_item);
+
+	menu_item = gtk_separator_menu_item_new ();
+	gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item);
+	gtk_widget_show (menu_item);
+
+	menu_item = gtk_image_menu_item_new_with_mnemonic (_("_Print..."));
+	g_object_set_data (G_OBJECT (menu_item), GEDIT_WINDOW_TAB_MENU_DATA, tab);
+	image = gtk_image_new_from_stock (GTK_STOCK_PRINT, GTK_ICON_SIZE_MENU);
+	gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image);
+	g_signal_connect (menu_item, "activate",
+	                  G_CALLBACK (on_file_print_menuitem_activate),
+	                  window);
+	gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item);
+	gtk_widget_show (menu_item);
+
+	menu_item = gtk_separator_menu_item_new ();
+	gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item);
+	gtk_widget_show (menu_item);
+
+	menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_CLOSE, NULL);
+	g_object_set_data (G_OBJECT (menu_item), GEDIT_WINDOW_TAB_MENU_DATA, tab);
+	g_signal_connect (menu_item, "activate",
+	                  G_CALLBACK (on_file_close_menuitem_activate),
+	                  window);
+	gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item);
+	gtk_widget_show (menu_item);
 
 	gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
 			NULL, NULL,
