diff --git a/CMakeLists.txt b/CMakeLists.txt
index 31941341c070b7dc743f0ff07a7bfd2fa466c433..8fb4912c9d442e1a07f0b78d8b3ca61d0fccaab8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,6 @@
 #
-# Copyright (c) 2014 CNRS
-# Authors: Florent Lamiraux
+# Copyright (c) 2014, 2020 CNRS
+# Authors: Florent Lamiraux, Guilhem Saurel
 #
 #
 # This file is part of hpp-manipulation
@@ -17,12 +17,14 @@
 # hpp-manipulation  If not, see
 # <http://www.gnu.org/licenses/>.
 
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
+CMAKE_MINIMUM_REQUIRED(VERSION 3.1)
 
 SET(PROJECT_NAME hpp-manipulation)
 SET(PROJECT_DESCRIPTION "Classes for manipulation planning.")
 
+SET(PROJECT_USE_CMAKE_EXPORT TRUE)
 SET(CXX_DISABLE_WERROR TRUE)
+
 INCLUDE(cmake/hpp.cmake)
 INCLUDE(cmake/boost.cmake)
 INCLUDE(cmake/test.cmake)
@@ -38,27 +40,21 @@ SET(DOXYGEN_TREEVIEW "NO" CACHE STRING "Set to YES to generate a tree view in th
 SET(HPP_MANIPULATION_HAS_WHOLEBODY_STEP TRUE
   CACHE BOOL "Compile with dependency to hpp-wholebody-step")
 
-SET(BOOST_BUILD_COMPONENTS unit_test_framework)
-SET(BOOST_INSTALL_COMPONENTS regex)
-SET(BOOST_COMPONENTS ${BOOST_INSTALL_COMPONENTS} ${BOOST_BUILD_COMPONENTS})
+SET(BOOST_COMPONENTS unit_test_framework regex)
 
 SEARCH_FOR_BOOST()
-ADD_DOC_DEPENDENCY("hpp-pinocchio >= 4")
-ADD_DOC_DEPENDENCY("hpp-fcl >= 0.4.3")
-ADD_REQUIRED_DEPENDENCY("hpp-core >= 4")
-ADD_REQUIRED_DEPENDENCY("hpp-constraints >= 4")
-ADD_REQUIRED_DEPENDENCY("hpp-statistics >= 1.1")
-IF (HPP_MANIPULATION_HAS_WHOLEBODY_STEP)
-   ADD_REQUIRED_DEPENDENCY("hpp-wholebody-step >= 4")
-ENDIF ()
-IF (BUILD_TESTING)
-  ADD_REQUIRED_DEPENDENCY("example-robot-data >= 3")
-ENDIF ()
-
-CONFIG_FILES (doc/main.hh
+ADD_PROJECT_DEPENDENCY("hpp-core" REQUIRED)
+IF(HPP_MANIPULATION_HAS_WHOLEBODY_STEP)
+  ADD_PROJECT_DEPENDENCY("hpp-wholebody-step" REQUIRED)
+ENDIF()
+IF(BUILD_TESTING)
+  ADD_PROJECT_DEPENDENCY("example-robot-data" REQUIRED)
+ENDIF()
+
+CONFIG_FILES(doc/main.hh
   include/hpp/manipulation/package-config.hh)
 
-SET (${PROJECT_NAME}_HEADERS
+SET(${PROJECT_NAME}_HEADERS
   ${CMAKE_BINARY_DIR}/include/hpp/manipulation/package-config.hh
   include/hpp/manipulation/fwd.hh
   include/hpp/manipulation/handle.hh
@@ -101,14 +97,75 @@ SET (${PROJECT_NAME}_HEADERS
   include/hpp/manipulation/steering-method/end-effector-trajectory.hh
   )
 
-SET(LIBRARY_NAME ${PROJECT_NAME})
+SET(${PROJECT_NAME}_SOURCES
+  src/handle.cc
+  src/manipulation-planner.cc
+  src/problem-solver.cc
+  src/roadmap.cc
+  src/connected-component.cc
+  src/leaf-connected-comp.cc
+  src/constraint-set.cc
+  src/roadmap-node.cc
+  src/device.cc
+  src/weighed-distance.cc
+  src/problem.cc
+  src/graph-path-validation.cc
+  src/graph-optimizer.cc
+
+  src/graph/state.cc
+  src/graph/edge.cc
+  src/graph/graph.cc
+  src/graph/graph-component.cc
+  src/graph/state-selector.cc
+  src/graph/guided-state-selector.cc
+  src/graph/statistics.cc
+  src/graph/helper.cc
+
+  src/graph/dot.cc
+  src/graph/validation.cc
+
+  src/path-optimization/random-shortcut.cc
+  src/path-optimization/enforce-transition-semantic.cc
+
+  src/path-planner/end-effector-trajectory.cc
+
+  src/problem-target/state.cc
+
+  src/steering-method/end-effector-trajectory.cc
+  src/steering-method/cross-state-optimization.cc
+  src/steering-method/graph.cc
+  )
+
+IF(HPP_MANIPULATION_HAS_WHOLEBODY_STEP)
+  SET(${PROJECT_NAME}_SOURCES
+    ${${PROJECT_NAME}_SOURCES}
+    src/path-optimization/small-steps.cc
+    )
+ENDIF(HPP_MANIPULATION_HAS_WHOLEBODY_STEP)
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS})
+TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PUBLIC $<INSTALL_INTERFACE:include>)
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} hpp-core::hpp-core ${Boost_REGEX_LIBRARY})
+IF(HPP_MANIPULATION_HAS_WHOLEBODY_STEP)
+  TARGET_LINK_LIBRARIES(${PROJECT_NAME} hpp-wholebody-step::hpp-wholebody-step)
+ENDIF(HPP_MANIPULATION_HAS_WHOLEBODY_STEP)
+
+INSTALL(TARGETS ${PROJECT_NAME} EXPORT ${TARGETS_EXPORT_NAME} DESTINATION lib)
+
+# GPL licenced part
+
+SET(${PROJECT_NAME}_SOURCES_GPL
+  src/path-optimization/spline-gradient-based.cc
+  )
+
+ADD_LIBRARY(${PROJECT_NAME}-gpl SHARED ${${PROJECT_NAME}_SOURCES_GPL})
+TARGET_LINK_LIBRARIES(${PROJECT_NAME}-gpl ${PROJECT_NAME} hpp-core::hpp-core-gpl)
+
+INSTALL(TARGETS ${PROJECT_NAME}-gpl EXPORT ${TARGETS_EXPORT_NAME} DESTINATION lib)
 
