diff --git a/tests/io/ConcurrentNetworkEchoTest.cpp b/tests/io/ConcurrentNetworkEchoTest.cpp
index 3a2583c3cc1ac5294ace91244414ab4214962eb0..11c39b9f3cf2b914f129161bf53fa8d31bf4d3de 100644
--- a/tests/io/ConcurrentNetworkEchoTest.cpp
+++ b/tests/io/ConcurrentNetworkEchoTest.cpp
@@ -54,12 +54,12 @@ auto main(int argc, char* argv[]) -> int {
 					cps);
 		}
 		cps.wait();
-		exit(EXIT_SUCCESS);
+		runtime.initiateTermination();
 	});
 
 	runtime.scheduleFromAnywhere(*client_producer);
 
 	runtime.waitUntilFinished();
 
-	return EXIT_FAILURE;
+	return EXIT_SUCCESS;
 }
diff --git a/tests/io/IncrementalCompletionTest.cpp b/tests/io/IncrementalCompletionTest.cpp
index 0f102fd63230f127e388e008ba55e6e420bdf593..288ad2a64e6ce5be7ed278fae640808779a1045d 100644
--- a/tests/io/IncrementalCompletionTest.cpp
+++ b/tests/io/IncrementalCompletionTest.cpp
@@ -4,7 +4,6 @@
 
 #include <cassert>	// for assert
 #include <cstdint>	// for uint64_t, int32_t
-#include <cstdlib>	// for exit, EXIT_SUCCESS
 #include <cstring>	// for memcmp
 
 #include "Common.hpp"			// for DIE_MSG_ERRNO, DIE_MSG
diff --git a/tests/io/SimpleDiskAndNetworkTest.cpp b/tests/io/SimpleDiskAndNetworkTest.cpp
index 919c2bf72325f1f9b4a8065e9277a6036ad90370..ee87b8d276e6e86876685efa6c4b76832fb2b9c9 100644
--- a/tests/io/SimpleDiskAndNetworkTest.cpp
+++ b/tests/io/SimpleDiskAndNetworkTest.cpp
@@ -8,7 +8,7 @@
 #include <unistd.h>										// for close
 
 #include <cassert>	// for assert
-#include <cstdlib>	// for mkstemp, exit, EXIT_SUCCESS
+#include <cstdlib>	// for mkstemp
 #include <cstring>	// for memcmp, memset
 #include <memory>		// for allocator, unique_ptr
 #include <string>		// for string
@@ -16,10 +16,11 @@
 
 #include "Common.hpp"										 // for DIE_MSG_ERRNO, DIE_MSG
 #include "CountingPrivateSemaphore.hpp"	 // for CPS
-#include "emper.hpp"										 // for spawn
-#include "fixtures/network.hpp"					 // for echo_client
-#include "io.hpp"												 // for readFile, accept, recv, send
-#include "io/Future.hpp"								 // for Future
+#include "Runtime.hpp"
+#include "emper.hpp"
+#include "fixtures/network.hpp"
+#include "io.hpp"
+#include "io/Future.hpp"
 
 #define PORT 4243
 #define MAX 1024
@@ -41,7 +42,8 @@ static void server_func(int sockfd) {
 	for (;;) {
 		ssize_t received = emper::io::recvAndWait(client_fd, recv_buf, sizeof(recv_buf), 0);
 		if (received == 0) {
-			exit(EXIT_SUCCESS);
+			Runtime::getRuntime()->initiateTermination();
+			return;
 		}
 
 		if (received == -1) {
diff --git a/tests/io/TooLongFutureChain.cpp b/tests/io/TooLongFutureChain.cpp
index 7a1bb3ea49a6e3b3e38d2c641f536751025fee1e..9de61b62549423d3b4d9399c7aa278ac11340a7a 100644
--- a/tests/io/TooLongFutureChain.cpp
+++ b/tests/io/TooLongFutureChain.cpp
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
 // Copyright © 2020-2021 Florian Fischer
-#include <array>		// for array
-#include <cstdlib>	// for exit, EXIT_SUCCESS, size_t
+#include <array>
+#include <cstddef>
 
 #include "emper-config.h"	 // for EMPER_IO_WORKER_URING_ENTRIES
 #include "io/Future.hpp"	 // for AlarmFuture