Index: src/totem-time-label.c
===================================================================
--- src/totem-time-label.c	(revision 3898)
+++ src/totem-time-label.c	(working copy)
@@ -5,25 +5,34 @@
 
 static void totem_time_label_class_init (TotemTimeLabelClass *class);
 static void totem_time_label_init       (TotemTimeLabel      *label);
+static void totem_time_label_on_press ();
 
 struct TotemTimeLabelPrivate {
 	gint64 time;
 	gint64 length;
-	gboolean seeking;
+	gboolean seeking;	
 };
 
+static gboolean countdown = FALSE;
 static GObjectClass *parent_class = NULL;
 
-G_DEFINE_TYPE (TotemTimeLabel, totem_time_label, GTK_TYPE_LABEL)
+G_DEFINE_TYPE (TotemTimeLabel, totem_time_label, GTK_TYPE_EVENT_BOX)
 
 static void
 totem_time_label_init (TotemTimeLabel *label)
 {
 	char *time;
-
+	GtkEventBox *box;
+	
+	box = GTK_EVENT_BOX (label);
 	time = totem_time_to_string (0);
-	gtk_label_set_text (GTK_LABEL (label), time);
+	label->text = gtk_label_new (time);
 	g_free (time);
+	
+	gtk_container_add (GTK_CONTAINER (box), label->text);
+	gtk_widget_show (GTK_WIDGET (label->text));
+	g_signal_connect (G_OBJECT (box), "button-press-event",
+								G_CALLBACK (totem_time_label_on_press), NULL);
 
 	label->priv = g_new0 (TotemTimeLabelPrivate, 1);
 	label->priv->time = 0;
@@ -63,6 +72,15 @@
 	widget_class = GTK_WIDGET_CLASS (klass);
 }
 
+static void
+totem_time_label_on_press ()
+{
+	if (countdown)
+		countdown = FALSE;
+	else
+		countdown = TRUE;
+}
+
 void
 totem_time_label_set_time (TotemTimeLabel *label, gint64 time, gint64 length)
 {
@@ -77,8 +95,12 @@
 		label_str = totem_time_to_string (time);
 	} else {
 		char *time_str, *length_str;
-
-		time_str = totem_time_to_string (time);
+		
+		if (countdown)
+			time_str = totem_time_to_string (length - time);
+		else
+			time_str = totem_time_to_string (time);
+			
 		length_str =  totem_time_to_string (length);
 		if (label->priv->seeking == FALSE)
 			/* Elapsed / Total Length */
@@ -90,7 +112,7 @@
 		g_free (length_str);
 	}
 
-	gtk_label_set_text (GTK_LABEL (label), label_str);
+	gtk_label_set_text (GTK_LABEL (label->text), label_str);
 	g_free (label_str);
 
 	label->priv->time = time;
@@ -104,3 +126,10 @@
   
   label->priv->seeking = seeking;
 }
+
+void
+totem_time_label_set_is_countdown (gboolean is_countdown)
+{
+	countdown = is_countdown;
+}
+
Index: src/totem-time-label.h
===================================================================
--- src/totem-time-label.h	(revision 3898)
+++ src/totem-time-label.h	(working copy)
@@ -3,6 +3,7 @@
 #define TOTEM_TIME_LABEL_H
 
 #include <gtk/gtklabel.h>
+#include <gtk/gtkeventbox.h>
 
 #define TOTEM_TYPE_TIME_LABEL            (totem_time_label_get_type ())
 #define TOTEM_TIME_LABEL(obj)            (GTK_CHECK_CAST ((obj), TOTEM_TYPE_TIME_LABEL, TotemTimeLabel))
@@ -15,12 +16,13 @@
 typedef struct TotemTimeLabelPrivate  TotemTimeLabelPrivate;
 
 struct TotemTimeLabel {
-	GtkLabel parent;
+	GtkEventBox parent;
+	GtkLabel *text;
 	TotemTimeLabelPrivate *priv;
 };
 
 struct TotemTimeLabelClass {
-	GtkLabelClass parent_class;
+	GtkEventBoxClass parent_class;
 };
 
 GtkType    totem_time_label_get_type 	(void);