-ADD_SUBDIRECTORY(src)
 ADD_SUBDIRECTORY(plugins)
 IF(BUILD_TESTING)
   ADD_SUBDIRECTORY(tests)
 ENDIF()
 
-# Add dependency toward hpp-manipulation library in pkg-config file.
-PKG_CONFIG_APPEND_LIBS("hpp-manipulation")
-PKG_CONFIG_APPEND_BOOST_LIBS(${BOOST_INSTALL_COMPONENTS})
+PKG_CONFIG_APPEND_LIBS(${PROJECT_NAME})
diff --git a/cmake b/cmake
index 7eca9ee6c9d1c4ee20eb82272e94f9d11642053a..a61ae61479a1d50d1ae3c988d1d9aaf20841173d 160000
--- a/cmake
+++ b/cmake
@@ -1 +1 @@
-Subproject commit 7eca9ee6c9d1c4ee20eb82272e94f9d11642053a
+Subproject commit a61ae61479a1d50d1ae3c988d1d9aaf20841173d
diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt
index 77bbad0a5bba1c79631719a4122f665f8621cc51..63a3024f32e04cc29b379fb5a00f38175174e82a 100644
--- a/plugins/CMakeLists.txt
+++ b/plugins/CMakeLists.txt
@@ -1,5 +1,6 @@
-# Copyright (c) 2019, Joseph Mirabel
+# Copyright (c) 2019, 2020, CNRS
 # Authors: Joseph Mirabel (joseph.mirabel@laas.fr)
+# Authors: Guilhem Saurel (guilhem.saurel@laas.fr)
 #
 # This file is part of hpp-manipulation.
 # hpp-manipulation is free software: you can redistribute it
