diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6d075e1ed1546bb0916b9bc3498ecc298df70c6b..b4677353da6ce08c9a97827853a4c36e452f2bc1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -30,6 +30,7 @@ endif ()
 include_directories(SYSTEM
   /usr/local/include
   ${ZLIB_INCLUDE_DIRS}
+  ${VALGRIND_INCLUDE_DIRS}
   )
 include_directories(
   ${CMAKE_CURRENT_SOURCE_DIR}/include
diff --git a/cmake_modules/FindValgrind.cmake b/cmake_modules/FindValgrind.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..0f82e0b3f0b248b8721f186cc9329d1dccbbd2df
--- /dev/null
+++ b/cmake_modules/FindValgrind.cmake
@@ -0,0 +1,23 @@
+# Find Valgrind.
+#
+# This module defines:
+#  VALGRIND_INCLUDE_DIR, where to find valgrind/memcheck.h, etc.
+#  VALGRIND_PROGRAM, the valgrind executable.
+#  VALGRIND_FOUND, If false, do not try to use valgrind.
+#
+# If you have valgrind installed in a non-standard place, you can define
+# VALGRIND_PREFIX to tell cmake where it is.
+
+message(STATUS "Valgrind Prefix: ${VALGRIND_PREFIX}")
+
+find_path(VALGRIND_INCLUDE_DIR valgrind/memcheck.h
+  ${VALGRIND_PREFIX}/include ${VALGRIND_PREFIX}/include/valgrind
+  /usr/local/include /usr/local/include/valgrind
+  /usr/include /usr/include/valgrind)
+find_program(VALGRIND_PROGRAM NAMES valgrind PATH ${VALGRIND_PREFIX}/bin /usr/local/bin /usr/bin)
+
+find_package_handle_standard_args(VALGRIND DEFAULT_MSG
+    VALGRIND_INCLUDE_DIR
+    VALGRIND_PROGRAM)
+
+mark_as_advanced(VALGRIND_INCLUDE_DIR VALGRIND_PROGRAM)
\ No newline at end of file
diff --git a/cmake_modules/TokuFeatureDetection.cmake b/cmake_modules/TokuFeatureDetection.cmake
index e245edc49ffd5ebabb7ba409c9b419fadcfe68ae..43546924c889e17cc0ead4347bddd0881f7c50ba 100644
--- a/cmake_modules/TokuFeatureDetection.cmake
+++ b/cmake_modules/TokuFeatureDetection.cmake
@@ -7,6 +7,8 @@ if(USE_BDB)
   find_package(BDB REQUIRED)
 endif()
 
+find_package(VALGRIND REQUIRED)
+
 include(CheckIncludeFiles)
 
 ## check for some include files