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 030bc0dfe56648d99ec60a785749fd8627193c91..4969489908d95598af837e0a4468aac14ff66c12 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> {
@@ -292,7 +292,7 @@ bool Net::_sendRequest(Channel c, uint8_t frameset, uint8_t frames, uint8_t coun
 				clock_adjust_ = ftl::timer::get_time() - mastertime + (latency/2);
 
 				//if (clock_adjust_ > 0) {
-				//	LOG(INFO) << "Clock adjustment: " << clock_adjust_;
+					//LOG(INFO) << "LATENCY: " << latency;
 				//}
 			});
 		} catch (...) {
@@ -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 << ", latency=" << latency/2;
+						//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;
+			}
 		}
 	}