Index: src/totem-uri.c
===================================================================
--- src/totem-uri.c	(revision 5837)
+++ src/totem-uri.c	(working copy)
@@ -170,7 +170,7 @@
 	return ret;
 }
 
-static gboolean
+gboolean
 totem_is_special_mrl (const char *uri)
 {
 	GMount *mount;
Index: src/totem-uri.h
===================================================================
--- src/totem-uri.h	(revision 5837)
+++ src/totem-uri.h	(working copy)
@@ -35,6 +35,7 @@
 char *		totem_create_full_path		(const char *path);
 GMount *	totem_get_mount_for_media	(const char *uri);
 gboolean	totem_playing_dvd		(const char *uri);
+gboolean	totem_is_special_mrl		(const char *uri);
 gboolean	totem_is_block_device		(const char *uri);
 void		totem_setup_file_monitoring	(Totem *totem);
 void		totem_setup_file_filters	(void);
Index: src/totem-playlist.c
===================================================================
--- src/totem-playlist.c	(revision 5843)
+++ src/totem-playlist.c	(working copy)
@@ -261,6 +261,68 @@
 	gtk_widget_show (error_dialog);
 }
 
+void
+totem_playlist_select_subtitle_dialog(TotemPlaylist *playlist, TotemPlaylistSelectDialog mode)
+{
+	char *subtitle, *current, *path;
+	GFile *file, *dir;
+	TotemPlaylistStatus playing;
+	GtkTreeIter iter;
+
+	if (mode == TOTEM_PLAYLIST_DIALOG_PLAYING) {
+		/* user want change subtitles in to the current playing movie */
+		gtk_tree_model_get_iter (playlist->priv->model, &iter, playlist->priv->current);
+	} else if (mode == TOTEM_PLAYLIST_DIALOG_SELECTED) {
+		/* user want change subtitles in to the specified playlist position */
+		GList *l = gtk_tree_selection_get_selected_rows (playlist->priv->selection, NULL);
+		gtk_tree_model_get_iter (playlist->priv->model, &iter, l->data);
+		g_list_foreach (l, (GFunc) gtk_tree_path_free, NULL);
+		g_list_free (l);
+	} else {
+		g_assert_not_reached ();
+	}
+
+	/* Look for the directory of the current movie */
+	gtk_tree_model_get (playlist->priv->model, &iter,
+			    FILENAME_COL, &current,
+			    -1);
+
+	if (current == NULL)
+		return;
+
+	path = NULL;
+	file = g_file_new_for_commandline_arg (current);
+	dir = g_file_get_parent (file);
+	g_object_unref (file);
+	if (dir != NULL) {
+		path = g_file_get_path (dir);
+		g_object_unref (dir);
+	}
+
+	subtitle = totem_add_subtitle (totem_playlist_get_toplevel (playlist), path);
+	g_free (path);
+
+	if (subtitle == NULL)
+		return;
+
+	gtk_tree_model_get (playlist->priv->model, &iter,
+			    PLAYING_COL, &playing,
+			    -1);
+
+	gtk_list_store_set (GTK_LIST_STORE(playlist->priv->model), &iter, 
+			    SUBTITLE_URI_COL, subtitle,
+			    -1);
+
+	if (playing != TOTEM_PLAYLIST_STATUS_NONE) {
+		g_signal_emit (G_OBJECT (playlist),
+			       totem_playlist_table_signals[SUBTITLE_CHANGED], 0,
+			       NULL);
+	}
+
+	g_free(subtitle);
+}
+
+
 /* This one returns a new string, in UTF8 even if the MRL is encoded
  * in the locale's encoding
  */
@@ -471,55 +533,7 @@
 void
 playlist_select_subtitle_action_callback (GtkAction *action, TotemPlaylist *playlist)
 {
-	char *subtitle, *current, *path;
-	GList *l;
-	GFile *file, *dir;
-	TotemPlaylistStatus playing;
-	GtkTreeIter iter;
-
-	l = gtk_tree_selection_get_selected_rows (playlist->priv->selection, NULL);
-	gtk_tree_model_get_iter (playlist->priv->model, &iter, l->data);
-	g_list_foreach (l, (GFunc) gtk_tree_path_free, NULL);
-	g_list_free (l);
-
-	/* Look for the directory of the current movie */
-	gtk_tree_model_get (playlist->priv->model, &iter,
-			    FILENAME_COL, &current,
-			    -1);
-
-	if (current == NULL)
-		return;
-
-	path = NULL;
-	file = g_file_new_for_commandline_arg (current);
-	dir = g_file_get_parent (file);
-	g_object_unref (file);
-	if (dir != NULL) {
-		path = g_file_get_path (dir);
-		g_object_unref (dir);
-	}
-
-	subtitle = totem_add_subtitle (totem_playlist_get_toplevel (playlist), path);
-	g_free (path);
-
-	if (subtitle == NULL)
-		return;
-
-	gtk_tree_model_get (playlist->priv->model, &iter,
-			    PLAYING_COL, &playing,
-			    -1);
-
-	gtk_list_store_set (GTK_LIST_STORE(playlist->priv->model), &iter, 
-			    SUBTITLE_URI_COL, subtitle,
-			    -1);
-
-	if (playing != TOTEM_PLAYLIST_STATUS_NONE) {
-		g_signal_emit (G_OBJECT (playlist),
-			       totem_playlist_table_signals[SUBTITLE_CHANGED], 0,
-			       NULL);
-	}
-
-	g_free(subtitle);
+	totem_playlist_select_subtitle_dialog (playlist, TOTEM_PLAYLIST_DIALOG_SELECTED);
 }
 
 void
