diff --git a/components/streams/include/ftl/streams/netstream.hpp b/components/streams/include/ftl/streams/netstream.hpp
index 1b7368779971b8b36ec6cb67520fd184e796a337..e804ac44bad69545835d2d6effb876db48c1f68d 100644
--- a/components/streams/include/ftl/streams/netstream.hpp
+++ b/components/streams/include/ftl/streams/netstream.hpp
@@ -77,6 +77,7 @@ class Net : public Stream {
 	float required_bps_;
 	float actual_bps_;
 	bool abr_enabled_;
+	bool paused_ = false;
 
 	AdaptiveBitrate *abr_;
 
diff --git a/components/streams/src/netstream.cpp b/components/streams/src/netstream.cpp
index fcce08aecabd2db49c86e69652483a68e7b34b24..5c0c3cf43f0f769347d9576b912917bc040e5bee 100644
--- a/components/streams/src/netstream.cpp
+++ b/components/streams/src/netstream.cpp
@@ -77,6 +77,14 @@ Net::Net(nlohmann::json &config, ftl::net::Universe *net) : Stream(config), acti
 			static_cast<uint8_t>(std::max(0, std::min(255, value("bitrate", 64))));
 		tally_ = 0;
 	});
+
+	value("paused", false);
+	on("paused", [this]() {
+		paused_ = value("paused", false);
+		if (!paused_) {
+			reset();
+		}
+	});
 }
 
 Net::~Net() {
@@ -178,6 +186,7 @@ bool Net::begin() {
 		int64_t now = std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now()).time_since_epoch().count();
 
 		if (!active_) return;
+		if (paused_) return;
 
 		StreamPacket spkt = spkt_raw;
 		spkt.localTimestamp = now - int64_t(ttimeoff);