diff -urN totem-2.18.3/data/totem-ui.xml totem-2.18.3.patched/data/totem-ui.xml
--- totem-2.18.3/data/totem-ui.xml	2007-03-26 02:50:06.000000000 +0200
+++ totem-2.18.3.patched/data/totem-ui.xml	2007-09-16 13:50:26.010415721 +0200
@@ -3,6 +3,7 @@
 		<menu name="movie" action="movie-menu">
 			<menuitem name="open" action="open"/>
 			<menuitem name="open-location" action="open-location"/>
+			<menuitem name="save-copy" action="save-copy"/>
 			<placeholder name="devices-placeholder"/>
 			<separator name="recent-separator"/>
 			<placeholder name="recent-placeholder"/>
diff -urN totem-2.18.3/src/totem.c totem-2.18.3.patched/src/totem.c
--- totem-2.18.3/src/totem.c	2007-06-01 12:40:00.000000000 +0200
+++ totem-2.18.3.patched/src/totem.c	2007-09-16 14:22:33.498306550 +0200
@@ -747,6 +747,19 @@
 	return (match != NULL);
 }
 
+/* XXX miek */
+void
+totem_action_save_copy (Totem *totem)
+{
+	gchar *file_name;
+
+	file_name = totem_save_file ( GTK_WINDOW (totem->win));
+	printf("Filename %s\n", file_name);
+	/* now to actually save the stream */
+
+	return;
+}
+
 void
 totem_action_open_location (Totem *totem)
 {
diff -urN totem-2.18.3/src/totem-menu.c totem-2.18.3.patched/src/totem-menu.c
--- totem-2.18.3/src/totem-menu.c	2007-06-28 18:46:17.000000000 +0200
+++ totem-2.18.3.patched/src/totem-menu.c	2007-09-16 13:57:36.018835964 +0200
@@ -861,6 +861,12 @@
 }
 
 static void
+save_copy_action_callback (GtkAction *action, Totem *totem)
+{
+    totem_action_save_copy (totem);
+}
+
+static void
 open_location_action_callback (GtkAction *action, Totem *totem)
 {
 	totem_action_open_location (totem);
@@ -1155,6 +1161,7 @@
 static const GtkActionEntry entries[] = {
 	{ "movie-menu", NULL, N_("_Movie") },
 	{ "open", GTK_STOCK_OPEN, N_("_Open..."), "<control>O", N_("Open a file"), G_CALLBACK (open_action_callback) },
+	{ "save-copy", GTK_STOCK_SAVE_AS, N_("Save a _Copy..."), "s", N_("Save a local copy"), G_CALLBACK (save_copy_action_callback) },
 	{ "open-location", NULL, N_("Open _Location..."), "<control>L", N_("Open a non-local file"), G_CALLBACK (open_location_action_callback) },
 	{ "eject", "media-eject", N_("_Eject"), "<control>E", NULL, G_CALLBACK (eject_action_callback) },
 	{ "properties", GTK_STOCK_PROPERTIES, N_("_Properties"), "<control>P", NULL, G_CALLBACK (properties_action_callback) },
diff -urN totem-2.18.3/src/totem-private.h totem-2.18.3.patched/src/totem-private.h
--- totem-2.18.3/src/totem-private.h	2007-03-26 02:50:04.000000000 +0200
+++ totem-2.18.3.patched/src/totem-private.h	2007-09-16 11:17:43.590833512 +0200
@@ -188,6 +188,7 @@
 #define ZOOM_OUT_OFFSET -1
 
 void	totem_action_open			(Totem *totem);
+void	totem_action_save_copy			(Totem *totem);
 void	totem_action_open_location		(Totem *totem);
 void	totem_action_eject			(Totem *totem);
 void	totem_action_take_screenshot		(Totem *totem);
diff -urN totem-2.18.3/src/totem-uri.c totem-2.18.3.patched/src/totem-uri.c
--- totem-2.18.3/src/totem-uri.c	2007-03-26 02:50:31.000000000 +0200
+++ totem-2.18.3.patched/src/totem-uri.c	2007-09-16 14:19:42.894928554 +0200
@@ -296,6 +296,42 @@
 	}
 }
 
+gchar *
+totem_save_file (GtkWindow *parent) 
+{
+        GtkWidget *fs;
+	int response;
+        gchar *file_name;
+
+        fs = gtk_file_chooser_dialog_new (
+                _("Save a Copy"),
+                GTK_WINDOW (parent), GTK_FILE_CHOOSER_ACTION_SAVE,
+                GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                GTK_STOCK_SAVE, GTK_RESPONSE_OK,
+                NULL);
+
+	gtk_dialog_set_default_response (GTK_DIALOG (fs), GTK_RESPONSE_ACCEPT);
+	gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (fs), FALSE); /* ?? */
+
+	response = gtk_dialog_run (GTK_DIALOG (fs));
+	gtk_widget_hide (fs);
+	while (gtk_events_pending())
+		gtk_main_iteration();
+
+	if (response != GTK_RESPONSE_OK) {
+		gtk_widget_destroy (fs);
+		return NULL;
+	}
+
+        file_name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (fs));
+	if (file_name == NULL) {
+		gtk_widget_destroy (fs);
+		return NULL;
+	}
+	gtk_widget_destroy (fs);
+	return file_name;
+}
+
 GSList *
 totem_add_files (GtkWindow *parent, const char *path)
 {
diff -urN totem-2.18.3/src/totem-uri.h totem-2.18.3.patched/src/totem-uri.h
--- totem-2.18.3/src/totem-uri.h	2007-03-26 02:50:04.000000000 +0200
+++ totem-2.18.3.patched/src/totem-uri.h	2007-09-16 14:13:29.833031500 +0200
@@ -37,6 +37,7 @@
 void		totem_destroy_file_filters (void);
 char*		totem_uri_get_subtitle_uri (const char *uri);
 char*		totem_uri_escape_for_display (const char *uri);
+gchar*		totem_save_file		(GtkWindow *parent);
 GSList*		totem_add_files		(GtkWindow *parent,
 					 const char *path);
 
