diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt
index 5882ba0964b20dd0853edb6beef5e410ca40a9c7..d82115af01812bc97573a99bade059fd5d1df967 100644
--- a/src/test/CMakeLists.txt
+++ b/src/test/CMakeLists.txt
@@ -192,6 +192,10 @@ target_link_libraries(gtest_odom_2D ${PROJECT_NAME})
 wolf_add_gtest(gtest_odom_3D gtest_odom_3D.cpp)
 target_link_libraries(gtest_odom_3D ${PROJECT_NAME})
 
+# shared_from_this test
+wolf_add_gtest(gtest_shared_from_this gtest_shared_from_this.cpp)
+target_link_libraries(gtest_shared_from_this ${PROJECT_NAME})
+
 # ------- Now Core classes Serialization ----------
 
 add_subdirectory(serialization)
diff --git a/src/test/gtest_shared_from_this.cpp b/src/test/gtest_shared_from_this.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..99a9983dbbc9aa6a55815a3310853d82dd1e30b1
--- /dev/null
+++ b/src/test/gtest_shared_from_this.cpp
@@ -0,0 +1,87 @@
+#include "utils_gtest.h"
+#include "node_base.h"
+
+class CChildBase;
+
+class CParentBase : public wolf::NodeBase
+{
+   public:
+
+      std::list<std::shared_ptr<CChildBase> > child_list_;
+
+      CParentBase() :
+          NodeBase("")
+      {};
+
+      virtual ~CParentBase(){};
+
+      virtual void addChild(std::shared_ptr<CChildBase> _child_ptr) final
+      {
+         child_list_.push_back(_child_ptr);
+      }
+};
+
+
+class CParentDerived : public CParentBase
+{
+   public:
+
+      CParentDerived(){};
+};
+
+class CChildBase : public wolf::NodeBase, public std::enable_shared_from_this<CChildBase>
+{
+   public:
+      std::shared_ptr<CParentBase> parent_ptr_;
+
+      CChildBase(std::shared_ptr<CParentBase> _parent_ptr) :
+          NodeBase(""),
+          parent_ptr_(_parent_ptr)
+      {
+         auto wptr = std::shared_ptr<CChildBase>( this, [](CChildBase*){} );
+
+         parent_ptr_->addChild(shared_from_this());
+      };
+};
+
+class CChildDerived : public CChildBase
+{
+   public:
+
+      CChildDerived(std::shared_ptr<CParentBase> _parent_ptr) : CChildBase(_parent_ptr){};
+};
+
+
+
+TEST(TestTest, SingleTest)
+{
+    std::shared_ptr<CParentDerived> parent_derived_ptr = std::make_shared<CParentDerived>();
+
+    std::shared_ptr<CChildDerived> child_derived_ptr = std::make_shared<CChildDerived>(parent_derived_ptr);
+
+    ASSERT_EQ(child_derived_ptr, parent_derived_ptr->child_list_.front());
+    ASSERT_EQ(parent_derived_ptr, child_derived_ptr->parent_ptr_);
+
+    std::string parent_name("my booooring father...");
+    std::string child_name("my intelligent son!");
+    parent_derived_ptr->setName(parent_name);
+    child_derived_ptr->setName(child_name);
+
+    ASSERT_EQ(child_derived_ptr->getName(), child_name);
+    ASSERT_EQ(parent_derived_ptr->getName(), parent_name);
+    ASSERT_EQ(child_derived_ptr->getName(), parent_derived_ptr->child_list_.front()->getName());
+    ASSERT_EQ(parent_derived_ptr->getName(), child_derived_ptr->parent_ptr_->getName());
+
+    //std::cout << "parent_derived_ptr->getName() " << parent_derived_ptr->getName() << std::endl;
+    //std::cout << "child_derived_ptr->getName() " << child_derived_ptr->getName() << std::endl;
+    //std::cout << "child_derived_ptr->parent_ptr_->getName() " << child_derived_ptr->parent_ptr_->getName() << std::endl;
+    //std::cout << "parent_derived_ptr->child_list_.front()->getName() " << parent_derived_ptr->child_list_.front()->getName() << std::endl;
+
+//  PRINTF("All good at TestTest::DummyTestExample !\n");
+}
+
+int main(int argc, char **argv)
+{
+  testing::InitGoogleTest(&argc, argv);
+  return RUN_ALL_TESTS();
+}