diff --git a/src/test/gtest_odom_3D.cpp b/src/test/gtest_odom_3D.cpp
index 544c4b47ad80af6e25c32b4f3e963b0562444f17..47ab435710424992ca8d657d03d04069edaf6a5f 100644
--- a/src/test/gtest_odom_3D.cpp
+++ b/src/test/gtest_odom_3D.cpp
@@ -14,6 +14,7 @@
 #include "logging.h"
 
 #include "processor_odom_3D.h"
+#include "ceres_wrapper/ceres_manager.h"
 
 #include <iostream>
 
@@ -60,6 +61,59 @@ class ProcessorOdom3DTest : public ProcessorOdom3D
         Scalar& dvar_min() {return min_disp_var_;}
         Scalar& rvar_min() {return min_rot_var_;}
 };
+
+class ProcessorOdomBase : public testing::Test
+{
+
+    public: //These can be accessed in fixtures
+        wolf::ProblemPtr problem;
+        wolf::SensorBasePtr sensor_ptr;
+        wolf::TimeStamp t;
+        CaptureMotionPtr cap_mot_ptr;
+        wolf::ProcessorOdom3DPtr processor_ptr_odom3D;
+        CeresManager* ceres_manager;
+        Eigen::Vector7s problem_origin;
+
+    //a new of this will be created for each new test
+    virtual void SetUp()
+    {
+        using namespace wolf;
+        using namespace Eigen;
+        using std::shared_ptr;
+        using std::make_shared;
+        using std::static_pointer_cast;
+
+        std::string wolf_root = _WOLF_ROOT_DIR;
+
+        // Wolf problem
+        problem = Problem::create("PO 3D");
+        t.set(0);
+        problem_origin << 0,0,0, 0,0,0,1;
+        TimeStamp t(0);
+        Eigen::Vector6s data((Eigen::Vector6s()<<0,0,0,0,0,0).finished());
+
+        // CERES WRAPPER
+        ceres_manager = new CeresManager(problem);
+
+        // SENSOR + PROCESSOR ODOM 3D
+        sensor_ptr = problem->installSensor("ODOM 3D", "odom", (Vector7s()<<0,0,0,0,0,0,1).finished(), wolf_root + "/src/examples/sensor_odom_3D.yaml");
+        ProcessorOdom3DParamsPtr prc_odom3D_params = std::make_shared<ProcessorOdom3DParams>();
+        prc_odom3D_params->max_time_span = 0.1999;
+        prc_odom3D_params->max_buff_length = 100;
+        prc_odom3D_params->dist_traveled = 100000;
+        prc_odom3D_params->angle_turned = 100000;
+
+        ProcessorBasePtr processor_ptr_odom = problem->installProcessor("ODOM 3D", "odom", sensor_ptr, prc_odom3D_params);
+        processor_ptr_odom3D = std::static_pointer_cast<ProcessorOdom3D>(processor_ptr_odom);
+
+        FrameBasePtr KF1 = std::static_pointer_cast<FrameBase>(processor_ptr_odom3D->setOrigin(problem_origin, t));
+
+        cap_mot_ptr = make_shared<CaptureMotion>(t, sensor_ptr, data, 6, 7, 6, 0);
+    }
+
+    virtual void TearDown(){}
+};
+
 ProcessorOdom3DTest::ProcessorOdom3DTest() : ProcessorOdom3D()
 {
     dvar_min() = 0.5;
@@ -504,7 +558,42 @@ TEST(ProcessorOdom3D, Interpolate2) // timestamp out of bounds test
 
 }
 
-
+TEST_F(ProcessorOdomBase, check_KF_state_pureTranslation)
+{   
+    FrameBaseList frm_list = problem->getTrajectoryPtr()->getFrameList();
+    FrameBasePtr KF1 = problem->getTrajectoryPtr()->closestKeyFrameToTimeStamp(t.get());
+    //We have only 1 KF at this time, but 2 frames
+    ASSERT_EQ(frm_list.size(),2);
+    ASSERT_MATRIX_APPROX(processor_ptr_odom3D->getCurrentState(), KF1->getState(), Constants::EPS_SMALL);
+
+    //starting at 0
+    Eigen::Vector6s data;
+    data << 0.5,2,1.2, 0,0,0;
+    t.set(1);
+    cap_mot_ptr->setData(data);
+    cap_mot_ptr->setTimeStamp(t);
+    sensor_ptr->process(cap_mot_ptr);
+
+    //Keyframe has been created
+    frm_list = problem->getTrajectoryPtr()->getFrameList();
+    ASSERT_EQ(frm_list.size(),3);
+    FrameBasePtr KF2 = problem->getTrajectoryPtr()->closestKeyFrameToTimeStamp(t.get());
+    ASSERT_MATRIX_APPROX(processor_ptr_odom3D->getCurrentState().transpose(), KF2->getState().transpose(), Constants::EPS_SMALL);
+    ASSERT_MATRIX_APPROX(KF2->getState().head(3), KF1->getState().head(3) + data.head(3), Constants::EPS_SMALL);
+
+    data << 1.6,0.4,0.244, 0,0,0;
+    t.set(2);
+    cap_mot_ptr->setData(data);
+    cap_mot_ptr->setTimeStamp(t);
+    sensor_ptr->process(cap_mot_ptr);
+
+    //Keyframe has been created
+    frm_list = problem->getTrajectoryPtr()->getFrameList();
+    ASSERT_EQ(frm_list.size(),4);
+    FrameBasePtr KF3 = problem->getTrajectoryPtr()->closestKeyFrameToTimeStamp(t.get());
+    ASSERT_MATRIX_APPROX(processor_ptr_odom3D->getCurrentState(), KF3->getState(), Constants::EPS_SMALL);
+    ASSERT_MATRIX_APPROX(KF3->getState().head(3), KF2->getState().head(3) + data.head(3), Constants::EPS_SMALL);
+}
 
 
 int main(int argc, char **argv)