diff --git a/tools/gst-launch.1.in b/tools/gst-launch.1.in
index 8c7e8a4caa3e6a255b2875e5ca9ee531c0eb5b85..00195c992e94628f9348618ffe13a36f1a81120c 100644
--- a/tools/gst-launch.1.in
+++ b/tools/gst-launch.1.in
@@ -36,6 +36,9 @@ Do not print any progress information
 .B  \-m, \-\-messages
 Output messages posted on the pipeline's bus
 .TP 8
+.B  \-s, \-\-seek=TIME
+Seek pipeline to TIME in absolute nanoseconds before playing
+.TP 8
 .B  \-t, \-\-tags
 Output tags (also known as metadata)
 .TP 8
@@ -244,6 +247,13 @@ Play an mp3 file or an http stream using GNOME\-VFS
 .br
 Use GNOME\-VFS to play an mp3 file located on an SMB server
 
+.B Seeking
+
+.B
+        gst\-launch --seek=10000000000 filesrc location=test.wav ! wavparse ! autoaudiosink
+.br
+Play a wav file after seeking 10 seconds from the start of the stream
+
 .B Format conversion
 
 .B
diff --git a/tools/gst-launch.c b/tools/gst-launch.c
index cb9b8e2f2e13b1c1f933f2eb231cd380a3893936..bb1430d0251a8cda80377b7241f7f94dc58610ad 100644
--- a/tools/gst-launch.c
+++ b/tools/gst-launch.c
@@ -673,6 +673,7 @@ main (int argc, char *argv[])
   gboolean eos_on_shutdown = FALSE;
   gchar *savefile = NULL;
   gchar *exclude_args = NULL;
+  gint64 seek_start = 0;
 #ifndef GST_DISABLE_OPTION_PARSING
   GOptionEntry options[] = {
     {"tags", 't', 0, G_OPTION_ARG_NONE, &tags,
@@ -685,6 +686,8 @@ main (int argc, char *argv[])
         N_("Output messages"), NULL},
     {"exclude", 'X', 0, G_OPTION_ARG_NONE, &exclude_args,
         N_("Do not output status information of TYPE"), N_("TYPE1,TYPE2,...")},
+    {"seek", 's', 0, G_OPTION_ARG_INT64, &seek_start,
+        N_("Seek to time TIME in seconds"), N_("TIME")},
 #ifndef GST_DISABLE_LOADSAVE
     {"output", 'o', 0, G_OPTION_ARG_STRING, &savefile,
         N_("Save xml representation of pipeline to FILE and exit"), N_("FILE")},
@@ -836,6 +839,17 @@ main (int argc, char *argv[])
         break;
     }
 
+    if(seek_start)
+    {
+      PRINT (_("Attempting to SEEK ...\n"));
+      if (!gst_element_seek (pipeline, 1.0, GST_FORMAT_TIME,
+            GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_SEGMENT, GST_SEEK_TYPE_SET,
+            seek_start, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE))
+      {
+        g_printerr(_("ERROR: Pipeline doesn't want to seek.\n"));
+      }
+    }
+
     caught_error = event_loop (pipeline, FALSE, GST_STATE_PLAYING);
 
     if (caught_error) {
