diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3feeccb492586ef8ab55a79c3e08462bbecb986a..ae7e9b7374b02cc2561d3b03a301904d5e967f5b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -11,12 +11,12 @@ set(DEDISP_VERSION_PATCH 1)
 set(DEDISP_VERSION ${DEDISP_VERSION_MAJOR}.${DEDISP_VERSION_MINOR}.${DEDISP_VERSION_PATCH} )
 
 # cmake configuration
-cmake_minimum_required(VERSION 2.8)
+cmake_minimum_required(VERSION 3.9)
 
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
 
 # dependencies
-find_package(CUDA)
+find_package(CUDA REQUIRED)
 
 # set Release as default build type
 if(NOT CMAKE_BUILD_TYPE)
@@ -31,13 +31,13 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
 ################################################################################
 # options
 ################################################################################
-option(ENABLE_BENCHMARK on)
+option(ENABLE_BENCHMARK ON)
 
 if (ENABLE_BENCHMARK)
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEDISP_BENCHMARK")
 endif()
 
-option(ENABLE_DEBUG off)
+option(ENABLE_DEBUG OFF)
 
 if (ENABLE_DEBUG)
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEDISP_DEBUG")
@@ -61,13 +61,7 @@ endif()
 ################################################################################
 # OpenMP configuration
 ################################################################################
-find_package(OpenMP)
-
-if(OPENMP_FOUND)
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
-set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
-endif()
+find_package(OpenMP REQUIRED)
 
 
 ################################################################################
diff --git a/bin/benchmark/bench.hpp b/bin/benchmark/bench.hpp
index 8258f08d9bcdba018cc848cdfd1217b9dc7fca15..3b882f2809459c056604d868dbbf6adf0ab6e48f 100644
--- a/bin/benchmark/bench.hpp
+++ b/bin/benchmark/bench.hpp
@@ -18,7 +18,6 @@
 #include <Plan.hpp>
 
 #include "external/Stopwatch.h"
-#include <omp.h>
 #include <getopt.h>
 #include <string.h>
 
diff --git a/cmake/FindCUDAnvToolsExt.cmake b/cmake/FindCUDAnvToolsExt.cmake
index f5144f8b9ad2c6a97b25ebf445e559b4542216e0..d1501b566e5a6b57da4845fca467235e1b6b1520 100644
--- a/cmake/FindCUDAnvToolsExt.cmake
+++ b/cmake/FindCUDAnvToolsExt.cmake
@@ -14,6 +14,12 @@ find_library(
   PATH_SUFFIXES lib64)
 
 include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(CUDA_nvToolsExt_LIBRARY DEFAULT_MSG CUDA_nvToolsExt_LIBRARY)
+
+find_package_handle_standard_args(
+  CUDAnvToolsExt REQUIRED_VARS
+    CUDA_nvToolsExt_LIBRARY
+)
+
+mark_as_advanced(CUDAnvToolsExt_DIR)
 
 endif(NOT CUDA_nvToolsExt_LIBRARY_FOUND)
\ No newline at end of file
diff --git a/cmake/FindFFTW3.cmake b/cmake/FindFFTW3.cmake
index 472027aae6829cf8e730231cb836a0aadeb8ac95..96c5cc79b72a4bf1765db6b56be1ea70e0f2b13b 100644
--- a/cmake/FindFFTW3.cmake
+++ b/cmake/FindFFTW3.cmake
@@ -1,6 +1,6 @@
 # - Try to find the FFTW3 library
 # Variables used by this module:
-#  FFTW3_ROOT_DIR   - CUDA toolkit root directory
+#  FFTW3_ROOT_DIR   - FFTW3 root directory
 # Variables defined by this module:
 #  FFTW3_FOUND   - system has FFTW3_LIBRARY
 #  FFTW3_LIBRARY - the FFTW3_LIBRARY library
