Index: src/totem-statusbar.c
===================================================================
--- src/totem-statusbar.c	(revision 5045)
+++ src/totem-statusbar.c	(working copy)
@@ -40,6 +40,7 @@
 #define NORMAL_CONTEXT "text"
 #define BUFFERING_CONTEXT "buffering"
 
+static void totem_statusbar_toggle_time	     (GtkWidget *widget, GdkEvent *event, TotemStatusbar *statusbar);
 static void totem_statusbar_class_init       (TotemStatusbarClass *class);
 static void totem_statusbar_init             (TotemStatusbar      *statusbar);
 static void totem_statusbar_dispose          (GObject             *object);
@@ -48,7 +49,6 @@
 static void totem_statusbar_size_allocate    (GtkWidget           *widget,
                                               GtkAllocation       *allocation);
 #endif
-
 G_DEFINE_TYPE(TotemStatusbar, totem_statusbar, GTK_TYPE_STATUSBAR)
 
 static void
@@ -72,6 +72,7 @@
 
   statusbar->time = 0;
   statusbar->length = -1;
+  statusbar->time_toggle = TRUE;
 
   hbox = gtk_hbox_new (FALSE, SPACING);
 
@@ -104,8 +105,14 @@
   gtk_widget_show (packer);
 
   statusbar->time_label = gtk_label_new (_("0:00 / 0:00"));
+  statusbar->time_event_box = gtk_event_box_new();
+  gtk_container_add( GTK_CONTAINER( statusbar->time_event_box ), statusbar->time_label );
+  gtk_widget_set_events( statusbar->time_event_box, GDK_BUTTON_PRESS_MASK);
+  g_signal_connect(G_OBJECT( statusbar->time_event_box ), "button_press_event",
+		G_CALLBACK( totem_statusbar_toggle_time ), statusbar );
   gtk_misc_set_alignment (GTK_MISC (statusbar->time_label), 0.0, 0.5);
-  gtk_box_pack_start (GTK_BOX (hbox), statusbar->time_label, FALSE, FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (hbox), statusbar->time_event_box, FALSE, FALSE, 0);
+  gtk_widget_show (statusbar->time_event_box);
   gtk_widget_show (statusbar->time_label);
 
   totem_statusbar_set_text (statusbar, _("Stopped"));
@@ -128,11 +135,22 @@
     label = g_strdup_printf (_("%s (Streaming)"), time);
   } else {
     length = totem_time_to_string
-	    (statusbar->length == -1 ? 0 : statusbar->length * 1000);
+	(statusbar->length == -1 ? 0 : statusbar->length * 1000);
+    if (statusbar->seeking == FALSE)
+      if(statusbar->time_toggle)
+	/* Elapsed / Total Length */
+	label = g_strdup_printf (_("%s / %s"), time, length);
+      else {
+	/* -Remaining / Total Length */
+	char *remaining;
 
-    if (statusbar->seeking == FALSE)
-      /* Elapsed / Total Length */
-      label = g_strdup_printf (_("%s / %s"), time, length);
+	remaining = totem_time_to_string
+	(statusbar->length == -1 ? 0 : (statusbar->length - statusbar->time) * 1000);
+
+	label = g_strdup_printf (_("-%s / %s"), remaining, length);
+
+	g_free (remaining);
+      }
     else
       /* Seeking to Time / Total Length */
       label = g_strdup_printf (_("Seek to %s / %s"), time, length);
@@ -147,6 +165,12 @@
   totem_statusbar_sync_description (statusbar);
 }
 
+static void totem_statusbar_toggle_time ( GtkWidget *widget, GdkEvent *event, TotemStatusbar *statusbar)
+{
+  statusbar->time_toggle = !statusbar->time_toggle;
+  totem_statusbar_update_time( statusbar );
+}
+
 void
 totem_statusbar_set_text (TotemStatusbar *statusbar, const char *label)
 {
Index: src/totem-time-label.c
===================================================================
--- src/totem-time-label.c	(revision 5045)
+++ src/totem-time-label.c	(working copy)
@@ -5,6 +5,7 @@
 #include <glib/gi18n.h>
 #include "video-utils.h"
 
+static void totem_time_label_toggle(GtkWidget *widget, GdkEvent *event, TotemTimeLabel *label);
 static void totem_time_label_class_init (TotemTimeLabelClass *class);
 static void totem_time_label_init       (TotemTimeLabel      *label);
 
@@ -14,25 +15,43 @@
 	gboolean seeking;
 };
 
