diff --git a/components/streams/include/ftl/streams/stream.hpp b/components/streams/include/ftl/streams/stream.hpp
index 1a0a1793e8ae4ca008bf1e19171d835433189d3c..ead565f13e20cb74a668d3b7b53d708a9a97f066 100644
--- a/components/streams/include/ftl/streams/stream.hpp
+++ b/components/streams/include/ftl/streams/stream.hpp
@@ -147,7 +147,7 @@ class Muxer : public Stream {
 	SHARED_MUTEX mutex_;
 
 	void _notify(const ftl::codecs::StreamPacket &spkt, const ftl::codecs::Packet &pkt);
-	int _lookup(size_t fsid, int sid, int ssid);
+	int _lookup(size_t fsid, int sid, int ssid, int count);
 };
 
 /**
diff --git a/components/streams/src/filestream.cpp b/components/streams/src/filestream.cpp
index 95a15f6688eeb7d65e0e0b2b0aadeaa394d67896..3c06ece80784019af43524c6491a286aa844ce99 100644
--- a/components/streams/src/filestream.cpp
+++ b/components/streams/src/filestream.cpp
@@ -346,6 +346,7 @@ bool File::run() {
 }
 
 bool File::begin(bool dorun) {
+	if (active_) return true;
 	if (mode_ == Mode::Read) {
 		if (!checked_) _checkFile();
 		_open();
diff --git a/components/streams/src/stream.cpp b/components/streams/src/stream.cpp
index c80f9f284dac34ec5770cd73177ebd72db0d60f9..9e66f165b110f357727cc21958b8352432bd6749 100644
--- a/components/streams/src/stream.cpp
+++ b/components/streams/src/stream.cpp
@@ -95,7 +95,7 @@ void Muxer::add(Stream *s, size_t fsid) {
 		spkt2.streamID = fsid;
 
 		if (spkt2.frame_number < 255) {
-			int id = _lookup(fsid, i, spkt.frame_number);
+			int id = _lookup(fsid, i, spkt.frame_number, pkt.frame_count);
 			spkt2.frame_number = id;
 		}
 
@@ -168,7 +168,7 @@ void Muxer::reset() {
 	}
 }
 
-int Muxer::_lookup(size_t fsid, int sid, int ssid) {
+int Muxer::_lookup(size_t fsid, int sid, int ssid, int count) {
 	SHARED_LOCK(mutex_, lk);
 	auto &se = streams_[sid];
 	if (static_cast<uint32_t>(ssid) >= se.maps.size()) {
@@ -179,6 +179,11 @@ int Muxer::_lookup(size_t fsid, int sid, int ssid) {
 				int nid = nid_[fsid]++;
 				revmap_[fsid].push_back({sid, static_cast<uint32_t>(se.maps.size())});
 				se.maps.push_back(nid);
+				for (int i=1; i<count; ++i) {
+					int nid = nid_[fsid]++;
+					revmap_[fsid].push_back({sid, static_cast<uint32_t>(se.maps.size())});
+					se.maps.push_back(nid);
+				}
 			}
 		}
 		lk.lock();