diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c
index 7a1a41c..e65df2d 100644
--- a/gst/matroska/matroska-demux.c
+++ b/gst/matroska/matroska-demux.c
@@ -1905,6 +1905,8 @@ gst_matroska_demux_handle_seek_event (GstMatroskaDemux * demux,
   GstMatroskaTrackContext *track = NULL;
   GstSegment seeksegment = { 0, };
   gboolean update;
+  gint64 closesegment_stop = -1;
+  gint64 newsegment_start;
 
   if (pad)
     track = gst_pad_get_element_private (pad);
@@ -2022,6 +2024,7 @@ gst_matroska_demux_handle_seek_event (GstMatroskaDemux * demux,
         demux->common.segment.rate, GST_FORMAT_TIME,
         demux->common.segment.start, demux->common.segment.last_stop,
         demux->common.segment.time);
+    closesegment_stop = demux->common.segment.last_stop;
     GST_OBJECT_UNLOCK (demux);
   }
 
@@ -2031,25 +2034,32 @@ gst_matroska_demux_handle_seek_event (GstMatroskaDemux * demux,
   memcpy (&demux->common.segment, &seeksegment, sizeof (GstSegment));
   GST_OBJECT_UNLOCK (demux);
 
-  /* update some (segment) state */
-  if (!gst_matroska_demux_move_to_entry (demux, entry, TRUE))
-    goto seek_error;
+  if (cur_type != GST_SEEK_TYPE_NONE) {
+    /* update some (segment) state */
+    if (!gst_matroska_demux_move_to_entry (demux, entry, TRUE))
+      goto seek_error;
 
-  /* notify start of new segment */
-  if (demux->common.segment.flags & GST_SEEK_FLAG_SEGMENT) {
-    GstMessage *msg;
+    /* notify start of new segment */
+    if (demux->common.segment.flags & GST_SEEK_FLAG_SEGMENT) {
+      GstMessage *msg;
 
-    msg = gst_message_new_segment_start (GST_OBJECT (demux),
-        GST_FORMAT_TIME, demux->common.segment.start);
-    gst_element_post_message (GST_ELEMENT (demux), msg);
+      msg = gst_message_new_segment_start (GST_OBJECT (demux),
+          GST_FORMAT_TIME, demux->common.segment.start);
+      gst_element_post_message (GST_ELEMENT (demux), msg);
+    }
   }
 
   GST_OBJECT_LOCK (demux);
+  if (!flush && cur_type == GST_SEEK_TYPE_NONE) {
+    newsegment_start = closesegment_stop;
+  } else {
+    newsegment_start = demux->common.segment.start;
+  }
   if (demux->new_segment)
     gst_event_unref (demux->new_segment);
   demux->new_segment = gst_event_new_new_segment_full (FALSE,
       demux->common.segment.rate, demux->common.segment.applied_rate,
-      demux->common.segment.format, demux->common.segment.start,
+      demux->common.segment.format, newsegment_start,
       demux->common.segment.stop, demux->common.segment.time);
   GST_OBJECT_UNLOCK (demux);
 
