diff --git a/CMakeLists.txt b/CMakeLists.txt
index 89283867..87145b70 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -69,9 +69,11 @@ endif()
 ########################################################################
 find_package(PkgConfig)
 find_package(LibRTLSDR)
-if(LIBRTLSDR_FOUND)
-    include_directories(${LIBRTLSDR_INCLUDE_DIRS})
-    list(APPEND SDR_LIBRARIES ${LIBRTLSDR_LIBRARIES})
+find_package(LibUSB)
+if(LIBRTLSDR_FOUND AND LIBUSB_FOUND)
+    message(STATUS "RTL-SDR device input will be compiled.")
+    include_directories(${LIBRTLSDR_INCLUDE_DIRS} ${LIBUSB_INCLUDE_DIRS})
+    list(APPEND SDR_LIBRARIES ${LIBRTLSDR_LIBRARIES} ${LIBUSB_LIBRARIES})
     ADD_DEFINITIONS(-DRTLSDR)
 else()
     message(STATUS "RTL-SDR development files not found, RTL-SDR device input won't be possible.")
@@ -79,11 +81,12 @@ endif()
 
 find_package(SoapySDR "0.6" NO_MODULE)
 if(SoapySDR_FOUND)
+    message(STATUS "SoapySDR device input will be compiled.")
     include_directories(${SoapySDR_INCLUDE_DIRS})
     list(APPEND SDR_LIBRARIES ${SoapySDR_LIBRARIES})
     ADD_DEFINITIONS(-DSOAPYSDR)
 else()
-    message(STATUS "Soapy SDR development files not found, Soapy SDR device input won't be possible.")
+    message(STATUS "SoapySDR development files not found, SoapySDR device input won't be possible.")
 endif()
 
 # cmake -DCMAKE_BUILD_TYPE=Profile ..
diff --git a/cmake/Modules/FindLibRTLSDR.cmake b/cmake/Modules/FindLibRTLSDR.cmake
index ea63daa3..20443650 100644
--- a/cmake/Modules/FindLibRTLSDR.cmake
+++ b/cmake/Modules/FindLibRTLSDR.cmake
@@ -1,28 +1,33 @@
-INCLUDE(FindPkgConfig)
-if(NOT LIBRTLSDR_FOUND)
-  pkg_check_modules (LIBRTLSDR_PKG librtlsdr)
-  find_path(LIBRTLSDR_INCLUDE_DIRS NAMES rtl-sdr.h
-    PATHS
-    ${LIBRTLSDR_PKG_INCLUDE_DIRS}
-    /usr/include
-    /usr/local/include
-  )
+# - Try to find LibRTLSDR
+# Once done this will define
+#  LIBRTLSDR_FOUND - System has LibRTLSDR
+#  LIBRTLSDR_INCLUDE_DIRS - The LibRTLSDR include directories
+#  LIBRTLSDR_LIBRARIES - The libraries needed to use LibRTLSDR
+#  LIBRTLSDR_DEFINITIONS - Compiler switches required for using LibRTLSDR
 
-  find_library(LIBRTLSDR_LIBRARIES NAMES rtlsdr
-    PATHS
-    ${LIBRTLSDR_PKG_LIBRARY_DIRS}
-    /usr/lib
-    /usr/local/lib
-  )
+find_package(PkgConfig)
+pkg_check_modules(LIBRTLSDR_PKG QUIET librtlsdr)
+set(LIBRTLSDR_DEFINITIONS ${LIBRTLSDR_PKG_CFLAGS_OTHER})
 
-if(LIBRTLSDR_INCLUDE_DIRS AND LIBRTLSDR_LIBRARIES)
-  set(LIBRTLSDR_FOUND TRUE CACHE INTERNAL "librtlsdr found")
-  message(STATUS "Found librtlsdr: ${LIBRTLSDR_INCLUDE_DIRS}, ${LIBRTLSDR_LIBRARIES}")
-else(LIBRTLSDR_INCLUDE_DIRS AND LIBRTLSDR_LIBRARIES)
-  set(LIBRTLSDR_FOUND FALSE CACHE INTERNAL "librtlsdr found")
-  message(STATUS "librtlsdr not found.")
-endif(LIBRTLSDR_INCLUDE_DIRS AND LIBRTLSDR_LIBRARIES)
+find_path(LIBRTLSDR_INCLUDE_DIR NAMES rtl-sdr.h
+          HINTS ${LIBRTLSDR_PKG_INCLUDE_DIRS}
+          PATHS
+          /usr/include
+          /usr/local/include )
 
