diff --git a/CMakeLists.txt b/CMakeLists.txt
index 22e48a94b98fc2196871fd6bdf510f4c4216084d..267dab4330ef89ab138e2dfab49f474b42de9412 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,5 @@
 # Pre-requisites about cmake itself
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
+CMAKE_MINIMUM_REQUIRED(VERSION 3.10)
 
 if(COMMAND cmake_policy)
   cmake_policy(SET CMP0005 NEW) 
@@ -10,13 +10,12 @@ SET(CMAKE_MACOSX_RPATH true)
 
 # The project name
 PROJECT(vision)
-set(PLUGIN_NAME wolf${PROJECT_NAME})
+set(PLUGIN_NAME "wolf${PROJECT_NAME}")
 
 MESSAGE("Starting ${PROJECT_NAME} CMakeLists ...")
 
-SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin)
-SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib)
-SET(CMAKE_INSTALL_PREFIX /usr/local)
+set(INCLUDE_INSTALL_DIR include/iri-algorithms/wolf)
+set(LIB_INSTALL_DIR lib/)
 
 IF (NOT CMAKE_BUILD_TYPE)
   SET(CMAKE_BUILD_TYPE "DEBUG")
@@ -81,8 +80,7 @@ option(_WOLF_TRACE "Enable wolf tracing macro" ON)
 
 # ============ DEPENDENCIES ==================
 FIND_PACKAGE(wolfcore REQUIRED)
-FIND_PACKAGE(vision_utils REQUIRED)
-SET(PRINT_INFO_VU false)
+# SET(PRINT_INFO_VU false)
 FIND_PACKAGE(OpenCV REQUIRED)
 
 # ============ config.h ==================
@@ -107,9 +105,6 @@ message("CONFIG DIRECTORY ${PROJECT_BINARY_DIR}")
 include_directories("${PROJECT_BINARY_DIR}/conf")
 
 # ============ INCLUDES ==================
-INCLUDE_DIRECTORIES(${wolfcore_INCLUDE_DIRS})
-INCLUDE_DIRECTORIES(${vision_utils_INCLUDE_DIR})
-INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
 INCLUDE_DIRECTORIES(BEFORE "include")
 
 # ============ HEADERS ============ 
@@ -197,9 +192,9 @@ endif()
 
 #Link the created libraries
 #===============EXAMPLE=========================
-TARGET_LINK_LIBRARIES(${PLUGIN_NAME} ${wolfcore_LIBRARIES})
-TARGET_LINK_LIBRARIES(${PLUGIN_NAME} ${OpenCV_LIBS})
-TARGET_LINK_LIBRARIES(${PLUGIN_NAME} ${vision_utils_LIBRARY})
+TARGET_LINK_LIBRARIES(${PLUGIN_NAME} wolfcore)
+TARGET_LINK_LIBRARIES(${PLUGIN_NAME} OpenCV)
+# TARGET_LINK_LIBRARIES(${PLUGIN_NAME} ${vision_utils_LIBRARY})
 
 #Build demos
 #===============EXAMPLE=========================
@@ -222,30 +217,48 @@ INSTALL(TARGETS ${PLUGIN_NAME} EXPORT ${PLUGIN_NAME}Targets
       LIBRARY DESTINATION lib
       ARCHIVE DESTINATION lib)
 
