diff --git a/experimental/CMakeLists.txt b/experimental/CMakeLists.txt
index baa7a4c889de935f2028024cb33223e3e76f4dd6..977c37c1054bdb81763b05a3e2b2f94038c5a9b9 100644
--- a/experimental/CMakeLists.txt
+++ b/experimental/CMakeLists.txt
@@ -39,11 +39,11 @@ endif()
 #
 # Creating main lib
 # -----------------
-add_library(${CMAKE_PROJECT_NAME} INTERFACE)
-target_compile_features(${CMAKE_PROJECT_NAME} INTERFACE cxx_std_17)
+add_library(${CMAKE_PROJECT_NAME}-headers INTERFACE)
+target_compile_features(${CMAKE_PROJECT_NAME}-headers INTERFACE cxx_std_17)
 # Set library includes
 # --------------------
-target_include_directories(${CMAKE_PROJECT_NAME} INTERFACE
+target_include_directories(${CMAKE_PROJECT_NAME}-headers INTERFACE
   $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
   $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
   $<INSTALL_INTERFACE:include>
@@ -70,7 +70,7 @@ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
 # -----------------
 include(cmake/flags.cmake)
 # -----------------
-target_compile_options(${CMAKE_PROJECT_NAME} INTERFACE "${${CMAKE_PROJECT_NAME}_CXX_FLAGS}")
+target_compile_options(${CMAKE_PROJECT_NAME}-headers INTERFACE "${${CMAKE_PROJECT_NAME}_CXX_FLAGS}")
 # -----------------
 
 #
@@ -78,6 +78,11 @@ target_compile_options(${CMAKE_PROJECT_NAME} INTERFACE "${${CMAKE_PROJECT_NAME}_
 # -------------------
 include(cmake/options.cmake)
 
+#
+# Modules required
+# ----------------
+include(cmake/modules.cmake)
+
 #
 # Set ${CMAKE_PROJECT_NAME} compile definitions
 # -------------------------------
@@ -85,26 +90,28 @@ set(${CMAKE_PROJECT_NAME}_COMPILE_DEFINITIONS  XSIMD_ENABLE_XTL_COMPLEX ENABLE_X
 set(${CMAKE_PROJECT_NAME}_COMPILE_DEFINITIONS "${${CMAKE_PROJECT_NAME}_COMPILE_DEFINITIONS}" CACHE STRING "Global compile definitions for ${CMAKE_PROJECT_NAME}")
 message(STATUS "${CMAKE_PROJECT_NAME} compile definitions : ${${CMAKE_PROJECT_NAME}_COMPILE_DEFINITIONS}")
 # -----------------
-target_compile_definitions(${CMAKE_PROJECT_NAME} INTERFACE "${${CMAKE_PROJECT_NAME}_COMPILE_DEFINITIONS}")
+target_compile_definitions(${CMAKE_PROJECT_NAME}-headers INTERFACE "${${CMAKE_PROJECT_NAME}_COMPILE_DEFINITIONS}")
 # -----------------
 
-#
-# Modules required
-# ----------------
-include(cmake/modules.cmake)
-
 #
 # Dependencies for the lib
 # ------------------------
 include(cmake/dependencies.cmake)
+# Minimum required dependencies are BLAS/CBLAS and FFTW
+add_library(${CMAKE_PROJECT_NAME}-core INTERFACE)
+target_link_libraries(${CMAKE_PROJECT_NAME}-core INTERFACE ${CMAKE_PROJECT_NAME}-headers ${BLAS_TARGET} ${CBLAS_TARGET} ${FFTW_TARGET} ${OMP_TARGET} ${CMAKE_PROJECT_NAME}-headers)
+set(CORE_LIBRARIES CBLAS BLAS FFTW OpenMP ${CMAKE_PROJECT_NAME}-headers)
+
+if(${CMAKE_PROJECT_NAME}_USE_MPI)
+    add_library(${CMAKE_PROJECT_NAME}-mpi INTERFACE)
+    target_link_libraries(${CMAKE_PROJECT_NAME}-mpi INTERFACE ${CMAKE_PROJECT_NAME}-core ${MPI_TARGET})
+    target_compile_definitions(${CMAKE_PROJECT_NAME}-mpi INTERFACE ${MPI_COMPILE_DEFINITIONS})
+    set(MPI_LIBRARIES MPI ${CMAKE_PROJECT_NAME}-core)
+endif()
+
 set(${CMAKE_PROJECT_NAME}_LIBRARIES "${${CMAKE_PROJECT_NAME}_LIBRARIES}" CACHE STRING "${CMAKE_PROJECT_NAME} libraries dependencies")
 message(STATUS "${CMAKE_PROJECT_NAME} dependencies : ${FUSE_LIST}")
 
-# DEPRECATED
-# Generate ScalFmmConfig.h
-# ------------------------
-#configure_file(${CMAKE_CURRENT_SOURCE_DIR}/include/scalfmm/config/scalfmm-config.hpp.cmake
-#  ${CMAKE_CURRENT_BINARY_DIR}/include/scalfmm/config/scalfmm-config.hpp)
 
 #
 # Modules required
@@ -114,7 +121,7 @@ include(cmake/analysis.cmake)
 #
 # Set FUSE LIST
 # -------------
-set(FUSE_DEP_AVAILABLE "MPI;CUDA;STARPU;OMP4;BLAS;CBLAS;FFTW;OPENCL") # List to compare against when compiling tests, etc...
+set(FUSE_DEP_AVAILABLE "MPI;CUDA;STARPU;OMP;BLAS;CBLAS;FFTW;OPENCL") # List to compare against when compiling tests, etc...
 
 #
 # Build Tools
diff --git a/experimental/cmake/dependencies/blas.cmake b/experimental/cmake/dependencies/blas.cmake
index 25b77fa64a4650f7e36e7bc9665743e6a7c843d4..6258cf1e9abccac9343649e0d1fa3b19b7bb4d04 100644
--- a/experimental/cmake/dependencies/blas.cmake
+++ b/experimental/cmake/dependencies/blas.cmake
@@ -1,43 +1,41 @@
 #
 # Blas options
 # ------------
-if(${CMAKE_PROJECT_NAME}_USE_BLAS)
-    if(NOT BLAS_FOUND OR NOT CBLAS_FOUND)
-        if( ${CMAKE_PROJECT_NAME}_USE_MKL_AS_BLAS )
+if(NOT BLAS_FOUND OR NOT CBLAS_FOUND)
+    if( ${CMAKE_PROJECT_NAME}_USE_MKL)
 
-            set(BLA_VENDOR "Intel10_64lp_seq")
-            find_package(BLAS REQUIRED)
-            if(BLAS_FOUND)
-                list(APPEND BLAS_TARGET BLAS::BLAS)
-                list(APPEND ${CMAKE_PROJECT_NAME}_LIBRARIES BLAS CBLAS)
-                list(APPEND FUSE_LIST BLAS CBLAS)
-            elseif()
-                message(ERROR "CBLAS and BLAS required for uniform interpolator.")
-            endif()
-
-        else()
+        set(BLA_VENDOR "Intel10_64lp_seq")
+        find_package(BLAS REQUIRED)
+        if(BLAS_FOUND)
+            list(APPEND BLAS_TARGET BLAS::BLAS)
+            list(APPEND ${CMAKE_PROJECT_NAME}_LIBRARIES BLAS CBLAS)
+            list(APPEND FUSE_LIST BLAS CBLAS)
+        elseif()
+            message(ERROR "CBLAS and BLAS required for uniform interpolator.")
+        endif()
 
-            find_package(CBLAS REQUIRED)
-            if(CBLAS_FOUND)
-                list(APPEND CBLAS_TARGET MORSE::CBLAS)
-                list(APPEND ${CMAKE_PROJECT_NAME}_LIBRARIES CBLAS)
-                list(APPEND FUSE_LIST CBLAS)
-            elseif()
-                message(ERROR "CBLAS required for uniform interpolator.")
-            endif()
+    else()
 
-            find_package(BLAS REQUIRED)
-            if(BLAS_FOUND)
-                list(APPEND BLAS_TARGET BLAS::BLAS)
-                list(APPEND ${CMAKE_PROJECT_NAME}_LIBRARIES BLAS)
-                list(APPEND FUSE_LIST BLAS)
-            elseif()
-                message(ERROR "BLAS required for chebyshev interpolator.")
-            endif()
+        find_package(CBLAS REQUIRED)
+        if(CBLAS_FOUND)
+            list(APPEND CBLAS_TARGET MORSE::CBLAS)
+            list(APPEND ${CMAKE_PROJECT_NAME}_LIBRARIES CBLAS)
+            list(APPEND FUSE_LIST CBLAS)
+        elseif()
+            message(ERROR "CBLAS required for uniform interpolator.")
+        endif()
 
+        find_package(BLAS REQUIRED)
+        if(BLAS_FOUND)
+            list(APPEND BLAS_TARGET BLAS::BLAS)
+            list(APPEND ${CMAKE_PROJECT_NAME}_LIBRARIES BLAS)
+            list(APPEND FUSE_LIST BLAS)
+        elseif()
+            message(ERROR "BLAS required for chebyshev interpolator.")
         endif()
-    endif(NOT BLAS_FOUND OR NOT CBLAS_FOUND)
-endif(${CMAKE_PROJECT_NAME}_USE_BLAS)
+
+    endif()
+endif(NOT BLAS_FOUND OR NOT CBLAS_FOUND)
 
     #message (STATUS "Check BLAS Fortran mangling")
     ## add options to let the user be able to force a behavior
diff --git a/experimental/cmake/dependencies/fftw.cmake b/experimental/cmake/dependencies/fftw.cmake
index 35614a476b1fc1656045f450f96ca9f0ea9469d2..63daa2302673807a7bda43a8f89076bc092622ce 100644
--- a/experimental/cmake/dependencies/fftw.cmake
+++ b/experimental/cmake/dependencies/fftw.cmake
@@ -2,32 +2,30 @@
 # FFT options
 # -----------
 
-if(${CMAKE_PROJECT_NAME}_USE_FFTW)
-    if(NOT FFTW_FOUND)
-        message(STATUS "${CMAKE_PROJECT_NAME} USE FFTW Configure:")
+if(NOT FFTW_FOUND)
+    message(STATUS "${CMAKE_PROJECT_NAME} USE FFTW Configure:")
 
-        # The package find_package(FFTW) can be used with the following COMPONENTS:
-        # MKL, ESSL, THREADS|OMP and/or SIMPLE|LONG|QUAD
-        # Default will find the real double precision fftw library version without THREADS|OMP
-        if(${CMAKE_PROJECT_NAME}_USE_MKL_AS_FFTW)
-            message(STATUS "${CMAKE_PROJECT_NAME} USE FFT from MKL")
-            find_package(FFTW REQUIRED COMPONENTS MKL)
-        elseif (${CMAKE_PROJECT_NAME}_USE_ESSL_AS_FFTW)
-            message(STATUS "${CMAKE_PROJECT_NAME} USE FFT from ESSL")
-            find_package(FFTW REQUIRED COMPONENTS ESSL)
-        else()
-            message(STATUS "${CMAKE_PROJECT_NAME} USE FFTW")
-            find_package(FFTW REQUIRED COMPONENTS SIMPLE LONG)
-        endif()
+    # The package find_package(FFTW) can be used with the following COMPONENTS:
+    # MKL, ESSL, THREADS|OMP and/or SIMPLE|LONG|QUAD
+    # Default will find the real double precision fftw library version without THREADS|OMP
+    if(${CMAKE_PROJECT_NAME}_USE_MKL)
+        message(STATUS "${CMAKE_PROJECT_NAME} USE FFT from MKL")
+        find_package(FFTW REQUIRED COMPONENTS MKL)
+    elseif (${CMAKE_PROJECT_NAME}_USE_ESSL)
+        message(STATUS "${CMAKE_PROJECT_NAME} USE FFT from ESSL")
+        find_package(FFTW REQUIRED COMPONENTS ESSL)
+    else()
+        message(STATUS "${CMAKE_PROJECT_NAME} USE FFTW")
+        find_package(FFTW REQUIRED COMPONENTS SIMPLE LONG)
+    endif()
 
-        if(FFTW_FOUND)
-            list(APPEND ${CMAKE_PROJECT_NAME}_LIBRARIES FFTW)
-            list(APPEND FUSE_LIST FFTW)
-            list(APPEND FFTW_TARGET MORSE::FFTW)
-        else(FFTW_FOUND)
-            message(WARNING "FFTW has not been found, ${CMAKE_PROJECT_NAME} will continue to compile but some applications will be disabled.")
-            message(WARNING "If you have FFTW set FFTW_LIBDIR, FFTW_INCDIR or FFTW_DIR (CMake variables using -D or environment variables).")
-            set(${CMAKE_PROJECT_NAME}_USE_FFT OFF)
-        endif(FFTW_FOUND)
-    endif(NOT FFTW_FOUND)
-endif(${CMAKE_PROJECT_NAME}_USE_FFTW)
+    if(FFTW_FOUND)
+        list(APPEND ${CMAKE_PROJECT_NAME}_LIBRARIES FFTW)
+        list(APPEND FUSE_LIST FFTW)
+        list(APPEND FFTW_TARGET MORSE::FFTW)
+    else(FFTW_FOUND)
+        message(FATAL_ERROR "FFTW has not been found, ${CMAKE_PROJECT_NAME} will continue to compile but some applications will be disabled.")
+        message(FATAL_ERROR "If you have FFTW set FFTW_LIBDIR, FFTW_INCDIR or FFTW_DIR (CMake variables using -D or environment variables).")
+        set(${CMAKE_PROJECT_NAME}_USE_FFT OFF)
+    endif(FFTW_FOUND)
+endif(NOT FFTW_FOUND)
diff --git a/experimental/cmake/dependencies/openmp.cmake b/experimental/cmake/dependencies/openmp.cmake
index 3efaf5620c5e40bad95bc63b2f0ecb8dd43ecab6..abdbff842c9215314dd3709523a26cbc3fc39d96 100644
--- a/experimental/cmake/dependencies/openmp.cmake
+++ b/experimental/cmake/dependencies/openmp.cmake
@@ -2,9 +2,9 @@
 # OpenMP
 # ------
 if(NOT OpenMP_CXX_FOUND)
-    find_package(OpenMP)
+    find_package(OpenMP REQUIRED)
     if(OpenMP_CXX_FOUND)
-        list(APPEND BLAS_TARGET OpenMP::OpenMP_CXX)
+        list(APPEND OMP_TARGET OpenMP::OpenMP_CXX)
         list(APPEND ${CMAKE_PROJECT_NAME}_LIBRARIES OpenMP)
         list(APPEND FUSE_LIST OMP)
     else(OpenMP_CXX_FOUND)
diff --git a/experimental/cmake/export.cmake b/experimental/cmake/export.cmake
index c9f43e38bae4ba0f1cdb7beb4fc5390325b668cf..886b4c3e126f49dd9d3fac148d45a5fce9f0d054 100644
--- a/experimental/cmake/export.cmake
+++ b/experimental/cmake/export.cmake
@@ -1,20 +1,24 @@
 #
 # Export Library
 # --------------
-install(TARGETS ${CMAKE_PROJECT_NAME}
-    EXPORT ${CMAKE_PROJECT_NAME}-targets
-            LIBRARY DESTINATION lib
-            ARCHIVE DESTINATION lib
-            RUNTIME DESTINATION bin
-            INCLUDES DESTINATION include
+
+set(PACKAGES ${CMAKE_PROJECT_NAME}-headers ${CMAKE_PROJECT_NAME}-core ${CMAKE_PROJECT_NAME}-mpi)
+
+install(TARGETS ${PACKAGES}
+        EXPORT ${CMAKE_PROJECT_NAME}-targets
+        LIBRARY DESTINATION lib
+        ARCHIVE DESTINATION lib
+        RUNTIME DESTINATION bin
+        INCLUDES DESTINATION include
         )
 
 install(DIRECTORY ${${CMAKE_PROJECT_NAME}_SOURCE_DIR}/include
   DESTINATION ${CMAKE_INSTALL_PREFIX}
-  PATTERN "scalfmm-config.hpp.cmake" EXCLUDE)
+  )
 
 install(DIRECTORY ${${CMAKE_PROJECT_NAME}_SOURCE_DIR}/modules/internal/morse_cmake/modules/
     DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/cmake/${CMAKE_PROJECT_NAME})
+set(MORSE_INSTALL_PATH ${CMAKE_INSTALL_PREFIX}/lib/cmake/${CMAKE_PROJECT_NAME}/)
 
 install(DIRECTORY ${${CMAKE_PROJECT_NAME}_SOURCE_DIR}/modules/internal/inria_tools/
   DESTINATION ${CMAKE_INSTALL_PREFIX}/include)
@@ -41,20 +45,23 @@ install(EXPORT ${CMAKE_PROJECT_NAME}-targets
 
 
 include(CMakePackageConfigHelpers)
-write_basic_package_version_file("${CMAKE_PROJECT_NAME}ConfigVersion.cmake"
-  VERSION ${${CMAKE_PROJECT_NAME}_VERSION}
-  COMPATIBILITY SameMajorVersion)
 
-configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/${CMAKE_PROJECT_NAME}Config.cmake.in
-  "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
-  INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/cmake/${CMAKE_PROJECT_NAME}/)
+foreach(package ${PACKAGES})
+    write_basic_package_version_file("${package}ConfigVersion.cmake"
+      VERSION ${${CMAKE_PROJECT_NAME}_VERSION}
+      COMPATIBILITY SameMajorVersion)
 
-install(FILES "${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}ConfigVersion.cmake"
-  "${PROJECT_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake"
-  DESTINATION lib/cmake/${CMAKE_PROJECT_NAME})
+    configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/${package}Config.cmake.in
+      "${CMAKE_CURRENT_BINARY_DIR}/${package}Config.cmake"
+      INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/cmake/${CMAKE_PROJECT_NAME}/)
+
+    install(FILES "${CMAKE_BINARY_DIR}/${package}ConfigVersion.cmake"
+      "${PROJECT_BINARY_DIR}/${package}Config.cmake"
+      DESTINATION lib/cmake/${CMAKE_PROJECT_NAME})
+endforeach()
 
 foreach(file ${TOOLS_TO_INSTALL})
-    install(PROGRAMS "${CMAKE_BINARY_DIR}/tools/${file}"
+    install(PROGRAMS "${CMAKE_BINARY_DIR}/tools/${CMAKE_BUILD_TYPE}/${file}"
     DESTINATION bin/)
 endforeach()
 #
diff --git a/experimental/cmake/modules.cmake b/experimental/cmake/modules.cmake
index 6ddc673e4db1d255e87fee996ebc02c4921d2ae0..ae449c52cc862ef54fe20aa73bc59ebba4a17bb7 100644
--- a/experimental/cmake/modules.cmake
+++ b/experimental/cmake/modules.cmake
@@ -6,27 +6,27 @@
 #
 # Module internal
 # ------------
-target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM INTERFACE
+target_include_directories(${CMAKE_PROJECT_NAME}-headers SYSTEM INTERFACE
     $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/modules/internal/inria_tools>
     $<INSTALL_INTERFACE:include>
 )
-target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM INTERFACE
+target_include_directories(${CMAKE_PROJECT_NAME}-headers SYSTEM INTERFACE
     $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/modules/internal/xtl/include>
     $<INSTALL_INTERFACE:include>
 )
-target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM INTERFACE
+target_include_directories(${CMAKE_PROJECT_NAME}-headers SYSTEM INTERFACE
     $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/modules/internal/xsimd/include>
     $<INSTALL_INTERFACE:include>
 )
-target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM INTERFACE
+target_include_directories(${CMAKE_PROJECT_NAME}-headers SYSTEM INTERFACE
     $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/modules/internal/xtensor/include>
     $<INSTALL_INTERFACE:include>
 )
-target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM INTERFACE
+target_include_directories(${CMAKE_PROJECT_NAME}-headers SYSTEM INTERFACE
     $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/modules/internal/xtensor-blas/include>
     $<INSTALL_INTERFACE:include>
 )
-target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM INTERFACE
+target_include_directories(${CMAKE_PROJECT_NAME}-headers SYSTEM INTERFACE
     $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/modules/internal/xtensor-fftw/include>
     $<INSTALL_INTERFACE:include>
 )
diff --git a/experimental/cmake/options.cmake b/experimental/cmake/options.cmake
index 882b6b33230a61abbed84f68f67cb85fa09da977..c8626c537ce4f2d19fd5c3406047ff8402a2f799 100644
--- a/experimental/cmake/options.cmake
+++ b/experimental/cmake/options.cmake
@@ -4,88 +4,72 @@
 
 # Cmake options for dependencies
 option( ${CMAKE_PROJECT_NAME}_USE_MPI              "Set to ON to build ScalFMM with MPI"         OFF )
-option( ${CMAKE_PROJECT_NAME}_USE_BLAS             "Set to ON to build ScalFMM with BLAS"        ON  )
-option( ${CMAKE_PROJECT_NAME}_USE_FFTW              "Set to ON to build ScalFMM with FFTW"        ON )
 option( ${CMAKE_PROJECT_NAME}_USE_STARPU           "Set to ON to build ${CMAKE_PROJECT_NAME} with StarPU"     OFF )
+option( ${CMAKE_PROJECT_NAME}_USE_MKL              "Set to ON to build ScalFMM with MKL"        OFF )
+option( ${CMAKE_PROJECT_NAME}_USE_ESSL              "Set to ON to build ScalFMM with ESSL"        OFF )
 
 # Cmake options related to trace, logging and statistics
 option( ${CMAKE_PROJECT_NAME}_USE_LOG              "Set to ON to print output debug information"  OFF )
 option( ${CMAKE_PROJECT_NAME}_USE_MEM_STATS        "Set to ON to profile memory"                  OFF )
-option( ${CMAKE_PROJECT_NAME}_ONLY_DEVEL           "Set to ON to compile Development tools (only scalfmm team)" OFF )
+option( ${CMAKE_PROJECT_NAME}_USE_STATIC_ANALYSIS  "Set to ON to use static analysis" OFF )
 
 
-if(${CMAKE_PROJECT_NAME}_USE_BLAS)
-    option( ${CMAKE_PROJECT_NAME}_USE_MKL_AS_BLAS   "Set to ON to use MKL BLAS/LAPACK" OFF )
-    option( ${CMAKE_PROJECT_NAME}_USE_ESSL_AS_BLAS  "Set to ON to use ESSL BLAS/LAPACK" OFF )
-    option( ${CMAKE_PROJECT_NAME}_USE_EXTERNAL_BLAS "Set to ON to use external BLAS. Please, set BLAS_LIBRARIES variable." OFF )
-endif(${CMAKE_PROJECT_NAME}_USE_BLAS)
 
 include(CMakeDependentOption)
 
-cmake_dependent_option(${CMAKE_PROJECT_NAME}_USE_MKL_AS_FFTW  "Set to ON to use MKL FFTW"  ON  "${CMAKE_PROJECT_NAME}_USE_FFTW;${CMAKE_PROJECT_NAME}_USE_MKL_AS_BLAS"  OFF )
-cmake_dependent_option(${CMAKE_PROJECT_NAME}_USE_ESSL_AS_FFTW "Set to ON to use ESSL FFTW" ON  "${CMAKE_PROJECT_NAME}_USE_FFTW;${CMAKE_PROJECT_NAME}_USE_ESSL_AS_BLAS" OFF )
 cmake_dependent_option(${CMAKE_PROJECT_NAME}_USE_OPENCL "Set to ON to use OPENCL with StarPU" OFF "${CMAKE_PROJECT_NAME}_USE_STARPU" OFF)
 cmake_dependent_option(${CMAKE_PROJECT_NAME}_USE_CUDA "Set to ON to use OPENCL with StarPU" OFF "${CMAKE_PROJECT_NAME}_USE_STARPU" OFF)
-cmake_dependent_option(${CMAKE_PROJECT_NAME}_USE_STATIC_ANALYSIS  "Set to ON to use static analysis tools"  ON  "${CMAKE_PROJECT_NAME}_ONLY_DEVEL"  OFF )
+
 cmake_dependent_option(${CMAKE_PROJECT_NAME}_USE_CPPCHECK   "Set to ON to use static analysis tools"  OFF "${CMAKE_PROJECT_NAME}_USE_STATIC_ANALYSIS"  OFF )
 cmake_dependent_option(${CMAKE_PROJECT_NAME}_USE_CLANGTIDY  "Set to ON to use static analysis tools"  ON  "${CMAKE_PROJECT_NAME}_USE_STATIC_ANALYSIS"  OFF  )
 cmake_dependent_option(${CMAKE_PROJECT_NAME}_USE_IWYU       "Set to ON to use static analysis tools"  ON  "${CMAKE_PROJECT_NAME}_USE_STATIC_ANALYSIS"  OFF )
 
 # Additional options for developers
-if( ${CMAKE_PROJECT_NAME}_ONLY_DEVEL )
-
-    if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
-        option( ${CMAKE_PROJECT_NAME}_USE_OMP4 "Set to ON to disable the gcc/intel omp4"    OFF )
-    else()
-        option( ${CMAKE_PROJECT_NAME}_USE_OMP4 "Set to ON to disable the gcc/intel omp4"    ON )
-    endif()
-
-    option( ${CMAKE_PROJECT_NAME}_TIME_OMPTASKS "Set to ON to time omp4 tasks and generate output file"    OFF )
-
-    # SIMGRID and peformance models options
-    option( ${CMAKE_PROJECT_NAME}_SIMGRID_NODATA "Set to ON to avoid the allocation of numerical parts in the group tree" OFF )
-    option( STARPU_SIMGRID_MLR_MODELS "Set to ON to enable MLR models need for calibration and simulation" OFF )
-
-    # OPENMP 4/5 support
-    option( OPENMP_SUPPORT_PRIORITY  "Set to ON to enable tasks priority (OMP4.x/KSTAR/StarPU compiler only)" OFF )
-
-    # STARPU options
-    cmake_dependent_option(OPENMP_SUPPORT_COMMUTE        "Set to ON to let tasks commute (KSTAR/StarPU compiler only)" OFF
-      "${CMAKE_PROJECT_NAME}_USE_STARPU" OFF)
-    cmake_dependent_option(OPENMP_SUPPORT_TASK_NAME       "Set to ON to enable a taskname clause for tasks (KSTAR/StarPU compiler only)" OFF
-      "${CMAKE_PROJECT_NAME}_USE_STARPU" OFF)
-    cmake_dependent_option(${CMAKE_PROJECT_NAME}_STARPU_USE_COMMUTE  "Set to ON to enable commute with StarPU" ON  "${CMAKE_PROJECT_NAME}_USE_STARPU" OFF)
-    cmake_dependent_option(${CMAKE_PROJECT_NAME}_STARPU_USE_REDUX  "Set to ON to enable redux with StarPU"     OFF "${CMAKE_PROJECT_NAME}_USE_STARPU" OFF)
-    cmake_dependent_option(${CMAKE_PROJECT_NAME}_STARPU_USE_PRIO  "Set to ON to enable priority with StarPU"   ON  "${CMAKE_PROJECT_NAME}_USE_STARPU" OFF)
-    cmake_dependent_option(${CMAKE_PROJECT_NAME}_STARPU_FORCE_NO_SCHEDULER  "Set to ON to disable heteroprio even if supported" OFF "${CMAKE_PROJECT_NAME}_USE_STARPU" OFF)
-    cmake_dependent_option(${CMAKE_PROJECT_NAME}_USE_STARPU_EXTRACT  "Set to ON to enable extract with StarPU mpi implicit" ON  "${CMAKE_PROJECT_NAME}_USE_STARPU" OFF)
-endif()
+#if( ${CMAKE_PROJECT_NAME}_ONLY_DEVEL )
+#
+#    if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
+#        option( ${CMAKE_PROJECT_NAME}_USE_OMP4 "Set to ON to disable the gcc/intel omp4"    OFF )
+#    else()
+#        option( ${CMAKE_PROJECT_NAME}_USE_OMP4 "Set to ON to disable the gcc/intel omp4"    ON )
+#    endif()
+#
+#    option( ${CMAKE_PROJECT_NAME}_TIME_OMPTASKS "Set to ON to time omp4 tasks and generate output file"    OFF )
+#
+#    # SIMGRID and peformance models options
+#    option( ${CMAKE_PROJECT_NAME}_SIMGRID_NODATA "Set to ON to avoid the allocation of numerical parts in the group tree" OFF )
+#    option( STARPU_SIMGRID_MLR_MODELS "Set to ON to enable MLR models need for calibration and simulation" OFF )
+#
+#    # OPENMP 4/5 support
+#    option( OPENMP_SUPPORT_PRIORITY  "Set to ON to enable tasks priority (OMP4.x/KSTAR/StarPU compiler only)" OFF )
+#
+#    # STARPU options
+#    cmake_dependent_option(OPENMP_SUPPORT_COMMUTE        "Set to ON to let tasks commute (KSTAR/StarPU compiler only)" OFF
+#      "${CMAKE_PROJECT_NAME}_USE_STARPU" OFF)
+#    cmake_dependent_option(OPENMP_SUPPORT_TASK_NAME       "Set to ON to enable a taskname clause for tasks (KSTAR/StarPU compiler only)" OFF
+#      "${CMAKE_PROJECT_NAME}_USE_STARPU" OFF)
+#    cmake_dependent_option(${CMAKE_PROJECT_NAME}_STARPU_USE_COMMUTE  "Set to ON to enable commute with StarPU" ON  "${CMAKE_PROJECT_NAME}_USE_STARPU" OFF)
+#    cmake_dependent_option(${CMAKE_PROJECT_NAME}_STARPU_USE_REDUX  "Set to ON to enable redux with StarPU"     OFF "${CMAKE_PROJECT_NAME}_USE_STARPU" OFF)
+#    cmake_dependent_option(${CMAKE_PROJECT_NAME}_STARPU_USE_PRIO  "Set to ON to enable priority with StarPU"   ON  "${CMAKE_PROJECT_NAME}_USE_STARPU" OFF)
+#    cmake_dependent_option(${CMAKE_PROJECT_NAME}_STARPU_FORCE_NO_SCHEDULER  "Set to ON to disable heteroprio even if supported" OFF "${CMAKE_PROJECT_NAME}_USE_STARPU" OFF)
+#    cmake_dependent_option(${CMAKE_PROJECT_NAME}_USE_STARPU_EXTRACT  "Set to ON to enable extract with StarPU mpi implicit" ON  "${CMAKE_PROJECT_NAME}_USE_STARPU" OFF)
+#endif()
 
 message( STATUS "${CMAKE_PROJECT_NAME}_USE_MPI    =  ${${CMAKE_PROJECT_NAME}_USE_MPI}")
-message( STATUS "${CMAKE_PROJECT_NAME}_USE_BLAS   =  ${${CMAKE_PROJECT_NAME}_USE_BLAS}")
-message( STATUS "${CMAKE_PROJECT_NAME}_USE_FFTW    =  ${${CMAKE_PROJECT_NAME}_USE_FFTW}")
 message( STATUS "${CMAKE_PROJECT_NAME}_USE_STARPU =  ${${CMAKE_PROJECT_NAME}_USE_STARPU}")
+message( STATUS "${CMAKE_PROJECT_NAME}_USE_MKL    =  ${${CMAKE_PROJECT_NAME}_USE_MKL}")
+message( STATUS "${CMAKE_PROJECT_NAME}_USE_ESSL    =  ${${CMAKE_PROJECT_NAME}_USE_ESSL}")
 
 # Cmake options related to trace, logging and statistics
 message( STATUS "${CMAKE_PROJECT_NAME}_USE_LOG       = ${${CMAKE_PROJECT_NAME}_USE_LOG}")
 message( STATUS "${CMAKE_PROJECT_NAME}_USE_MEM_STATS = ${${CMAKE_PROJECT_NAME}_USE_MEM_STATS}")
 message( STATUS "${CMAKE_PROJECT_NAME}_ONLY_DEVEL    = ${${CMAKE_PROJECT_NAME}_ONLY_DEVEL}")
 
-
-if(${CMAKE_PROJECT_NAME}_USE_BLAS)
-    message( STATUS "${CMAKE_PROJECT_NAME}_USE_MKL_AS_BLAS   = ${${CMAKE_PROJECT_NAME}_USE_MKL_AS_BLAS}")
-    message( STATUS "${CMAKE_PROJECT_NAME}_USE_ESSL_AS_BLAS  = ${${CMAKE_PROJECT_NAME}_USE_ESSL_AS_BLAS}")
-    message( STATUS "${CMAKE_PROJECT_NAME}_USE_EXTERNAL_BLAS = ${${CMAKE_PROJECT_NAME}_USE_EXTERNAL_BLAS}")
-endif(${CMAKE_PROJECT_NAME}_USE_BLAS)
-
 if(${CMAKE_PROJECT_NAME}_USE_STARPU)
     message( STATUS "${CMAKE_PROJECT_NAME}_USE_CUDA   = ${${CMAKE_PROJECT_NAME}_USE_CUDA}")
     message( STATUS "${CMAKE_PROJECT_NAME}_USE_OPENCL = ${${CMAKE_PROJECT_NAME}_USE_OPENCL}")
 endif(${CMAKE_PROJECT_NAME}_USE_STARPU)
 
-if(${CMAKE_PROJECT_NAME}_ONLY_DEVEL)
-    message( STATUS "${CMAKE_PROJECT_NAME}_USE_STATIC_ANALYSIS = ${${CMAKE_PROJECT_NAME}_USE_STATIC_ANALYSIS }" )
-    message( STATUS "${CMAKE_PROJECT_NAME}_USE_CPPCHECK        = ${${CMAKE_PROJECT_NAME}_USE_CPPCHECK}" )
-    message( STATUS "${CMAKE_PROJECT_NAME}_USE_CLANGTIDY       = ${${CMAKE_PROJECT_NAME}_USE_CLANGTIDY}" )
-    message( STATUS "${CMAKE_PROJECT_NAME}_USE_IWYU            = ${${CMAKE_PROJECT_NAME}_USE_IWYU}" )
-endif(${CMAKE_PROJECT_NAME}_ONLY_DEVEL)
+message( STATUS "${CMAKE_PROJECT_NAME}_USE_STATIC_ANALYSIS = ${${CMAKE_PROJECT_NAME}_USE_STATIC_ANALYSIS}" )
+message( STATUS "${CMAKE_PROJECT_NAME}_USE_CPPCHECK        = ${${CMAKE_PROJECT_NAME}_USE_CPPCHECK}" )
+message( STATUS "${CMAKE_PROJECT_NAME}_USE_CLANGTIDY       = ${${CMAKE_PROJECT_NAME}_USE_CLANGTIDY}" )
+message( STATUS "${CMAKE_PROJECT_NAME}_USE_IWYU            = ${${CMAKE_PROJECT_NAME}_USE_IWYU}" )
diff --git a/experimental/examples/CMakeLists.txt b/experimental/examples/CMakeLists.txt
index fb72c344722e3147fbb5718de61732bae1cf10f4..f3a0636a7bdbe0900d515c2d1687bc33bf3bce74 100644
--- a/experimental/examples/CMakeLists.txt
+++ b/experimental/examples/CMakeLists.txt
@@ -42,11 +42,12 @@ foreach(exec ${source_tests_files})
     # Dependency are OK
     if( compile_exec )
         add_executable( ${execname} EXCLUDE_FROM_ALL ${exec})
-        list(APPEND SCALFMM_EXAMPLES_TARGETS ${execname})
-        target_link_libraries( ${execname} ${CMAKE_PROJECT_NAME} ${TARGETS_TO_LINK})
+        list(APPEND ${CMAKE_PROJECT_NAME}_EXAMPLES_TARGETS ${execname})
+        target_link_libraries( ${execname} ${CMAKE_PROJECT_NAME}-headers ${TARGETS_TO_LINK})
         target_compile_definitions( ${execname} PRIVATE ${COMPILE_DEFINITIONS_TO_ADD})
+        set_target_properties(${execname} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BUILD_TYPE})
     endif()
 endforeach(exec)
 
-add_custom_target(examples EXCLUDE_FROM_ALL ALL DEPENDS ${SCALFMM_EXAMPLES_TARGETS})
+add_custom_target(examples EXCLUDE_FROM_ALL ALL DEPENDS ${${CMAKE_PROJECT_NAME}_EXAMPLES_TARGETS})
 
diff --git a/experimental/scalfmm3-coreConfig.cmake.in b/experimental/scalfmm3-coreConfig.cmake.in
new file mode 100644
index 0000000000000000000000000000000000000000..9f4723a5465d2e3e004fb0ce791e57b81d003ac0
--- /dev/null
+++ b/experimental/scalfmm3-coreConfig.cmake.in
@@ -0,0 +1,28 @@
+#-----------------------------------------------------------------------------
+#
+# SCALFMMConfig.cmake - SCALFMM CMake configuration file for external projects.
+#
+# This file is configured by SCALFMM and used by the SCALFMM.cmake module
+# to load SCALFMM's settings for an external project.
+#
+
+@PACKAGE_INIT@
+
+if(NOT TARGET @PROJECT_NAME@::@PROJECT_NAME@-core)
+  list(APPEND CMAKE_MODULE_PATH "@MORSE_INSTALL_PATH@")
+  include(MorseInit)
+  set(@PROJECT_NAME@-headers_DIR "@CMAKE_INSTALL_PREFIX@/lib/cmake/@PROJECT_NAME@")
+  set(IMPORTED_LIBS @CORE_LIBRARIES@)
+  set(BLA_VENDOR @BLA_VENDOR@)
+  include(CMakeFindDependencyMacro)
+  foreach(lib IN LISTS IMPORTED_LIBS)
+    find_dependency(${lib})
+    if(NOT ${lib}_FOUND)
+      message(FATAL_ERROR "MISSING ${lib} DEPENDENCY !")
+    else()
+      message(STATUS "Found ${lib} dependency.")
+    endif()
+  endforeach()
+  include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake")
+endif()
+
diff --git a/experimental/scalfmm3Config.cmake.in b/experimental/scalfmm3-headersConfig.cmake.in
similarity index 87%
rename from experimental/scalfmm3Config.cmake.in
rename to experimental/scalfmm3-headersConfig.cmake.in
index 89c25193c0ed145ee112014638cbdcff10254585..ca999597878ed58cacf1c2740bc2fabaad5a0943 100644
--- a/experimental/scalfmm3Config.cmake.in
+++ b/experimental/scalfmm3-headersConfig.cmake.in
@@ -5,10 +5,8 @@
 # This file is configured by SCALFMM and used by the SCALFMM.cmake module
 # to load SCALFMM's settings for an external project.
 #
-
 @PACKAGE_INIT@
 
-if(NOT TARGET @PROJECT_NAME@::@PROJECT_NAME@)
+if(NOT TARGET @PROJECT_NAME@::@PROJECT_NAME@-headers)
   include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake")
 endif()
-
diff --git a/experimental/scalfmm3-mpiConfig.cmake.in b/experimental/scalfmm3-mpiConfig.cmake.in
new file mode 100644
index 0000000000000000000000000000000000000000..5694e32a982fcadea11f1229353f233e323794d1
--- /dev/null
+++ b/experimental/scalfmm3-mpiConfig.cmake.in
@@ -0,0 +1,27 @@
+#-----------------------------------------------------------------------------
+#
+# SCALFMMConfig.cmake - SCALFMM CMake configuration file for external projects.
+#
+# This file is configured by SCALFMM and used by the SCALFMM.cmake module
+# to load SCALFMM's settings for an external project.
+#
+
+@PACKAGE_INIT@
+
+if(NOT TARGET @PROJECT_NAME@::@PROJECT_NAME@-mpi)
+  list(APPEND CMAKE_MODULE_PATH "@MORSE_INSTALL_PATH@")
+  include(MorseInit)
+  set(@PROJECT_NAME@-core_DIR "@CMAKE_INSTALL_PREFIX@/lib/cmake/@PROJECT_NAME@")
+  set(IMPORTED_LIBS @MPI_LIBRARIES@)
+  set(BLA_VENDOR @BLA_VENDOR@)
+  include(CMakeFindDependencyMacro)
+  foreach(lib IN LISTS IMPORTED_LIBS)
+    find_dependency(${lib})
+    if(NOT ${lib}_FOUND)
+      message(FATAL_ERROR "MISSING ${lib} DEPENDENCY !")
+    else()
+      message(STATUS "Found ${lib} dependency.")
+    endif()
+  endforeach()
+  include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake")
+endif()
diff --git a/experimental/tools/CMakeLists.txt b/experimental/tools/CMakeLists.txt
index 74d398a480cc304b833da13d23f2d60b96709ed9..77acb3207372be750b40f71fc1cb62ece4220dce 100644
--- a/experimental/tools/CMakeLists.txt
+++ b/experimental/tools/CMakeLists.txt
@@ -13,11 +13,30 @@ set(source_tests_files
 
 # Add execs - 1 cpp = 1 exec
 foreach(exec ${source_tests_files})
+    set(compile_exec TRUE)
     get_filename_component( execname ${exec} NAME_WE )
 
-    add_executable( ${execname} ${exec})
-    list(APPEND ${CMAKE_PROJECT_NAME}_TOOLS_TARGETS ${execname})
-    target_link_libraries( ${execname} ${CMAKE_PROJECT_NAME})
+    foreach(fuse_key ${FUSE_DEP_AVAILABLE})
+        file(STRINGS "${exec}" lines_fuse REGEX "@FUSE_${fuse_key}")
+        if(lines_fuse AND NOT ${fuse_key} IN_LIST FUSE_LIST)
+            message( STATUS "${exec} needs ${fuse_key}, dependencies are not met." )
+            set(compile_exec FALSE)
+        elseif(lines_fuse AND ${fuse_key} IN_LIST FUSE_LIST)
+            message( STATUS "${exec} tool activated with ${fuse_key}." )
+            list(APPEND TARGETS_TO_LINK ${${fuse_key}_TARGET})
+            if(${fuse_key}_COMPILE_DEFINITIONS)
+                list(APPEND COMPILE_DEFINITIONS_TO_ADD ${${fuse_key}_COMPILE_DEFINITIONS})
+            endif()
+        endif()
+    endforeach()
+    # Dependency are OK
+    if( compile_exec )
+        add_executable( ${execname} EXCLUDE_FROM_ALL ${exec})
+        list(APPEND ${CMAKE_PROJECT_NAME}_TOOLS_TARGETS ${execname})
+        target_link_libraries( ${execname} ${CMAKE_PROJECT_NAME}-headers ${TARGETS_TO_LINK})
+        target_compile_definitions( ${execname} PRIVATE ${COMPILE_DEFINITIONS_TO_ADD})
+        set_target_properties(${execname} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BUILD_TYPE})
+    endif()
 endforeach(exec)
 
 add_custom_target(tools ALL DEPENDS ${${CMAKE_PROJECT_NAME}_TOOLS_TARGETS})
diff --git a/experimental/tools/direct_computation.cpp b/experimental/tools/direct_computation.cpp
index 7171b8c51e0e3b3b5895c4d9597373369cb74bc1..18fbdfea1bfb781d496a4122aeaac80a17388a2b 100644
--- a/experimental/tools/direct_computation.cpp
+++ b/experimental/tools/direct_computation.cpp
@@ -1,4 +1,5 @@
-#include "scalfmm/container/particle.hpp"
+// @FUSE_OMP
+#include "scalfmm/container/particle.hpp"
 #include "scalfmm/container/particle_container.hpp"
 #include "scalfmm/container/point.hpp"
 #include <scalfmm/container/iterator.hpp>
diff --git a/experimental/units/CMakeLists.txt b/experimental/units/CMakeLists.txt
index 21d8b2a4222e6afe52f648782b80924669cf08b4..8160629dbe9ce85e5e9f96b9f39f3fcfe488d827 100644
--- a/experimental/units/CMakeLists.txt
+++ b/experimental/units/CMakeLists.txt
@@ -40,20 +40,21 @@ foreach(exec ${source_tests_files})
 
     # Dependency are OK
     if( compile_exec )
-        add_executable( unit.${execname} ${exec})
+        add_executable( unit.${execname} EXCLUDE_FROM_ALL ${exec})
         list(APPEND SCALFMM_UNITS_TARGETS unit.${execname})
 
-        target_link_libraries( unit.${execname} ${CMAKE_PROJECT_NAME} ${TARGETS_TO_LINK})
+        target_link_libraries( unit.${execname} ${CMAKE_PROJECT_NAME}-headers ${TARGETS_TO_LINK})
         target_compile_definitions( unit.${execname} PRIVATE ${COMPILE_DEFINITIONS_TO_ADD})
         target_include_directories(unit.${execname} PRIVATE ${CMAKE_SOURCE_DIR}/modules/external/catch2/ ${CMAKE_CURRENT_BINARY_DIR})
+        set_target_properties(unit.${execname} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BUILD_TYPE})
 
         if(add_mpi_run)
-            add_test(NAME unit.${execname} COMMAND $<IF:${MPIEXEC_EXECUTABLE}, ${MPIEXEC_EXECUTABLE} -np 4 ${CMAKE_CURRENT_BINARY_DIR}/unit.${execname}>)
+            add_test(NAME unit.${execname} COMMAND $<IF:${MPIEXEC_EXECUTABLE}, ${MPIEXEC_EXECUTABLE} -np 4 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/unit.${execname}>)
         else()
-            add_test(NAME unit.${execname} COMMAND ${CMAKE_CURRENT_BINARY_DIR}/unit.${execname})
+            add_test(NAME unit.${execname} COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/unit.${execname})
         endif()
     endif()
 endforeach(exec)
 
-add_custom_target(units ALL DEPENDS ${SCALFMM_UNITS_TARGETS})
+add_custom_target(units EXCLUDE_FROM_ALL ALL DEPENDS ${SCALFMM_UNITS_TARGETS})