-mark_as_advanced(LIBRTLSDR_LIBRARIES LIBRTLSDR_INCLUDE_DIRS)
+find_library(LIBRTLSDR_LIBRARY NAMES rtlsdr
+             HINTS ${LIBRTLSDR_PKG_LIBRARY_DIRS}
+             PATHS
+             /usr/lib
+             /usr/local/lib )
 
-endif(NOT LIBRTLSDR_FOUND)
+include(FindPackageHandleStandardArgs)
+# handle the QUIETLY and REQUIRED arguments and set LIBRTLSDR_FOUND to TRUE
+# if all listed variables are TRUE
+find_package_handle_standard_args(LibRTLSDR  DEFAULT_MSG
+                                  LIBRTLSDR_LIBRARY LIBRTLSDR_INCLUDE_DIR)
+
+mark_as_advanced(LIBRTLSDR_LIBRARY LIBRTLSDR_INCLUDE_DIR)
+
+set(LIBRTLSDR_LIBRARIES ${LIBRTLSDR_LIBRARY} )
+set(LIBRTLSDR_INCLUDE_DIRS ${LIBRTLSDR_INCLUDE_DIR} )
diff --git a/cmake/Modules/FindLibUSB.cmake b/cmake/Modules/FindLibUSB.cmake
new file mode 100644
index 00000000..607e35bd
--- /dev/null
+++ b/cmake/Modules/FindLibUSB.cmake
@@ -0,0 +1,43 @@
+# - Try to find LibUSB
+# Once done this will define
+#  LIBUSB_FOUND - System has LibUSB
+#  LIBUSB_INCLUDE_DIRS - The LibUSB include directories
+#  LIBUSB_LIBRARIES - The libraries needed to use LibUSB
+#  LIBUSB_DEFINITIONS - Compiler switches required for using LibUSB
+
+find_package(PkgConfig)
+pkg_check_modules(LIBUSB_PKG QUIET libusb-1.0)
+set(LIBUSB_DEFINITIONS ${LIBUSB_PKG_CFLAGS_OTHER})
+
+find_path(LIBUSB_INCLUDE_DIR NAMES libusb.h
+          HINTS ${LIBUSB_PKG_INCLUDE_DIRS}
+          PATHS
+          /usr/include/libusb-1.0
+          /usr/include
+          /usr/local/include )
+
+#standard library name for libusb-1.0
+set(libusb1_library_names usb-1.0)
+
+#libusb-1.0 compatible library on freebsd
+if((CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") OR (CMAKE_SYSTEM_NAME STREQUAL "kFreeBSD"))
+    list(APPEND libusb1_library_names usb)
+endif()
+
+find_library(LIBUSB_LIBRARY
+             NAMES ${libusb1_library_names}
+             HINTS ${LIBUSB_PKG_LIBRARY_DIRS}
+             PATHS
+             /usr/lib
+             /usr/local/lib )
+
+include(FindPackageHandleStandardArgs)
+# handle the QUIETLY and REQUIRED arguments and set LIBUSB_FOUND to TRUE
+# if all listed variables are TRUE
+find_package_handle_standard_args(LibUSB  DEFAULT_MSG
+                                  LIBUSB_LIBRARY LIBUSB_INCLUDE_DIR)
+
+mark_as_advanced(LIBUSB_LIBRARY LIBUSB_INCLUDE_DIR)
+
+set(LIBUSB_LIBRARIES ${LIBUSB_LIBRARY} )
+set(LIBUSB_INCLUDE_DIRS ${LIBUSB_INCLUDE_DIR} )