+# Configure the package installation
+include(CMakePackageConfigHelpers)
+configure_package_config_file(
+  ${CMAKE_SOURCE_DIR}/cmake_modules/${PLUGIN_NAME}Config.cmake.in
+  ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_NAME}Config.cmake
+  INSTALL_DESTINATION ${LIB_INSTALL_DIR}/${PLUGIN_NAME}/cmake
+  PATH_VARS INCLUDE_INSTALL_DIR LIB_INSTALL_DIR
+)
+
+install(
+  FILES 
+  ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_NAME}Config.cmake
+  DESTINATION 
+  ${LIB_INSTALL_DIR}/${PLUGIN_NAME}/cmake
+)
+
+# Specifies include directories to use when compiling the plugin target
+# This way, include_directories does not need to be called in plugins depending on this one
+target_include_directories(${PLUGIN_NAME} INTERFACE
+  $<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}>
+)
+
+
 install(EXPORT ${PLUGIN_NAME}Targets DESTINATION lib/cmake/${PLUGIN_NAME})
 #install headers
 INSTALL(FILES ${HDRS_CAPTURE}
-  DESTINATION include/iri-algorithms/wolf/plugin_${PROJECT_NAME}/${PROJECT_NAME}/capture)
+  DESTINATION ${INCLUDE_INSTALL_DIR}/${PROJECT_NAME}/capture)
 INSTALL(FILES ${HDRS_FACTOR}
-  DESTINATION include/iri-algorithms/wolf/plugin_${PROJECT_NAME}/${PROJECT_NAME}/factor)
+  DESTINATION ${INCLUDE_INSTALL_DIR}/${PROJECT_NAME}/factor)
 INSTALL(FILES ${HDRS_FEATURE}
-  DESTINATION include/iri-algorithms/wolf/plugin_${PROJECT_NAME}/${PROJECT_NAME}/feature)
+  DESTINATION ${INCLUDE_INSTALL_DIR}/${PROJECT_NAME}/feature)
 INSTALL(FILES ${HDRS_LANDMARK}
-  DESTINATION include/iri-algorithms/wolf/plugin_${PROJECT_NAME}/${PROJECT_NAME}/landmark)
+  DESTINATION ${INCLUDE_INSTALL_DIR}/${PROJECT_NAME}/landmark)
 INSTALL(FILES ${HDRS_MATH}
-  DESTINATION include/iri-algorithms/wolf/plugin_${PROJECT_NAME}/${PROJECT_NAME}/math)
+  DESTINATION ${INCLUDE_INSTALL_DIR}/${PROJECT_NAME}/math)
 INSTALL(FILES ${HDRS_PROCESSOR}
-  DESTINATION include/iri-algorithms/wolf/plugin_${PROJECT_NAME}/${PROJECT_NAME}/processor)
+  DESTINATION ${INCLUDE_INSTALL_DIR}/${PROJECT_NAME}/processor)
 INSTALL(FILES ${HDRS_SENSOR}
-  DESTINATION include/iri-algorithms/wolf/plugin_${PROJECT_NAME}/${PROJECT_NAME}/sensor)
+  DESTINATION ${INCLUDE_INSTALL_DIR}/${PROJECT_NAME}/sensor)
 
-FILE(WRITE ${PROJECT_NAME}.found "")
-INSTALL(FILES ${PROJECT_NAME}.found
-  DESTINATION include/iri-algorithms/wolf/plugin_${PROJECT_NAME})
 INSTALL(FILES "${WOLF_CONFIG_DIR}/config.h"
-  DESTINATION include/iri-algorithms/wolf/plugin_${PROJECT_NAME}/${PROJECT_NAME}/internal)
-
-INSTALL(FILES "${CMAKE_SOURCE_DIR}/cmake_modules/${PLUGIN_NAME}Config.cmake" DESTINATION "lib/cmake/${PLUGIN_NAME}")
+  DESTINATION ${INCLUDE_INSTALL_DIR}/${PROJECT_NAME}/internal)
 
 INSTALL(DIRECTORY ${SPDLOG_INCLUDE_DIRS} DESTINATION "include/iri-algorithms/")
 