@@ -33,16 +33,8 @@ find_library(
 include(FindPackageHandleStandardArgs)
 
 find_package_handle_standard_args(
-  FFTW3_INCLUDE_DIR DEFAULT_MSG
-  FFTW3_INCLUDE_DIR
-)
-
-find_package_handle_standard_args(
-  FFTW3_LIBRARY DEFAULT_MSG
-  FFTW3_LIBRARY
-)
-
-find_package_handle_standard_args(
-  FFTW3F_LIBRARY DEFAULT_MSG
-  FFTW3F_LIBRARY
+  FFTW3 REQUIRED_VARS
+    FFTW3_INCLUDE_DIR
+    FFTW3_LIBRARY
+    FFTW3F_LIBRARY
 )
\ No newline at end of file
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index b6347f0ebbb3537b39b47db6814e578dd485056a..eaf4c687dcea7cde6c6b4d53b008af6ff51ba3f5 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -4,6 +4,7 @@
 
 # include directory for common header files
 include_directories(common)
+include_directories(${CUDA_TOOLKIT_INCLUDE})
 
 # add subdirectories for individual libraries
 add_subdirectory(common)
@@ -14,7 +15,6 @@ add_subdirectory(external)
 # plan library
 ################################################################################
 add_library(plan OBJECT Plan.cpp GPUPlan.cpp)
-target_include_directories(plan PUBLIC ${CUDA_TOOLKIT_INCLUDE})
 
 
 ################################################################################
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
index 3036a141714abcb8fc931fe60eed7ce6e4f06b53..09a41fe55c429f75b6e5c64d0605287d6a84408b 100644
--- a/src/common/CMakeLists.txt
+++ b/src/common/CMakeLists.txt
@@ -1,6 +1,8 @@
-add_library(common OBJECT
+add_library(common SHARED
     dedisp_error.cpp
     helper.cpp
 )
 
+target_link_libraries(common OpenMP::OpenMP_CXX)
+
 add_subdirectory(cuda)
diff --git a/src/common/helper.cpp b/src/common/helper.cpp
index e91c6878c79b808e15fd4326e6ed9cbf67829d96..907b9dc084eb6f0e59b275e8cba1fcb2ce2083f1 100644
--- a/src/common/helper.cpp
+++ b/src/common/helper.cpp
@@ -6,6 +6,7 @@
 #include "helper.h"
 #include <unistd.h> // get total memory
 #include <sys/resource.h> // get used memory
+#include <omp.h>
 
 namespace dedisp
 {
diff --git a/src/common/helper.h b/src/common/helper.h
index f14ec3e2dd148a52777179717162a28c93173114..a2eb6e58d1b52bad8b85fd4dd3f7761764d89b9d 100644
--- a/src/common/helper.h
+++ b/src/common/helper.h
@@ -8,8 +8,6 @@
 
 #include <cstddef>
 
-#include "omp.h"
-
 namespace dedisp
 {
 
diff --git a/src/dedisp/CMakeLists.txt b/src/dedisp/CMakeLists.txt
index 6da473ba1c71457037c2d286e405fa2eb02d90aa..276f085f8bc8dc20b5a2dee22181c72176ae1081 100644
--- a/src/dedisp/CMakeLists.txt
+++ b/src/dedisp/CMakeLists.txt
@@ -7,7 +7,6 @@ cuda_add_library(
     dedisperse/dedisperse.cu
     unpack/unpack.cu
     transpose/transpose.cu
-    $<TARGET_OBJECTS:common>
     $<TARGET_OBJECTS:plan>
     $<TARGET_OBJECTS:external>
     $<TARGET_OBJECTS:clib>
@@ -15,6 +14,7 @@ cuda_add_library(
 
 target_link_libraries(
     dedisp
+    common
     cu
     tdd
     fdd
diff --git a/src/dedisp/dedisperse/dedisperse.cu b/src/dedisp/dedisperse/dedisperse.cu
index 4a6486df2ee37b777324b8af0a5f31e69d8fdf2a..a3317ee52f25adb5dc00734c398a21946cdade51 100644
--- a/src/dedisp/dedisperse/dedisperse.cu
+++ b/src/dedisp/dedisperse/dedisperse.cu
@@ -89,6 +89,7 @@ bool dedisperse(const dedisp_word*  d_in,
     // --------------------------------------
     // Determine whether we should use texture memory
     bool use_texture_mem = check_use_texture_mem();
+#if (__CUDACC_VER_MAJOR__ < 11)
     if( use_texture_mem ) {
         dedisp_size chans_per_word = sizeof(dedisp_word)*BITS_PER_BYTE / in_nbits;
         dedisp_size nchan_words    = nchans / chans_per_word;
@@ -109,6 +110,9 @@ bool dedisperse(const dedisp_word*  d_in,
         }
 #endif // DEDISP_DEBUG
     }
+#else
+    use_texture_mem = false;
+#endif
     // --------------------------------------
 
     // Define thread decomposition
diff --git a/src/fdd/CMakeLists.txt b/src/fdd/CMakeLists.txt
index 2f7ab06deeb8dce284e731a6cbb4c440673a1d9f..444771fa2224067d87ddf7ef178c160a23b5371b 100644
--- a/src/fdd/CMakeLists.txt
+++ b/src/fdd/CMakeLists.txt
@@ -4,7 +4,6 @@ cuda_add_library(fdd SHARED
     dedisperse/FDDKernel.cu
     unpack/unpack.cu
     chunk.cpp
-    $<TARGET_OBJECTS:common>
     $<TARGET_OBJECTS:plan>
     $<TARGET_OBJECTS:external>
 )
@@ -13,7 +12,9 @@ find_package(FFTW3 REQUIRED true)
 
 target_link_libraries(fdd
     ${FFTW3F_LIBRARY}
+    common
     cu
+    OpenMP::OpenMP_CXX
 )
 
 target_include_directories(fdd
diff --git a/src/tdd/CMakeLists.txt b/src/tdd/CMakeLists.txt
index e2c8ea9813bfaeeccfc89d5b4fdf3f9106f56342..fd70d7ce77607fbc47df779cf12bfdecb244cdb5 100644
--- a/src/tdd/CMakeLists.txt
+++ b/src/tdd/CMakeLists.txt
@@ -3,13 +3,13 @@ cuda_add_library(
     TDDPlan.cpp
     dedisperse/TDDKernel.cu
     unpack/unpack.cu
-    $<TARGET_OBJECTS:common>
     $<TARGET_OBJECTS:plan>
     $<TARGET_OBJECTS:external>
 )
 
 target_link_libraries(
     tdd
+    common
     cu
 )
 
diff --git a/src/tdd/dedisperse/TDDKernel.cu b/src/tdd/dedisperse/TDDKernel.cu
index bed8822ed87583e7411927b9400b01d37b6887db..f5fab65c072e07b9b4ff6f83ff8b5a99134abb51 100644
--- a/src/tdd/dedisperse/TDDKernel.cu
+++ b/src/tdd/dedisperse/TDDKernel.cu
@@ -49,6 +49,15 @@ unsigned int DedispKernel::get_nsamps_per_thread()
     return DEDISP_SAMPS_PER_THREAD;
 }
 
+void DedispKernel::use_texture_memory(bool enabled)
+{
+#if (__CUDACC_VER_MAJOR__ < 11)
+    m_use_texture_mem = enabled;
+#else
+    m_use_texture_mem = false;
+#endif
+}
+
 /*
  * dedisperse routine
  */
@@ -79,6 +88,7 @@ void DedispKernel::launch(
 
     // Initialise texture memory if necessary
     // --------------------------------------
+#if (__CUDACC_VER_MAJOR__ < 11)
     if (m_use_texture_mem && d_in != m_d_in)
     {
         m_d_in = (dedisp_word *) d_in;
@@ -99,6 +109,7 @@ void DedispKernel::launch(
             input_words * sizeof(dedisp_word))
         );
     }
+#endif
     // --------------------------------------
 
     // Define thread decomposition
diff --git a/src/tdd/dedisperse/TDDKernel.hpp b/src/tdd/dedisperse/TDDKernel.hpp
index a6fcaccc434c83f1f59c4524fd44788f4f64d6fa..7b9e08d4fe00de3e3853cab5bf5beae8497bf6f4 100644
--- a/src/tdd/dedisperse/TDDKernel.hpp
+++ b/src/tdd/dedisperse/TDDKernel.hpp
@@ -23,7 +23,7 @@ class DedispKernel
 
         unsigned int get_nsamps_per_thread();
 
-        void use_texture_memory(bool enabled) { m_use_texture_mem = enabled; };
+        void use_texture_memory(bool enabled);
 
         void launch(
             const dedisp_word*  d_in,