diff --git a/CMakeLists.txt b/CMakeLists.txt
index 327412de..34b404ed 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -171,6 +171,7 @@ if (NOT SP3_COMPILED_AS_SUBPROJECT)
message(STATUS "SOFA Framework:\n\tVersion: ${SofaFramework_VERSION}\n\tLocation: ${SOFA_ROOT_DIR}")
endif()
+add_subdirectory(Lifetime)
add_subdirectory(Plugin)
add_subdirectory(bindings)
add_subdirectory(examples)
diff --git a/Lifetime/CMakeLists.txt b/Lifetime/CMakeLists.txt
new file mode 100644
index 00000000..a4f15266
--- /dev/null
+++ b/Lifetime/CMakeLists.txt
@@ -0,0 +1,27 @@
+project(Lifetime VERSION 1.0)
+
+set(HEADER_FILES
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/SofaPython3/lifetime/features.h
+)
+
+set(SOURCE_FILES
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/SofaPython3/lifetime/features.cpp
+)
+
+find_package(SofaFramework REQUIRED)
+
+add_library(${PROJECT_NAME} SHARED ${HEADER_FILES} ${SOURCE_FILES})
+add_library(SofaPython3::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
+
+target_link_libraries(${PROJECT_NAME} PUBLIC SofaCore)
+
+sofa_create_component_in_package_with_targets(
+ COMPONENT_NAME ${PROJECT_NAME}
+ COMPONENT_VERSION ${SofaPython3_VERSION}
+ PACKAGE_NAME SofaPython3
+ TARGETS ${PROJECT_NAME} AUTO_SET_TARGET_PROPERTIES
+ INCLUDE_SOURCE_DIR "src"
+ INCLUDE_INSTALL_DIR "."
+ OPTIMIZE_BUILD_DIR FALSE
+ RELOCATABLE ".."
+ )
diff --git a/Lifetime/LifetimeConfig.cmake.in b/Lifetime/LifetimeConfig.cmake.in
new file mode 100644
index 00000000..0641dc00
--- /dev/null
+++ b/Lifetime/LifetimeConfig.cmake.in
@@ -0,0 +1,22 @@
+# CMake package configuration file for the @PROJECT_NAME@ module
+@PACKAGE_GUARD@
+@PACKAGE_INIT@
+
+set(SP3_BUILD_TEST @SP3_BUILD_TEST@)
+
+find_package(pybind11 CONFIG REQUIRED)
+find_package(SofaFramework REQUIRED)
+find_package(SofaSimulationGraph REQUIRED)
+
+if(SP3_BUILD_TEST)
+ find_package(Sofa.Testing REQUIRED)
+endif()
+
+# If we are importing this config file and the target is not yet there this is indicating that
+# target is an imported one. So we include it
+if(NOT TARGET @PROJECT_NAME@)
+ include("${CMAKE_CURRENT_LIST_DIR}/PluginTargets.cmake")
+endif()
+
+# Check that the component/target is there.
+check_required_components(@PROJECT_NAME@)
diff --git a/Lifetime/src/SofaPython3/lifetime/features.cpp b/Lifetime/src/SofaPython3/lifetime/features.cpp
new file mode 100644
index 00000000..7bd70792
--- /dev/null
+++ b/Lifetime/src/SofaPython3/lifetime/features.cpp
@@ -0,0 +1,62 @@
+/******************************************************************************
+* SofaPython3 plugin *
+* (c) 2021 CNRS, University of Lille, INRIA *
+* *
+* This program 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 2.1 of the License, or (at *
+* your option) any later version. *
+* *
+* This program 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 Lesser General Public License *
+* for more details. *
+* *
+* You should have received a copy of the GNU Lesser General Public License *
+* along with this program. If not, see . *
+*******************************************************************************
+* Contact information: contact@sofa-framework.org *
+******************************************************************************/
+#include
+#include