diff --git a/src/backend/bacon-video-widget-gst-0.10.c b/src/backend/bacon-video-widget-gst-0.10.c
index 5500d99..896f73f 100644
--- a/src/backend/bacon-video-widget-gst-0.10.c
+++ b/src/backend/bacon-video-widget-gst-0.10.c
@@ -3454,14 +3454,58 @@ bacon_video_widget_seek (BaconVideoWidget *bvw, double position, GError **error)
 }
 
 gboolean
-bacon_video_widget_step (BaconVideoWidget *bvw, GError **error)
+bacon_video_widget_step (BaconVideoWidget *bvw, gboolean forward, GError **error)
 {
-  GstEvent *event;
+  if (forward == TRUE) {
+    GstEvent *event;
 
-  event = gst_event_new_step (GST_FORMAT_BUFFERS, 1, 1.0, TRUE, FALSE);
+    event = gst_event_new_step (GST_FORMAT_BUFFERS, 1, 1.0, TRUE, FALSE);
 
-  gst_element_send_event (bvw->priv->play, event);
-  return TRUE;
+    return gst_element_send_event (bvw->priv->play, event);
+  } else {
+    GstEvent *event;
+    GstFormat fmt;
+    gint64 cur = 0;
+
+    fmt = GST_FORMAT_TIME;
+    if (gst_element_query_position (bvw->priv->play, &fmt, &cur)) {
+      g_message ("playback direction to reverse (%"G_GINT64_FORMAT")", cur);
+      event = gst_event_new_seek (-1.0,
+				  fmt, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, G_GINT64_CONSTANT (0), 
+				  GST_SEEK_TYPE_SET, cur);
+      if (gst_element_send_event (bvw->priv->play, event) == FALSE) {
+	g_message ("failed to seek orig failed");
+      } else {
+	gst_element_get_state (bvw->priv->play, NULL, NULL, GST_CLOCK_TIME_NONE);
+      }
+    } else {
+      g_message ("failed to query orig position");
+    }
+
+    event = gst_event_new_step (GST_FORMAT_BUFFERS, 1, 1.0, TRUE, FALSE);
+    if (gst_element_send_event (bvw->priv->play, event) == FALSE) {
+      g_message ("step failed");
+    } else {
+      gst_element_get_state (bvw->priv->play, NULL, NULL, GST_CLOCK_TIME_NONE);
+    }
+    fmt = GST_FORMAT_TIME;
+    cur = 0;
+    if (gst_element_query_position (bvw->priv->play, &fmt, &cur)) {
+      g_message ("playback direction to forward (%"G_GINT64_FORMAT")", cur);
+      event = gst_event_new_seek (1.0,
+				  fmt, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, cur,
+				  GST_SEEK_TYPE_SET, GST_CLOCK_TIME_NONE);
+      if (gst_element_send_event (bvw->priv->play, event) == FALSE) {
+	g_message ("failed to seek back failed");
+      } else {
+	gst_element_get_state (bvw->priv->play, NULL, NULL, GST_CLOCK_TIME_NONE);
+      }
+    } else {
+      g_message ("failed to query post position");
+    }
+  }
+
+  return FALSE;
 }
 
 static void
@@ -5728,7 +5772,7 @@ bacon_video_widget_get_current_frame (BaconVideoWidget * bvw)
 
   /* when used as thumbnailer, wait for pending seeks to complete */
   if (bvw->priv->use_type == BVW_USE_TYPE_CAPTURE) {
-    gst_element_get_state (bvw->priv->play, NULL, NULL, -1);
+    gst_element_get_state (bvw->priv->play, NULL, NULL, GST_CLOCK_TIME_NONE);
   }
 
   /* no video info */
@@ -6155,6 +6199,7 @@ bacon_video_widget_new (int width, int height,
     g_object_unref (bvw);
     return NULL;
   }
+  g_object_set (bvw->priv->play, "flags", 0x00000015, NULL);
 
   bvw->priv->bus = gst_element_get_bus (bvw->priv->play);
   
diff --git a/src/backend/bacon-video-widget.h b/src/backend/bacon-video-widget.h
index d4ffd0c..5a0d896 100644
--- a/src/backend/bacon-video-widget.h
+++ b/src/backend/bacon-video-widget.h
@@ -184,6 +184,7 @@ gboolean bacon_video_widget_seek_time		 (BaconVideoWidget *bvw,
 						  gint64 _time,
 						  GError **error);
 gboolean bacon_video_widget_step		 (BaconVideoWidget *bvw,
+						  gboolean forward,
 						  GError **error);
 gboolean bacon_video_widget_can_direct_seek	 (BaconVideoWidget *bvw);
 double bacon_video_widget_get_position           (BaconVideoWidget *bvw);
diff --git a/src/totem-object.c b/src/totem-object.c
index 5ef642d..dd9ea72 100644
--- a/src/totem-object.c
+++ b/src/totem-object.c
@@ -3476,9 +3476,13 @@ totem_action_handle_key_press (Totem *totem, GdkEventKey *event)
 		else 
 			totem_action_play_pause (totem);
 		break;
+	case GDK_comma:
+		totem_action_pause (totem);
+		bacon_video_widget_step (totem->bvw, FALSE, NULL);
+		break;
 	case GDK_period:
 		totem_action_pause (totem);
-		bacon_video_widget_step (totem->bvw, NULL);
+		bacon_video_widget_step (totem->bvw, TRUE, NULL);
 		break;
 #ifdef HAVE_XFREE
 	case XF86XK_AudioPause:
