diff --git a/src/processor/processor_gnss_fix.cpp b/src/processor/processor_gnss_fix.cpp
index 5e21843f4a88bbef865b8739deec5111cd12dcd5..65e1d39faca09e52137949cb13c2cbda7781c89c 100644
--- a/src/processor/processor_gnss_fix.cpp
+++ b/src/processor/processor_gnss_fix.cpp
@@ -118,6 +118,7 @@ void ProcessorGnssFix::emplaceFactor(FeatureBasePtr& ftr_ptr)
 
     // ADD CONSTRAINT --------------------
     //WOLF_DEBUG("adding the factor...");
+    new_fac_ptr->link(ftr_ptr);
 }
 
 bool ProcessorGnssFix::rejectOutlier(FactorBasePtr fac_ptr)
@@ -171,9 +172,9 @@ void ProcessorGnssFix::configure(SensorBasePtr _sensor)
 ProcessorBasePtr ProcessorGnssFix::create(const std::string& _unique_name, const ProcessorParamsBasePtr _params, const SensorBasePtr sensor_ptr)
 {
     // ProcessorGnssFixPtr prc_ptr = std::make_shared<ProcessorGnssFix>(std::static_pointer_cast<ProcessorParamsGnssFix>(_params), std::static_pointer_cast<SensorGnss>(sensor_ptr));
-    ProcessorGnssFixPtr prc_ptr = std::static_pointer_cast<ProcessorGnssFix>(ProcessorBase::emplace<ProcessorParamsGnssFix>(sensor_ptr,
-                                                                                                                       std::static_pointer_cast<ProcessorParamsGnssFix>(_params),
-                                                                                                                       std::static_pointer_cast<SensorGnss>(sensor_ptr)));
+    ProcessorGnssFixPtr prc_ptr = std::static_pointer_cast<ProcessorGnssFix>(ProcessorBase::emplace<ProcessorGnssFix>(sensor_ptr,
+                                                                                                                      std::static_pointer_cast<ProcessorParamsGnssFix>(_params),
+                                                                                                                      std::static_pointer_cast<SensorGnss>(sensor_ptr)));
     prc_ptr->setName(_unique_name);
     return prc_ptr;
 }
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 923632d408e92c88c5ee7234287a34753b1b7251..726d98fd473241aae6f00b78e2805d252e37a178 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -9,14 +9,14 @@ include_directories(${GTEST_INCLUDE_DIRS})
 #                                                         #
 # Create a specific test executable for gtest_example     #
 wolf_add_gtest(gtest_example gtest_example.cpp)           #
-target_link_libraries(gtest_example ${PROJECT_NAME})      #
+target_link_libraries(gtest_example ${PLUGIN_NAME})      #
 #                                                         #
 ###########################################################
 
 # FactorGnssFix2D test
 wolf_add_gtest(gtest_factor_gnss_fix_2D gtest_factor_gnss_fix_2D.cpp)
-target_link_libraries(gtest_factor_gnss_fix_2D ${PROJECT_NAME} ${wolf_LIBRARY})
+target_link_libraries(gtest_factor_gnss_fix_2D ${PLUGIN_NAME} ${wolf_LIBRARY})
 
 # FactorGnssSingleDiff2D test
 wolf_add_gtest(gtest_factor_gnss_single_diff_2D gtest_factor_gnss_single_diff_2D.cpp)
-target_link_libraries(gtest_factor_gnss_single_diff_2D ${PROJECT_NAME} ${wolf_LIBRARY})
\ No newline at end of file
+target_link_libraries(gtest_factor_gnss_single_diff_2D ${PLUGIN_NAME} ${wolf_LIBRARY})
\ No newline at end of file
diff --git a/test/gtest_factor_gnss_fix_2D.cpp b/test/gtest_factor_gnss_fix_2D.cpp
index 988ed119d7af519118f9fac6fc306c4ea39eee05..be4ec3719e10def890ebeb5b09311eaaded7080e 100644
--- a/test/gtest_factor_gnss_fix_2D.cpp
+++ b/test/gtest_factor_gnss_fix_2D.cpp
@@ -117,7 +117,8 @@ TEST(FactorGnssFix2DTest, configure_tree)
     problem_ptr->keyFrameCallback(frame_ptr, nullptr, 1.0);
 
     // Create & process GNSS Fix capture
-    CaptureGnssFixPtr cap_gnss_ptr = std::make_shared<CaptureGnssFix>(TimeStamp(0), gnss_sensor_ptr, t_ecef_antena, 1e-3*Matrix3s::Identity());
+    // CaptureGnssFixPtr cap_gnss_ptr = std::make_shared<CaptureGnssFix>(TimeStamp(0), gnss_sensor_ptr, t_ecef_antena, 1e-3*Matrix3s::Identity());
+    CaptureGnssFixPtr cap_gnss_ptr = std::static_pointer_cast<CaptureGnssFix>(CaptureBase::emplace<CaptureGnssFix>(frame_ptr, TimeStamp(0), gnss_sensor_ptr, t_ecef_antena, 1e-3*Matrix3s::Identity()));
     gnss_sensor_ptr->process(cap_gnss_ptr);
 
     // Checks
diff --git a/test/gtest_factor_gnss_single_diff_2D.cpp b/test/gtest_factor_gnss_single_diff_2D.cpp
index cabc1f8cb9a3c76a5859b4ff6a31a977fb157cd7..17ee0fc5afae2f63e4aeb081f2f629bcfd6f5c4d 100644
--- a/test/gtest_factor_gnss_single_diff_2D.cpp
+++ b/test/gtest_factor_gnss_single_diff_2D.cpp
@@ -132,7 +132,9 @@ TEST_F(FactorGnssSingleDiff2DTest, check_tree)
 TEST_F(FactorGnssSingleDiff2DTest, gnss_1_map_base_position)
 {
     // Create GNSS Fix capture
-    CaptureGnssSingleDiffPtr cap_gnss_ptr = std::make_shared<CaptureGnssSingleDiff>(TimeStamp(1), gnss_sensor_ptr, t_ecef_antena2-t_ecef_antena1, 1e-6*Matrix3s::Identity(), prior_frame_ptr);
+    // CaptureGnssSingleDiffPtr cap_gnss_ptr = std::make_shared<CaptureGnssSingleDiff>(TimeStamp(1), gnss_sensor_ptr, t_ecef_antena2-t_ecef_antena1, 1e-6*Matrix3s::Identity(), prior_frame_ptr);
+    CaptureGnssSingleDiffPtr cap_gnss_ptr = std::static_pointer_cast<CaptureGnssSingleDiff>(CaptureBase::emplace<CaptureGnssSingleDiff>(prior_frame_ptr, TimeStamp(1), gnss_sensor_ptr, t_ecef_antena2-t_ecef_antena1, 1e-6*Matrix3s::Identity(), prior_frame_ptr));
+
     gnss_sensor_ptr->process(cap_gnss_ptr);
 
     // fixing things
@@ -166,7 +168,8 @@ TEST_F(FactorGnssSingleDiff2DTest, gnss_1_map_base_position)
 TEST_F(FactorGnssSingleDiff2DTest, gnss_1_map_base_orientation)
 {
     // Create GNSS Fix capture
-    CaptureGnssSingleDiffPtr cap_gnss_ptr = std::make_shared<CaptureGnssSingleDiff>(TimeStamp(1), gnss_sensor_ptr, t_ecef_antena2-t_ecef_antena1, 1e-6*Matrix3s::Identity(), prior_frame_ptr);
+    // CaptureGnssSingleDiffPtr cap_gnss_ptr = std::make_shared<CaptureGnssSingleDiff>(TimeStamp(1), gnss_sensor_ptr, t_ecef_antena2-t_ecef_antena1, 1e-6*Matrix3s::Identity(), prior_frame_ptr);
+    CaptureGnssSingleDiffPtr cap_gnss_ptr = std::static_pointer_cast<CaptureGnssSingleDiff>(CaptureBase::emplace<CaptureGnssSingleDiff>(prior_frame_ptr, TimeStamp(1), gnss_sensor_ptr, t_ecef_antena2-t_ecef_antena1, 1e-6*Matrix3s::Identity(), prior_frame_ptr));
     gnss_sensor_ptr->process(cap_gnss_ptr);
 
     // fixing things
@@ -196,7 +199,8 @@ TEST_F(FactorGnssSingleDiff2DTest, gnss_1_map_base_orientation)
 TEST_F(FactorGnssSingleDiff2DTest, gnss_1_enu_map_yaw)
 {
     // Create GNSS Fix capture
-    CaptureGnssSingleDiffPtr cap_gnss_ptr = std::make_shared<CaptureGnssSingleDiff>(TimeStamp(1), gnss_sensor_ptr, t_ecef_antena2-t_ecef_antena1, 1e-6*Matrix3s::Identity(), prior_frame_ptr);
+    // CaptureGnssSingleDiffPtr cap_gnss_ptr = std::make_shared<CaptureGnssSingleDiff>(TimeStamp(1), gnss_sensor_ptr, t_ecef_antena2-t_ecef_antena1, 1e-6*Matrix3s::Identity(), prior_frame_ptr);
+    CaptureGnssSingleDiffPtr cap_gnss_ptr = std::static_pointer_cast<CaptureGnssSingleDiff>(CaptureBase::emplace<CaptureGnssSingleDiff>(prior_frame_ptr, TimeStamp(1), gnss_sensor_ptr, t_ecef_antena2-t_ecef_antena1, 1e-6*Matrix3s::Identity(), prior_frame_ptr));
     gnss_sensor_ptr->process(cap_gnss_ptr);
 
     // unfixing things
@@ -228,7 +232,8 @@ TEST_F(FactorGnssSingleDiff2DTest, gnss_1_enu_map_yaw)
 TEST_F(FactorGnssSingleDiff2DTest, gnss_1_base_antena)
 {
     // Create GNSS Fix capture
-    CaptureGnssSingleDiffPtr cap_gnss_ptr = std::make_shared<CaptureGnssSingleDiff>(TimeStamp(1), gnss_sensor_ptr, t_ecef_antena2-t_ecef_antena1, 1e-6*Matrix3s::Identity(), prior_frame_ptr);
+    // CaptureGnssSingleDiffPtr cap_gnss_ptr = std::make_shared<CaptureGnssSingleDiff>(TimeStamp(1), gnss_sensor_ptr, t_ecef_antena2-t_ecef_antena1, 1e-6*Matrix3s::Identity(), prior_frame_ptr);
+    CaptureGnssSingleDiffPtr cap_gnss_ptr = std::static_pointer_cast<CaptureGnssSingleDiff>(CaptureBase::emplace<CaptureGnssSingleDiff>(prior_frame_ptr, TimeStamp(1), gnss_sensor_ptr, t_ecef_antena2-t_ecef_antena1, 1e-6*Matrix3s::Identity(), prior_frame_ptr));
     gnss_sensor_ptr->process(cap_gnss_ptr);
 
     // unfixing things