diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5d4e3c27271876bd9cc231485f62f8041f7dd54a..7a39496e741c244e6998df28fb26b4d1d1afe5fd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -777,6 +777,23 @@ endif()
 
 
 
+############################################################################################################################
+##
+## backtrace may be in a separate library
+##
+############################################################################################################################
+
+if ( NOT WIN32 AND (WALBERLA_CXX_COMPILER_IS_GNU OR WALBERLA_CXX_COMPILER_IS_INTEL OR WALBERLA_CXX_COMPILER_IS_CLANG))
+   find_package ( Backtrace QUIET )
+   if ( Backtrace_FOUND )
+      list ( APPEND SERVICE_LIBS ${Backtrace_LIBRARIES} )
+      set ( WALBERLA_BUILD_WITH_BACKTRACE ON )
+      set ( WALBERLA_BACKTRACE_HEADER ${Backtrace_HEADER} )
+   endif ( Backtrace_FOUND )
+endif()
+
+
+
 ############################################################################################################################
 ##
 ## MPI
diff --git a/src/core/debug/PrintStacktrace.cpp b/src/core/debug/PrintStacktrace.cpp
index a83b13d23ad7c33e0e2b4b6d6d3b5caa075bc175..f939d19d576602db75a7ade1d107abe76da0c52c 100644
--- a/src/core/debug/PrintStacktrace.cpp
+++ b/src/core/debug/PrintStacktrace.cpp
@@ -36,9 +36,9 @@ void printStacktrace()
 } // namespace debug
 } // namespace walberla
 
-#if defined(WALBERLA_CXX_COMPILER_IS_GNU) || defined(WALBERLA_CXX_COMPILER_IS_INTEL) || defined( WALBERLA_CXX_COMPILER_IS_CLANG)
+#ifdef WALBERLA_BUILD_WITH_BACKTRACE
 
-#include <execinfo.h>
+#include WALBERLA_BACKTRACE_HEADER
 #include <cstdlib>
 #include <string>
 
@@ -55,14 +55,13 @@ namespace debug {
       void * array[BACKTRACE_LENGTH];
       size_t size;
       char **strings;
-      size_t i;
 
       size = numeric_cast< size_t >( backtrace (array, BACKTRACE_LENGTH) );
       strings = backtrace_symbols (array, int_c(size) );
 
       os << "Backtrace: " << std::endl;
 
-      for (i = 0; i < size; i++)
+      for (size_t i = 0; i < size; i++)
       {
          std::string line ( strings[i] );
 #ifdef __APPLE__
diff --git a/src/waLBerlaDefinitions.in.h b/src/waLBerlaDefinitions.in.h
index 0d3ed2a75744723af5b9bc1ecd5553252a18504f..bb9b6d029d80340f34342401a23d2f13e2356b7d 100644
--- a/src/waLBerlaDefinitions.in.h
+++ b/src/waLBerlaDefinitions.in.h
@@ -53,6 +53,10 @@
 #cmakedefine WALBERLA_USE_STD_ANY
 #cmakedefine WALBERLA_USE_STD_EXPERIMENTAL_OPTIONAL
 #cmakedefine WALBERLA_USE_STD_OPTIONAL
+#cmakedefine WALBERLA_BUILD_WITH_BACKTRACE
+#ifdef WALBERLA_BUILD_WITH_BACKTRACE
+#define WALBERLA_BACKTRACE_HEADER "${Backtrace_HEADER}"
+#endif
 
 // SIMD
 #cmakedefine WALBERLA_SIMD_FORCE_SCALAR