diff -ur totem-svn.orig/data/totem.ui totem-svn/data/totem.ui
--- totem-svn.orig/data/totem.ui	2007-11-26 02:24:16.000000000 +0100
+++ totem-svn/data/totem.ui	2007-11-26 15:33:05.000000000 +0100
@@ -349,7 +349,13 @@
                <property name="value">4</property>
             </object>
          </child>
-
+         <child>
+            <object class="GtkAction" id="select-subtitle">
+               <property name="label" translatable="yes">Select text subtitle</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>
@@ -465,6 +471,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>
diff -ur totem-svn.orig/src/totem.c totem-svn/src/totem.c
--- totem-svn.orig/src/totem.c	2007-11-26 02:24:07.000000000 +0100
+++ totem-svn/src/totem.c	2007-11-26 16:45:26.000000000 +0100
@@ -914,6 +914,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);
@@ -954,6 +957,9 @@
 		/* Clear the playlist */
 		totem_action_set_sensitivity ("clear-playlist", retval);
 
+		/* Subtitle selection */
+		totem_action_set_sensitivity ("select-subtitle", retval);
+
 		/* Set the playlist */
 		play_pause_set_label (totem, retval ? STATE_PAUSED : STATE_STOPPED);
 
diff -ur totem-svn.orig/src/totem-menu.c totem-svn/src/totem-menu.c
--- totem-svn.orig/src/totem-menu.c	2007-11-26 02:24:07.000000000 +0100
+++ totem-svn/src/totem-menu.c	2007-11-26 15:35:05.000000000 +0100
@@ -74,6 +74,7 @@
 void show_sidebar_action_callback (GtkToggleAction *action, Totem *totem);
 void aspect_ratio_changed_callback (GtkRadioAction *action, GtkRadioAction *current, Totem *totem);
 void clear_playlist_action_callback (GtkAction *action, Totem *totem);
+void select_subtitle_action_callback (GtkAction *action, Totem *totem);
 
 /* Helper function to escape underscores in labels
  * before putting them in menu items */
@@ -1005,6 +1006,12 @@
 }
 
 void
+select_subtitle_action_callback (GtkAction *action, Totem *totem)
+{
+	totem_playlist_select_subtitle(totem->playlist);
+}
+
+void
 next_angle_action_callback (GtkAction *action, Totem *totem)
 {
 	totem_action_next_angle (totem);
diff -ur totem-svn.orig/src/totem-playlist.c totem-svn/src/totem-playlist.c
--- totem-svn.orig/src/totem-playlist.c	2007-11-26 15:55:16.000000000 +0100
+++ totem-svn/src/totem-playlist.c	2007-11-26 16:39:50.000000000 +0100
@@ -512,6 +512,39 @@
 	g_list_free (l);
 }
 
+void
+totem_playlist_select_subtitle(TotemPlaylist *playlist) 
+{
+	char *subtitle;
+	TotemPlaylistStatus playing;
+	GtkTreeIter iter;
+
+	subtitle = totem_add_subtitle (totem_playlist_get_toplevel (playlist), NULL);
+
+	if (subtitle == NULL)
+		return;
+
+	gtk_tree_model_get_iter (playlist->_priv->model, &iter, 
+			playlist->_priv->current);
+
+
+	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);
+}
+
 static gboolean
 playlist_show_popup_menu (TotemPlaylist *playlist, GdkEventButton *event)
 {
diff -ur totem-svn.orig/src/totem-playlist.h totem-svn/src/totem-playlist.h
--- totem-svn.orig/src/totem-playlist.h	2007-11-26 02:24:07.000000000 +0100
+++ totem-svn/src/totem-playlist.h	2007-11-26 15:32:00.000000000 +0100
@@ -131,6 +131,7 @@
 guint      totem_playlist_get_current (TotemPlaylist *playlist);
 guint      totem_playlist_get_last (TotemPlaylist *playlist);
 void       totem_playlist_set_current (TotemPlaylist *playlist, guint index);
+void       totem_playlist_select_subtitle(TotemPlaylist *playlist);
 
 G_END_DECLS
 
