diff --git a/src/examples/test_factor_AHP.cpp b/src/examples/test_factor_AHP.cpp
index 10c7610ca7c523cd56689896aeaf4549e155a58b..8509ff7f573c31ccef85ace45db7d5036b44d470 100644
--- a/src/examples/test_factor_AHP.cpp
+++ b/src/examples/test_factor_AHP.cpp
@@ -21,7 +21,7 @@ int main()
     //=====================================================
 
     // Wolf problem
-    ProblemPtr wolf_problem_ptr_ = Problem::create("PO 3D");
+    ProblemPtr wolf_problem_ptr_ = Problem::create("PO", 3);
 
     /* Do this while there aren't extrinsic parameters on the yaml */
     Eigen::Vector7s extrinsic_cam;
diff --git a/src/examples/test_image.cpp b/src/examples/test_image.cpp
index 842a6a14b6e682da3481a7f3bd51d80e819fb857..3997b9476334d39092ee2eaf5140c5b9a9facfc0 100644
--- a/src/examples/test_image.cpp
+++ b/src/examples/test_image.cpp
@@ -52,7 +52,7 @@ int main(int argc, char** argv)
     std::string wolf_root = _WOLF_ROOT_DIR;
     std::cout << "Wolf root: " << wolf_root << std::endl;
 
-    ProblemPtr wolf_problem_ = Problem::create("PO 3D");
+    ProblemPtr wolf_problem_ = Problem::create("PO", 3);
 
     //=====================================================
     // Method 1: Use data generated here for sensor and processor
diff --git a/src/examples/test_processor_odom_3D.cpp b/src/examples/test_processor_odom_3D.cpp
index 8103a7ff39f3e1dc55788230bcbded86b56927cc..7cfae793d291d83364261c8996f78d0b64fa3d13 100644
--- a/src/examples/test_processor_odom_3D.cpp
+++ b/src/examples/test_processor_odom_3D.cpp
@@ -40,7 +40,7 @@ int main (int argc, char** argv)
     }
     cout << "Final timestamp tf = " << tf.get() << " s" << endl;
 
-    ProblemPtr problem = Problem::create("PO 3D");
+    ProblemPtr problem = Problem::create("PO", 3);
     ceres::Solver::Options ceres_options;
 //    ceres_options.max_num_iterations = 1000;
 //    ceres_options.function_tolerance = 1e-10;
diff --git a/src/examples/test_processor_tracker_landmark_image.cpp b/src/examples/test_processor_tracker_landmark_image.cpp
index 1bd2ef1782447fc44a7dd2e7a79451282d536f82..e8767c4f69d1ece65c6886cf87a2a405fb0d7ca7 100644
--- a/src/examples/test_processor_tracker_landmark_image.cpp
+++ b/src/examples/test_processor_tracker_landmark_image.cpp
@@ -80,7 +80,7 @@ int main(int argc, char** argv)
 
     //=====================================================
     // Wolf problem
-    ProblemPtr problem = Problem::create("PO 3D");
+    ProblemPtr problem = Problem::create("PO", 3);
 
     // ODOM SENSOR AND PROCESSOR
     SensorBasePtr sensor_base        = problem->installSensor("ODOM 3D", "odom", (Vector7s()<<0,0,0,0,0,0,1).finished(), wolf_root + "/src/examples/sensor_odom_3D.yaml");
diff --git a/src/examples/test_simple_AHP.cpp b/src/examples/test_simple_AHP.cpp
index 5d374dc05781722f0ad5532169f877b672a0ba5c..f4316cb071860fc7340606e9ef0521d0b9a3aea4 100644
--- a/src/examples/test_simple_AHP.cpp
+++ b/src/examples/test_simple_AHP.cpp
@@ -95,7 +95,7 @@ int main(int argc, char** argv)
 
     // ============================================================================================================
     /* 1 */
-    ProblemPtr problem = Problem::create("PO 3D");
+    ProblemPtr problem = Problem::create("PO", 3);
     // One anchor frame to define the lmk, and a copy to make a factor
     FrameBasePtr kf_1 = problem->emplaceFrame(KEY,(Vector7s()<<0,0,0,0,0,0,1).finished(), TimeStamp(0));
     FrameBasePtr kf_2 = problem->emplaceFrame(KEY,(Vector7s()<<0,0,0,0,0,0,1).finished(), TimeStamp(0));
diff --git a/src/examples/test_trifocal_optimization.cpp b/src/examples/test_trifocal_optimization.cpp
index 007bc39d95e92e6ab565b57100f341a594e316d8..dcb6d93bff16ef0a401fa96352b4765923fb166d 100644
--- a/src/examples/test_trifocal_optimization.cpp
+++ b/src/examples/test_trifocal_optimization.cpp
@@ -84,7 +84,7 @@ int main(int argc, char** argv)
     // ===============================================
 
     // Wolf problem