+
 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;
+	
+	label->time_toggle = 1;
+
+	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_set_events(box, GDK_BUTTON_PRESS_MASK);
+	g_signal_connect(G_OBJECT(box), "button-press-event",
+			 G_CALLBACK(totem_time_label_toggle), label);
+	gtk_widget_show( GTK_WIDGET(label->label) );
 	label->priv = g_new0 (TotemTimeLabelPrivate, 1);
 	label->priv->time = 0;
 	label->priv->length = -1;
 	label->priv->seeking = FALSE;
 }
 
+static void
+totem_time_label_toggle(GtkWidget *widget, GdkEvent *event, TotemTimeLabel *label)
+{
+	label->time_toggle = !label->time_toggle;
+	totem_time_label_set_real_time( label, label->priv->time, label->priv->length );
+}
+
 GtkWidget*
 totem_time_label_new (void)
 {
@@ -54,40 +73,55 @@
 }
 
 void
-totem_time_label_set_time (TotemTimeLabel *label, gint64 time, gint64 length)
+totem_time_label_set_real_time (TotemTimeLabel *label, gint64 time, gint64 length)
 {
 	char *label_str;
 
-	if (time / 1000 == label->priv->time / 1000
-			&& length / 1000 == label->priv->length / 1000)
-		return;
-
 	if (length <= 0)
 	{
 		label_str = totem_time_to_string (time);
 	} else {
 		char *time_str, *length_str;
+		
+		length_str =  totem_time_to_string (length);
 
-		time_str = totem_time_to_string (time);
-		length_str =  totem_time_to_string (length);
 		if (label->priv->seeking == FALSE)
-			/* Elapsed / Total Length */
-			label_str = g_strdup_printf (_("%s / %s"), time_str, length_str);
+			if( label->time_toggle ) {
+				/* Elapsed / Total Length */
+				time_str = totem_time_to_string (time);
+				label_str = g_strdup_printf (_("%s / %s"), time_str, length_str);
+			} else {
+				/* -Remaining / Total Length */
+				time_str = totem_time_to_string (length - time);
+				label_str = g_strdup_printf (_("-%s / %s"), time_str, length_str);
+			}
 		else 
 			/* Seeking to Time / Total Length */
 			label_str = g_strdup_printf (_("Seek to %s / %s"), time_str, length_str);
+
 		g_free (time_str);
 		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;
 	label->priv->length = length;
+	
 }
 
 void
+totem_time_label_set_time (TotemTimeLabel *label, gint64 time, gint64 length)
+{
+	if (time / 1000 == label->priv->time / 1000
+			&& length / 1000 == label->priv->length / 1000)
+		return;
+
+	totem_time_label_set_real_time( label, time, length );
+}
+
+void
 totem_time_label_set_seeking (TotemTimeLabel *label, gboolean seeking)
 {
   g_return_if_fail (TOTEM_IS_TIME_LABEL (label));
Index: src/totem-statusbar.h
===================================================================
--- src/totem-statusbar.h	(revision 5045)
+++ src/totem-statusbar.h	(working copy)
@@ -49,12 +49,14 @@
 
   GtkWidget *progress;
   GtkWidget *time_label;
+  GtkWidget *time_event_box;
 
   gint time;
   gint length;
   guint timeout;
   guint percentage;
 
+  guint time_toggle : 1;
   guint pushed : 1;
   guint seeking : 1;
   guint timeout_ticks : 2;
Index: src/totem-time-label.h
===================================================================
--- src/totem-time-label.h	(revision 5045)
+++ 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,14 @@
 typedef struct TotemTimeLabelPrivate  TotemTimeLabelPrivate;
 
 struct TotemTimeLabel {
-	GtkLabel parent;
+	GtkEventBox parent;
+	GtkLabel *label;
 	TotemTimeLabelPrivate *priv;
+	guint time_toggle : 1;
 };
 
 struct TotemTimeLabelClass {
-	GtkLabelClass parent_class;
+	GtkEventBoxClass parent_class;
 };
 
 GtkType    totem_time_label_get_type 	(void);
@@ -29,5 +32,4 @@
 					 gint64 time, gint64 length);
 void       totem_time_label_set_seeking (TotemTimeLabel *label,
            gboolean seeking);
-
 #endif /* TOTEM_TIME_LABEL_H */