@@ -18,10 +19,8 @@ INCLUDE(${HPP_CORE_CMAKE_PLUGIN})
 
 HPP_ADD_PLUGIN(manipulation-spline-gradient-based
   SOURCES spline-gradient-based.cc
-  LINK_DEPENDENCIES ${PROJECT_NAME} ${PROJECT_NAME}-gpl hpp-core-gpl
-  PKG_CONFIG_DEPENDENCIES hpp-core)
+  LINK_DEPENDENCIES ${PROJECT_NAME}-gpl)
 
 HPP_ADD_PLUGIN(end-effector-trajectory
   SOURCES end-effector-trajectory.cc
-  LINK_DEPENDENCIES ${PROJECT_NAME}
-  PKG_CONFIG_DEPENDENCIES hpp-core)
+  LINK_DEPENDENCIES ${PROJECT_NAME})
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
deleted file mode 100644
index 3687f805e48433b89982dfd05545b443317cb49e..0000000000000000000000000000000000000000
--- a/src/CMakeLists.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-#
-# Copyright (c) 2014 CNRS
-# Authors: Florent Lamiraux
-#
-#
-# This file is part of hpp-manipulation
-# hpp-manipulation is free software: you can redistribute it
-# and/or modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either version
-# 3 of the License, or (at your option) any later version.
-#
-# hpp-manipulation is distributed in the hope that it will be
-# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Lesser Public License for more details.  You should have
-# received a copy of the GNU Lesser General Public License along with
-# hpp-manipulation  If not, see
-# <http://www.gnu.org/licenses/>.
-
-SET(SOURCES
-  handle.cc
-  manipulation-planner.cc
-  problem-solver.cc
-  roadmap.cc
-  connected-component.cc
-  leaf-connected-comp.cc
-  constraint-set.cc
-  roadmap-node.cc
-  device.cc
-  weighed-distance.cc
-  problem.cc
-  graph-path-validation.cc
-  graph-optimizer.cc
-
-  graph/state.cc
-  graph/edge.cc
-  graph/graph.cc
-  graph/graph-component.cc
-  graph/state-selector.cc
-  graph/guided-state-selector.cc
-  graph/statistics.cc
-  graph/helper.cc
-
-  graph/dot.cc
-  graph/validation.cc
-
-  path-optimization/random-shortcut.cc
-  path-optimization/enforce-transition-semantic.cc
-
-  path-planner/end-effector-trajectory.cc
-
-  problem-target/state.cc
-
-  steering-method/end-effector-trajectory.cc
-  steering-method/cross-state-optimization.cc
-  steering-method/graph.cc
-  )
-
-IF(HPP_WHOLEBODY_STEP_FOUND)
-  SET(SOURCES
-    ${SOURCES}
-    path-optimization/small-steps.cc
-    )
-ENDIF(HPP_WHOLEBODY_STEP_FOUND)
-
-ADD_LIBRARY(${LIBRARY_NAME} SHARED ${SOURCES})
-
-PKG_CONFIG_USE_DEPENDENCY(${LIBRARY_NAME} hpp-core)
-PKG_CONFIG_USE_DEPENDENCY(${LIBRARY_NAME} hpp-statistics)
-PKG_CONFIG_USE_DEPENDENCY(${LIBRARY_NAME} hpp-constraints)
-IF(HPP_WHOLEBODY_STEP_FOUND)
-  PKG_CONFIG_USE_DEPENDENCY(${LIBRARY_NAME} hpp-wholebody-step)
-ENDIF(HPP_WHOLEBODY_STEP_FOUND)
-TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${Boost_LIBRARIES})
-
-INSTALL(TARGETS ${LIBRARY_NAME} DESTINATION lib)
-
-ADD_LIBRARY(${LIBRARY_NAME}-gpl SHARED
-  path-optimization/spline-gradient-based.cc
-  )
-
-PKG_CONFIG_USE_DEPENDENCY(${LIBRARY_NAME}-gpl hpp-core)
-PKG_CONFIG_USE_DEPENDENCY(${LIBRARY_NAME}-gpl hpp-statistics)
-PKG_CONFIG_USE_DEPENDENCY(${LIBRARY_NAME}-gpl hpp-constraints)
-IF(HPP_WHOLEBODY_STEP_FOUND)
-  PKG_CONFIG_USE_DEPENDENCY(${LIBRARY_NAME}-gpl hpp-wholebody-step)
-ENDIF(HPP_WHOLEBODY_STEP_FOUND)
-TARGET_LINK_LIBRARIES(${LIBRARY_NAME}-gpl ${LIBRARY_NAME} hpp-core-gpl)
-
-INSTALL(TARGETS ${LIBRARY_NAME}-gpl DESTINATION lib)
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 5da633d06a7e31f73950256351269ab3d73be861..fadf505acd7ef201ed7ab8e006dd38dce424503f 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -1,6 +1,6 @@
-# Copyright 2012, 2013, 2014 CNRS-LAAS
+# Copyright 2012, 2013, 2014, 2020 CNRS-LAAS
 #
-# Author: Mathieu Geisert
+# Authors: Mathieu Geisert, Guilhem Saurel
 #
 # This file is part of hpp-core
 # hpp-manipulation is free software: you can redistribute it and/or modify
@@ -15,12 +15,8 @@
 # You should have received a copy of the GNU Lesser General Public License
 # along with hpp-manipulation  If not, see <http://www.gnu.org/licenses/>.
 
-INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
-
 # Make Boost.Test generates the main function in test cases.
 ADD_DEFINITIONS(-DBOOST_TEST_DYN_LINK -DBOOST_TEST_MAIN)
 
 ADD_UNIT_TEST(test-constraintgraph test-constraintgraph.cc)
-PKG_CONFIG_USE_DEPENDENCY(test-constraintgraph hpp-core)
-TARGET_LINK_LIBRARIES(test-constraintgraph ${LIBRARY_NAME})
-
+TARGET_LINK_LIBRARIES(test-constraintgraph ${PROJECT_NAME} ${Boost_LIBRARIES})