Index: src/totem-time-label.c
===================================================================
--- src/totem-time-label.c	(revision 3901)
+++ src/totem-time-label.c	(working copy)
@@ -5,6 +5,7 @@
 
 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;
@@ -12,18 +13,26 @@
 	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->label = gtk_label_new (time);
 	g_free (time);
+	
+	gtk_container_add (GTK_CONTAINER (box), label->label);
+	gtk_widget_show (GTK_WIDGET (label->label));
+	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->label), label_str);
 	g_free (label_str);
 
 	label->priv->time = time;
Index: src/totem-time-label.h
===================================================================
--- src/totem-time-label.h	(revision 3901)
+++ 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 *label;
 	TotemTimeLabelPrivate *priv;
 };
 
 struct TotemTimeLabelClass {
-	GtkLabelClass parent_class;
+	GtkEventBoxClass parent_class;
 };
 
 GtkType    totem_time_label_get_type 	(void);
Index: src/totem-statusbar.c
===================================================================
--- src/totem-statusbar.c	(revision 3901)
+++ 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)->label));
   } else {
     /* eg: Buffering, 75 % */
     text = g_strdup_printf (_("%s, %d %%"),
