diff --git a/.clang-tidy b/.clang-tidy
index af07d7cf245290dd15d4dcc62de2a04756f9c483..5738808c019b7457d72a14c0644f8b32bca66536 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -1,5 +1,5 @@
 ---
-Checks:          '-*,modernize-*,-modernize-use-auto,-modernize-loop-convert,-modernize-pass-by-value,-modernize-raw-string-literal,-modernize-use-using,-modernize-avoid-bind,-modernize-return-braced-init-list,-modernize-deprecated-headers,-modernize-use-transparent-functors,-modernize-redundant-void-arg'
+Checks:          '-*,modernize-*,-modernize-use-auto,-modernize-loop-convert,-modernize-pass-by-value,-modernize-raw-string-literal,-modernize-use-using,-modernize-avoid-bind,-modernize-return-braced-init-list,-modernize-use-transparent-functors,-modernize-redundant-void-arg'
 WarningsAsErrors: '*'
 HeaderFilterRegex: ''
 AnalyzeTemporaryDtors: false
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d78d00a12a9535420bf293c6bb2b4a4851a08cae..f253211f12d203f5082f44f9d7d2ca1968b5dbe9 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1151,6 +1151,7 @@ clang-tidy:
       - cd $CI_PROJECT_DIR/build
       - cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DWALBERLA_BUFFER_DEBUG=ON -DWALBERLA_BUILD_TESTS=ON -DWALBERLA_BUILD_BENCHMARKS=ON -DWALBERLA_BUILD_TUTORIALS=ON -DWALBERLA_BUILD_TOOLS=ON -DWALBERLA_BUILD_WITH_MPI=ON -DWALBERLA_BUILD_WITH_OPENMP=ON -DCMAKE_BUILD_TYPE=Debug -DWALBERLA_DOUBLE_ACCURACY=ON
       - cmake . -LAH
+      - utilities/filterCompileCommands.py compile_commands.json
       - run-clang-tidy.py -quiet | tee clang-tidy-output.txt
    artifacts:
       paths:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 08496e0736789d7c60e1d6be97fe66ecf7a44356..869cb9f0144ac8830e2d84bdfec4a7fb0b1bdbae 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1335,4 +1335,4 @@ waLBerla_export()
 ############################################################################################################################
 
 waLBerla_link_files_to_builddir( .clang-tidy )
-waLBerla_link_files_to_builddir( run-clang-tidy.py )
+add_subdirectory( utilities )
diff --git a/src/core/debug/PrintStacktrace.cpp b/src/core/debug/PrintStacktrace.cpp
index 22b216b5548e6a6c9cb7e15c50cbafe91514f1cb..b4a8e6888c86784861f9985a358345011a5c300b 100644
--- a/src/core/debug/PrintStacktrace.cpp
+++ b/src/core/debug/PrintStacktrace.cpp
@@ -39,7 +39,7 @@ void printStacktrace()
 #if defined(WALBERLA_CXX_COMPILER_IS_GNU) || defined(WALBERLA_CXX_COMPILER_IS_INTEL) || defined( WALBERLA_CXX_COMPILER_IS_CLANG)
 
 #include <execinfo.h>
-#include <stdlib.h>
+#include <cstdlib>
 #include <string>
 
 namespace walberla {
diff --git a/tests/core/mpi/BroadcastTest.cpp b/tests/core/mpi/BroadcastTest.cpp
index 9f502ae0c4b40aad6178911da4f8afacd6a1c4f9..2724851cf5a9ea31fb95253b6b9a77fd1b942aa8 100644
--- a/tests/core/mpi/BroadcastTest.cpp
+++ b/tests/core/mpi/BroadcastTest.cpp
@@ -26,7 +26,7 @@
 #include "core/mpi/MPIManager.h"
 
 #include <limits>
-#include <stdlib.h>
+#include <cstdlib>
 #include <vector>
 
 
diff --git a/utilities/CMakeLists.txt b/utilities/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..db4ad89267a86e777e93ffe895423a4a92527656
--- /dev/null
+++ b/utilities/CMakeLists.txt
@@ -0,0 +1 @@
+waLBerla_link_files_to_builddir( filterCompileCommands.py )
diff --git a/utilities/filterCompileCommands.py b/utilities/filterCompileCommands.py
new file mode 100755
index 0000000000000000000000000000000000000000..d39a7fac80e997b9cca66ce47a6b2e14eeaa9286
--- /dev/null
+++ b/utilities/filterCompileCommands.py
@@ -0,0 +1,29 @@
+#!/usr/bin/env python3
+
+import json
+import sys
+
+def compileCommandSelector(x):
+   return not ("extern" in x["file"])
+
+if __name__ == "__main__":
+   if (len(sys.argv) != 2):
+      print("usage: ./filterCompileCommands.py compile_commands.json")
+      exit(-1)
+
+   filename = sys.argv[1]
+   print("loading compile commands file: {}".format(filename))
+
+   fin = open(filename, "r")
+   cc = json.load(fin)
+   fin.close()
+
+   print("compile commands read: {}".format(len(cc)))
+
+   cc_filtered = list( filter(compileCommandSelector, cc) )
+
+   print("compile commands filtered: {}".format(len(cc_filtered)))
+
+   fout = open(filename, "w")
+   json.dump(cc_filtered, fout)
+   fout.close()