-    ProblemPtr problem = Problem::create("PO 3D");
+    ProblemPtr problem = Problem::create("PO", 3);
 
     // CERES WRAPPER
     CeresManagerPtr ceres_manager;
diff --git a/test/gtest_ceres_manager.cpp b/test/gtest_ceres_manager.cpp
index d656643689278c632db029ae53c654a259e2a77b..756e44fde6946e74366031bc28eaa6b42e47d52c 100644
--- a/test/gtest_ceres_manager.cpp
+++ b/test/gtest_ceres_manager.cpp
@@ -543,7 +543,7 @@ TEST(CeresManager, AddLocalParam)
 
 TEST(CeresManager, FactorsRemoveLocalParam)
 {
-    ProblemPtr P = Problem::create("PO 3D");
+    ProblemPtr P = Problem::create("PO", 3);
     CeresManagerWrapperPtr ceres_manager_ptr = std::make_shared<CeresManagerWrapper>(P);
 
     // Create (and add) 2 factors quaternion
@@ -585,7 +585,7 @@ TEST(CeresManager, FactorsRemoveLocalParam)
 
 TEST(CeresManager, FactorsUpdateLocalParam)
 {
-    ProblemPtr P = Problem::create("PO 3D");
+    ProblemPtr P = Problem::create("PO", 3);
     CeresManagerWrapperPtr ceres_manager_ptr = std::make_shared<CeresManagerWrapper>(P);
 
     // Create (and add) 2 factors quaternion
diff --git a/test/gtest_factor_autodiff_distance_3D.cpp b/test/gtest_factor_autodiff_distance_3D.cpp
index 49461b9f1065a1c7223fc04af0f3de1c50ede279..f5251d7f13187210474df2d5133a489e096f0f6f 100644
--- a/test/gtest_factor_autodiff_distance_3D.cpp
+++ b/test/gtest_factor_autodiff_distance_3D.cpp
@@ -52,7 +52,7 @@ class FactorAutodiffDistance3D_Test : public testing::Test
             dist = Vector1s(sqrt(2.0));
             dist_cov = Matrix1s(0.01);
 
-            problem = Problem::create("PO 3D");
+            problem = Problem::create("PO", 3);
             ceres_manager = std::make_shared<CeresManager>(problem);
 
             F1 = problem->emplaceFrame        (KEY, pose1, 1.0);
diff --git a/test/gtest_factor_autodiff_trifocal.cpp b/test/gtest_factor_autodiff_trifocal.cpp
index 0d244f714abe70cc663d6dfd0c65f732c7570eee..0ba635bb2ba629bdb621713ef5dee75c7d3fa63f 100644
--- a/test/gtest_factor_autodiff_trifocal.cpp
+++ b/test/gtest_factor_autodiff_trifocal.cpp
@@ -119,7 +119,7 @@ class FactorAutodiffTrifocalTest : public testing::Test{
             pose_cam  << pos_cam, vquat_cam;
 
             // Build problem
-            problem = Problem::create("PO 3D");
+            problem = Problem::create("PO", 3);
             ceres::Solver::Options options;
             ceres_manager = std::make_shared<CeresManager>(problem, options);
 
diff --git a/test/gtest_factor_odom_3D.cpp b/test/gtest_factor_odom_3D.cpp
index fbf9fa6ca155ec1f635842a8b8997f7318e26da9..75d4d71db5755127e0b131bf650740cc6343da32 100644
--- a/test/gtest_factor_odom_3D.cpp
+++ b/test/gtest_factor_odom_3D.cpp
@@ -33,7 +33,7 @@ Vector7s x0 = data2delta(Vector6s::Random()*0.25);
 Vector7s x1 = data2delta(data + Vector6s::Random()*0.25);
 
 // Problem and solver
-ProblemPtr problem_ptr = Problem::create("PO 3D");
+ProblemPtr problem_ptr = Problem::create("PO", 3);
 CeresManager ceres_mgr(problem_ptr);
 
 // Two frames
diff --git a/test/gtest_factor_pose_3D.cpp b/test/gtest_factor_pose_3D.cpp
index db43f6098643d1833697009b66569a9fbe416c9e..15458655d773dfdc5902275ecb20d7f2739e4d9c 100644
--- a/test/gtest_factor_pose_3D.cpp
+++ b/test/gtest_factor_pose_3D.cpp
@@ -32,7 +32,7 @@ Matrix6s data_cov = data_var.asDiagonal();
 Vector7s x0 = pose6toPose7(pose + Vector6s::Random()*0.25);
 
 // Problem and solver
-ProblemPtr problem = Problem::create("PO 3D");
+ProblemPtr problem = Problem::create("PO", 3);
 CeresManager ceres_mgr(problem);
 
 // Two frames
diff --git a/test/gtest_param_prior.cpp b/test/gtest_param_prior.cpp
index 7af68fa025934e82be84349c5710f823736acdd7..e5ddb8653a7b8e8246c1a2e8707c6eb186e66ae5 100644
--- a/test/gtest_param_prior.cpp
+++ b/test/gtest_param_prior.cpp
@@ -16,7 +16,7 @@
 
 using namespace wolf;
 
-ProblemPtr problem_ptr = Problem::create("PO 3D");
+ProblemPtr problem_ptr = Problem::create("PO", 3);
 CeresManagerPtr ceres_mgr_ptr = std::make_shared<CeresManager>(problem_ptr);
 Eigen::Vector7s initial_extrinsics((Eigen::Vector7s() << 1, 2, 3, 1, 0, 0, 0).finished());
 Eigen::Vector7s prior_extrinsics((Eigen::Vector7s() << 10, 20, 30, 0, 0, 0, 1).finished());
diff --git a/test/gtest_problem.cpp b/test/gtest_problem.cpp
index a3ce788678d68318c100df88a6c4e7c37fcbad56..9e598efc4c211372f6f5e04ba007a93b9a7690f6 100644
--- a/test/gtest_problem.cpp
+++ b/test/gtest_problem.cpp
@@ -74,7 +74,7 @@ TEST(Problem, Sensors)
 
 TEST(Problem, Processor)
 {
-    ProblemPtr P = Problem::create("PO 3D");
+    ProblemPtr P = Problem::create("PO", 3);
 
     // check motion processor is null
     ASSERT_FALSE(P->getProcessorMotion());
@@ -99,7 +99,7 @@ TEST(Problem, Processor)
 TEST(Problem, Installers)
 {
     std::string wolf_root = _WOLF_ROOT_DIR;
-    ProblemPtr P = Problem::create("PO 3D");
+    ProblemPtr P = Problem::create("PO", 3);
     Eigen::Vector7s xs;
 
     SensorBasePtr    S = P->installSensor   ("ODOM 3D", "odometer",        xs,         wolf_root + "/src/examples/sensor_odom_3D.yaml");
@@ -164,7 +164,7 @@ TEST(Problem, SetOrigin_PO_2D)
 
 TEST(Problem, SetOrigin_PO_3D)
 {
-    ProblemPtr P = Problem::create("PO 3D");
+    ProblemPtr P = Problem::create("PO", 3);
     TimeStamp       t0(0);
     Eigen::VectorXs x0(7); x0 << 1,2,3,4,5,6,7;
     Eigen::MatrixXs P0(6,6); P0.setIdentity(); P0 *= 0.1; // P0 is 0.1*Id
@@ -228,7 +228,7 @@ TEST(Problem, StateBlocks)
 {
     std::string wolf_root = _WOLF_ROOT_DIR;
 
-    ProblemPtr P = Problem::create("PO 3D");
+    ProblemPtr P = Problem::create("PO", 3);
     Eigen::Vector7s xs;
 
     // 2 state blocks, fixed
@@ -289,7 +289,7 @@ TEST(Problem, Covariances)
 {
     std::string wolf_root = _WOLF_ROOT_DIR;
 
-    ProblemPtr P = Problem::create("PO 3D");
+    ProblemPtr P = Problem::create("PO", 3);
     Eigen::Vector7s xs;
 
     SensorBasePtr    Sm = P->installSensor   ("ODOM 3D", "odometer",xs, wolf_root + "/src/examples/sensor_odom_3D.yaml");
diff --git a/test/gtest_processor_tracker_feature_trifocal.cpp b/test/gtest_processor_tracker_feature_trifocal.cpp
index 38349792902acbcfd486256681ab3415e023c526..54940654bf652cdadaacad0c949af9ea92b451f2 100644
--- a/test/gtest_processor_tracker_feature_trifocal.cpp
+++ b/test/gtest_processor_tracker_feature_trifocal.cpp
@@ -71,7 +71,7 @@ TEST(ProcessorTrackerFeatureTrifocal, KeyFrameCallback)
     Scalar dt = 0.01;
 
     // Wolf problem
-    ProblemPtr problem = Problem::create("PO 3D");
+    ProblemPtr problem = Problem::create("PO", 3);
 
     // Install tracker (sensor and processor)
     IntrinsicsCameraPtr intr = make_shared<IntrinsicsCamera>(); // TODO init params or read from YAML