diff --git a/components/streams/include/ftl/streams/netstream.hpp b/components/streams/include/ftl/streams/netstream.hpp
index 0db0013196f0fe8aa03adc74480223a004863c95..89330c34f20beb1516548e680c6c72b47ac97db1 100644
--- a/components/streams/include/ftl/streams/netstream.hpp
+++ b/components/streams/include/ftl/streams/netstream.hpp
@@ -76,6 +76,7 @@ class Net : public Stream {
 	ftl::UUID peer_;
 	int64_t last_frame_;
 	int64_t frame_no_;
+	int64_t last_ping_;
 	std::string uri_;
 	bool host_;
 	int tally_;
diff --git a/components/streams/src/netstream.cpp b/components/streams/src/netstream.cpp
index 1b3a99bcdd51c5baa8ebb02a1fa0418f9dba4827..5d979af8b65ea35adccb5bac482d8509f73701b7 100644
--- a/components/streams/src/netstream.cpp
+++ b/components/streams/src/netstream.cpp
@@ -22,7 +22,7 @@ float Net::sample_count__ = 0.0f;
 int64_t Net::last_msg__ = 0;
 MUTEX Net::msg_mtx__;
 
-Net::Net(nlohmann::json &config, ftl::net::Universe *net) : Stream(config), active_(false), net_(net), clock_adjust_(0) {
+Net::Net(nlohmann::json &config, ftl::net::Universe *net) : Stream(config), active_(false), net_(net), clock_adjust_(0), last_ping_(0) {
 	// TODO: Install "find_stream" binding if not installed...
 	if (!net_->isBound("find_stream")) {
 		net_->bind("find_stream", [this](const std::string &uri) -> optional<ftl::UUID> {
@@ -154,7 +154,7 @@ bool Net::begin() {
 		// FIXME: see #335
 		//spkt.timestamp -= clock_adjust_;
 		spkt.originClockDelta = clock_adjust_;
-		//LOG(INFO) << "LATENCY: " << ftl::timer::get_time() - spkt.localTimestamp() << " : " << spkt.timestamp << " - " << clock_adjust_;
+		LOG(INFO) << "LATENCY: " << ftl::timer::get_time() - spkt.localTimestamp() << " : " << spkt.timestamp << " - " << clock_adjust_;
 		spkt.version = 4;
 
 		// Manage recuring requests
@@ -357,25 +357,29 @@ bool Net::_processRequest(ftl::net::Peer &p, const ftl::codecs::Packet &pkt) {
 	// Sync clocks!
 	if (ftl::timer::isClockSlave() && p.id() == time_peer_) {
 		auto start = std::chrono::high_resolution_clock::now();
+		int64_t now = ftl::timer::get_time();
+		if (last_ping_ < now-500) {
+			last_ping_ = now;
 
-		try {
-			net_->asyncCall<int64_t>(time_peer_, "__ping__", [this, start](const int64_t &mastertime) {
-				auto elapsed = std::chrono::high_resolution_clock::now() - start;
-				int64_t latency = std::chrono::duration_cast<std::chrono::milliseconds>(elapsed).count();
-				auto clock_adjust = mastertime - (ftl::timer::get_time() + (latency/2));
-
-				if (clock_adjust != 0) {
-					LOG(INFO) << "Clock adjustment: " << clock_adjust;
-					//LOG(INFO) << "Latency: " << (latency / 2);
-					//LOG(INFO) << "Local: " << std::chrono::time_point_cast<std::chrono::milliseconds>(start).time_since_epoch().count() << ", master: " << mastertime;
-					ftl::timer::setClockAdjustment(clock_adjust);
-				}		
-			});
-		} catch (...) {
-			LOG(ERROR) << "Ping failed";
-			// Reset time peer and remove timer
-			time_peer_ = ftl::UUID(0);
-			return false;
+			try {
+				net_->asyncCall<int64_t>(time_peer_, "__ping__", [this, start](const int64_t &mastertime) {
+					auto elapsed = std::chrono::high_resolution_clock::now() - start;
+					int64_t latency = std::chrono::duration_cast<std::chrono::milliseconds>(elapsed).count();
+					auto clock_adjust = mastertime - (ftl::timer::get_time() + (latency/2));
+
+					if (clock_adjust != 0) {
+						LOG(INFO) << "Clock adjustment: " << clock_adjust;
+						//LOG(INFO) << "Latency: " << (latency / 2);
+						//LOG(INFO) << "Local: " << std::chrono::time_point_cast<std::chrono::milliseconds>(start).time_since_epoch().count() << ", master: " << mastertime;
+						ftl::timer::setClockAdjustment(clock_adjust);
+					}		
+				});
+			} catch (...) {
+				LOG(ERROR) << "Ping failed";
+				// Reset time peer and remove timer
+				time_peer_ = ftl::UUID(0);
+				return false;
+			}
 		}
 	}