diff --git a/CMakeLists.txt b/CMakeLists.txt
index 55c3062..868d557 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -14,39 +14,35 @@
 
 if(UNIX)
 find_package(PkgConfig)
-if(${PKG_CONFIG_FOUND})
+find_package(ZLIB)
 if(BLOATY_ENABLE_RE2)
   pkg_search_module(RE2 re2)
-endif(BLOATY_ENABLE_RE2)
+endif()
 pkg_search_module(CAPSTONE capstone)
 pkg_search_module(PROTOBUF protobuf)
-pkg_search_module(ZLIB zlib)
 if(BLOATY_ENABLE_RE2)
-  if(${RE2_FOUND})
+  if(RE2_FOUND)
     MESSAGE(STATUS "System re2 found, using")
-  else(${RE2_FOUND})
+  else()
     MESSAGE(STATUS "System re2 not found, using bundled version")
-  endif(${RE2_FOUND})
-endif(BLOATY_ENABLE_RE2)
-if(${CAPSTONE_FOUND})
+  endif()
+endif()
+if(CAPSTONE_FOUND)
   MESSAGE(STATUS "System capstone found, using")
-else(${CAPSTONE_FOUND})
+else()
   MESSAGE(STATUS "System capstone not found, using bundled version")
-endif(${CAPSTONE_FOUND})
-if(${PROTOBUF_FOUND})
+endif()
+if(PROTOBUF_FOUND)
   MESSAGE(STATUS "System protobuf found, using")
-else(${PROTOBUF_FOUND})
+else()
   MESSAGE(STATUS "System protobuf not found, using bundled version")
-endif(${PROTOBUF_FOUND})
-if (${ZLIB_FOUND})
+endif()
+if (ZLIB_FOUND)
   MESSAGE(STATUS "System zlib found, using")
-else(${ZLIB_FOUND})
+else()
   MESSAGE(STATUS "System zlib not found, using bundled version")
-endif(${ZLIB_FOUND})
-else(${PKG_CONFIG_FOUND})
-  MESSAGE(STATUS "pkg-config not found, using bundled dependencies")
-endif(${PKG_CONFIG_FOUND})
-endif(UNIX)
+endif()
+endif()
 
 # Set default build type.
 if(NOT CMAKE_BUILD_TYPE)
@@ -67,7 +63,7 @@
 add_definitions(-D_LIBCXXABI_FUNC_VIS=)  # For Demumble.
 if(BLOATY_ENABLE_RE2)
   add_definitions(-DUSE_RE2)
-endif(BLOATY_ENABLE_RE2)
+endif()
 
 # Set MSVC runtime before including thirdparty libraries
 if(MSVC)
@@ -78,51 +74,52 @@
   foreach(flag_var
       CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
       CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
-    if(${flag_var} MATCHES "/MD")
+    if (flag_var MATCHES "/MD")
       string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
-    endif(${flag_var} MATCHES "/MD")
-  endforeach(flag_var)
+    endif()
+  endforeach()
 endif()
 
+set(THREADS_PREFER_PTHREAD_FLAG TRUE)
+find_package(Threads REQUIRED)
+
 if(UNIX)
   if(BLOATY_ENABLE_RE2)
-    if(${RE2_FOUND})
+    if(RE2_FOUND)
       include_directories(${RE2_INCLUDE_DIRS})
-    else(${RE2_FOUND})
+    else()
       set(RE2_BUILD_TESTING OFF CACHE BOOL "enable testing for RE2" FORCE)
       add_subdirectory(third_party/re2)
       include_directories(third_party/re2)
-    endif(${RE2_FOUND})
-  endif(BLOATY_ENABLE_RE2)
-  if(${CAPSTONE_FOUND})
+    endif()
+  endif()
+  if(CAPSTONE_FOUND)
     include_directories(${CAPSTONE_INCLUDE_DIRS})
-  else(${CAPSTONE_FOUND})
+  else()
     set(CAPSTONE_BUILD_SHARED OFF CACHE BOOL "Build shared library" FORCE)
     set(CAPSTONE_BUILD_TESTS OFF CACHE BOOL "Build tests" FORCE)
     add_subdirectory(third_party/capstone)
     include_directories(third_party/capstone/include)
-  endif(${CAPSTONE_FOUND})
-  if(${PROTOBUF_FOUND})
+  endif()
+  if(PROTOBUF_FOUND)
     include_directories(${PROTOBUF_INCLUDE_DIRS})
-  else(${PROTOBUF_FOUND})
+  else()
     set(protobuf_BUILD_TESTS OFF CACHE BOOL "enable tests for proto2" FORCE)
     set(protobuf_BUILD_SHARED_LIBS OFF CACHE BOOL "enable shared libs for proto2" FORCE)
     add_subdirectory(third_party/protobuf/cmake)
     include_directories(SYSTEM third_party/protobuf/src)
-  endif(${PROTOBUF_FOUND})
-  if(${ZLIB_FOUND})
-    include_directories(${ZLIB_INCLUDE_DIRS})
-  else(${ZLIB_FOUND})
+  endif()
+  if(NOT ZLIB_FOUND)
     add_subdirectory(third_party/zlib)
     include_directories(third_party/zlib)
-  endif(${ZLIB_FOUND})
-else(UNIX)
+  endif()
+else()
   if(BLOATY_ENABLE_RE2)
     set(RE2_BUILD_TESTING OFF CACHE BOOL "enable testing for RE2" FORCE)
     add_subdirectory(third_party/re2)
     include_directories(third_party/re2)
     set_property(TARGET re2 PROPERTY FOLDER "third_party")
-  endif(BLOATY_ENABLE_RE2)
+  endif()
 
   set(CAPSTONE_BUILD_SHARED OFF CACHE BOOL "Build shared library" FORCE)
   set(CAPSTONE_BUILD_TESTS OFF CACHE BOOL "Build tests" FORCE)
@@ -146,7 +143,7 @@
   set_property(TARGET libprotobuf-lite PROPERTY FOLDER "third_party")
   set_property(TARGET libprotoc PROPERTY FOLDER "third_party")
   set_property(TARGET protoc PROPERTY FOLDER "third_party")
-endif(UNIX)
+endif()
 
 include_directories(.)
 include_directories(src)
@@ -156,8 +153,8 @@
 # Baseline build flags.
 if(MSVC)
   set(CMAKE_CXX_FLAGS "/EHsc /wd4018 /D_CRT_SECURE_NO_WARNINGS /DNOMINMAX")
-else(MSVC)
-  set(CMAKE_CXX_FLAGS "-std=c++11 -W -Wall -Wno-sign-compare")
+else()
+  set(CMAKE_CXX_FLAGS "-W -Wall -Wno-sign-compare")
   set(CMAKE_CXX_FLAGS_DEBUG "-g1")
   set(CMAKE_CXX_FLAGS_RELEASE "-O2")
   set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g1")
@@ -168,7 +165,7 @@
 elseif(UNIX)
   if(BLOATY_ENABLE_BUILDID)
     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--build-id")
-  endif(BLOATY_ENABLE_BUILDID)
+  endif()
 endif()
 
 # When using Ninja, compiler output won't be colorized without this.
@@ -194,7 +191,7 @@
 endif()
 
 file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src)
