diff --git a/emper/io/IoContext.cpp b/emper/io/IoContext.cpp
index 83ab7001cea8358dbd3afc683c35fc6b1b81a2c0..550c55b4da24a863be5b31c938dfbef678a020a4 100644
--- a/emper/io/IoContext.cpp
+++ b/emper/io/IoContext.cpp
@@ -12,6 +12,7 @@
 #include <cassert>	// for assert
 #include <cerrno>		// for errno, ECANCELED, EBUSY, EAGAIN, EINTR
 #include <cstring>	// for memset
+#include <memory>
 #include <ostream>	// for basic_osteram::operator<<, operator<<
 #include <string>
 #include <utility>
diff --git a/emper/sleep_strategy/PipeSleepStrategy.hpp b/emper/sleep_strategy/PipeSleepStrategy.hpp
index 5c60b74781a40d98da9773f71970528729528088..5dc4030411cabf3c2ad08f4e0bdaff3d49c6f100 100644
--- a/emper/sleep_strategy/PipeSleepStrategy.hpp
+++ b/emper/sleep_strategy/PipeSleepStrategy.hpp
@@ -9,6 +9,7 @@
 #include <cstddef>
 #include <cstdint>
 #include <iostream>
+#include <memory>
 #include <stdexcept>
 #include <type_traits>
 #include <vector>
@@ -131,7 +132,7 @@ class PipeSleepStrategy : AbstractWorkerSleepStrategy<PipeSleepStrategy>,
 		std::atomic<size_t> wakeupDueToNotify = 0;
 	};
 
-	Stats* stats;
+	std::unique_ptr<Stats> stats;
 
 	workerid_t workerCount;
 	int sleepFd;
@@ -253,12 +254,10 @@ class PipeSleepStrategy : AbstractWorkerSleepStrategy<PipeSleepStrategy>,
 		notifyFd = fds[1];
 
 		if constexpr (emper::STATS) {
-			stats = new Stats();
+			stats = std::make_unique<Stats>();
 		}
 	}
 
-	~PipeSleepStrategy() { delete stats; }
-
 	void printStats() { std::cout << *stats; }
 
 	[[nodiscard]] inline auto getSleeping() const -> long { return sleepers.load(); }