Index: src/totem-playlist.h
===================================================================
--- src/totem-playlist.h	(revision 5839)
+++ src/totem-playlist.h	(working copy)
@@ -46,6 +46,12 @@
 	TOTEM_PLAYLIST_DIRECTION_PREVIOUS
 } TotemPlaylistDirection;
 
+typedef enum {
+	TOTEM_PLAYLIST_DIALOG_SELECTED,
+	TOTEM_PLAYLIST_DIALOG_PLAYING
+} TotemPlaylistSelectDialog;
+
+
 typedef struct TotemPlaylist	       TotemPlaylist;
 typedef struct TotemPlaylistClass      TotemPlaylistClass;
 typedef struct TotemPlaylistPrivate    TotemPlaylistPrivate;
@@ -92,6 +98,7 @@
 					   const char *output);
 void totem_playlist_save_current_playlist_ext (TotemPlaylist *playlist,
 					   const char *output, TotemPlParserType type);
+void totem_playlist_select_subtitle_dialog(TotemPlaylist *playlist, TotemPlaylistSelectDialog mode);
 
 /* totem_playlist_clear doesn't emit the current_removed signal, even if it does
  * because the caller should know what to do after it's done with clearing */
Index: src/totem-menu.c
===================================================================
--- src/totem-menu.c	(revision 5837)
+++ src/totem-menu.c	(working copy)
@@ -73,6 +73,7 @@
 void show_controls_action_callback (GtkToggleAction *action, Totem *totem);
 void show_sidebar_action_callback (GtkToggleAction *action, Totem *totem);
 void aspect_ratio_changed_callback (GtkRadioAction *action, GtkRadioAction *current, Totem *totem);
+void select_subtitle_action_callback (GtkAction *action, Totem *totem);
 void clear_playlist_action_callback (GtkAction *action, Totem *totem);
 
 /* Helper function to escape underscores in labels
@@ -1071,6 +1072,13 @@
 }
 
 void
+select_subtitle_action_callback (GtkAction *action, Totem *totem)
+{
+	totem_playlist_select_subtitle_dialog (totem->playlist,
+					       TOTEM_PLAYLIST_DIALOG_PLAYING);
+} 
+
+void
 next_angle_action_callback (GtkAction *action, Totem *totem)
 {
 	totem_action_next_angle (totem);
Index: src/totem.c
===================================================================
--- src/totem.c	(revision 5843)
+++ src/totem.c	(working copy)
@@ -1093,6 +1093,9 @@
 		/* Clear the playlist */
 		totem_action_set_sensitivity ("clear-playlist", FALSE);
 
+		/* Subtitle selection */
+		totem_action_set_sensitivity ("select-subtitle", FALSE);
+
 		/* Set the logo */
 		bacon_video_widget_set_logo_mode (totem->bvw, TRUE);
 		update_mrl_label (totem, NULL);
@@ -1132,6 +1135,9 @@
 		/* Clear the playlist */
 		totem_action_set_sensitivity ("clear-playlist", retval);
 
+		/* Subtitle selection */
+		totem_action_set_sensitivity ("select-subtitle", !totem_is_special_mrl (mrl) && retval);
+	
 		/* Set the playlist */
 		play_pause_set_label (totem, retval ? STATE_PAUSED : STATE_STOPPED);
 
Index: data/totem.ui
===================================================================
--- data/totem.ui	(revision 5837)
+++ data/totem.ui	(working copy)
@@ -352,8 +352,14 @@
                <property name="value">4</property>
             </object>
          </child>
-
          <child>
+            <object class="GtkAction" id="select-subtitle">
+               <property name="label" translatable="yes">_Select Text Subtitles...</property>
+               <property name="tooltip" translatable="yes">Select a file to use for text subtitles</property>
+               <signal name="activate" handler="select_subtitle_action_callback"/>
+            </object>
+         </child>
+         <child>
             <object class="GtkAction" id="subtitles-menu">
                <property name="label" translatable="yes">S_ubtitles</property>
                <property name="hide-if-empty">False</property>
@@ -470,6 +476,7 @@
             <menuitem name="deinterlace" action="deinterlace"/>
             <menuitem name="next-angle" action="next-angle"/>
             <menuitem name="show-controls" action="show-controls"/>
+            <menuitem name="select-subtitle" action="select-subtitle"/>
             <menu name="subtitles" action="subtitles-menu">
                <placeholder name="placeholder"/>
             </menu>
@@ -509,6 +516,7 @@
          <menuitem name="skip-backwards" action="skip-backwards"/>
          <menuitem name="show-controls" action="show-controls"/>
          <menuitem name="fullscreen" action="fullscreen"/>
+         <menuitem name="select-subtitle" action="select-subtitle"/>
          <separator/>
          <menu name="popup-languages" action="languages-menu">
             <placeholder name="placeholder"/>
