diff --git a/CMakeLists.txt b/CMakeLists.txt
index be52e7ff31d65aa42ba03354ca41cbeb2686ed80..89e2f96535652c0dddeae1586216cf51fb7829f8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -58,7 +58,6 @@ ENDIF(WIN32)
 # ----------------------------------------------------
 OPTION (BUILD_UNIT_TESTS "Build the unitary tests" ON)
 
-SET(Python_ADDITIONAL_VERSIONS 3.5)
 FINDPYTHON()
 
 INCLUDE_DIRECTORIES(SYSTEM ${PYTHON_INCLUDE_DIRS})
@@ -70,70 +69,44 @@ INCLUDE_DIRECTORIES(SYSTEM ${NUMPY_INCLUDE_DIRS})
 # ----------------------------------------------------
 ADD_REQUIRED_DEPENDENCY("eigen3 >= 3.0.5")
 
-if (${PYTHON_VERSION_MAJOR} EQUAL 3)
-  if(UNIX)
-    set( BOOST_COMPONENTS python-py35)
-  else()
-    set( BOOST_COMPONENTS python3)
-  endif()
-else()
-  SET(BOOST_COMPONENTS python)
-endif()
-  
-    
+SET(BOOST_COMPONENTS python)
 SEARCH_FOR_BOOST()
 # Add Boost path to include directories.
 INCLUDE_DIRECTORIES(SYSTEM ${Boost_INCLUDE_DIRS})
 
-#FINDPYTHON(2.7 EXACT REQUIRED)
-
 # ----------------------------------------------------
 # --- INCLUDE ----------------------------------------
 # ----------------------------------------------------
 SET(${PROJECT_NAME}_SOLVERS_HEADERS
-  solvers/solvers.hpp
-  solvers/preconditioners.hpp
-  solvers/IterativeSolverBase.hpp
-  solvers/LeastSquaresConjugateGradient.hpp
-  solvers/ConjugateGradient.hpp
-  solvers/SparseSolverBase.hpp
-  solvers/BasicPreconditioners.hpp
-  solvers/BFGSPreconditioners.hpp
+  include/eigenpy/solvers/solvers.hpp
+  include/eigenpy/solvers/preconditioners.hpp
+  include/eigenpy/solvers/IterativeSolverBase.hpp
+  include/eigenpy/solvers/LeastSquaresConjugateGradient.hpp
+  include/eigenpy/solvers/ConjugateGradient.hpp
+  include/eigenpy/solvers/SparseSolverBase.hpp
+  include/eigenpy/solvers/BasicPreconditioners.hpp
+  include/eigenpy/solvers/BFGSPreconditioners.hpp
   )
 
-SET(HEADERS
+SET(${PROJECT_NAME}_HEADERS
   ${${PROJECT_NAME}_SOLVERS_HEADERS}
-  eigenpy.hpp
-  exception.hpp
-  details.hpp
-  fwd.hpp
-  map.hpp
-  geometry.hpp
-  geometry-conversion.hpp
-  memory.hpp
-  registration.hpp
-  angle-axis.hpp
-  quaternion.hpp
-  stride.hpp
-  ref.hpp
+  include/eigenpy/eigenpy.hpp
+  include/eigenpy/exception.hpp
+  include/eigenpy/details.hpp
+  include/eigenpy/fwd.hpp
+  include/eigenpy/map.hpp
+  include/eigenpy/geometry.hpp
+  include/eigenpy/geometry-conversion.hpp
+  include/eigenpy/memory.hpp
+  include/eigenpy/registration.hpp
+  include/eigenpy/angle-axis.hpp
+  include/eigenpy/quaternion.hpp
+  include/eigenpy/stride.hpp
+  include/eigenpy/ref.hpp
 )
 
-MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/eigenpy")
-MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/eigenpy/solvers")
-INCLUDE_DIRECTORIES(${${PROJECT_NAME}_BINARY_DIR}/include/eigenpy)
-
-SET(${PROJECT_NAME}_HEADERS)
-FOREACH(header ${HEADERS})
-  GET_FILENAME_COMPONENT(headerName ${header} NAME)
-  GET_FILENAME_COMPONENT(headerPath ${header} PATH)
-  EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E ${LINK}
-    ${${PROJECT_NAME}_SOURCE_DIR}/src/${header}
-    ${${PROJECT_NAME}_BINARY_DIR}/include/${PROJECT_NAME}/${header})
-  INSTALL(FILES ${${PROJECT_NAME}_SOURCE_DIR}/src/${header}
-    DESTINATION ${CMAKE_INSTALL_PREFIX}/include/${PROJECT_NAME}/${headerPath}
-          PERMISSIONS OWNER_READ GROUP_READ WORLD_READ OWNER_WRITE)
-  LIST(APPEND ${PROJECT_NAME}_HEADERS src/${header})
-ENDFOREACH(header)
+INCLUDE_DIRECTORIES(${${PROJECT_NAME}_BINARY_DIR}/include)
+INCLUDE_DIRECTORIES(${${PROJECT_NAME}_SOURCE_DIR}/include)
 
 # ----------------------------------------------------
 # --- TARGETS ----------------------------------------
