diff --git a/components/common/cpp/include/ftl/threads.hpp b/components/common/cpp/include/ftl/threads.hpp
index b498ca9d00318835589092e3989ce227c3dc4866..69af43b34aefff488f03c2425909a7dcc3a68da8 100644
--- a/components/common/cpp/include/ftl/threads.hpp
+++ b/components/common/cpp/include/ftl/threads.hpp
@@ -7,7 +7,7 @@
 
 #define POOL_SIZE 10
 
-#define DEBUG_MUTEX
+//#define DEBUG_MUTEX
 #define MUTEX_TIMEOUT 20
 
 #if defined DEBUG_MUTEX
diff --git a/components/net/cpp/src/universe.cpp b/components/net/cpp/src/universe.cpp
index 4d1d00499e6d42038a8a7190bba529a53f445cb3..034c41f1ca86de0ad1a069877008083931b17bbb 100644
--- a/components/net/cpp/src/universe.cpp
+++ b/components/net/cpp/src/universe.cpp
@@ -1,4 +1,5 @@
 #include <ftl/net/universe.hpp>
+#include <ftl/timer.hpp>
 #include <chrono>
 
 #ifdef WIN32
@@ -54,6 +55,20 @@ Universe::Universe(nlohmann::json &config) :
 	_installBindings();
 
 	LOG(INFO) << "SEND BUFFER SIZE = " << send_size_;
+
+	ftl::timer::add(ftl::timer::kTimerIdle10, [this](int64_t ts) {
+		UNIQUE_LOCK(net_mutex_,lk);
+		if (ftl::pool.n_idle() == ftl::pool.size()) {
+			if (garbage_.size() > 0) LOG(INFO) << "Garbage collection";
+			while (garbage_.size() > 0) {
+				// FIXME: There is possibly still something with a peer pointer
+				// that is causing this throw an exception sometimes?
+				delete garbage_.front();
+				garbage_.pop_front();
+			}
+		}
+		return true;
+	});
 }
 
 Universe::~Universe() {
@@ -184,17 +199,6 @@ void Universe::_installBindings() {
 
 // Note: should be called inside a net lock
 void Universe::_cleanupPeers() {
-
-	if (ftl::pool.n_idle() == ftl::pool.size()) {
-		if (garbage_.size() > 0) LOG(INFO) << "Garbage collection";
-		while (garbage_.size() > 0) {
-			// FIXME: There is possibly still something with a peer pointer
-			// that is causing this throw an exception sometimes?
-			delete garbage_.front();
-			garbage_.pop_front();
-		}
-	}
-
 	auto i = peers_.begin();
 	while (i != peers_.end()) {
 		if (!(*i)->isValid()) {