diff --git a/src/output/output_progressive_mp4.cpp b/src/output/output_progressive_mp4.cpp
index f29df99b..793138a4 100644
--- a/src/output/output_progressive_mp4.cpp
+++ b/src/output/output_progressive_mp4.cpp
@@ -588,7 +588,20 @@ namespace Mist {
 
 
     bool firstSample = true;
+    //Fun fact! Firefox cares about the ordering here.
+    //It doesn't care about the order or track IDs in the header.
+    //But - the first TRAF must be a video TRAF, if video is present.
+    std::deque<std::map<long unsigned int, fragSet>::iterator> sortedTracks;
     for (std::map<long unsigned int, fragSet>::iterator it = currentPartSet.begin(); it != currentPartSet.end(); it++) {
+      if (myMeta.tracks[it->first].type == "video"){
+        sortedTracks.push_front(it);
+      }else{
+        sortedTracks.push_back(it);
+      }
+    }
+
+    for (std::deque<std::map<long unsigned int, fragSet>::iterator>::iterator ti = sortedTracks.begin(); ti != sortedTracks.end(); ++ti) {
+      std::map<long unsigned int, fragSet>::iterator & it = *ti;
       unsigned int tid = it->first;
       DTSC::Track & thisTrack = myMeta.tracks[tid];
       MP4::TRAF trafBox;