diff --git a/include/gnss/sensor/sensor_gnss.h b/include/gnss/sensor/sensor_gnss.h
index e7204f6fa033d0f08a97eeaa67aaac1ed2d44438..2bbbe94fb171e16b5be021b99afa987904ea6a94 100644
--- a/include/gnss/sensor/sensor_gnss.h
+++ b/include/gnss/sensor/sensor_gnss.h
@@ -69,6 +69,8 @@ class SensorGnss : public SensorBase
         StateBlockPtr getEnuMapYawState() const;
         void initializeEnuMap(const Eigen::VectorXs& _pose_MAP_frameENU, const Eigen::Vector3s& _t_ECEF_antenaENU,
                               const Eigen::VectorXs& _pose_MAP_frame2, const Eigen::Vector3s& _t_ECEF_antena2);
+        void initializeEnuMapYaw(const Eigen::VectorXs& _pose_MAP_frame1, const Eigen::VectorXs& _pose_MAP_frame2,
+                                 const Eigen::Vector3s& _v_ECEF_antena1_antena2);
         void setEnuMapTranslationState(const Eigen::Vector3s& t_ENU_MAP);
 
         // Gets
diff --git a/src/processor/processor_gnss_single_diff.cpp b/src/processor/processor_gnss_single_diff.cpp
index c069eeb81c85c76ec154a34c9768bc28c1ee2dbe..231807dde851503c8f45f8f0ffc410a2cf64d633 100644
--- a/src/processor/processor_gnss_single_diff.cpp
+++ b/src/processor/processor_gnss_single_diff.cpp
@@ -71,13 +71,14 @@ void ProcessorGnssSingleDiff::processCapture(CaptureBasePtr _capture_ptr)
     //      4 - frames constained by the factor separated enough ( > enu_map_init_dist_min)
     if ( sensor_gnss_ptr_->isEnuDefined() &&
         !sensor_gnss_ptr_->isEnuMapInitialized() &&
-         new_fac != nullptr &&
+         new_frame_ptr != nullptr &&
          incoming_capture_ptr_->getFrame() != nullptr && incoming_capture_ptr_->getFrame()->isKey() &&
          incoming_capture_ptr_->getData().norm() > params_gnss_->enu_map_init_dist_min)
     {
         std::cout << "initializing enu map\n";
-        sensor_gnss_ptr_->initializeEnuMap(first_capture_ptr_->getFrame()->getState(), first_capture_ptr_->getData(),
-                                           last_capture_ptr_->getFrame()->getState(), last_capture_ptr_->getData());
+        sensor_gnss_ptr_->initializeEnuMapYaw(last_capture_ptr_->getOriginFrame()->getState(),
+                                              last_capture_ptr_->getFrame()->getState(),
+                                              last_capture_ptr_->getData());
     }
 
     last_capture_ptr_ = incoming_capture_ptr_;
