--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -11,9 +11,6 @@
     add_compile_definitions("USE_HDF5=ON")
 endif(USE_HDF5)
 
-set(EXT_PROJECTS_DIR ${PROJECT_SOURCE_DIR}/ext)
-set(CMAKE_CXX_FLAGS_PROFILE "-g")
-
 # Set Release type for builds where CMAKE_BUILD_TYPE is unset
 # This is usually a good default as this implictly enables
 #
@@ -33,44 +30,12 @@
     set(CMAKE_CXX_EXTENSIONS OFF)
 endif()
 
-#add_compile_options(-Wall -Wno-unused-function)
-
-if(LINK MATCHES static)
-    message("static build")
-ELSE(LINK MATCHES shared)
-    message("shared build")
-ENDIF(LINK MATCHES static)
-
-
-include(ExternalProject)
-ExternalProject_Add(htslib
-    PREFIX ${PROJECT_SOURCE_DIR}/ext/htslib
-    SOURCE_DIR ${PROJECT_SOURCE_DIR}/ext/htslib
-    BUILD_IN_SOURCE 1
-    CONFIGURE_COMMAND autoheader && autoconf && ${PROJECT_SOURCE_DIR}/ext/htslib/configure 
-        --prefix=${PREFIX} --disable-bz2 --disable-lzma --disable-libcurl
-    BUILD_COMMAND make lib-static
-    INSTALL_COMMAND ""
-)
-
-include_directories(${htslib_PREFIX}/src/htslib)
-
-
-
-# add_compile_options(-Wdeprecated-register)
-
 add_subdirectory(src)
-include_directories(${EXT_PROJECTS_DIR})
 
 option(BUILD_TESTING "Build unit tests." OFF)
 include(CTest)
 
 if (BUILD_TESTING)
-    add_subdirectory(${EXT_PROJECTS_DIR}/catch)
-
-    # Includes Catch in the project:
-    include_directories(${CATCH_INCLUDE_DIR} ${COMMON_INCLUDES})
-
     add_subdirectory(unit_tests)
 endif(BUILD_TESTING)
 
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -3,30 +3,17 @@
 
 list(REMOVE_ITEM sources main.cpp)
 
-include_directories(../ext/htslib)
-
 add_library(kallisto_core ${sources} ${headers})
 target_include_directories(kallisto_core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
 
 add_executable(kallisto main.cpp)
 
-find_package( Threads REQUIRED )
-target_link_libraries(kallisto kallisto_core pthread ${CMAKE_CURRENT_SOURCE_DIR}/../ext/htslib/libhts.a)
-
-if(LINK MATCHES static)
-    set(BUILD_SHARED_LIBS OFF)
-    set(HDF5_USE_STATIC_LIBRARIES 1)
-
-    if (UNIX AND NOT APPLE)
-        #set(CMAKE_EXE_LINKER_FLAGS  "-static -static-libgcc -static-libstdc++")
-        set(CMAKE_EXE_LINKER_FLAGS  "-static -static-libstdc++")
-        SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
-        set(CMAKE_EXE_LINKER_FLAGS  "-static -static-libgcc -static-libstdc++")
-    endif(UNIX AND NOT APPLE)
-
-    SET_TARGET_PROPERTIES(kallisto kallisto_core PROPERTIES LINK_SEARCH_END_STATIC 1)
-endif(LINK MATCHES static)
+find_package( PkgConfig REQUIRED )
+pkg_check_modules( HTSLIB REQUIRED htslib )
 
+find_package( Threads REQUIRED )
+target_include_directories(kallisto PRIVATE ${HTSLIB_CFLAGS})
+target_link_libraries(kallisto PRIVATE kallisto_core Threads::Threads ${HTSLIB_LDFLAGS})
 
 if(USE_HDF5)
     find_package( HDF5 REQUIRED )
@@ -36,7 +23,7 @@
 
 if ( ZLIB_FOUND )
     include_directories( ${ZLIB_INCLUDE_DIRS} )
-    target_link_libraries(kallisto kallisto_core ${ZLIB_LIBRARIES})
+    target_link_libraries(kallisto PRIVATE kallisto_core ${ZLIB_LIBRARIES})
 else()
     message(FATAL_ERROR "zlib not found. Required for to output files" )
 endif( ZLIB_FOUND )
@@ -44,22 +31,17 @@
 if(USE_HDF5)
     if(HDF5_FOUND)
         include_directories( ${HDF5_INCLUDE_DIRS} )
-        target_link_libraries( kallisto_core ${HDF5_LIBRARIES} )
-        target_link_libraries( kallisto ${HDF5_LIBRARIES} )
+        target_link_libraries( kallisto_core PRIVATE ${HDF5_LIBRARIES} )
+        target_link_libraries( kallisto PRIVATE ${HDF5_LIBRARIES} )
     else()
         message(FATAL_ERROR "HDF5 not found. Required to output files")
     endif()
 endif(USE_HDF5)
 
-if(LINK MATCHES static)
-    if (UNIX AND NOT APPLE)
-        target_link_libraries(kallisto librt.a)
-    endif()
-else()
-    if (UNIX AND NOT APPLE)
-        target_link_libraries(kallisto rt)
-    endif()
-endif(LINK MATCHES static)
-
+target_compile_options( kallisto_core PRIVATE ${HTSLIB_CFLAGS} )
+target_link_libraries( kallisto_core PRIVATE ${HTSLIB_LDFLAGS} )
 
-install(TARGETS kallisto DESTINATION "${CMAKE_INSTALL_BINDIR}")
\ No newline at end of file
+install(TARGETS kallisto DESTINATION "${CMAKE_INSTALL_BINDIR}")
+if ( BUILD_SHARED_LIBS )
+    install(TARGETS kallisto_core DESTINATION "${CMAKE_INSTALL_LIBDIR}")
+endif()
--- a/unit_tests/CMakeLists.txt
+++ b/unit_tests/CMakeLists.txt
@@ -8,6 +8,10 @@
 add_executable(tests ${sources})
 add_test(unittest tests)
 
+find_package( Catch2 REQUIRED )
+include_directories( ${Catch2_INCLUDE_DIRS} )
+target_link_libraries( tests Catch2::Catch2WithMain )
+
 find_package( ZLIB REQUIRED )
 if ( ZLIB_FOUND )
     include_directories( ${ZLIB_INCLUDE_DIRS} )