diff --git a/cmake b/cmake
index 212cba414aac3cd18037d4102788b23f3df501f8..f8a5bbbee0b08b4fdd30ef427b6bd1a1934d6276 160000
--- a/cmake
+++ b/cmake
@@ -1 +1 @@
-Subproject commit 212cba414aac3cd18037d4102788b23f3df501f8
+Subproject commit f8a5bbbee0b08b4fdd30ef427b6bd1a1934d6276
diff --git a/src/angle-axis.hpp b/include/eigenpy/angle-axis.hpp
similarity index 100%
rename from src/angle-axis.hpp
rename to include/eigenpy/angle-axis.hpp
diff --git a/src/details.hpp b/include/eigenpy/details.hpp
similarity index 100%
rename from src/details.hpp
rename to include/eigenpy/details.hpp
diff --git a/src/eigenpy.hpp b/include/eigenpy/eigenpy.hpp
similarity index 100%
rename from src/eigenpy.hpp
rename to include/eigenpy/eigenpy.hpp
diff --git a/src/exception.hpp b/include/eigenpy/exception.hpp
similarity index 100%
rename from src/exception.hpp
rename to include/eigenpy/exception.hpp
diff --git a/src/fwd.hpp b/include/eigenpy/fwd.hpp
similarity index 100%
rename from src/fwd.hpp
rename to include/eigenpy/fwd.hpp
diff --git a/src/geometry-conversion.hpp b/include/eigenpy/geometry-conversion.hpp
similarity index 100%
rename from src/geometry-conversion.hpp
rename to include/eigenpy/geometry-conversion.hpp
diff --git a/src/geometry.hpp b/include/eigenpy/geometry.hpp
similarity index 100%
rename from src/geometry.hpp
rename to include/eigenpy/geometry.hpp
diff --git a/src/map.hpp b/include/eigenpy/map.hpp
similarity index 100%
rename from src/map.hpp
rename to include/eigenpy/map.hpp
diff --git a/src/memory.hpp b/include/eigenpy/memory.hpp
similarity index 100%
rename from src/memory.hpp
rename to include/eigenpy/memory.hpp
diff --git a/src/quaternion.hpp b/include/eigenpy/quaternion.hpp
similarity index 100%
rename from src/quaternion.hpp
rename to include/eigenpy/quaternion.hpp
diff --git a/src/ref.hpp b/include/eigenpy/ref.hpp
similarity index 100%
rename from src/ref.hpp
rename to include/eigenpy/ref.hpp
diff --git a/src/registration.hpp b/include/eigenpy/registration.hpp
similarity index 100%
rename from src/registration.hpp
rename to include/eigenpy/registration.hpp
diff --git a/src/solvers/BFGSPreconditioners.hpp b/include/eigenpy/solvers/BFGSPreconditioners.hpp
similarity index 100%
rename from src/solvers/BFGSPreconditioners.hpp
rename to include/eigenpy/solvers/BFGSPreconditioners.hpp
diff --git a/src/solvers/BasicPreconditioners.hpp b/include/eigenpy/solvers/BasicPreconditioners.hpp
similarity index 100%
rename from src/solvers/BasicPreconditioners.hpp
rename to include/eigenpy/solvers/BasicPreconditioners.hpp
diff --git a/src/solvers/ConjugateGradient.hpp b/include/eigenpy/solvers/ConjugateGradient.hpp
similarity index 100%
rename from src/solvers/ConjugateGradient.hpp
rename to include/eigenpy/solvers/ConjugateGradient.hpp
diff --git a/src/solvers/IterativeSolverBase.hpp b/include/eigenpy/solvers/IterativeSolverBase.hpp
similarity index 100%
rename from src/solvers/IterativeSolverBase.hpp
rename to include/eigenpy/solvers/IterativeSolverBase.hpp
diff --git a/src/solvers/LeastSquaresConjugateGradient.hpp b/include/eigenpy/solvers/LeastSquaresConjugateGradient.hpp
similarity index 100%
rename from src/solvers/LeastSquaresConjugateGradient.hpp
rename to include/eigenpy/solvers/LeastSquaresConjugateGradient.hpp
diff --git a/src/solvers/SparseSolverBase.hpp b/include/eigenpy/solvers/SparseSolverBase.hpp
similarity index 100%
rename from src/solvers/SparseSolverBase.hpp
rename to include/eigenpy/solvers/SparseSolverBase.hpp
diff --git a/src/solvers/preconditioners.hpp b/include/eigenpy/solvers/preconditioners.hpp
similarity index 100%
rename from src/solvers/preconditioners.hpp
rename to include/eigenpy/solvers/preconditioners.hpp
diff --git a/src/solvers/solvers.hpp b/include/eigenpy/solvers/solvers.hpp
similarity index 100%
rename from src/solvers/solvers.hpp
rename to include/eigenpy/solvers/solvers.hpp
diff --git a/src/stride.hpp b/include/eigenpy/stride.hpp
similarity index 100%
rename from src/stride.hpp
rename to include/eigenpy/stride.hpp