diff --git a/test/gtest_factor_pixel_hp.cpp b/test/gtest_factor_pixel_hp.cpp
index 8a1b9fe0b9473485d5bca47529ac335790efe1b9..70875a7c0ff2c70c0408f1749b3ae5627505cedf 100644
--- a/test/gtest_factor_pixel_hp.cpp
+++ b/test/gtest_factor_pixel_hp.cpp
@@ -279,7 +279,8 @@ TEST_F(FactorPixelHpTest, testSolveLandmarkAltered)
     L1->unfix();
 
     auto orig = L1->point();
-    L1->getP()->setState(L1->getState().vector("P") + Vector4d::Random());
+    L1->getP()->perturb(1.0);
+
     std::string report = solver->solve(wolf::SolverManager::ReportVerbosity::FULL);
 
     std::cout << report << std::endl;
@@ -341,11 +342,11 @@ TEST_F(FactorPixelHpTest, testSolveFramePosition)
 
     //landmarks to camera coordinates
     Transform<double,3,Isometry> T_w_r
-    = Translation<double,3>(F1->getP()->getState())
-    * Quaterniond(F1->getO()->getState().data());
+        = Translation<double,3>(F1->getP()->getState())
+        * Quaterniond(F1->getO()->getState().data());
     Transform<double,3,Isometry> T_r_c
-    = Translation<double,3>(I1->getSensorP()->getState())
-    * Quaterniond(I1->getSensorO()->getState().data());
+        = Translation<double,3>(I1->getSensorP()->getState())
+        * Quaterniond(I1->getSensorO()->getState().data());
     Eigen::Matrix<double, 4, 1> lmkHP2_c =  T_r_c.inverse() * T_w_r.inverse() * lmkHP2;
     Eigen::Matrix<double, 4, 1> lmkHP3_c =  T_r_c.inverse() * T_w_r.inverse() * lmkHP3;
     Eigen::Matrix<double, 4, 1> lmkHP4_c =  T_r_c.inverse() * T_w_r.inverse() * lmkHP4;
@@ -395,15 +396,10 @@ TEST_F(FactorPixelHpTest, testSolveFramePosition)
     auto orig = F1->getP()->getState();
 
     //change state
-    Vector3d position;
-    position << Vector3d::Random()*100;//2.0, 2.0, 2.0;
-    auto ori = F1->getO()->getState();
-//    Vector7d state;
-//    state << position, ori;
-    F1->setState("PO", {position, ori});
+    F1->getP()->unfix();
+    F1->getP()->perturb(0.1);
 
     F1->getO()->fix();
-    F1->getP()->unfix();
 
     std::string report = solver->solve(wolf::SolverManager::ReportVerbosity::FULL);
 
@@ -415,9 +411,7 @@ TEST_F(FactorPixelHpTest, testSolveFramePosition)
     // This test checks 3 DoF (3doF are observable).
     ASSERT_MATRIX_APPROX(F1->getP()->getState(), orig, 1e-6);
 
-    Eigen::VectorXd expect = c11->expectation();
-    ASSERT_FLOAT_EQ(expect(0,0),f11->getMeasurement()(0,0));
-    ASSERT_FLOAT_EQ(expect(1,0),f11->getMeasurement()(1,0));
+    ASSERT_MATRIX_APPROX(c11->expectation(), f11->getMeasurement(), 1e-3);
 }
 
 
@@ -584,26 +578,7 @@ TEST_F(FactorPixelHpTest, testSolveBundleAdjustment)
     ASSERT_MATRIX_APPROX(L4->getP()->getState(), l4, 1e-6);
 
 	// perturb states
-
-    // kfs
-	for (auto kf : *problem->getTrajectory())
-	{
-		if (kf == F1) continue;
-
-		if (!kf->getP()->isFixed())
-		    kf->getP()->setState(kf->getP()->getState() + 0.2*Vector3d::Random());
-        if (!kf->getO()->isFixed())
-            kf->getO()->setState((Quaterniond(kf->getO()->getState().data()) * exp_q(0.2*Vector3d::Random())).coeffs());
-	}
-
-	// lmks
-	for (auto lmk : problem->getMap()->getLandmarkList())
-	{
-		if (lmk == L1) continue;
-
-        if (!lmk->isFixed())
-            lmk->getP()->setState(lmk->getP()->getState() + 0.2*Vector4d::Random());
-	}
+    problem->perturb(0.1);
 
 	// solve again
     problem->print(1,0,1,1);