diff --git a/src/sensor/sensor_gnss.cpp b/src/sensor/sensor_gnss.cpp
index 16f2ca347c7770390b8938cc34080b878d670d5d..35f0d57c63ade592d6e2c651c26dcf6a63d9964c 100644
--- a/src/sensor/sensor_gnss.cpp
+++ b/src/sensor/sensor_gnss.cpp
@@ -155,6 +155,8 @@ void SensorGnss::initializeEnuMap(const Eigen::VectorXs& _pose_MAP_frameENU, con
         // set translation state
         setEnuMapTranslationState(t_ENU_MAP);
 
+        ENU_MAP_initialized_ = true;
+
         //std::cout << "-----------------------------------------\n";
         //std::cout << "t_ECEF_antenaENU: " << _t_ECEF_antenaENU.transpose() << std::endl;
         //std::cout << "t_ECEF_antena2: " << _t_ECEF_antena2.transpose() << std::endl;
@@ -193,10 +195,10 @@ void SensorGnss::initializeEnuMapYaw(const Eigen::VectorXs& _pose_MAP_frame1, co
 {
     assert(ENU_defined_ && "initializing ENU-MAP yaw without ENU defined");
 
-    Eigen::Vector3s t_MAP_antena1 = _pose_MAP_frame1.head<2>() + Eigen::Rotation2D<Scalar>(_pose_MAP_frame1(2)) * getP()->getState().head<2>();
-    Eigen::Vector3s t_MAP_antena2 = _pose_MAP_frame2.head<2>() + Eigen::Rotation2D<Scalar>(_pose_MAP_frame2(2)) * getP()->getState().head<2>();
-    Eigen::Vector3s v_MAP_antena1_antena2 = t_MAP_antena2 - t_MAP_antena1;
-    Eigen::Vector3s v_ENU_antena1_antena2 = R_ENU_ECEF_ * (_v_ECEF_antena1_antena2);
+    Eigen::Vector2s t_MAP_antena1 = _pose_MAP_frame1.head<2>() + Eigen::Rotation2D<Scalar>(_pose_MAP_frame1(2)) * getP()->getState().head<2>();
+    Eigen::Vector2s t_MAP_antena2 = _pose_MAP_frame2.head<2>() + Eigen::Rotation2D<Scalar>(_pose_MAP_frame2(2)) * getP()->getState().head<2>();
+    Eigen::Vector2s v_MAP_antena1_antena2 = t_MAP_antena2 - t_MAP_antena1;
+    Eigen::Vector3s v_ENU_antena1_antena2 = R_ENU_ECEF_ * _v_ECEF_antena1_antena2;
 
     Scalar theta_ENU = atan2(v_ENU_antena1_antena2(1),v_ENU_antena1_antena2(0));
     Scalar theta_MAP = atan2(v_MAP_antena1_antena2(1),v_MAP_antena1_antena2(0));
@@ -204,76 +206,12 @@ void SensorGnss::initializeEnuMapYaw(const Eigen::VectorXs& _pose_MAP_frame1, co
 
     this->getEnuMapYawState()->setState(Eigen::Vector1s(yaw_ENU_MAP));
 
-    Eigen::Matrix3s R_ENU_ECEF;//, R_ENU2_ECEF;
-    Eigen::Vector3s t_ENU_ECEF;//, t_ENU2_ECEF;
-    computeEnuEcef(_t_ECEF_antenaENU, R_ENU_ECEF, t_ENU_ECEF);
-    //computeENU_ECEF(_t_ECEF_antena2, R_ENU2_ECEF, t_ENU2_ECEF);
-
-    // compute fix vector (from 1 to 2) in ENU coordinates
-    Eigen::Vector3s v_ENU = R_ENU_ECEF * (_t_ECEF_antena2 - _t_ECEF_antenaENU);
-
-    // 2D
-    if (getProblem()->getDim() == 2)
-    {
-        // compute antena vector (from 1 to 2) in MAP
-        Eigen::Vector2s t_MAP_antenaENU = _pose_MAP_frameENU.head<2>() + Eigen::Rotation2D<Scalar>(_pose_MAP_frameENU(2)) * getP()->getState().head<2>();
-        Eigen::Vector2s t_MAP_antena2 = _pose_MAP_frame2.head<2>() + Eigen::Rotation2D<Scalar>(_pose_MAP_frame2(2)) * getP()->getState().head<2>();
-        Eigen::Vector2s v_MAP =  t_MAP_antena2 - t_MAP_antenaENU;
-
-        // initialize yaw
-        Scalar theta_ENU = atan2(v_ENU(1),v_ENU(0));
-        Scalar theta_MAP = atan2(v_MAP(1),v_MAP(0));
-        Scalar yaw = theta_ENU-theta_MAP;
-        this->getEnuMapYawState()->setState(Eigen::Vector1s(yaw));
-
-        // initialize translation
-        Eigen::Vector3s t_ENU_MAP(Eigen::Vector3s::Zero());
-        Eigen::Matrix2s R_ENU_MAP = computeREnuMap(getEnuMapRollState()->getState()(0),
-                                                   getEnuMapPitchState()->getState()(0),
-                                                   getEnuMapYawState()->getState()(0)).topLeftCorner<2,2>();
-        t_ENU_MAP.head<2>() = -R_ENU_MAP * t_MAP_antenaENU;
-
-        // set translation state
-        setEnuMapTranslationState(t_ENU_MAP);
-
-        //std::cout << "-----------------------------------------\n";
-        //std::cout << "t_ECEF_antenaENU: " << _t_ECEF_antenaENU.transpose() << std::endl;
-        //std::cout << "t_ECEF_antena2: " << _t_ECEF_antena2.transpose() << std::endl;
-        //std::cout << "v_ENU: " << v_ENU.transpose() << std::endl;
-        //std::cout << "theta_ENU: " << theta_ENU << std::endl;
-        //std::cout << "t_MAP_antena1: " << t_MAP_antenaENU.transpose() << std::endl;
-        //std::cout << "t_MAP_antena2: " << t_MAP_antena2.transpose() << std::endl;
-        //std::cout << "v_MAP: " << v_MAP.transpose() << std::endl;
-        //std::cout << "theta_MAP: " << theta_MAP << std::endl;
-        //std::cout << "yaw set: " << yaw << std::endl;
-        //std::cout << "t_ENU1_origin: " << t_ENU_MAP.transpose() << std::endl;
-        //std::cout << "-----checks\n";
-        //std::cout << "R(-yaw) * v_ENU: " << (Eigen::Rotation2D<Scalar>(-yaw) * v_ENU.head<2>()).transpose() << std::endl;
-        //std::cout << "should be: " << v_MAP.transpose() << std::endl;
-        //std::cout << "atan2(R(-yaw) * v_ENU): " << atan2((Eigen::Rotation2D<Scalar>(-yaw) * v_ENU.head<2>())(1), (Eigen::Rotation2D<Scalar>(-yaw) * v_ENU.head<2>())(0)) << std::endl;
-        //std::cout << "should be: " << atan2(v_MAP(1),v_MAP(0)) << std::endl;
-        //std::cout << "R(yaw) * v_MAP: " << (Eigen::Rotation2D<Scalar>(yaw) * v_MAP).transpose() << std::endl;
-        //std::cout << "should be: " << v_ENU.head<2>().transpose() << std::endl;
-        //std::cout << "atan2(R(yaw) * v_MAP): " << atan2((Eigen::Rotation2D<Scalar>(yaw) * v_MAP)(1),(Eigen::Rotation2D<Scalar>(yaw) * v_MAP)(0)) << std::endl;
-        //std::cout << "should be: " << atan2(v_ENU(1),v_ENU(0)) << std::endl;
-        //std::cout << "v_ENU.norm(): " << v_ENU.norm() << std::endl;
-        //std::cout << "v_MAP.norm(): " << v_MAP.norm() << std::endl;
-
-        WOLF_INFO("SensorGnss: ENU-MAP initialized.")
-    }
-    // 3D
-    else
-    {
-        //TODO
-        std::runtime_error("not implemented yet");
-    }
+    ENU_MAP_initialized_ = true;
 }
 
 void SensorGnss::setEnuMapTranslationState(const Eigen::Vector3s& t_ENU_MAP)
 {
     this->getEnuMapTranslationState()->setState(t_ENU_MAP);
-
-    ENU_MAP_initialized_ = true;
 }
 
 // Define the factory method