diff --git a/components/streams/src/feed.cpp b/components/streams/src/feed.cpp
index 0042bed839e5fb702d8c7a60c0f0d9e2835475f7..77e183c867c9875d4bc7460b10b1b76116ea3f06 100644
--- a/components/streams/src/feed.cpp
+++ b/components/streams/src/feed.cpp
@@ -826,7 +826,7 @@ void Feed::_beginRecord(Filter *f) {
 		record_stream_->select(fs->frameset(), f->channels(), true);
 
 		for (auto c : f->channels()) {
-			recorder_->post(*fs.get(), c);
+			if (fs->hasAnyChanged(c)) recorder_->post(*fs.get(), c);
 		}
 		return true;
 	});
diff --git a/components/streams/src/sender.cpp b/components/streams/src/sender.cpp
index 0eb8b64aaf09a257812d18f5e4a0fe4c37521b14..4eb69ec59b72d53e2a650ae065b7a48b548796ad 100644
--- a/components/streams/src/sender.cpp
+++ b/components/streams/src/sender.cpp
@@ -173,11 +173,12 @@ void Sender::post(ftl::data::FrameSet &fs, ftl::codecs::Channel c, bool noencode
 			const auto &packets = frame.getEncoded(cc);
 			if (packets.size() > 0) {
 				if (packets.size() == 1) {
-					forward_count += packets.front().frame_count;
+					
 				} else {
 					// PROBLEMS
-					LOG(WARNING) << "Multi packet send!";
+					LOG(WARNING) << "Multi packet send! - Channel = " << int(c) << ", count = " << packets.size();
 				}
+				forward_count += packets.back().frame_count;
 			}
 		} else {
 			needs_encoding = false;
@@ -200,7 +201,7 @@ void Sender::post(ftl::data::FrameSet &fs, ftl::codecs::Channel c, bool noencode
 			if (!frame.has(c)) continue;
 
 			const auto &packets = frame.getEncoded(c);
-			if (packets.size() == 1) {
+			//if (packets.size() == 1) {
 				StreamPacket spkt;
 				spkt.version = 5;
 				spkt.timestamp = fs.timestamp();
@@ -209,10 +210,10 @@ void Sender::post(ftl::data::FrameSet &fs, ftl::codecs::Channel c, bool noencode
 				spkt.channel = c;
 				spkt.flags = (last_flush) ? ftl::codecs::kFlagCompleted : 0;
 
-				stream_->post(spkt, packets.front());
-			} else if (packets.size() > 1) {
+				stream_->post(spkt, packets.back());
+			//} else if (packets.size() > 1) {
 				// PROBLEMS
-			}
+			//}
 		}
 	}
 
diff --git a/components/structures/include/ftl/data/new_frameset.hpp b/components/structures/include/ftl/data/new_frameset.hpp
index 229bf974e41ba1f7cd53a9c6ca3426eb095a6c3f..93b6d4ee4003ab59068c0ddc1770561e4cf0fc35 100644
--- a/components/structures/include/ftl/data/new_frameset.hpp
+++ b/components/structures/include/ftl/data/new_frameset.hpp
@@ -125,6 +125,11 @@ class FrameSet : public ftl::data::Frame {
 	 */
 	static std::shared_ptr<FrameSet>  fromFrame(Frame &);
 
+	/**
+	 * Check if channel has changed in any frames.
+	 */
+	bool hasAnyChanged(ftl::codecs::Channel) const;
+
 	private:
 	std::atomic<int> flags_;
 };
diff --git a/components/structures/src/frameset.cpp b/components/structures/src/frameset.cpp
index fe45a6ed34a9bbc3cf6bc10a4eed2924a1853742..330ccf6592025a6c36b3f36da4d1b3e31b6fffb8 100644
--- a/components/structures/src/frameset.cpp
+++ b/components/structures/src/frameset.cpp
@@ -83,6 +83,13 @@ const ftl::data::Frame &ftl::data::FrameSet::firstFrame() const {
 	throw FTL_Error("No frames in frameset");
 }
 
+bool ftl::data::FrameSet::hasAnyChanged(ftl::codecs::Channel c) const {
+	for (size_t i=0; i<frames.size(); ++i) {
+		if (frames[i].changed(c)) return true;
+	}
+	return false;
+}
+
 void FrameSet::store() {
 	if (status() != ftl::data::FrameStatus::CREATED) throw FTL_Error("Cannot store frameset multiple times");