diff --git a/libaegisub/common/vfr.cpp b/libaegisub/common/vfr.cpp
index c82fcdbeedf659e29026ace3d644a7a1cbc96989..49ba8fe0edbb615f2c2b8c01945c1d976f21161d 100644
--- a/libaegisub/common/vfr.cpp
+++ b/libaegisub/common/vfr.cpp
@@ -153,7 +153,6 @@ Framerate::Framerate(int64_t numerator, int64_t denominator, bool drop)
 
 void Framerate::SetFromTimecodes() {
 	validate_timecodes(timecodes);
-	normalize_timecodes(timecodes);
 	denominator = default_denominator;
 	numerator = (timecodes.size() - 1) * denominator * 1000 / timecodes.back();
 	last = (timecodes.size() - 1) * denominator * 1000;
diff --git a/src/MatroskaParser.c b/src/MatroskaParser.c
index b3af0ad86f7a0e8985473b402e6241ef3512e129..c1f8a27d140876ee60158a134a709d67c0981cad 100644
--- a/src/MatroskaParser.c
+++ b/src/MatroskaParser.c
@@ -2193,7 +2193,7 @@ found:
 
       // recalculate this block's timecode to final timecode in ns
       timecode = mul3(mf->Tracks[tracknum]->TimecodeScale,
-	(timecode - mf->firstTimecode + block_timecode) * mf->Seg.TimecodeScale);
+	(timecode + block_timecode) * mf->Seg.TimecodeScale);
 
       c = readch(mf);
       if (c==EOF)