diff --git a/cmake_modules/wolfvisionConfig.cmake b/cmake_modules/wolfvisionConfig.cmake
deleted file mode 100644
index 935cc70e6cefd9e85a691e79b90843dfc3b6827f..0000000000000000000000000000000000000000
--- a/cmake_modules/wolfvisionConfig.cmake
+++ /dev/null
@@ -1,94 +0,0 @@
-#edit the following line to add the librarie's header files
-FIND_PATH(
-    wolfvision_INCLUDE_DIRS
-    NAMES vision.found
-    PATHS /usr/local/include/iri-algorithms/wolf/plugin_vision)
-IF(wolfvision_INCLUDE_DIRS)
-  MESSAGE("Found vision include dirs: ${wolfvision_INCLUDE_DIRS}")
-ELSE(wolfvision_INCLUDE_DIRS)
-  MESSAGE("Couldn't find vision include dirs")
-ENDIF(wolfvision_INCLUDE_DIRS)
-
-FIND_LIBRARY(
-    wolfvision_LIBRARIES
-    NAMES libwolfvision.so libwolfvision.dylib
-    PATHS /usr/local/lib)
-IF(wolfvision_LIBRARIES)
-  MESSAGE("Found vision lib: ${wolfvision_LIBRARIES}")
-ELSE(wolfvision_LIBRARIES)
-  MESSAGE("Couldn't find wolf vision lib")
-ENDIF(wolfvision_LIBRARIES)
-
-IF (wolfvision_INCLUDE_DIRS AND wolfvision_LIBRARIES)
-   SET(wolfvision_FOUND TRUE)
- ELSE(wolfvision_INCLUDE_DIRS AND wolfvision_LIBRARIES)
-   set(wolfvision_FOUND FALSE)
-ENDIF (wolfvision_INCLUDE_DIRS AND wolfvision_LIBRARIES)
-
-IF (wolfvision_FOUND)
-   IF (NOT wolfvision_FIND_QUIETLY)
-      MESSAGE(STATUS "Found vision: ${wolfvision_LIBRARIES}")
-   ENDIF (NOT wolfvision_FIND_QUIETLY)
-ELSE (wolfvision_FOUND)
-   IF (wolfvision_FIND_REQUIRED)
-      MESSAGE(FATAL_ERROR "Could not find wolf vision")
-   ENDIF (wolfvision_FIND_REQUIRED)
-ENDIF (wolfvision_FOUND)
-
-
-macro(wolf_report_not_found REASON_MSG)
-  set(wolfvision_FOUND FALSE)
-  unset(wolfvision_INCLUDE_DIRS)
-  unset(wolfvision_LIBRARIES)
-
-  # Reset the CMake module path to its state when this script was called.
-  set(CMAKE_MODULE_PATH ${CALLERS_CMAKE_MODULE_PATH})
-
-  # Note <package>_FIND_[REQUIRED/QUIETLY] variables defined by
-  # FindPackage() use the camelcase library name, not uppercase.
-  if (wolfvision_FIND_QUIETLY)
-    message(STATUS "Failed to find wolfvision- " ${REASON_MSG} ${ARGN})
-  elseif (wolfvision_FIND_REQUIRED)
-    message(FATAL_ERROR "Failed to find wolfvision - " ${REASON_MSG} ${ARGN})
-  else()
-    # Neither QUIETLY nor REQUIRED, use SEND_ERROR which emits an error
-    # that prevents generation, but continues configuration.
-    message(SEND_ERROR "Failed to find wolfvision - " ${REASON_MSG} ${ARGN})
-  endif ()
-  return()
-endmacro(wolf_report_not_found)
-
-if(NOT wolfvision_FOUND)
-  wolf_report_not_found("Something went wrong while setting up wolf vision.")
-endif(NOT wolfvision_FOUND)
-# Set the include directories for wolf (itself).
-set(wolfvision_FOUND TRUE)
-
-# Now we gather all the required dependencies for Wolf Laser
-
-FIND_PACKAGE(vision_utils REQUIRED)
-list(APPEND wolfvision_INCLUDE_DIRS ${vision_utils_INCLUDE_DIR})
-list(APPEND wolfvision_LIBRARIES ${vision_utils_LIBRARY})
-
-FIND_PACKAGE(OpenCV REQUIRED)
-list(APPEND wolfvision_INCLUDE_DIRS ${OpenCV_INCLUDE_DIRS})
-list(APPEND wolfvision_LIBRARIES ${OpenCV_LIBS})
-
-#Making sure wolf is looked for
-if(NOT wolf_FOUND)
-  FIND_PACKAGE(wolfcore REQUIRED)
-
-  #We reverse in order to insert at the start
-  list(REVERSE wolfvision_INCLUDE_DIRS)
-  list(APPEND wolfvision_INCLUDE_DIRS ${wolfcore_INCLUDE_DIRS})
-  list(REVERSE wolfvision_INCLUDE_DIRS)
-
-  list(REVERSE wolfvision_LIBRARIES)
-  list(APPEND wolfvision_LIBRARIES ${wolfcore_LIBRARIES})
-  list(REVERSE wolfvision_LIBRARIES)
-endif()
-
-# provide both INCLUDE_DIR and INCLUDE_DIRS
-SET(wolfvision_INCLUDE_DIR ${wolfvision_INCLUDE_DIRS})
-# provide both LIBRARY and LIBRARIES 
-SET(wolfvision_LIBRARY ${wolfvision_LIBRARIES})
\ No newline at end of file
diff --git a/cmake_modules/wolfvisionConfig.cmake.in b/cmake_modules/wolfvisionConfig.cmake.in
new file mode 100644
index 0000000000000000000000000000000000000000..6f428e250f0cea0882d26154d63faaa8150e099c
--- /dev/null
+++ b/cmake_modules/wolfvisionConfig.cmake.in
@@ -0,0 +1,17 @@
+set(@PLUGIN_NAME@_VERSION 0.0.1)
+
+
+@PACKAGE_INIT@
+
+set_and_check(@PLUGIN_NAME@_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
+set(@PLUGIN_NAME@_INCLUDE_DIRS @PLUGIN_NAME@_INCLUDE_DIR)
+set_and_check(@PLUGIN_NAME@_LIB_INSTALL_DIR "@PACKAGE_LIB_INSTALL_DIR@")
+set(@PLUGIN_NAME@_LIB_INSTALL_DIRS @PLUGIN_NAME@_LIB_INSTALL_DIR)
+
+# forwards the correct parameters given to FIND_DEPENDENCIES
+include(CMakeFindDependencyMacro)
+FIND_DEPENDENCY(OpenCV REQUIRED)
+
+include("${CMAKE_CURRENT_LIST_DIR}/@PLUGIN_NAME@Targets.cmake")
+
+check_required_components(@PLUGIN_NAME@)
\ No newline at end of file