-if(${PROTOC_FOUND})
+if(PROTOC_FOUND)
 add_custom_command(
   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/src/bloaty.pb.cc
   DEPENDS protoc ${CMAKE_CURRENT_SOURCE_DIR}/src/bloaty.proto
@@ -202,14 +199,14 @@
       --cpp_out=${CMAKE_CURRENT_BINARY_DIR}/src
       -I${CMAKE_CURRENT_SOURCE_DIR}/src
 )
-else(${PROTOC_FOUND})
+else()
 add_custom_command(
   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/src/bloaty.pb.cc
   COMMAND protoc ${CMAKE_CURRENT_SOURCE_DIR}/src/bloaty.proto
       --cpp_out=${CMAKE_CURRENT_BINARY_DIR}/src
       -I${CMAKE_CURRENT_SOURCE_DIR}/src
 )
-endif(${PROTOC_FOUND})
+endif()
 
 file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/src/bloaty_package.bloaty
      DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
@@ -258,85 +255,74 @@
 
 if(UNIX)
   set(LIBBLOATY_LIBS libbloaty)
-  if(${PROTOBUF_FOUND})
-    set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} ${PROTOBUF_LIBRARIES})
-  else(${PROTOBUF_FOUND})
-    set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} libprotoc)
-  endif(${PROTOBUF_FOUND})
+  if(PROTOBUF_FOUND)
+    list(APPEND LIBBLOATY_LIBS ${PROTOBUF_LIBRARIES})
+  else()
+    list(APPEND LIBBLOATY_LIBS libprotoc)
+  endif()
   if(BLOATY_ENABLE_RE2)
-    if(${RE2_FOUND})
-      set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} ${RE2_LIBRARIES})
-    else(${RE2_FOUND})
-      set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} re2)
-    endif(${RE2_FOUND})
-  endif(BLOATY_ENABLE_RE2)
-  if(${CAPSTONE_FOUND})
-    set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} ${CAPSTONE_LIBRARIES})
-  else(${CAPSTONE_FOUND})
-    set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} capstone-static)
-  endif(${CAPSTONE_FOUND})
-  if(${ZLIB_FOUND})
-    set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} ${ZLIB_LIBRARIES})
-  else(${ZLIB_FOUND})
-    set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} zlib)
-  endif(${ZLIB_FOUND})
-else(UNIX)
+    if(RE2_FOUND)
+      list(APPEND LIBBLOATY_LIBS ${RE2_LIBRARIES})
+    else()
+      list(APPEND LIBBLOATY_LIBS re2)
+    endif()
+  endif()
+  if(CAPSTONE_FOUND)
+    list(APPEND LIBBLOATY_LIBS ${CAPSTONE_LIBRARIES})
+  else()
+    list(APPEND LIBBLOATY_LIBS capstone-static)
+  endif()
+  if(ZLIB_FOUND)
+    list(APPEND LIBBLOATY_LIBS ZLIB::ZLIB)
+  else()
+    list(APPEND LIBBLOATY_LIBS zlib)
+  endif()
+else()
   set(LIBBLOATY_LIBS libbloaty libprotoc capstone-static)
   if(BLOATY_ENABLE_RE2)
