diff --git a/BaseLib/ConfigTree-impl.h b/BaseLib/ConfigTree-impl.h
index 052d2218c88976bcf952f9ca4cea63c757f69fd0..525d2b8e588bb0e16c589c1c48519505fbb5950b 100644
--- a/BaseLib/ConfigTree-impl.h
+++ b/BaseLib/ConfigTree-impl.h
@@ -8,6 +8,8 @@
  *
  */
 
+// IWYU pragma: private, include "ConfigTree.h"
+
 #include <sstream>
 #include <utility>
 
diff --git a/BaseLib/ConfigTree.cpp b/BaseLib/ConfigTree.cpp
index 844757dd49643b82c5e7c8a94cf917e12167fc3b..34362a57333e54443b7795275001942639167ee3 100644
--- a/BaseLib/ConfigTree.cpp
+++ b/BaseLib/ConfigTree.cpp
@@ -10,6 +10,7 @@
 
 #include "ConfigTree.h"
 
+#include <cstddef>
 #include <forward_list>
 #include <utility>
 
diff --git a/BaseLib/ConfigTree.h b/BaseLib/ConfigTree.h
index 2d175db30d7ab494f4a64293d4a810a8590f31d9..8b735f994a693bf5d2ab2f638b5807973357c95a 100644
--- a/BaseLib/ConfigTree.h
+++ b/BaseLib/ConfigTree.h
@@ -12,6 +12,8 @@
 
 #include <boost/property_tree/ptree.hpp>
 #include <functional>
+#include <iosfwd>
+#include <iterator>
 #include <map>
 #include <memory>
 #include <optional>
@@ -688,4 +690,4 @@ private:
 
 }  // namespace BaseLib
 
-#include "ConfigTree-impl.h"
+#include "ConfigTree-impl.h"  // IWYU pragma: keep
diff --git a/BaseLib/ConfigTreeUtil.cpp b/BaseLib/ConfigTreeUtil.cpp
index a87b8c370d48c39c543530ffd18d9618fe6a4d4e..955b85d0dd54b537b21112f5da421d5aa0a52e9c 100644
--- a/BaseLib/ConfigTreeUtil.cpp
+++ b/BaseLib/ConfigTreeUtil.cpp
@@ -10,9 +10,12 @@
 
 #include "ConfigTreeUtil.h"
 
+#include <boost/operators.hpp>
 #include <boost/property_tree/xml_parser.hpp>
-#include <regex>
+#include <ostream>
+#include <utility>
 
+#include "ConfigTree.h"
 #include "Error.h"
 #include "Logging.h"
 
diff --git a/BaseLib/ConfigTreeUtil.h b/BaseLib/ConfigTreeUtil.h
index dc21f9e17e536bb69e80ef0046ea8ab3d8922791..ac0e78053491a574a84520d6b0eae67ae6ace107 100644
--- a/BaseLib/ConfigTreeUtil.h
+++ b/BaseLib/ConfigTreeUtil.h
@@ -10,6 +10,9 @@
 
 #pragma once
 
+#include <iosfwd>
+#include <string>
+
 #include "ConfigTree.h"
 
 namespace BaseLib
diff --git a/BaseLib/FileTools.cpp b/BaseLib/FileTools.cpp
index 3cc61dde0e1e278a3d96b663c7399c38a822fb70..d591c095ecc8b04290e48d42bb8d07f8a7dfc1e4 100644
--- a/BaseLib/FileTools.cpp
+++ b/BaseLib/FileTools.cpp
@@ -14,12 +14,15 @@
 
 #include "FileTools.h"
 
-#include <boost/algorithm/string.hpp>
+#include <spdlog/fmt/bundled/core.h>
+
+#include <boost/algorithm/string/predicate.hpp>
 #include <filesystem>
 #include <fstream>
 #include <typeindex>
 #include <unordered_map>
 
+#include "BaseLib/Logging.h"
 #include "Error.h"
 
 namespace
diff --git a/BaseLib/FileTools.h b/BaseLib/FileTools.h
index 795352143ac120c44972daa649758d67bde8d469..c4dbd302c7a10d7bb1568047ebf39949a095a591 100644
--- a/BaseLib/FileTools.h
+++ b/BaseLib/FileTools.h
@@ -14,8 +14,10 @@
 
 #pragma once
 
+#include <cstddef>
 #include <iosfwd>
 #include <string>
+#include <tuple>
 #include <vector>
 
 namespace BaseLib
diff --git a/BaseLib/Histogram.cpp b/BaseLib/Histogram.cpp
index b7d0501d87df37e79a69bc05b2d7f945e6ae118c..642e0afa0d36c2d8c2f7d8592b6fa358d6448bc3 100644
--- a/BaseLib/Histogram.cpp
+++ b/BaseLib/Histogram.cpp
@@ -10,6 +10,7 @@
 
 #include "Histogram.h"
 
+#include <cmath>
 #include <fstream>
 
 #include "BaseLib/Logging.h"
diff --git a/BaseLib/Histogram.h b/BaseLib/Histogram.h
index 7eea4511eed0f4e74cb62048b97e4262c03900d8..92f13b0f5b119c8b57d09044e9bbc0221432f178 100644
--- a/BaseLib/Histogram.h
+++ b/BaseLib/Histogram.h
@@ -13,8 +13,9 @@
 #pragma once
 
 #include <algorithm>
-#include <cmath>
+#include <cstddef>
 #include <iosfwd>
+#include <iterator>
 #include <string>
 #include <utility>
 #include <vector>
