diff --git a/src/processor/processor_visual_odometry.cpp b/src/processor/processor_visual_odometry.cpp
index 068492d6613ea37f75b87a27a89387df87d851e1..c2c6cd1b07efd477bf42a5519a78d3a739b16b07 100644
--- a/src/processor/processor_visual_odometry.cpp
+++ b/src/processor/processor_visual_odometry.cpp
@@ -434,7 +434,7 @@ void ProcessorVisualOdometry::establishFactors()
         LandmarkBasePtr associated_lmk = nullptr;
         for (auto lmk: getProblem()->getMap()->getLandmarkList())
         {
-            if (lmk->id() == feat_pi->trackId()){
+            if (lmk->trackId() == feat_pi->trackId()){
                 associated_lmk = lmk;
             }
         }
@@ -444,11 +444,14 @@ void ProcessorVisualOdometry::establishFactors()
         if (associated_lmk)
         {
             LandmarkHpPtr associated_lmk_hp = std::dynamic_pointer_cast<LandmarkHp>(associated_lmk);
-            FactorBase::emplace<FactorPixelHp>(feat_pi,
-                                               feat_pi,
-                                               associated_lmk_hp,
-                                               shared_from_this(),
-                                               params_visual_odometry_->apply_loss_function);
+            
+            if (associated_lmk_hp) {
+                FactorBase::emplace<FactorPixelHp>(feat_pi,
+                                                feat_pi,
+                                                associated_lmk_hp,
+                                                shared_from_this(),
+                                                params_visual_odometry_->apply_loss_function);
+            }
         }
 
         // 2) create landmark if track is not associated with one and has enough length
@@ -456,7 +459,6 @@ void ProcessorVisualOdometry::establishFactors()
         {
             // std::cout << "NEW valid track \\o/" << std::endl;
             LandmarkBasePtr lmk = emplaceLandmark(feat_pi);
-            lmk->setId(feat_pi->trackId());
 
             // Add factors from all KFs of this track to the new lmk
             Track track_kf = track_matrix_.trackAtKeyframes(feat->trackId());
@@ -513,8 +515,8 @@ LandmarkBasePtr ProcessorVisualOdometry::emplaceLandmark(FeatureBasePtr _feat)
 
     // Set all IDs equal to track ID
     size_t track_id = _feat->trackId();
-    lmk_hp_ptr->setId(track_id);
-    _feat->setLandmarkId(track_id);
+    lmk_hp_ptr->setTrackId(track_id);
+    _feat->setLandmarkId(lmk_hp_ptr->id());
 
     return lmk_hp_ptr;
 }