@@ -34,4 +36,6 @@
 					 gchar *string1, gchar *string2,
 					 gint int1, gint int2);
 
+void totem_time_label_set_is_countdown (gboolean is_countdown);
+
 #endif /* TOTEM_TIME_LABEL_H */
Index: src/totem-statusbar.c
===================================================================
--- src/totem-statusbar.c	(revision 3898)
+++ src/totem-statusbar.c	(working copy)
@@ -34,6 +34,7 @@
 #include <glib/gi18n.h>
 
 #include "totem-statusbar.h"
+#include "totem-time-label.h"
 #include "video-utils.h"
 
 static void     totem_statusbar_class_init     (TotemStatusbarClass *class);
@@ -141,7 +142,7 @@
   gtk_box_pack_start (GTK_BOX (hbox), packer, FALSE, FALSE, 0);
   gtk_widget_show (packer);
 
-  statusbar->time_label = gtk_label_new (_("0:00 / 0:00"));
+  statusbar->time_label = totem_time_label_new ();
   gtk_misc_set_alignment (GTK_MISC (statusbar->label), 0.0, 0.5);
   gtk_box_pack_start (GTK_BOX (hbox), statusbar->time_label, FALSE, FALSE, 0);
   gtk_widget_show (statusbar->time_label);
@@ -179,30 +180,12 @@
 static void
 totem_statusbar_update_time (TotemStatusbar *statusbar)
 {
-  char *time, *length, *label;
-
-  time = totem_time_to_string (statusbar->time * 1000);
-
-  if (statusbar->length < 0) {
-    label = g_strdup_printf (_("%s (Streaming)"), time);
-  } else {
-    length = totem_time_to_string
-	    (statusbar->length == -1 ? 0 : statusbar->length * 1000);
-
-    if (statusbar->seeking == FALSE)
-      /* Elapsed / Total Length */
-      label = g_strdup_printf (_("%s / %s"), time, length);
-    else
-      /* Seeking to Time / Total Length */
-      label = g_strdup_printf (_("Seek to %s / %s"), time, length);
-
-    g_free (length);
-  }
-  g_free (time);
-
-  gtk_label_set_text (GTK_LABEL (statusbar->time_label), label);
-  g_free (label);
-
+  totem_time_label_set_seeking (TOTEM_TIME_LABEL (statusbar->time_label),
+  			statusbar->seeking);
+  totem_time_label_set_time (TOTEM_TIME_LABEL (statusbar->time_label),
+  			(statusbar->time * 1000),
+  			(statusbar->length * 1000));
+  			
   totem_statusbar_sync_description (statusbar);
 }
 
