diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 5e9e47e138135a8a31ea5a543a4cd38d46d6f081..09a6b32880ecdb8e5f2be069f28fd48b6c8d96e6 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,4 @@
-image: "flowdalic/debian-testing-dev:1.29"
+image: "flowdalic/debian-testing-dev:1.30"
 
 before_script:
   - ulimit -a
diff --git a/emper/FiberHint.cpp b/emper/FiberHint.cpp
index cd2401445e7da90afb573e331a357f1ba5968dab..790a6ac219d42403fe7635910458f1860cf6fc34 100644
--- a/emper/FiberHint.cpp
+++ b/emper/FiberHint.cpp
@@ -3,6 +3,7 @@
 #include "FiberHint.hpp"
 
 #include "CallerEnvironment.hpp"
+#include "FiberSource.hpp"
 #include "Worker.hpp"
 
 namespace emper {
diff --git a/emper/FiberHint.hpp b/emper/FiberHint.hpp
index 08859774badbc2c446615560a04edb7ebdc1d5e2..4ac5fef4f0894790fd28da3c4a0687eb7c8be179 100644
--- a/emper/FiberHint.hpp
+++ b/emper/FiberHint.hpp
@@ -6,11 +6,12 @@
 #include <iostream>
 
 #include "CallerEnvironment.hpp"
-#include "FiberSource.hpp"
 #include "emper-common.h"
 #include "lib/TaggedPtr.hpp"
 
 namespace emper {
+enum class FiberSource : uintptr_t;
+
 /**
  * @brief A descriptor where to find a fiber
  *
diff --git a/emper/Runtime.cpp b/emper/Runtime.cpp
index 818de7ccf8fe18b58c162c2b3fec1cfb01379bdc..b05d68a5c83448aa0b156d0391c2e1f571848d1e 100644
--- a/emper/Runtime.cpp
+++ b/emper/Runtime.cpp
@@ -39,6 +39,7 @@
 #include "lib/DebugUtil.hpp"
 #include "lib/ShardedFileBuffer.hpp"
 #include "lib/env.hpp"
+#include "lib/sync/PosixSemaphore.hpp"
 #include "log/LogBuffer.hpp"
 #include "sleep_strategy/SemaphoreWorkerSleepStrategy.hpp"
 #include "stats/FromAnywhere.hpp"
diff --git a/emper/Runtime.hpp b/emper/Runtime.hpp
index 26f9e9ada58d0ceb6f0c58724dfedc1e03ba25ee..f355466f13888ba2d67f05d6f0d7c693ec61e91e 100644
--- a/emper/Runtime.hpp
+++ b/emper/Runtime.hpp
@@ -30,7 +30,6 @@
 #include "lib/sync/Semaphore.hpp"
 #include "sleep_strategy/WorkerSleepStrategy.hpp"
 
-enum class LogSubsystem;
 class RuntimeBuilder;
 class ContextManager;
 class Dispatcher;
diff --git a/emper/io/Stats.hpp b/emper/io/Stats.hpp
index c828a69bca0936d38399c655733a7aacceae7be3..a651951b2a34fcbb2c14b0ba3c272cd44d0c72f7 100644
--- a/emper/io/Stats.hpp
+++ b/emper/io/Stats.hpp
@@ -1,8 +1,7 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
 // Copyright © 2020-2022 Florian Fischer, Florian Schmaus
 #pragma once
-#include <bits/types/struct_iovec.h>	// for iovec
-#include <sys/types.h>								// for ssize_t
+#include <sys/uio.h>
 
 #include <boost/circular_buffer.hpp>
 #include <chrono>		 // for nanoseconds
@@ -20,6 +19,7 @@
 #include "lib/math.hpp"
 
 class Runtime;	// lines 28-28
+
 namespace emper::io {
 class IoContext;
 class SubmitActor;	// IWYU pragma: keep
diff --git a/emper/lib/env.hpp b/emper/lib/env.hpp
index e5764e92f0457256bbd3d3f01426b3cbf636da76..6f3026d1c3901b898d52b50f743d17f8fbfcb908 100644
--- a/emper/lib/env.hpp
+++ b/emper/lib/env.hpp
@@ -5,7 +5,6 @@
 #include <cinttypes>
 #include <cstdlib>
 #include <limits>
-#include <memory>
 #include <optional>
 #include <ostream>
 #include <string>
diff --git a/emper/lib/sync/SpuriousFutex2Semaphore.hpp b/emper/lib/sync/SpuriousFutex2Semaphore.hpp
index ac369e3e974e8a0830c530ae15213f885fe37ede..a9b00fc0a3d54629a6b14367f7ba07e819fb2b90 100644
--- a/emper/lib/sync/SpuriousFutex2Semaphore.hpp
+++ b/emper/lib/sync/SpuriousFutex2Semaphore.hpp
@@ -3,7 +3,7 @@
 #pragma once
 
 #include <linux/futex.h>
-#include <syscall.h>
+#include <sys/syscall.h>
 #include <unistd.h>
 
 #include <atomic>
diff --git a/emper/sleep_strategy/WaitfdSleepStrategy.cpp b/emper/sleep_strategy/WaitfdSleepStrategy.cpp
index e75a806efd2dfa346ac8985854aea9d3a9d5cccd..b22f928b9a74aab54ae943f54f5082d0bead4145 100644
--- a/emper/sleep_strategy/WaitfdSleepStrategy.cpp
+++ b/emper/sleep_strategy/WaitfdSleepStrategy.cpp
@@ -4,7 +4,7 @@
 
 #include <liburing.h>
 #include <liburing/io_uring.h>
-#include <syscall.h>
+#include <sys/syscall.h>
 
 #include "Emper.hpp"
 #include "FiberSource.hpp"
diff --git a/emper/stats/FromAnywhere.cpp b/emper/stats/FromAnywhere.cpp
index 2459dd62b4339fa1c6e86421fa28360925a689e2..0d99f3b33209ee36386c5cfbc6b865508c150a3f 100644
--- a/emper/stats/FromAnywhere.cpp
+++ b/emper/stats/FromAnywhere.cpp
@@ -2,9 +2,9 @@
 // Copyright © 2021 Florian Schmaus
 #include "FromAnywhere.hpp"
 
-#include <memory>
 #include <string>
 
+#include "BlockablePurpose.hpp"
 #include "Emper.hpp"
 
 using namespace emper::stats;
diff --git a/emper/stats/FromAnywhere.hpp b/emper/stats/FromAnywhere.hpp
index 54a382429a3f5247c116c2bdca3951018ca9d947..dda75eece241fb4106a2b41480fc7ff3ba871ad7 100644
--- a/emper/stats/FromAnywhere.hpp
+++ b/emper/stats/FromAnywhere.hpp
@@ -7,13 +7,15 @@
 #include <iostream>
 #include <vector>
 
-#include "BlockablePurpose.hpp"
 #include "emper-common.h"
 
 enum class LogSubsystem;
 template <LogSubsystem logSubsystem>
 class Blockable;	// IWYU pragma: keep
 class Runtime;
+namespace emper {
+enum class BlockablePurpose;
+}	 // namespace emper
 
 namespace emper::stats {
 
diff --git a/emper/stats/Worker.cpp b/emper/stats/Worker.cpp
index 3b2cac4e7d358f122927483db3447cc5516bba8c..e1e0b9e81ce0346d084cdb2090b6eefcea5fb7e2 100644
--- a/emper/stats/Worker.cpp
+++ b/emper/stats/Worker.cpp
@@ -6,6 +6,7 @@
 #include <ratio>
 #include <string>
 
+#include "BlockablePurpose.hpp"
 #include "Emper.hpp"
 #include "lib/util.hpp"
 
diff --git a/emper/stats/Worker.hpp b/emper/stats/Worker.hpp
index f302ddf9ef71d5606b29fdb4c758f4fa56312452..0c3195df283d392b9e6d9b6f94f7f8ce5da3f554 100644
--- a/emper/stats/Worker.hpp
+++ b/emper/stats/Worker.hpp
@@ -9,7 +9,6 @@
 #include <iostream>
 #include <vector>
 
-#include "BlockablePurpose.hpp"
 #include "emper-common.h"
 #include "lib/math.hpp"
 
@@ -19,6 +18,9 @@ class Blockable;	// IWYU pragma: keep
 class Context;
 class Dispatcher;
 class Runtime;
+namespace emper {
+enum class BlockablePurpose;
+}	 // namespace emper
 
 namespace emper::stats {
 
diff --git a/eval/BFP9000.cpp b/eval/BFP9000.cpp
index 83f63d3ec60c6129b59cd382e1d33e1f69faa916..887221c3c79a2bd309b550ba52c9a799fca6bea4 100644
--- a/eval/BFP9000.cpp
+++ b/eval/BFP9000.cpp
@@ -12,7 +12,6 @@
 #include <filesystem>
 #include <fstream>
 #include <iostream>
-#include <memory>
 #include <numeric>
 #include <optional>
 #include <random>
diff --git a/eval/IoLatency.cpp b/eval/IoLatency.cpp
index d071ddd5f372b40d7a7f85f15b27bf3470611074..65388ecc551220b65c6a30147fadcfba1f76cfb1 100644
--- a/eval/IoLatency.cpp
+++ b/eval/IoLatency.cpp
@@ -14,7 +14,6 @@
 #include <iostream>
 #include <string>
 #include <thread>
-#include <type_traits>
 
 #include "BinaryPrivateSemaphore.hpp"
 #include "Common.hpp"
diff --git a/extra-libs/ws-queue/WorkStealingQueueLib.cpp b/extra-libs/ws-queue/WorkStealingQueueLib.cpp
index f024cc3ca22518abedf09d687d5d6931211da4f9..25eb05c50e51da5e5a62bba92f8e2e839c13fdd8 100644
--- a/extra-libs/ws-queue/WorkStealingQueueLib.cpp
+++ b/extra-libs/ws-queue/WorkStealingQueueLib.cpp
@@ -2,12 +2,15 @@
 // Copyright © 2022 Florian Schmaus
 #include "WorkStealingQueueLib.hpp"
 
-#include "StealingResult.hpp"
 #include "lib/adt/PushBottomResult.hpp"
 #include "lib/adt/WsClQueue.hpp"
 #include "lib/adt/WsClv3Queue.hpp"
 #include "lib/adt/WsClv4Queue.hpp"
 
+namespace emper {
+enum class StealingResult;
+}	 // namespace emper
+
 namespace emper::extralibs::wsqueue {
 
 constexpr int maxRetries = 0;
diff --git a/extra-libs/ws-queue/WorkStealingQueueLib.hpp b/extra-libs/ws-queue/WorkStealingQueueLib.hpp
index 10a94c677ab8486786cb717168d45cd6a276a99e..df14015747413aaabe4e7f7ed55af73e7e475607 100644
--- a/extra-libs/ws-queue/WorkStealingQueueLib.hpp
+++ b/extra-libs/ws-queue/WorkStealingQueueLib.hpp
@@ -2,9 +2,12 @@
 // Copyright © 2022 Florian Schmaus
 #pragma once
 
-#include "StealingResult.hpp"
 #include "lib/adt/PushBottomResult.hpp"
 
+namespace emper {
+enum class StealingResult;
+}	 // namespace emper
+
 namespace emper::extralibs::wsqueue {
 
 namespace cl {
diff --git a/tests/io/SimpleDiskAndNetworkTest.cpp b/tests/io/SimpleDiskAndNetworkTest.cpp
index 58f8f9a94ab0673271f9ef1e7b6878d4ab32a181..865cf8b0da740296c9d8a94823156c66aeb47268 100644
--- a/tests/io/SimpleDiskAndNetworkTest.cpp
+++ b/tests/io/SimpleDiskAndNetworkTest.cpp
@@ -1,8 +1,8 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
 // Copyright © 2020-2021 Florian Fischer
-#include <bits/types/struct_iovec.h>	// for iovec
-#include <fcntl.h>										// for open, O_RDONLY
+#include <fcntl.h>
 #include <sys/types.h>
+#include <sys/uio.h>
 
 #include <array>
 #include <cstdlib>	// for mkstemp
@@ -19,6 +19,7 @@
 #include "fixtures/network.hpp"
 #include "io.hpp"
 #include "io/Future.hpp"
+
 class Fiber;
 
 using namespace emper::io;
diff --git a/tests/io/TimeoutTest.cpp b/tests/io/TimeoutTest.cpp
index 317401f22c331d00e4f514c2180526478d17da6e..7390709efcaa07536a28a40514f33d5ae2a38c42 100644
--- a/tests/io/TimeoutTest.cpp
+++ b/tests/io/TimeoutTest.cpp
@@ -1,5 +1,6 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
 // Copyright © 2021 Florian Fischer
+#include <arpa/inet.h>
 #include <netinet/in.h>
 #include <sys/eventfd.h>
 #include <sys/socket.h>
diff --git a/tests/lib/TemplateUtilTest.cpp b/tests/lib/TemplateUtilTest.cpp
index 17a59ae2b0974927d96022206cc15c01e6863dd8..cfed69d805637c55d5a2601c8d35a8639bdb61c0 100644
--- a/tests/lib/TemplateUtilTest.cpp
+++ b/tests/lib/TemplateUtilTest.cpp
@@ -5,6 +5,7 @@
 #include <array>
 #include <cstddef>
 #include <cstdint>
+#include <string>
 #include <utility>
 #include <vector>