diff --git a/.clang-tidy b/.clang-tidy
new file mode 100644
index 0000000000000000000000000000000000000000..af07d7cf245290dd15d4dcc62de2a04756f9c483
--- /dev/null
+++ b/.clang-tidy
@@ -0,0 +1,68 @@
+---
+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'
+WarningsAsErrors: '*'
+HeaderFilterRegex: ''
+AnalyzeTemporaryDtors: false
+FormatStyle:     none
+User:            si11fita
+CheckOptions:    
+  - key:             modernize-loop-convert.MaxCopySize
+    value:           '16'
+  - key:             modernize-loop-convert.MinConfidence
+    value:           reasonable
+  - key:             modernize-loop-convert.NamingStyle
+    value:           CamelCase
+  - key:             modernize-make-shared.IgnoreMacros
+    value:           '1'
+  - key:             modernize-make-shared.IncludeStyle
+    value:           '0'
+  - key:             modernize-make-shared.MakeSmartPtrFunction
+    value:           'std::make_shared'
+  - key:             modernize-make-shared.MakeSmartPtrFunctionHeader
+    value:           memory
+  - key:             modernize-make-unique.IgnoreMacros
+    value:           '1'
+  - key:             modernize-make-unique.IncludeStyle
+    value:           '0'
+  - key:             modernize-make-unique.MakeSmartPtrFunction
+    value:           'std::make_unique'
+  - key:             modernize-make-unique.MakeSmartPtrFunctionHeader
+    value:           memory
+  - key:             modernize-pass-by-value.IncludeStyle
+    value:           llvm
+  - key:             modernize-pass-by-value.ValuesOnly
+    value:           '0'
+  - key:             modernize-raw-string-literal.ReplaceShorterLiterals
+    value:           '0'
+  - key:             modernize-replace-auto-ptr.IncludeStyle
+    value:           llvm
+  - key:             modernize-replace-random-shuffle.IncludeStyle
+    value:           llvm
+  - key:             modernize-use-auto.RemoveStars
+    value:           '0'
+  - key:             modernize-use-default-member-init.IgnoreMacros
+    value:           '1'
+  - key:             modernize-use-default-member-init.UseAssignment
+    value:           '0'
+  - key:             modernize-use-emplace.ContainersWithPushBack
+    value:           '::std::vector;::std::list;::std::deque'
+  - key:             modernize-use-emplace.SmartPointers
+    value:           '::std::shared_ptr;::std::unique_ptr;::std::auto_ptr;::std::weak_ptr'
+  - key:             modernize-use-emplace.TupleMakeFunctions
+    value:           '::std::make_pair;::std::make_tuple'
+  - key:             modernize-use-emplace.TupleTypes
+    value:           '::std::pair;::std::tuple'
+  - key:             modernize-use-equals-default.IgnoreMacros
+    value:           '1'
+  - key:             modernize-use-noexcept.ReplacementString
+    value:           ''
+  - key:             modernize-use-noexcept.UseNoexceptFalse
+    value:           '1'
+  - key:             modernize-use-nullptr.NullMacros
+    value:           'NULL'
+  - key:             modernize-use-transparent-functors.SafeMode
+    value:           '0'
+  - key:             modernize-use-using.IgnoreMacros
+    value:           '1'
+...
+
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4cf439fe24bd22b024875be726aef1d0bc137b96..d78d00a12a9535420bf293c6bb2b4a4851a08cae 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1142,6 +1142,23 @@ doc:
 ##                                                                           ##
 ###############################################################################
 
+clang-tidy:
+   image: i10git.cs.fau.de:5005/walberla/buildenvs/clang:6.0
+   script:
+      - $CXX --version
+      - cmake --version
+      - mkdir $CI_PROJECT_DIR/build
+      - 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
+      - run-clang-tidy.py -quiet | tee clang-tidy-output.txt
+   artifacts:
+      paths:
+         - $CI_PROJECT_DIR/build/clang-tidy-output.txt
+   tags:
+      - docker
+
+
 cppcheck:
    image: walberla/cppcheck
    script:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0ee1e578c7a963ec1f5f40c907fce8aa647b1b6b..08496e0736789d7c60e1d6be97fe66ecf7a44356 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1327,3 +1327,12 @@ add_subdirectory ( apps )
 waLBerla_export()
 
 ############################################################################################################################
+
+############################################################################################################################
+##
+## clang-tidy
+##
+############################################################################################################################
+
+waLBerla_link_files_to_builddir( .clang-tidy )
+waLBerla_link_files_to_builddir( run-clang-tidy.py )