-    set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} re2)
-  endif(BLOATY_ENABLE_RE2)
-  set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} zlibstatic)
-endif(UNIX)
+    list(APPEND LIBBLOATY_LIBS  re2)
+  endif()
+  list(APPEND LIBBLOATY_LIBS zlibstatic)
+endif()
 
 if(UNIX)
   if(BLOATY_ENABLE_RE2)
-    if(${RE2_FOUND})
+    if(RE2_FOUND)
       link_directories(${RE2_LIBRARY_DIRS})
-    endif(${RE2_FOUND})
-  endif(BLOATY_ENABLE_RE2)
-  if(${CAPSTONE_FOUND})
+    endif()
+  endif()
+  if(CAPSTONE_FOUND)
     link_directories(${CAPSTONE_LIBRARY_DIRS})
-  endif(${CAPSTONE_FOUND})
-  if(${PROTOBUF_FOUND})
+  endif()
+  if(PROTOBUF_FOUND)
     link_directories(${PROTOBUF_LIBRARY_DIRS})
-  endif(${PROTOBUF_FOUND})
-  if(${ZLIB_FOUND})
-    link_directories(${ZLIB_LIBRARY_DIRS})
-  endif(${ZLIB_FOUND})
-endif(UNIX)
+  endif()
+endif()
+
+list(APPEND LIBBLOATY_LIBS Threads::Threads)
 
 if(DEFINED ENV{LIB_FUZZING_ENGINE})
   message("LIB_FUZZING_ENGINE set, building fuzz_target instead of Bloaty")
   add_executable(fuzz_target tests/fuzz_target.cc)
-  target_link_libraries(fuzz_target "${LIBBLOATY_LIBS}" "${CMAKE_THREAD_LIBS_INIT}" $ENV{LIB_FUZZING_ENGINE})
+  target_link_libraries(fuzz_target ${LIBBLOATY_LIBS} $ENV{LIB_FUZZING_ENGINE})
 else()
   add_executable(bloaty src/main.cc)
-  target_link_libraries(bloaty "${LIBBLOATY_LIBS}")
+  target_link_libraries(bloaty ${LIBBLOATY_LIBS})
 
   set_property(TARGET bloaty PROPERTY FOLDER "bloaty")
 
-  # All of this is to add -pthread, which is required by re2 (not us).
-  find_package(Threads REQUIRED)
-  if(THREADS_HAVE_PTHREAD_ARG)
-    set_property(TARGET bloaty PROPERTY COMPILE_OPTIONS "-pthread")
-    set_property(TARGET bloaty PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread")
-  endif()
-  if(CMAKE_THREAD_LIBS_INIT)
-    target_link_libraries(bloaty "${CMAKE_THREAD_LIBS_INIT}")
-  endif()
-
   if(BLOATY_ENABLE_CMAKETARGETS)
     install(
       TARGETS bloaty
       EXPORT ${PROJECT_NAME}Targets
       RUNTIME DESTINATION bin
     )
-  else(BLOATY_ENABLE_CMAKETARGETS)
+  else()
     install(
       TARGETS bloaty
       RUNTIME DESTINATION bin
     )
-  endif(BLOATY_ENABLE_CMAKETARGETS)
+  endif()
 
   if (IS_DIRECTORY "${PROJECT_SOURCE_DIR}/tests")
     enable_testing()
@@ -356,12 +342,12 @@
 
       foreach(target ${TEST_TARGETS})
         add_executable(${target} tests/${target}.cc)
-        target_link_libraries(${target} "${LIBBLOATY_LIBS}" gtest_main gmock "${CMAKE_THREAD_LIBS_INIT}")
+        target_link_libraries(${target} ${LIBBLOATY_LIBS} gtest_main gmock)
         set_property(TARGET ${target} PROPERTY FOLDER "tests")
       endforeach(target)
 
       add_executable(fuzz_test tests/fuzz_target.cc tests/fuzz_driver.cc)
-      target_link_libraries(fuzz_test "${LIBBLOATY_LIBS}" "${CMAKE_THREAD_LIBS_INIT}")
+      target_link_libraries(fuzz_test ${LIBBLOATY_LIBS})
       set_property(TARGET fuzz_test PROPERTY FOLDER "tests")
 
       foreach(testlib gmock gmock_main gtest gtest_main)
@@ -382,5 +368,5 @@
 
   if(BLOATY_ENABLE_CMAKETARGETS)
     install(EXPORT ${PROJECT_NAME}Targets NAMESPACE ${PROJECT_NAME} DESTINATION lib/${PROJECT_NAME})
-  endif(BLOATY_ENABLE_CMAKETARGETS)
+  endif()
 endif()