diff --git a/BaseLib/IO/readStringListFromFile.cpp b/BaseLib/IO/readStringListFromFile.cpp
index 9e0a247af598f8a3d41d5309727e2bf951109e96..8c393cd32b967ddea22352173bc12e5b2e734922 100644
--- a/BaseLib/IO/readStringListFromFile.cpp
+++ b/BaseLib/IO/readStringListFromFile.cpp
@@ -7,7 +7,7 @@
  *              http://www.opengeosys.org/project/license
  */
 
-#include "BaseLib/IO/readStringListFromFile.h"
+#include "readStringListFromFile.h"
 
 #include <fstream>
 
diff --git a/BaseLib/Logging.cpp b/BaseLib/Logging.cpp
index b4fb1fad214cdde63bc7a5049a548b9454557abf..bc8b32e50c63982dd24f1a4e26a39c45f3d91a01 100644
--- a/BaseLib/Logging.cpp
+++ b/BaseLib/Logging.cpp
@@ -11,9 +11,11 @@
 
 #include "Logging.h"
 
+#include <spdlog/common.h>
 #include <spdlog/sinks/stdout_color_sinks.h>
 #include <spdlog/spdlog.h>
 
+#include <exception>
 #include <iostream>
 #include <map>
 
diff --git a/BaseLib/Logging.h b/BaseLib/Logging.h
index 2d984b7d538d79cac557fb62f806aee58babd798..9cebd9e034ccf58bfab925d45bd6dd45af4d9ad9 100644
--- a/BaseLib/Logging.h
+++ b/BaseLib/Logging.h
@@ -15,6 +15,7 @@
 
 #include <memory>
 #include <string>
+#include <utility>
 
 #include "baselib_export.h"
 
diff --git a/BaseLib/MemWatch.cpp b/BaseLib/MemWatch.cpp
index a041df60f80e75a04d32e571ddd32a359a1f8ee5..a1e1f110758c5b05a9a960f0889c303e122aaa15 100644
--- a/BaseLib/MemWatch.cpp
+++ b/BaseLib/MemWatch.cpp
@@ -15,7 +15,7 @@
 #include "MemWatch.h"
 
 #if !defined(_WIN32) && !defined(__APPLE__) && !defined(__MINGW32__)
-#include <sys/types.h>
+#include <stdio.h>
 #include <unistd.h>
 
 #include <fstream>
diff --git a/BaseLib/PrjProcessing.cpp b/BaseLib/PrjProcessing.cpp
index 51069e4c43ac0cb18c6dbed388a4cd180f2a438a..c5ec7113a0ab6e448c929ea3771aa91d0c3df900 100644
--- a/BaseLib/PrjProcessing.cpp
+++ b/BaseLib/PrjProcessing.cpp
@@ -10,14 +10,14 @@
 
 #include "PrjProcessing.h"
 
+#include <libxml/globals.h>
 #include <libxml/parser.h>
-#include <libxml/tree.h>
+#include <libxml/xmlstring.h>
 #include <xml_patch.h>
 
 #include <filesystem>
 #include <fstream>
 #include <regex>
-#include <sstream>
 
 #include "DisableFPE.h"
 #include "Error.h"
diff --git a/BaseLib/PrjProcessing.h b/BaseLib/PrjProcessing.h
index 804e3c5c92f772b5917240fdce463afa98227f82..7625064e224b07dd30584476c80f64532929a2c4 100644
--- a/BaseLib/PrjProcessing.h
+++ b/BaseLib/PrjProcessing.h
@@ -11,6 +11,7 @@
 #pragma once
 
 #include <iosfwd>
+#include <string>
 #include <vector>
 
 namespace BaseLib
diff --git a/BaseLib/StringTools.cpp b/BaseLib/StringTools.cpp
index 2e2ca1470986098c7e25991597f67f11c136339d..2e4ed80cd2bfca56a16cbb6004ec14858d3237ef 100644
--- a/BaseLib/StringTools.cpp
+++ b/BaseLib/StringTools.cpp
@@ -16,11 +16,10 @@
 
 #include <algorithm>
 #include <boost/algorithm/string/replace.hpp>
-#include <cctype>
 #include <chrono>
 #include <cstdarg>
 #include <cstdio>
-#include <iomanip>
+#include <iterator>
 #include <random>
 
 namespace BaseLib
diff --git a/BaseLib/StringTools.h b/BaseLib/StringTools.h
index 28bb238c221b32bd51a1d936d36978e86f4dec11..a064556c876c9211c01cd5448c5c945b5bf94c9a 100644
--- a/BaseLib/StringTools.h
+++ b/BaseLib/StringTools.h
@@ -14,6 +14,7 @@
 
 #pragma once
 
+#include <cstddef>
 #include <list>
 #include <sstream>
 #include <string>
diff --git a/BaseLib/Subdivision.h b/BaseLib/Subdivision.h
index e8475eae62ab283f03cb37f4eedd3b67a8dee1de..b3902aff8993eef371ab9b57c1b200fc331f1ada 100644
--- a/BaseLib/Subdivision.h
+++ b/BaseLib/Subdivision.h
@@ -10,6 +10,7 @@
 
 #pragma once
 
+#include <cstddef>
 #include <vector>
 
 namespace BaseLib
diff --git a/BaseLib/TimeInterval.cpp b/BaseLib/TimeInterval.cpp
index 8aa7dea18d6acbdb7da29620648d363a2d41bae4..4ed44e6e58219bdb9bf484f31fdbc86952aa126d 100644
--- a/BaseLib/TimeInterval.cpp
+++ b/BaseLib/TimeInterval.cpp
@@ -14,6 +14,8 @@
 
 #include "TimeInterval.h"
 
+#include <memory>
+
 #include "ConfigTree.h"
 
 namespace BaseLib