diff --git a/src/MatroskaParser.c b/src/MatroskaParser.c
index c50f494f63b4f1b40e80f84c9e33dfca17af36d3..5cc42bdbb14a0154b8d4ff0fedca5b21a2d2f3ab 100644
--- a/src/MatroskaParser.c
+++ b/src/MatroskaParser.c
@@ -1088,8 +1088,9 @@ static void parseSegmentInfo(MatroskaFile *mf,uint64_t toplen) {
 
 static void parseFirstCluster(MatroskaFile *mf,uint64_t toplen) {
   uint64_t end = filepos(mf) + toplen;
+  int tracknum = -1;
+  int i = 0;
 
-  mf->seen.Cluster = 1;
   mf->firstTimecode = 0;
 
   FOREACH(mf,toplen)
@@ -1097,22 +1098,40 @@ static void parseFirstCluster(MatroskaFile *mf,uint64_t toplen) {
       mf->firstTimecode += readUInt(mf,(unsigned)len);
       break;
     case 0xa3: // BlockEx
-      readVLUInt(mf); // track number
-      mf->firstTimecode += readSInt(mf, 2);
+      start = filepos(mf);
+      tracknum = readVLUInt(mf); // track number
+
+      for (i = 0; i < mf->nTracks; ++i) {
+        if (mf->Tracks[i]->Number == tracknum && mf->Tracks[i]->Type == TT_VIDEO) {
+          mf->firstTimecode += readSInt(mf, 2);
+          mf->seen.Cluster = 1;
+          skipbytes(mf,end - filepos(mf));
+          return;
+        }
+      }
 
-      skipbytes(mf,end - filepos(mf));
-      return;
+      skipbytes(mf, len - (filepos(mf) - start));
+      break;
     case 0xa0: // BlockGroup
       FOREACH(mf,len)
-	case 0xa1: // Block
-	  readVLUInt(mf); // track number
-	  mf->firstTimecode += readSInt(mf,2); 
+      case 0xa1: // Block
+        start = filepos(mf);
+        tracknum = readVLUInt(mf); // track number
+
+        for (i = 0; i < mf->nTracks; ++i) {
+          if (mf->Tracks[i]->Number == tracknum && mf->Tracks[i]->Type == TT_VIDEO) {
+            mf->firstTimecode += readSInt(mf, 2);
+            mf->seen.Cluster = 1;
+            skipbytes(mf,end - filepos(mf));
+            return;
+          }
+        }
 
-	  skipbytes(mf,end - filepos(mf));
-	  return;
+        skipbytes(mf, len - (filepos(mf) - start));
+        break;
       ENDFOR(mf);
-      break;
   ENDFOR(mf);
+
 }
 
 static void parseVideoInfo(MatroskaFile *mf,uint64_t toplen,struct TrackInfo *ti) {