diff --git a/components/streams/include/ftl/streams/filestream.hpp b/components/streams/include/ftl/streams/filestream.hpp
index 92d0a8afe8b1757da9b682354f16bff25a5dfe44..d1fea1d9f53956211e7f4b543c0e1ec15bf383c1 100644
--- a/components/streams/include/ftl/streams/filestream.hpp
+++ b/components/streams/include/ftl/streams/filestream.hpp
@@ -73,6 +73,7 @@ class File : public Stream {
 	int version_;
 	ftl::timer::TimerHandle timer_;
 	bool is_video_;
+	bool save_data_;
 
 	StreamCallback cb_;
 	MUTEX mutex_;
diff --git a/components/streams/src/filestream.cpp b/components/streams/src/filestream.cpp
index 2afe275badaff3bdc41f0371aa4e800b413b444e..ebfbdc6b053eca7b8a40bb5af561a4fba2c83780 100644
--- a/components/streams/src/filestream.cpp
+++ b/components/streams/src/filestream.cpp
@@ -14,18 +14,29 @@ File::File(nlohmann::json &config) : Stream(config), ostream_(nullptr), istream_
 	mode_ = Mode::Read;
 	jobs_ = 0;
 	checked_ = false;
+	save_data_ = value("save_data", false);
+
+	on("save_data", [this](const ftl::config::Event &e) {
+		save_data_ = value("save_data", false);
+	});
 }
 
 File::File(nlohmann::json &config, std::ifstream *is) : Stream(config), ostream_(nullptr), istream_(is), active_(false) {
 	mode_ = Mode::Read;
 	jobs_ = 0;
 	checked_ = false;
+	save_data_ = false;
 }
 
 File::File(nlohmann::json &config, std::ofstream *os) : Stream(config), ostream_(os), istream_(nullptr), active_(false) {
 	mode_ = Mode::Write;
 	jobs_ = 0;
 	checked_ = false;
+	save_data_ = value("save_data", false);
+
+	on("save_data", [this](const ftl::config::Event &e) {
+		save_data_ = value("save_data", false);
+	});
 }
 
 File::~File() {
@@ -102,7 +113,7 @@ bool File::post(const ftl::codecs::StreamPacket &s, const ftl::codecs::Packet &p
 
 	// Discard all data channel packets for now
 	// TODO: Allow saving of data channels once formats have solidified.
-	if (static_cast<int>(s.channel) >= static_cast<int>(ftl::codecs::Channel::Data)) return true;
+	if (!save_data_ && static_cast<int>(s.channel) >= static_cast<int>(ftl::codecs::Channel::Data)) return true;
 
 	ftl::codecs::StreamPacket s2 = s;
 	// Adjust timestamp relative to start of file.