@@ -334,7 +317,8 @@
     /* eg: Paused, 0:32 / 1:05 */
     text = g_strdup_printf (_("%s, %s"),
 	gtk_label_get_text (GTK_LABEL (statusbar->label)),
-	gtk_label_get_text (GTK_LABEL (statusbar->time_label)));
+	gtk_label_get_text (TOTEM_TIME_LABEL 
+			(statusbar->time_label)->text));
   } else {
     /* eg: Buffering, 75 % */
     text = g_strdup_printf (_("%s, %d %%"),
Index: src/totem-preferences.c
===================================================================
--- src/totem-preferences.c	(revision 3898)
+++ src/totem-preferences.c	(working copy)
@@ -40,6 +40,7 @@
 #include "totem-preferences.h"
 #include "video-utils.h"
 #include "totem-subtitle-encoding.h"
+#include "totem-time-label.h"
 
 #include "debug.h"
 
@@ -182,6 +183,17 @@
 }
 
 static void
+on_countdown_toggled (GtkToggleButton *togglebutton, Totem *totem)
+{
+	gboolean value;
+	
+	value = gtk_toggle_button_get_active (togglebutton);
+	gconf_client_set_bool (totem->gc, GCONF_PREFIX"/countdown",
+			value, NULL);
+	totem_time_label_set_is_countdown (value);
+}
+
+static void
 deinterlace_changed_cb (GConfClient *client, guint cnxn_id,
 		GConfEntry *entry, Totem *totem)
 {
@@ -220,6 +232,24 @@
 }
 
 static void
+countdown_changed_cb (GConfClient *client, guint cnxn_id,
+			GConfEntry *entry, Totem *totem)
+{
+	GtkWidget *item;
+	
+	item = glade_xml_get_widget (totem->xml, "tpw_countdown_checkbutton");
+	g_signal_handlers_disconnect_by_func (G_OBJECT (item),
+			on_countdown_toggled, totem);
+			
+	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (item),
+			gconf_client_get_bool (totem->gc, 
+				GCONF_PREFIX"/countdown", NULL));
+	
+	g_signal_connect (G_OBJECT(item), "toggled", 
+			G_CALLBACK (on_countdown_toggled), totem);
+}
+
+static void
 show_vfx_changed_cb (GConfClient *client, guint cnxn_id,
 		GConfEntry *entry, Totem *totem)
 {
@@ -425,7 +455,7 @@
 {
 	GtkWidget *item, *menu;
 	GtkAction *action;
-	gboolean show_visuals, auto_resize, is_local, deinterlace;
+	gboolean show_visuals, auto_resize, is_local, deinterlace, countdown;
 	int connection_speed, i;
 	char *visual, *font, *encoding;
 	GList *list, *l;
@@ -441,6 +471,9 @@
 	gconf_client_notify_add (totem->gc, GCONF_PREFIX"/auto_resize",
 			(GConfClientNotifyFunc) auto_resize_changed_cb,
 			totem, NULL, NULL);
+	gconf_client_notify_add (totem->gc, GCONF_PREFIX"/countdown",
+			(GConfClientNotifyFunc) countdown_changed_cb,
+			totem, NULL, NULL);
 	gconf_client_notify_add (totem->gc, GCONF_PREFIX"/show_vfx",
 			(GConfClientNotifyFunc) show_vfx_changed_cb,
 			totem, NULL, NULL);
@@ -483,6 +516,15 @@
 			G_CALLBACK (on_checkbutton1_toggled), totem);
 	bacon_video_widget_set_auto_resize
 		(BACON_VIDEO_WIDGET (totem->bvw), auto_resize);
+		
+	/* Playback Counts Down */
+	countdown = gconf_client_get_bool (totem->gc, 
+			GCONF_PREFIX"/countdown", NULL);
+	item = glade_xml_get_widget (totem->xml, "tpw_countdown_checkbutton");
+	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (item), countdown);
+	g_signal_connect (G_OBJECT (item), "toggled", 
+			G_CALLBACK (on_countdown_toggled), totem);
+	totem_time_label_set_is_countdown (countdown);
 
 	/* Connection Speed */
 	connection_speed = bacon_video_widget_get_connection_speed (totem->bvw);
Index: data/totem.glade
===================================================================
--- data/totem.glade	(revision 3898)
+++ data/totem.glade	(working copy)
@@ -659,6 +659,39 @@
 		      <property name="fill">False</property>
 		    </packing>
 		  </child>
+		  
+		  <child>
+		    <widget class="GtkAlignment" id="alignment8">
+		      <property name="visible">True</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xscale">1</property>
+		      <property name="yscale">1</property>
+		      <property name="top_padding">0</property>
+		      <property name="bottom_padding">0</property>
+		      <property name="left_padding">12</property>
+		      <property name="right_padding">0</property>
+
+		      <child>
+			<widget class="GtkCheckButton" id="tpw_countdown_checkbutton">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">The playback time counts down</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			</widget>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
 		</widget>
 		<packing>
 		  <property name="padding">0</property>
Index: data/totem.schemas.in
===================================================================
--- data/totem.schemas.in	(revision 3898)
+++ data/totem.schemas.in	(working copy)
@@ -80,6 +80,17 @@
 	  <short>Resize the canvas automatically on file load</short>
 	</locale>
       </schema>
+      
+      <schema>
+      	<key>/schemas/apps/totem/countdown</key>
+      	<applyto>/apps/totem/countdown</applyto>
+      	<owner>totem</owner>
+      	<type>bool</type>
+      	<default>FALSE</default>
+	 <locale name="C">
+	  <short>The playback time counts down</short>
+	 </locale>
+       </schema>
 
       <schema>
         <key>/schemas/apps/totem/repeat</key>
