diff --git a/src/mkv/mkv.c b/src/mkv/mkv.c
index 5d083f4a2cdbeb6dccdea3a6081b1b3bde4b50d6..7f0c9e2ec49f9703dc6534df4db62a7f9343c6bd 100644
--- a/src/mkv/mkv.c
+++ b/src/mkv/mkv.c
@@ -29,9 +29,10 @@
 #define EBML_MKV_TAG_NAME       0x000045a3
 #define EBML_MKV_TAG_STRING     0x00004487
 #define EBML_MKV_TAG_BINARY     0x00004485
-#define EBML_MKV_SEG_DURATION   0x00004489  /* Segment: Duration, L2        */
-#define EBML_MKV_SEG_TS_SCALE   0x002ad7b1  /* Segment: TimestampScale, L2  */
-#define EBML_MKV_SEG_NAME       0x00007ba9  /* Segment: Title, L2           */
+#define EBML_MKV_INFO           0x1549a966  /* Segment: Info             L1 */
+#define EBML_MKV_SEG_DURATION   0x00004489  /* Segment: Duration         L2 */
+#define EBML_MKV_SEG_TS_SCALE   0x002ad7b1  /* Segment: TimestampScale   L2 */
+#define EBML_MKV_SEG_NAME       0x00007ba9  /* Segment: Title            L2 */
 #define EBML_MKV_ATTACHEMENT    0x1941a469
 #define EBML_MKV_ATTCH_NAME     0x0000466e  /* Attachement: FileName, L3        */
 #define EBML_MKV_ATTCH_DESC     0x0000467e  /* Attachement: FileDescription, L3 */
@@ -499,7 +500,7 @@ kara_read_tags(struct bufferfd *bf, struct kara_metadata *dst)
 }
 
 static int
-kara_read_segment(struct bufferfd *bf, size_t *len)
+kara_read_segment_info(struct bufferfd *bf, size_t *len)
 {
     /* TODO: Read correct elements, Duration and TimestampScale,
        the result will be `*len = Duration * TimestampScale`. */
@@ -513,29 +514,25 @@ kara_read_segment(struct bufferfd *bf, size_t *len)
         uint32_t eid;
         uint64_t elen;
 
-        if ((n = mkv_read_element_id(bf, &eid)) < 0 || eid != EBML_MKV_SEGMENT)
+        if ((n = mkv_read_element_id(bf, &eid)) < 0) {
             return -1;
+        }
 
         data_len -= n;
 
         if ((n = mkv_read_element_length(bf, &elen)) < 0)
             return -1;
 
-        data_len -= n;
+        data_len -= (n + elen);
 
         /* Find what we need */
 
-        if (eid == EBML_MKV_SEG_DURATION ||
-            eid == EBML_MKV_SEG_TS_SCALE) {
-            switch (*len) {
-            case 0:
-                *len = 1;
-                /* Fallthrough */
-            default:
-                printf("Len: %ld\n", n);
-                *len *= 1;
-            }
+        if (eid == EBML_MKV_SEG_DURATION) {
+            /* HANDLE (TODO) */
+            *len = 1;
         }
+
+        bufferfd_skip(bf, elen);
     }
 
     return 0;
@@ -574,15 +571,17 @@ kara_read_length(size_t *len, const char *filename)
         if (eid == EBML_MKV_SEEKHEAD) {
             if (mkv_seek(&file, (size_t) header_len, (size_t) EBML_MKV_SEGMENT) < 0)
                 goto error;
-        } else if (eid == EBML_MKV_SEGMENT) {
-            if (kara_read_segment(&file, len) < 0)
+        } else if (eid == EBML_MKV_INFO) {
+            if (kara_read_segment_info(&file, len) < 0)
                 goto error;
             break;
         } else {
             if (mkv_read_element_length(&file, &elength) < 0)
                 goto error;
-            if (bufferfd_skip(&file, elength) < 0)
+            if (bufferfd_skip(&file, elength) < 0) {
+                printf("Failed to skip %ld (bufferfd)\n", elength);
                 goto error;
+            }
         }
     }