diff --git a/demos/demo_projection_points.cpp b/demos/demo_projection_points.cpp
deleted file mode 100644
index 6d6f943ab4b3ee11ea03965f8a872fc3454a9f7b..0000000000000000000000000000000000000000
--- a/demos/demo_projection_points.cpp
+++ /dev/null
@@ -1,468 +0,0 @@
-
-// Vision utils
-#include <vision_utils/vision_utils.h>
-
-//std includes
-#include <iostream>
-
-//wolf includes
-#include "core/math/pinhole_tools.h"
-
-int main(int argc, char** argv)
-{
-    using namespace wolf;
-
-    std::cout << std::endl << " ========= ProjectPoints test ===========" << std::endl << std::endl;
-
-    Eigen::MatrixXs points3D(2,3);
-    Eigen::Vector3s point3D;
-    point3D[0] = 2.0;
-    point3D[1] = 5.0;
-    point3D[2] = 6.0;
-    points3D.row(0)= point3D;
-    point3D[0] = 4.0;
-    point3D[1] = 2.0;
-    point3D[2] = 1.0;
-    points3D.row(1)= point3D;
-
-    Eigen::Vector3s cam_ext_rot_mat = Eigen::Vector3s::Zero();
-    Eigen::Vector3s cam_ext_trans_mat = Eigen::Vector3s::Ones();
-
-    Eigen::Matrix3s cam_intr_mat;
-    cam_intr_mat = Eigen::Matrix3s::Identity();
-    cam_intr_mat(0,2)=2;
-    cam_intr_mat(1,2)=2;
-
-    Eigen::VectorXs dist_coef(5);
-    dist_coef << 0,0,0,0,0;
-
-    Eigen::MatrixXs points2D = vision_utils::projectPoints(points3D, cam_ext_rot_mat, cam_ext_trans_mat, cam_intr_mat, dist_coef);
-
-    for (int ii = 0; ii < points3D.rows(); ++ii)
-        std::cout << "points2D- X: " << points2D(ii,0) << "; Y: " << points2D(ii,1) << std::endl;
-
-    std::cout << std::endl << " ========= PinholeTools DUALITY TEST ===========" << std::endl << std::endl;
-
-    //================================= projectPoint and backprojectPoint to/from NormalizedPlane
-
-    Eigen::Vector3s project_point_normalized_test;
-    project_point_normalized_test[0] = 1.06065;
-    project_point_normalized_test[1] = 1.06065;
-    project_point_normalized_test[2] = 3;
-    Eigen::Vector2s project_point_normalized_output;
-    Eigen::Vector2s project_point_normalized_output2;
-    Scalar project_point_normalized_dist;
-
-    Scalar backproject_point_normalized_depth = 3;
-    Eigen::Vector3s backproject_point_normalized_output;
-
-    project_point_normalized_output = pinhole::projectPointToNormalizedPlane(project_point_normalized_test);
-
-    pinhole::projectPointToNormalizedPlane(project_point_normalized_test,
-                                           project_point_normalized_output2,
-                                           project_point_normalized_dist);
-
-    backproject_point_normalized_output =
-            pinhole::backprojectPointFromNormalizedPlane(project_point_normalized_output,
-                                                         backproject_point_normalized_depth);
-
-    std::cout << "TEST project and backproject PointToNormalizedPlane" << std::endl;
-    std::cout << std:: endl << "Original         " << project_point_normalized_test.transpose() << std::endl;
-    std::cout << std:: endl << "Project          " << project_point_normalized_output.transpose() << std::endl;
-    std::cout << std:: endl << "Alternate project" << project_point_normalized_output.transpose() << std::endl;
-    std::cout << std:: endl << "Backproject      " << backproject_point_normalized_output.transpose() << std::endl;
-
-    //================================= projectPoint and backprojectPoint to/from NormalizedPlane WITH JACOBIANS
-
-    Eigen::Vector3s pp_normalized_test;
-    pp_normalized_test[0] = 3;
-    pp_normalized_test[1] = 3;
-    pp_normalized_test[2] = 3;
-    Eigen::Vector2s pp_normalized_output;
-    Eigen::Vector2s pp_normalized_output2;
-    Eigen::Matrix<Scalar, 2, 3> pp_normalized_jacobian;
-    Eigen::Matrix<Scalar, 2, 3> pp_normalized_jacobian2;
-    Scalar pp_normalized_distance;
-
-    Scalar bpp_normalized_depth = 3;
-    Eigen::Vector3s bpp_normalized_output;
-    Eigen::Matrix<Scalar, 3, 2> bpp_normalized_jacobian;
-    Eigen::Vector3s bpp_normalized_jacobian_depth;
-
-    pinhole::projectPointToNormalizedPlane(pp_normalized_test,
-                                           pp_normalized_output,
-                                           pp_normalized_jacobian);
-    pinhole::projectPointToNormalizedPlane(pp_normalized_test,
-                                           pp_normalized_output2,
-                                           pp_normalized_distance,
-                                           pp_normalized_jacobian2);
-
-    pinhole::backprojectPointFromNormalizedPlane(pp_normalized_output,
-                                                 bpp_normalized_depth,
-                                                 bpp_normalized_output,
-                                                 bpp_normalized_jacobian,
-                                                 bpp_normalized_jacobian_depth);
-
-    std::cout << "\n--------------------------------------------------------" << std::endl;
-    std::cout << "\nTEST project and backproject PointToNormalizedPlane with JACOBIAN" << std::endl;
-
-    std::cout << std:: endl << "Original" << pp_normalized_test.transpose() << std::endl;
-    std::cout << std:: endl << "Project" << pp_normalized_output.transpose() << std::endl;
-    std::cout << "\n--> Jacobian" << std::endl << pp_normalized_jacobian << std::endl;
-
-    std::cout << std:: endl << "Alternate project" << pp_normalized_output2.transpose() << "; distance: "
-              << pp_normalized_distance << std::endl;
-    std::cout << "\n--> Jacobian" << std::endl << pp_normalized_jacobian2 << std::endl;
-
-    std::cout << std:: endl << "Backproject" << bpp_normalized_output.transpose()
-              << "; depth: " << bpp_normalized_depth << std::endl;
-    std::cout << "\n--> Jacobian" << std::endl << bpp_normalized_jacobian << std::endl;
-    std::cout << "\n--> Jacobian - depth" << bpp_normalized_jacobian_depth.transpose() << std::endl;
-
-    Eigen::Matrix2s test_jacobian; // (2x3) * (3x2) = (2x2)
-    test_jacobian =  pp_normalized_jacobian * bpp_normalized_jacobian;
-
-    std::cout << "\n\n\n==> Jacobian Testing" << std::endl << test_jacobian << std::endl;
-
-    //================================= IsInRoi / IsInImage
-
-    Eigen::Vector2s pix;
-    pix[0] = 40; // x
-    pix[1] = 40; // y
-
-    int roi_x = 30;
-    int roi_y = 30;
-    int roi_width = 20;
-    int roi_height = 20;
-
-    int image_width = 640;
-    int image_height = 480;
-
-    bool is_in_roi;
-    bool is_in_image;
-    is_in_roi = pinhole::isInRoi(pix,
-                                 roi_x,
-                                 roi_y,
-                                 roi_width,
-                                 roi_height);
-    is_in_image = pinhole::isInImage(pix,
-                                     image_width,
-                                     image_height);
-
-    std::cout << "\n--------------------------------------------------------" << std::endl;
-    std::cout << "\nTEST isInRoi/isInImage" << std::endl;
-    std::cout << std::endl << "Pixel " << std::endl;
-    std::cout << "x: " << pix[0] << "; y: " << pix[1] << std::endl;
-    std::cout << std::endl << "ROI " << std::endl;
-    std::cout << "x: " << roi_x << "; y: " << roi_y << "; width: " << roi_width << "; height: " << roi_height << std::endl;
-    std::cout << "is_in_roi: " << is_in_roi << std::endl;
-    std::cout << std::endl << "Image " << std::endl;
-    std::cout << "width: " << image_width << "; height: " << image_height << std::endl;
-    std::cout << "is_in_image: " << is_in_image << std::endl;
-
-    //================================= computeCorrectionModel
-
-    Eigen::Vector2s distortion2;
-    distortion2[0] = -0.301701;
-    distortion2[1] = 0.0963189;
-    Eigen::Vector4s k_test2;
-    //k = [u0, v0, au, av]
-    k_test2[0] = 516.686; //u0
-    k_test2[1] = 355.129; //v0
-    k_test2[2] = 991.852; //au
-    k_test2[3] = 995.269; //av
-
-    Eigen::Vector2s correction_test2;
-    pinhole::computeCorrectionModel(k_test2,
-                                    distortion2,
-                                    correction_test2);
-
-    std::cout << "\n--------------------------------------------------------" << std::endl;
-    std::cout << "\nTEST computeCorrectionModel" << std::endl;
-    std::cout << std::endl << "distortion" << std::endl;
-    std::cout << "d1: " << distortion2[0] << "; d2: " << distortion2[1] << std::endl;
-    std::cout << std::endl << "k values" << std::endl;
-    std::cout << "u0: " << k_test2[0] << "; v0: " << k_test2[1] << "; au: " << k_test2[2] << "; av: " << k_test2[3] << std::endl;
-    std::cout << std::endl << "correction" << std::endl;
-    std::cout << "c1: " << correction_test2[0] << "; c2: " << correction_test2[1] << std::endl;
-
-    //================================= distortPoint
-
-    Eigen::Vector2s distorting_point;
-    distorting_point[0] = 0.35355;
-    distorting_point[1] = 0.35355;
-
-    Eigen::Vector2s distored_point3;
-    distored_point3 = pinhole::distortPoint(distortion2,
-                                            distorting_point);
-
-    std::cout << "\n--------------------------------------------------------" << std::endl;
-    std::cout << "\nTEST distortPoint" << std::endl;
-    std::cout << std::endl << "Point to be distorted" << std::endl;
-    std::cout << "x: " << distorting_point[0] << "; y: " << distorting_point[1] << std::endl;
-    std::cout << std::endl << "Distorted point" << std::endl;
-    std::cout << "x: " << distored_point3[0] << "; y: " << distored_point3[1] << std::endl;
-
-    Eigen::Vector2s corrected_point4;
-    corrected_point4 = pinhole::undistortPoint(correction_test2,
-                                               distored_point3);
-    std::cout << std::endl << "Corrected point" << std::endl;
-    std::cout << "x: " << corrected_point4[0] << "; y: " << corrected_point4[1] << std::endl;
-
-    ////
-
-    Eigen::Vector2s distored_point4;
-    Eigen::Matrix2s distortion_jacobian2;
-    pinhole::distortPoint(distortion2,
-                          distorting_point,
-                          distored_point4,
-                          distortion_jacobian2);
-
-    std::cout << "\n\nTEST distortPoint, jacobian" << std::endl;
-    std::cout << std::endl << "Point to be distorted" << std::endl;
-    std::cout << "x: " << distorting_point[0] << "; y: " << distorting_point[1] << std::endl;
-    std::cout << std::endl << "Distorted point" << std::endl;
-    std::cout << "x: " << distored_point4[0] << "; y: " << distored_point4[1] << std::endl;
-    std::cout << "\n--> Jacobian" << std::endl <<
-                 distortion_jacobian2 << std::endl;
-
-    Eigen::Vector2s corrected_point5;
-    Eigen::Matrix2s corrected_jacobian2;
-    pinhole::undistortPoint(correction_test2,
-                            distored_point4,
-                            corrected_point5,
-                            corrected_jacobian2);
-
-    std::cout << std::endl << "Corrected point" << std::endl;
-    std::cout << "x: " << corrected_point5[0] << "; y: " << corrected_point5[1] << std::endl;
-    std::cout << "\n--> Jacobian" << std::endl <<
-                 corrected_jacobian2 << std::endl;
-
-    Eigen::Matrix2s test_jacobian_distortion;
-    test_jacobian_distortion =  distortion_jacobian2 * corrected_jacobian2;
-
-    std::cout << "\n\n\n==> Jacobian Testing" << std::endl <<
-                 test_jacobian_distortion << std::endl;
-
-    //================================= PixelizePoint
-
-    Eigen::Vector2s pixelize_ud;
-    pixelize_ud[0] = 45;
-    pixelize_ud[1] = 28;
-
-    Eigen::Vector2s pixelize_output3;
-    pixelize_output3 = pinhole::pixellizePoint(k_test2,
-                                               pixelize_ud);
-
-    std::cout << "\n--------------------------------------------------------" << std::endl;
-    std::cout << "\nTEST pixelizePoint; Eigen::Vector2s" << std::endl;
-    std::cout << std::endl << "Original" << std::endl;
-    std::cout << "x: " << pixelize_ud[0] << "; y: " << pixelize_ud[1] << std::endl;
-    std::cout << std::endl << "Pixelized" << std::endl;
-    std::cout << "x: " << pixelize_output3[0] << "; y: " << pixelize_output3[1] << std::endl;
-
-    Eigen::Vector2s depixelize_output3;
-    depixelize_output3 = pinhole::depixellizePoint(k_test2,
-                                                   pixelize_output3);
-    std::cout << std::endl << "Depixelized" << std::endl;
-    std::cout << "x: " << depixelize_output3[0] << "; y: " << depixelize_output3[1] << std::endl;
-
-    ////
-
-    Eigen::Vector2s pixelize_output4;
-    Eigen::Matrix2s pixelize_jacobian2;
-    pinhole::pixellizePoint(k_test2,
-                            pixelize_ud,
-                            pixelize_output4,
-                            pixelize_jacobian2);
-
-    std::cout << std::endl << "TEST pixelizePoint; Jacobians" << std::endl;
-    std::cout << std::endl << "Original" << std::endl;
-    std::cout << "x: " << pixelize_ud[0] << "; y: " << pixelize_ud[1] << std::endl;
-    std::cout << std::endl << "Pixelized" << std::endl;
-    std::cout << "x: " << pixelize_output4[0] << "; y: " << pixelize_output4[1] << std::endl;
-    std::cout << "\n--> Jacobian" << std::endl <<
-                 pixelize_jacobian2 << std::endl;
-
-    Eigen::Vector2s depixelize_output4;
-    Eigen::Matrix2s depixelize_jacobian2;
-    pinhole::depixellizePoint(k_test2,
-                              pixelize_output4,
-                              depixelize_output4,
-                              depixelize_jacobian2);
-
-    std::cout << std::endl << "Depixelized" << std::endl;
-    std::cout << "x: " << depixelize_output4[0] << "; y: " << depixelize_output4[1] << std::endl;
-    std::cout << "\n--> Jacobian" << std::endl <<
-                 depixelize_jacobian2 << std::endl;
-
-    Eigen::Matrix2s test_jacobian_pix;
-    test_jacobian_pix =  pixelize_jacobian2 * depixelize_jacobian2;
-
-    std::cout << "\n\n\n==> Jacobian Testing" << std::endl <<
-                 test_jacobian_pix << std::endl;
-
-    //================================= projectPoint Complete
-
-//    //distortion
-//    distortion2;
-
-//    //k
-//    k_test2;
-
-//    //3Dpoint
-//    project_point_normalized_test;
-
-    Eigen::Vector2s point2D_test5;
-    point2D_test5 = pinhole::projectPoint(k_test2,
-                                          distortion2,
-                                          project_point_normalized_test);
-
-    std::cout << "\n--------------------------------------------------------" << std::endl;
-    std::cout << std::endl << "TEST projectPoint Complete" << std::endl;
-    std::cout << "\nPARAMS" << std::endl;
-    std::cout << "\nDistortion:" << std::endl;
-    std::cout << "d1: " << distortion2[0] << "; d2: " << distortion2[1] << std::endl << std::endl;
-    std::cout << "k values:" << std::endl;
-    std::cout << "u0: " << k_test2[0] << "; v0: " << k_test2[1] << "; au: " << k_test2[2] << "; av: " << k_test2[3] << std::endl << std::endl;
-    std::cout << "3D Point" << std::endl;
-    std::cout << "x: " << project_point_normalized_test[0] << "; y: " << project_point_normalized_test[1]
-              << "; z: " << project_point_normalized_test[2] << std::endl;
-    std::cout << "\n\n\nFirst function output" << std::endl;
-    std::cout << "x: " << point2D_test5[0] << "; y: " << point2D_test5[1] << std::endl;
-
-        //distance
-    Eigen::Vector2s point2D_test6;
-    Scalar distance_test4;
-    pinhole::projectPoint(k_test2,
-                          distortion2,
-                          project_point_normalized_test,
-                          point2D_test6,
-                          distance_test4);
-
-    std::cout << std::endl << "Second function output" << std::endl;
-    std::cout << "x: " << point2D_test6[0] << "; y: " << point2D_test6[1] << "; dist: " << distance_test4 << std::endl;
-
-        //jacobian
-    Eigen::Vector2s point2D_test7;
-    Eigen::MatrixXs jacobian_test3(2,3);
-    pinhole::projectPoint(k_test2,
-                          distortion2,
-                          project_point_normalized_test,
-                          point2D_test7,
-                          jacobian_test3);
-
-    std::cout << std::endl << "Third function output" << std::endl;
-    std::cout << "x: " << point2D_test7[0] << "; y: " << point2D_test7[1] << std::endl;
-    std::cout << "\n-->Jacobian" << std::endl <<
-                 jacobian_test3 << std::endl;
-
-        //jacobian and distance
-    Eigen::Vector2s point2D_test8;
-    Eigen::MatrixXs jacobian_test4(2,3);
-    Scalar distance_test3;
-    pinhole::projectPoint(k_test2,
-                          distortion2,
-                          project_point_normalized_test,
-                          point2D_test8,
-                          distance_test3,
-                          jacobian_test4);
-
-    std::cout << std::endl << "Fourth function output" << std::endl;
-    std::cout << "x: " << point2D_test8[0] << "; y: " << point2D_test8[1] << "; dist: " << distance_test3 << std::endl;
-    std::cout << "\n-->Jacobian" << std::endl <<
-                 jacobian_test4 << std::endl;
-
-    /////////////////////////////
-
-//    //correction
-//    correction_test2
-
-//    //2Dpoint
-//    point2D_test5
-
-    Scalar depth3 = project_point_normalized_test[2];
-
-    Eigen::Vector3s point3D_backproj5;
-    point3D_backproj5 = pinhole::backprojectPoint(k_test2,
-                                                  correction_test2,
-                                                  point2D_test5,
-                                                  depth3);
-
-    std::cout << "\n\nTEST backprojectPoint Complete" << std::endl;
-    std::cout << std::endl << "First function output" << std::endl;
-    std::cout << "x: " << point3D_backproj5[0] << "; y: " << point3D_backproj5[1] << "; z: " << point3D_backproj5[2] << std::endl;
-
-        //jacobian
-    Eigen::Vector3s point3D_backproj4;
-    Eigen::MatrixXs jacobian_backproj2(3,2);
-    Eigen::Vector3s depth_jacobian2;
-    pinhole::backprojectPoint(k_test2,
-                              correction_test2,
-                              point2D_test7,
-                              depth3,
-                              point3D_backproj4,
-                              jacobian_backproj2,
-                              depth_jacobian2);
-
-    std::cout << std::endl << "Second function output" << std::endl;
-    std::cout << "x: " << point3D_backproj4[0] << "; y: " << point3D_backproj4[1] << "; z: " << point3D_backproj4[2] << std::endl;
-    std::cout << "\n--> Jacobian" << std::endl <<
-                 jacobian_backproj2 << std::endl;
-    std::cout << "\n--> Jacobian - depth" << std::endl <<
-                 depth_jacobian2[0] << " " << depth_jacobian2[1] << " " << depth_jacobian2[2] << " " << std::endl;
-
-    Eigen::Matrix2s test_jacobian_complete;
-    test_jacobian_complete =  jacobian_test4 * jacobian_backproj2;
-
-    std::cout << "\n\n\n==> Jacobian Testing" << std::endl <<
-                 test_jacobian_complete << std::endl;
-
-    /* Test */
-    std::cout << "\n\n\n\nTEST\n" << std::endl;
-
-    Eigen::Matrix3s K;
-    K(0,0) = 830.748734;    K(0,1) = 0;             K(0,2) = 327.219132;
-    K(1,0) = 0;             K(1,1) = 831.18208;     K(1,2) = 234.720244;
-    K(2,0) = 0;             K(2,1) = 0;             K(2,2) = 1;
-
-    Eigen::Vector4s K_params = {327.219132,234.720244, 830.748734,831.18208};
-
-    std::cout << "K:\n" << K << std::endl;
-
-    Eigen::Vector4s distortion_vector = {0.0006579999999999999, 0.023847, -0.001878, 0.007706999999999999};
-
-    std::cout << "\nDistortion vector:\n" << distortion_vector << std::endl;
-
-    Eigen::Vector4s correction_vector;
-    pinhole::computeCorrectionModel(K_params,
-                                    distortion_vector,
-                                    correction_vector);
-
-    std::cout << "\nCorrection vector:\n" << correction_vector << std::endl;
-
-    Eigen::Vector3s test_point3D;
-    Eigen::Vector2s test_point2D = {123,321};
-    std::cout << "\ntest_point2D ORIGINAL:\n" << test_point2D << std::endl;
-
-    test_point2D = pinhole::depixellizePoint(K_params,
-                                             test_point2D);
-    std::cout << "\ntest_point2D DEPIXELIZED:\n" << test_point2D << std::endl;
-    test_point2D = pinhole::undistortPoint(correction_vector,
-                                           test_point2D);
-    std::cout << "\ntest_point2D UNDISTORTED:\n" << test_point2D << std::endl;
-    test_point3D = pinhole::backprojectPointFromNormalizedPlane(test_point2D,
-                                                                2);
-    std::cout << "\ntest_point3D BACKPROJECTED:\n" << test_point3D << std::endl;
-
-    test_point2D = pinhole::projectPointToNormalizedPlane(test_point3D);
-    std::cout << "\ntest_point2D NORMALIZED:\n" << test_point2D << std::endl;
-    test_point2D = pinhole::distortPoint(distortion_vector,
-                                         test_point2D);
-    std::cout << "\ntest_point2D DISTORTED:\n" << test_point2D << std::endl;
-    test_point2D = pinhole::pixellizePoint(K_params,
-                                           test_point2D);
-    std::cout << "\ntest_point2D PIXELIZED:\n" << test_point2D << std::endl;
-
-}
-
diff --git a/demos/processor_odom_3D.yaml b/demos/processor_odom_3D.yaml
index f501e333800ec1bbb4b7c751a32aa67a99bec74c..82fdecf637f5a14431fc8ff5b66e7e7415ffcfd2 100644
--- a/demos/processor_odom_3D.yaml
+++ b/demos/processor_odom_3D.yaml
@@ -1,8 +1,11 @@
 processor type: "ODOM 3D"              # This must match the KEY used in the SensorFactory. Otherwise it is an error.
 processor name: "Main odometer"        # This is ignored. The name provided to the SensorFactory prevails
+
 time tolerance:         0.01  # seconds
-keyframe vote:
-    max time span:      0.2   # seconds
-    max buffer length:  10    # motion deltas
-    dist traveled:      0.5   # meters
-    angle turned:       0.1   # radians (1 rad approx 57 deg, approx 60 deg)
\ No newline at end of file
+
+voting_active:        false
+voting_aux_active:    false
+k_max_time span:      0.2   # seconds
+k_max_buff_length:    10    # motion deltas
+k_dist_traveled:      0.5   # meters
+k_angle_turned:       0.1   # radians (1 rad approx 57 deg, approx 60 deg)
\ No newline at end of file
diff --git a/demos/sensor_odom_3D.yaml b/demos/sensor_odom_3D.yaml
index 9ea77803548cfd9d033f54e40b6d92a72710afb8..d0c1f0b0e4d025090170cbbd85ea3ae4cfc9f62b 100644
--- a/demos/sensor_odom_3D.yaml
+++ b/demos/sensor_odom_3D.yaml
@@ -1,8 +1,8 @@
-sensor type: "ODOM 3D"              # This must match the KEY used in the SensorFactory. Otherwise it is an error.
-sensor name: "Main odometer"        # This is ignored. The name provided to the SensorFactory prevails
-motion variances: 
-    disp_to_disp:   0.02  # m^2   / m
-    disp_to_rot:    0.02  # rad^2 / m
-    rot_to_rot:     0.01  # rad^2 / rad
-    min_disp_var:   0.01  # m^2
-    min_rot_var:    0.01  # rad^2
+type: "ODOM 3D"              # This must match the KEY used in the SensorFactory. Otherwise it is an error.
+name: "Main odometer"        # This is ignored. The name provided to the SensorFactory prevails
+
+k_disp_to_disp:   0.02  # m^2   / m
+k_disp_to_rot:    0.02  # rad^2 / m
+k_rot_to_rot:     0.01  # rad^2 / rad
+min_disp_var:     0.01  # m^2
+min_rot_var:      0.01  # rad^2
diff --git a/demos/sensor_odom_3D_HQ.yaml b/demos/sensor_odom_3D_HQ.yaml
index 08945ef842e46f28642f1be63ca95850b618a35e..359ada0dfed9bbb4debc6a11e83dad494ecf258c 100644
--- a/demos/sensor_odom_3D_HQ.yaml
+++ b/demos/sensor_odom_3D_HQ.yaml
@@ -1,8 +1,8 @@
-sensor type: "ODOM 3D"              # This must match the KEY used in the SensorFactory. Otherwise it is an error.
-sensor name: "Main odometer"        # This is ignored. The name provided to the SensorFactory prevails
-motion variances: 
-    disp_to_disp:   0.000001  # m^2   / m
-    disp_to_rot:    0.000001  # rad^2 / m
-    rot_to_rot:     0.000001  # rad^2 / rad
-    min_disp_var:   0.00000001  # m^2
-    min_rot_var:    0.00000001  # rad^2
\ No newline at end of file
+type: "ODOM 3D"              # This must match the KEY used in the SensorFactory. Otherwise it is an error.
+name: "Main odometer"        # This is ignored. The name provided to the SensorFactory prevails
+
+k_disp_to_disp:   0.000001  # m^2   / m
+k_disp_to_rot:    0.000001  # rad^2 / m
+k_rot_to_rot:     0.000001  # rad^2 / rad
+k_min_disp_var:   0.00000001  # m^2
+k_min_rot_var:    0.00000001  # rad^2
\ No newline at end of file
diff --git a/hello_wolf/hello_wolf_autoconf.cpp b/hello_wolf/hello_wolf_autoconf.cpp
index 8921a4698485119155fb9ac59699ec3abef2687f..a4500bf3b441ee640a74c58a67197eb4b168aff7 100644
--- a/hello_wolf/hello_wolf_autoconf.cpp
+++ b/hello_wolf/hello_wolf_autoconf.cpp
@@ -101,7 +101,7 @@ int main()
     using namespace wolf;
 
 
-    WOLF_TRACE("======== CONFIGURE PROBLEM =======")
+    WOLF_TRACE("======== CONFIGURE PROBLEM =======");
 
     // Config file to parse. Here is where all the problem is defined:
     std::string file = std::string(_WOLF_ROOT_DIR) + "/hello_wolf/hello_wolf_config.yaml";
@@ -151,7 +151,7 @@ int main()
 
     // SET OF EVENTS: make things happen =======================================================
     std::cout << std::endl;
-    WOLF_TRACE("======== BUILD PROBLEM =======")
+    WOLF_TRACE("======== START ROBOT MOVE AND SLAM =======")
 
     // We'll do 3 steps of motion and landmark observations.
 
diff --git a/hello_wolf/hello_wolf_config.yaml b/hello_wolf/hello_wolf_config.yaml
index 13472f71bde49c1e5f46272ea248274f8e77a4aa..da25853a6a6222a181560fecfa1fe828a542a0b3 100644
--- a/hello_wolf/hello_wolf_config.yaml
+++ b/hello_wolf/hello_wolf_config.yaml
@@ -1,45 +1,54 @@
 config:
 
   problem:
-    frame structure:      "PO"
+    frame_structure:      "PO"
     dimension:            2
-    prior timestamp:      0.0
-    prior state:          [0,0,0]
-    prior cov:            [[3,3],.01,0,0,0,.01,0,0,0,.01]
-    prior time tolerance: 0.1
+    prior:
+      timestamp:      0.0
+      state:          [0,0,0]
+      cov:            [[3,3],.01,0,0,0,.01,0,0,0,.01]
+      time_tolerance: 0.1
     
- 
   sensors:
     -
       type: "ODOM 2D"
       name: "odom"
+      k_disp_to_disp: 0.1
+      k_rot_to_rot: 0.1
+      extrinsic: 
+        pose: [0,0,0]
 
     - 
       type:                       "RANGE BEARING"
       name:                       "rb"  
-      noise range metres std:     0.1
-      noise bearing degrees std:  0.5  
-      
+      noise_range_metres_std:     0.1
+      noise_bearing_degrees_std:  0.5  
+          
   processors:
     -
-      type:           "ODOM 2D"
-      name:           "odom"
-      sensor name:    "odom"
-      voting active:  true
-      time tolerance: 0.1
-      max time span:  999
-      dist_traveled:  0.95
-      angle_turned:   999
-      cov_det:        999
+      type:               "ODOM 2D"
+      name:               "odom"
+      sensor_name:        "odom"
+      time_tolerance:     0.1
+      voting_active:      true
+      voting_aux_active:  false
+      max_time_span:      999
+      dist_traveled:      0.95
+      angle_turned:       999
+      max_buff_length:    999
+      cov_det:            999
       unmeasured_perturbation_std: 0.001
     
     -
       type:         "RANGE BEARING"
       name:         "rb"
-      sensor name:  "rb"
+      sensor_name:  "rb"
+      voting_active:  false
+      voting_aux_active:  false
+      time_tolerance: 0.1
     
     
 files:
-#    - "/Users/jsola/dev/wolf_lib/core/lib/libhellowolf.dylib"
+#    - "/Users/jsola/dev/wolf lib/core/lib/libhellowolf.dylib"
   
     
\ No newline at end of file
diff --git a/hello_wolf/processor_range_bearing.cpp b/hello_wolf/processor_range_bearing.cpp
index dbd86a30e2a5c3499c4aca126f12f875d98b0a48..5685c411998415689aa8d795b4f8c61417382f3d 100644
--- a/hello_wolf/processor_range_bearing.cpp
+++ b/hello_wolf/processor_range_bearing.cpp
@@ -120,9 +120,7 @@ ProcessorBasePtr ProcessorRangeBearing::createAutoConf(const std::string& _uniqu
                                                        const SensorBasePtr _sensor_ptr)
 {
     SensorRangeBearingPtr       sensor_rb = std::static_pointer_cast<SensorRangeBearing>(_sensor_ptr);
-    ProcessorParamsRangeBearingPtr params = std::make_shared<ProcessorParamsRangeBearing>();
-    params->voting_active = _server.getParam<bool>(_unique_name + "/voting_active", "false");
-    params->time_tolerance = _server.getParam<double>(_unique_name + "/time_tolerance", "0.01");
+    ProcessorParamsRangeBearingPtr params = std::make_shared<ProcessorParamsRangeBearing>(_unique_name, _server);
 
     // construct processor
     ProcessorRangeBearingPtr prc = std::make_shared<ProcessorRangeBearing>(sensor_rb, params);
diff --git a/hello_wolf/sensor_range_bearing.h b/hello_wolf/sensor_range_bearing.h
index 161818df65a56f5b2df02d9a66327a71e80a63a0..2c33482365adf14e1b5ec468cc8cc4ca51c65154 100644
--- a/hello_wolf/sensor_range_bearing.h
+++ b/hello_wolf/sensor_range_bearing.h
@@ -26,8 +26,8 @@ struct IntrinsicsRangeBearing : public IntrinsicsBase
     IntrinsicsRangeBearing(std::string _unique_name, const ParamsServer& _server):
         IntrinsicsBase(_unique_name, _server)
     {
-        noise_range_metres_std = _server.getParam<Scalar>(_unique_name + "/noise range metres std", "0.05");
-        noise_bearing_degrees_std = _server.getParam<Scalar>(_unique_name + "/noise bearing degrees std", "0.5");
+        noise_range_metres_std = _server.getParam<Scalar>(_unique_name + "/noise_range_metres_std");
+        noise_bearing_degrees_std = _server.getParam<Scalar>(_unique_name + "/noise_bearing_degrees_std");
     }
   std::string print()
   {
diff --git a/include/core/processor/processor_base.h b/include/core/processor/processor_base.h
index 95d96f22fe0db0dfcb2a8bf804367831c9c45147..3537f96032ba64bbbb901f722bd64bdf10bbe0ab 100644
--- a/include/core/processor/processor_base.h
+++ b/include/core/processor/processor_base.h
@@ -179,9 +179,9 @@ struct ProcessorParamsBase : public ParamsBase
     ProcessorParamsBase(std::string _unique_name, const ParamsServer& _server):
         ParamsBase(_unique_name, _server)
     {
-        voting_active = _server.getParam<bool>(_unique_name + "/voting_active", "false");
-        voting_aux_active = _server.getParam<bool>(_unique_name + "/voting_aux_active", "false");
-        time_tolerance = _server.getParam<Scalar>(_unique_name + "/time_tolerance", "0");
+        voting_active = _server.getParam<bool>(_unique_name + "/voting_active");
+        voting_aux_active = _server.getParam<bool>(_unique_name + "/voting_aux_active");
+        time_tolerance = _server.getParam<Scalar>(_unique_name + "/time_tolerance");
     }
 
     virtual ~ProcessorParamsBase() = default;
diff --git a/include/core/processor/processor_motion.h b/include/core/processor/processor_motion.h
index b06cf3390b6175ac989df88d9265542759955407..6a96be5ef0c13a299e687bafb77bf38fbd48ede1 100644
--- a/include/core/processor/processor_motion.h
+++ b/include/core/processor/processor_motion.h
@@ -34,15 +34,16 @@ struct ProcessorParamsMotion : public ProcessorParamsBase
         ProcessorParamsMotion(std::string _unique_name, const ParamsServer& _server):
             ProcessorParamsBase(_unique_name, _server)
         {
-          max_time_span   = _server.getParam<Scalar>(_unique_name + "/max_time_span", "0.5");
-          max_buff_length = _server.getParam<unsigned int>(_unique_name + "/max_buff_length", "10");
-          dist_traveled   = _server.getParam<Scalar>(_unique_name + "/dist_traveled", "5");
-          angle_turned    = _server.getParam<Scalar>(_unique_name + "/angle_turned", "0.5");
-          unmeasured_perturbation_std = _server.getParam<Scalar>(_unique_name + "/unmeasured_perturbation_std", "1e-4");
+          max_time_span   = _server.getParam<Scalar>(_unique_name + "/max_time_span");
+          max_buff_length = _server.getParam<unsigned int>(_unique_name + "/max_buff_length");
+          dist_traveled   = _server.getParam<Scalar>(_unique_name + "/dist_traveled");
+          angle_turned    = _server.getParam<Scalar>(_unique_name + "/angle_turned");
+          unmeasured_perturbation_std = _server.getParam<Scalar>(_unique_name + "/unmeasured_perturbation_std");
         }
         std::string print()
         {
-          return "\n" + ProcessorParamsBase::print() + "max_time_span: " + std::to_string(max_time_span) + "\n"
+          return "\n" + ProcessorParamsBase::print()
+            + "max_time_span: " + std::to_string(max_time_span) + "\n"
             + "max_buff_length: " + std::to_string(max_buff_length) + "\n"
             + "dist_traveled: " + std::to_string(dist_traveled) + "\n"
             + "angle_turned: " +std::to_string(angle_turned) + "\n"
diff --git a/include/core/processor/processor_tracker.h b/include/core/processor/processor_tracker.h
index 3915ba33f8b9899deb99b6436b66a5b5c9ef9f4f..1c9277989d11fee7e0ea568e8cbccdb1bec58b0e 100644
--- a/include/core/processor/processor_tracker.h
+++ b/include/core/processor/processor_tracker.h
@@ -24,8 +24,8 @@ struct ProcessorParamsTracker : public ProcessorParamsBase
     ProcessorParamsTracker(std::string _unique_name, const wolf::ParamsServer & _server):
         ProcessorParamsBase(_unique_name, _server)
     {
-        min_features_for_keyframe = _server.getParam<unsigned int>(_unique_name + "/min_features_for_keyframe", "1");
-        max_new_features = _server.getParam<int>(_unique_name + "/max_new_features", "-1");
+        min_features_for_keyframe = _server.getParam<unsigned int>(_unique_name + "/min_features_for_keyframe");
+        max_new_features = _server.getParam<int>(_unique_name + "/max_new_features");
     }
   std::string print()
   {
diff --git a/include/core/sensor/sensor_diff_drive.h b/include/core/sensor/sensor_diff_drive.h
index c7465756a1cbb347f3e877e15056d8e45082931c..20b09ae4995461b34811e79cd5c53e66ffb08a66 100644
--- a/include/core/sensor/sensor_diff_drive.h
+++ b/include/core/sensor/sensor_diff_drive.h
@@ -20,20 +20,19 @@ struct IntrinsicsDiffDrive : public IntrinsicsBase
         Scalar radius_left;
         Scalar radius_right;
         Scalar wheel_separation;
-        unsigned int ticks_per_wheel_revolution;
+        Scalar ticks_per_wheel_revolution;
 
         Scalar radians_per_tick; ///< Not user-definable -- DO NOT PRETEND TO USE YAML TO SET THIS PARAM.
 
 
         IntrinsicsDiffDrive() = default;
-        IntrinsicsDiffDrive(std::string _unique_name,
-                                     const wolf::ParamsServer & _server) :
-                                         IntrinsicsBase(_unique_name, _server)
+        IntrinsicsDiffDrive(std::string _unique_name, const wolf::ParamsServer & _server) :
+            IntrinsicsBase(_unique_name, _server)
         {
-            radius_left                 = _server.getParam<Scalar>(_unique_name         + "/radius_left");
-            radius_right                = _server.getParam<Scalar>(_unique_name         + "/radius_right");
-            wheel_separation            = _server.getParam<Scalar>(_unique_name         + "/wheel_separation");
-            ticks_per_wheel_revolution  = _server.getParam<unsigned int>(_unique_name   + "/ticks_per_wheel_revolution");
+            radius_left                 = _server.getParam<Scalar>(_unique_name + "/radius_left");
+            radius_right                = _server.getParam<Scalar>(_unique_name + "/radius_right");
+            wheel_separation            = _server.getParam<Scalar>(_unique_name + "/wheel_separation");
+            ticks_per_wheel_revolution  = _server.getParam<Scalar>(_unique_name + "/ticks_per_wheel_revolution");
             radians_per_tick            = 2.0 * M_PI / ticks_per_wheel_revolution;
         }
         std::string print()
diff --git a/include/core/sensor/sensor_odom_2D.h b/include/core/sensor/sensor_odom_2D.h
index efe8d7e4daa8705ebe2e9ecb07be0f1d4a377d65..80936cfcdcbcfc8427c74336dc8052358b89b0f0 100644
--- a/include/core/sensor/sensor_odom_2D.h
+++ b/include/core/sensor/sensor_odom_2D.h
@@ -23,7 +23,7 @@ struct IntrinsicsOdom2D : public IntrinsicsBase
         IntrinsicsBase(_unique_name, _server)
     {
         k_disp_to_disp = _server.getParam<Scalar>(_unique_name + "/k_disp_to_disp");
-        k_rot_to_rot = _server.getParam<Scalar>(_unique_name + "/k_rot_to_rot");
+        k_rot_to_rot   = _server.getParam<Scalar>(_unique_name + "/k_rot_to_rot");
     }
   std::string print()
   {
diff --git a/include/core/sensor/sensor_odom_3D.h b/include/core/sensor/sensor_odom_3D.h
index 2fab5f065909452622a8760e5f9a976c63327e89..a6d7296a9aa44a711060ae3fc6aae394e2c0e2da 100644
--- a/include/core/sensor/sensor_odom_3D.h
+++ b/include/core/sensor/sensor_odom_3D.h
@@ -31,18 +31,19 @@ struct IntrinsicsOdom3D : public IntrinsicsBase
         IntrinsicsBase(_unique_name, _server)
     {
         k_disp_to_disp = _server.getParam<Scalar>(_unique_name + "/k_disp_to_disp");
-        k_disp_to_rot = _server.getParam<Scalar>(_unique_name + "/k_disp_to_rot");
-        k_rot_to_rot = _server.getParam<Scalar>(_unique_name + "/k_rot_to_rot");
-        min_disp_var = _server.getParam<Scalar>(_unique_name + "/min_disp_var");
-        min_rot_var = _server.getParam<Scalar>(_unique_name + "/min_rot_var");
+        k_disp_to_rot  = _server.getParam<Scalar>(_unique_name + "/k_disp_to_rot");
+        k_rot_to_rot   = _server.getParam<Scalar>(_unique_name + "/k_rot_to_rot");
+        min_disp_var   = _server.getParam<Scalar>(_unique_name + "/min_disp_var");
+        min_rot_var    = _server.getParam<Scalar>(_unique_name + "/min_rot_var");
     }
     std::string print()
     {
-      return "\n" + IntrinsicsBase::print() + "k_disp_to_disp: " + std::to_string(k_disp_to_disp) + "\n"
-        + "k_disp_to_rot: " + std::to_string(k_disp_to_rot) + "\n"
-        + "k_rot_to_rot: " + std::to_string(k_rot_to_rot) + "\n"
-        + "min_disp_var: " + std::to_string(min_disp_var) + "\n"
-        + "min_rot_var: " + std::to_string(min_rot_var) + "\n";
+      return "\n" + IntrinsicsBase::print()
+        + "k_disp_to_disp: " + std::to_string(k_disp_to_disp) + "\n"
+        + "k_disp_to_rot: "  + std::to_string(k_disp_to_rot)  + "\n"
+        + "k_rot_to_rot: "   + std::to_string(k_rot_to_rot)   + "\n"
+        + "min_disp_var: "   + std::to_string(min_disp_var)   + "\n"
+        + "min_rot_var: "    + std::to_string(min_rot_var)    + "\n";
     }
         virtual ~IntrinsicsOdom3D() = default;
 };
diff --git a/include/core/utils/params_server.hpp b/include/core/utils/params_server.hpp
index 94e8f1a8468a89749685ad471ee9b234e392f84d..c8d74c4df793b8f16696a5674150af505651e7bd 100644
--- a/include/core/utils/params_server.hpp
+++ b/include/core/utils/params_server.hpp
@@ -68,14 +68,14 @@ public:
         _params.insert(std::pair<std::string, std::string>(key, value));
     }
 
-    template<typename T>
-    T getParam(std::string key, std::string def_value) const {
-        if(_params.find(key) != _params.end()){
-            return converter<T>::convert(_params.find(key)->second);
-        }else{
-            return converter<T>::convert(def_value);
-        }
-    }
+//    template<typename T>
+//    T getParam(std::string key, std::string def_value) const {
+//        if(_params.find(key) != _params.end()){
+//            return converter<T>::convert(_params.find(key)->second);
+//        }else{
+//            return converter<T>::convert(def_value);
+//        }
+//    }
 
     template<typename T>
     T getParam(std::string key) const {
diff --git a/include/core/yaml/parser_yaml.hpp b/include/core/yaml/parser_yaml.hpp
index 1ec675756ec1b3d59946a21f1be5c01eef16979a..beb5a589a87aa99dec1996712190c146ddd8d504 100644
--- a/include/core/yaml/parser_yaml.hpp
+++ b/include/core/yaml/parser_yaml.hpp
@@ -373,7 +373,7 @@ void ParserYAML::parseFirstLevel(std::string file){
         _paramsSens.push_back(pSensor);
     }
     for(const auto& kv : n_config["processors"]){
-        ParamsInitProcessor pProc = {kv["type"].Scalar(), kv["name"].Scalar(), kv["sensor name"].Scalar(), kv};
+        ParamsInitProcessor pProc = {kv["type"].Scalar(), kv["name"].Scalar(), kv["sensor_name"].Scalar(), kv};
         _paramsProc.push_back(pProc);
     }
     for(const auto& kv : n_config["callbacks"]){
diff --git a/src/ceres_wrapper/ceres_manager.cpp b/src/ceres_wrapper/ceres_manager.cpp
index 1528c15e708d61f13ed8a5d1084207287722ba6b..b64e86ab9008296a57e01c7ed8a3a8061fa88b2b 100644
--- a/src/ceres_wrapper/ceres_manager.cpp
+++ b/src/ceres_wrapper/ceres_manager.cpp
@@ -43,7 +43,7 @@ CeresManager::~CeresManager()
 SolverManagerPtr CeresManager::create(const ProblemPtr &wolf_problem, const ParamsServer &_server)
 {
     ceres::Solver::Options opt;
-    opt.max_num_iterations = _server.getParam<int>("max_num_iterations","1000");
+    opt.max_num_iterations = _server.getParam<int>("max_num_iterations");
     // CeresManager m = CeresManager(wolf_problem, opt);
     return std::make_shared<CeresManager>(wolf_problem, opt);
 }
diff --git a/src/problem/problem.cpp b/src/problem/problem.cpp
index 60b395cf8719bb2f10ce1e481888afe1c8c240f9..b0052f8066b04250051d912727797fdb20569d40 100644
--- a/src/problem/problem.cpp
+++ b/src/problem/problem.cpp
@@ -77,8 +77,8 @@ ProblemPtr Problem::create(const std::string& _frame_structure, SizeEigen _dim)
 ProblemPtr Problem::autoSetup(ParamsServer &_server)
 {
     // Problem structure and dimension
-    std::string frame_structure = _server.getParam<std::string> ("problem/frame structure", "PO");
-    int dim                     = _server.getParam<int>         ("problem/dimension", "2");
+    std::string frame_structure = _server.getParam<std::string> ("problem/frame_structure");
+    int dim                     = _server.getParam<int>         ("problem/dimension");
     auto problem                = Problem::create(frame_structure, dim);
     // cout << "PRINTING SERVER MAP" << endl;
     // _server.print();
@@ -107,10 +107,10 @@ ProblemPtr Problem::autoSetup(ParamsServer &_server)
     }
 
     // Prior
-    Eigen::VectorXs prior_state = _server.getParam<Eigen::VectorXs>("problem/prior state");
-    Eigen::MatrixXs prior_cov   = _server.getParam<Eigen::MatrixXs>("problem/prior cov");
-    Scalar prior_time_tolerance = _server.getParam<Scalar>("problem/prior time tolerance");
-    Scalar prior_ts             = _server.getParam<Scalar>("problem/prior timestamp");
+    Eigen::VectorXs prior_state = _server.getParam<Eigen::VectorXs>("problem/prior/state");
+    Eigen::MatrixXs prior_cov   = _server.getParam<Eigen::MatrixXs>("problem/prior/cov");
+    Scalar prior_time_tolerance = _server.getParam<Scalar>("problem/prior/time_tolerance");
+    Scalar prior_ts             = _server.getParam<Scalar>("problem/prior/timestamp");
 
     WOLF_TRACE("prior timestamp:\n"     , prior_ts);
     WOLF_TRACE("prior state:\n"         , prior_state.transpose());
diff --git a/src/processor/processor_diff_drive.cpp b/src/processor/processor_diff_drive.cpp
index ffdce5bc9886d7421219d611b4d1f9f16dea175c..ac2e9e7d58c5a05104559591338020d26a6146f7 100644
--- a/src/processor/processor_diff_drive.cpp
+++ b/src/processor/processor_diff_drive.cpp
@@ -187,19 +187,9 @@ FactorBasePtr ProcessorDiffDrive::emplaceFactor(FeatureBasePtr _feature,
 
 ProcessorBasePtr ProcessorDiffDrive::createAutoConf(const std::string& _unique_name, const ParamsServer& _server, const SensorBasePtr sensor_ptr)
 {
+    auto params = std::make_shared<ProcessorParamsDiffDrive>(_unique_name, _server);
 
-    ProcessorDiffDrivePtr prc_ptr;
-
-    std::shared_ptr<ProcessorParamsDiffDrive> params;
-    params = std::make_shared<ProcessorParamsDiffDrive>();
-    params->voting_active               = _server.getParam<bool>(_unique_name + "/voting_active");
-    params->time_tolerance              = _server.getParam<double>(_unique_name + "/time_tolerance");
-    params->max_time_span               = _server.getParam<double>(_unique_name + "/max_time_span");
-    params->dist_traveled               = _server.getParam<double>(_unique_name + "/dist_traveled"); // Will make KFs automatically every 1m displacement
-    params->angle_turned                = _server.getParam<double>(_unique_name + "/angle_turned");
-    params->unmeasured_perturbation_std = _server.getParam<double>(_unique_name + "/unmeasured_perturbation_std");
-
-    prc_ptr = std::make_shared<ProcessorDiffDrive>(params);
+    auto prc_ptr = std::make_shared<ProcessorDiffDrive>(params);
     prc_ptr->setName(_unique_name);
 
     return prc_ptr;
diff --git a/src/processor/processor_odom_2D.cpp b/src/processor/processor_odom_2D.cpp
index 664ee4ae943248b81140b6663a3987f3a80dbf24..9253e23c08ca3b12e296c7c92a825f93ce6ee599 100644
--- a/src/processor/processor_odom_2D.cpp
+++ b/src/processor/processor_odom_2D.cpp
@@ -183,22 +183,12 @@ ProcessorBasePtr ProcessorOdom2D::create(const std::string& _unique_name, const
 
     return prc_ptr;
 }
+
 ProcessorBasePtr ProcessorOdom2D::createAutoConf(const std::string& _unique_name, const ParamsServer& _server, const SensorBasePtr sensor_ptr)
 {
+    auto params = std::make_shared<ProcessorParamsOdom2D>(_unique_name, _server);
 
-    ProcessorOdom2DPtr prc_ptr;
-
-    std::shared_ptr<ProcessorParamsOdom2D> params;
-    params = std::make_shared<ProcessorParamsOdom2D>();
-    params->voting_active               = _server.getParam<bool>(_unique_name + "/voting_active", "true");
-    params->time_tolerance              = _server.getParam<double>(_unique_name + "/time_tolerance", "0.1");
-    params->max_time_span               = _server.getParam<double>(_unique_name + "/max_time_span", "999");
-    params->dist_traveled               = _server.getParam<double>(_unique_name + "/dist_traveled", "0.95"); // Will make KFs automatically every 1m displacement
-    params->angle_turned                = _server.getParam<double>(_unique_name + "/angle_turned", "999");
-    params->cov_det                     = _server.getParam<double>(_unique_name + "/cov_det", "999");
-    params->unmeasured_perturbation_std = _server.getParam<double>(_unique_name + "/unmeasured_perturbation_std", "0.0001");
-
-    prc_ptr = std::make_shared<ProcessorOdom2D>(params);
+    auto prc_ptr = std::make_shared<ProcessorOdom2D>(params);
     prc_ptr->setName(_unique_name);
 
     return prc_ptr;
diff --git a/src/sensor/sensor_odom_2D.cpp b/src/sensor/sensor_odom_2D.cpp
index fd4427abec8211ddebf95b2172409692f807e72d..c96059e58b2c40358f75e0b520f9166944bd08ee 100644
--- a/src/sensor/sensor_odom_2D.cpp
+++ b/src/sensor/sensor_odom_2D.cpp
@@ -61,14 +61,15 @@ SensorBasePtr SensorOdom2D::create(const std::string& _unique_name, const Eigen:
 SensorBasePtr SensorOdom2D::createAutoConf(const std::string& _unique_name, const ParamsServer& _server)
 {
     // Eigen::VectorXs _extrinsics_po = Eigen::Vector3s(0,0,0);
-    Eigen::VectorXs _extrinsics_po = _server.getParam<Eigen::VectorXs>(_unique_name + "/extrinsic/pos", "[0,0,0]");
+    Eigen::VectorXs _extrinsics_po = _server.getParam<Eigen::VectorXs>(_unique_name + "/extrinsic/pose");
+
     assert(_extrinsics_po.size() == 3 && "Bad extrinsics vector length. Should be 3 for 2D.");
-    SensorOdom2DPtr odo;
-    IntrinsicsOdom2D params;
-    params.k_disp_to_disp = _server.getParam<double>(_unique_name + "/intrinsic/k_disp_to_disp", "1");
-    params.k_rot_to_rot   = _server.getParam<double>(_unique_name + "/intrinsic/k_rot_to_rot", "1");
-    odo = std::make_shared<SensorOdom2D>(_extrinsics_po, params);
+
+    IntrinsicsOdom2DPtr params = std::make_shared<IntrinsicsOdom2D>(_unique_name, _server);
+
+    SensorOdom2DPtr odo = std::make_shared<SensorOdom2D>(_extrinsics_po, params);
     odo->setName(_unique_name);
+
     return odo;
 }
 
diff --git a/src/yaml/processor_odom_3D_yaml.cpp b/src/yaml/processor_odom_3D_yaml.cpp
index ff564779517aa946365510c4a046c1cbc91de053..6b6f53a64d655f77127ddf398add56246b2a55ed 100644
--- a/src/yaml/processor_odom_3D_yaml.cpp
+++ b/src/yaml/processor_odom_3D_yaml.cpp
@@ -24,17 +24,18 @@ static ProcessorParamsBasePtr createProcessorOdom3DParams(const std::string & _f
 {
     YAML::Node config = YAML::LoadFile(_filename_dot_yaml);
 
-    if (config["processor type"].as<std::string>() == "ODOM 3D")
+    if (config["type"].as<std::string>() == "ODOM 3D")
     {
-        YAML::Node kf_vote = config["keyframe vote"];
-
         ProcessorParamsOdom3DPtr params = std::make_shared<ProcessorParamsOdom3D>();
 
-        params->time_tolerance      = config["time tolerance"]      .as<Scalar>();
-        params->max_time_span       = kf_vote["max time span"]      .as<Scalar>();
-        params->max_buff_length     = kf_vote["max buffer length"]  .as<SizeEigen  >();
-        params->dist_traveled       = kf_vote["dist traveled"]      .as<Scalar>();
-        params->angle_turned        = kf_vote["angle turned"]       .as<Scalar>();
+        params->voting_active       = config["voting_active"]      .as<bool>();
+        params->voting_aux_active   = config["voting_aux_active"]  .as<bool>();
+        params->time_tolerance      = config["time_tolerance"]     .as<Scalar>();
+        params->max_time_span       = config["max_time_span"]      .as<Scalar>();
+        params->max_buff_length     = config["max_buff_length"]    .as<SizeEigen  >();
+        params->dist_traveled       = config["dist_traveled"]      .as<Scalar>();
+        params->angle_turned        = config["angle_turned"]       .as<Scalar>();
+        params->unmeasured_perturbation_std = config["unmeasured_perturbation_std"].as<Scalar>();
 
         return params;
     }
diff --git a/src/yaml/sensor_odom_3D_yaml.cpp b/src/yaml/sensor_odom_3D_yaml.cpp
index 3756953b46cf952c900dca37569f8d51118509e4..51ceb2f6344d440fec93bf3417654a9f47bf3333 100644
--- a/src/yaml/sensor_odom_3D_yaml.cpp
+++ b/src/yaml/sensor_odom_3D_yaml.cpp
@@ -24,17 +24,15 @@ static IntrinsicsBasePtr createIntrinsicsOdom3D(const std::string & _filename_do
 {
     YAML::Node config = YAML::LoadFile(_filename_dot_yaml);
 
-    if (config["sensor type"].as<std::string>() == "ODOM 3D")
+    if (config["type"].as<std::string>() == "ODOM 3D")
     {
-        YAML::Node variances = config["motion variances"];
-
         IntrinsicsOdom3DPtr params = std::make_shared<IntrinsicsOdom3D>();
 
-        params->k_disp_to_disp   = variances["disp_to_disp"] .as<Scalar>();
-        params->k_disp_to_rot    = variances["disp_to_rot"]  .as<Scalar>();
-        params->k_rot_to_rot     = variances["rot_to_rot"]   .as<Scalar>();
-        params->min_disp_var     = variances["min_disp_var"] .as<Scalar>();
-        params->min_rot_var      = variances["min_rot_var"]  .as<Scalar>();
+        params->k_disp_to_disp   = config["k_disp_to_disp"] .as<Scalar>();
+        params->k_disp_to_rot    = config["k_disp_to_rot"]  .as<Scalar>();
+        params->k_rot_to_rot     = config["k_rot_to_rot"]   .as<Scalar>();
+        params->min_disp_var     = config["min_disp_var"] .as<Scalar>();
+        params->min_rot_var      = config["min_rot_var"]  .as<Scalar>();
 
         return params;
     }
diff --git a/test/dummy/processor_tracker_feature_dummy.h b/test/dummy/processor_tracker_feature_dummy.h
index 217196b7e26542f39d60fbfb1f53f01214e20ff9..d4f6dfbcde8fda17e75806ae9b4353afd27497bd 100644
--- a/test/dummy/processor_tracker_feature_dummy.h
+++ b/test/dummy/processor_tracker_feature_dummy.h
@@ -25,7 +25,7 @@ struct ProcessorParamsTrackerFeatureDummy : public ProcessorParamsTrackerFeature
     ProcessorParamsTrackerFeatureDummy(std::string _unique_name, const wolf::ParamsServer & _server):
         ProcessorParamsTrackerFeature(_unique_name, _server)
     {
-        n_tracks_lost = _server.getParam<unsigned int>(_unique_name + "/n_tracks_lost", "1");
+        n_tracks_lost = _server.getParam<unsigned int>(_unique_name + "/n_tracks_lost");
     }
 };
 
diff --git a/test/dummy/processor_tracker_landmark_dummy.h b/test/dummy/processor_tracker_landmark_dummy.h
index f79b2da401c1f925d7f8629f1e4b9f1cc4c14b3b..9977abc480ab2c1cff695b732286cd7857f5276d 100644
--- a/test/dummy/processor_tracker_landmark_dummy.h
+++ b/test/dummy/processor_tracker_landmark_dummy.h
@@ -23,7 +23,7 @@ struct ProcessorParamsTrackerLandmarkDummy : public ProcessorParamsTrackerLandma
     ProcessorParamsTrackerLandmarkDummy(std::string _unique_name, const wolf::ParamsServer & _server):
         ProcessorParamsTrackerLandmark(_unique_name, _server)
     {
-        n_landmarks_lost = _server.getParam<unsigned int>(_unique_name + "/n_landmarks_lost", "1");
+        n_landmarks_lost = _server.getParam<unsigned int>(_unique_name + "/n_landmarks_lost");
     }
 };
 
diff --git a/test/gtest_param_server.cpp b/test/gtest_param_server.cpp
index 00c6c099f6542e6e1f08dc9e2e451d8d2d055e81..bfa888fa7fc415c1689eb6b66a30b2919b599dbd 100644
--- a/test/gtest_param_server.cpp
+++ b/test/gtest_param_server.cpp
@@ -16,18 +16,19 @@ ParserYAML parse(string _file, string _path_root)
   return parser;
 }
 
-TEST(ParamsServer, Default)
-{
-  auto parser = parse("test/yaml/params1.yaml", wolf_root);
-  auto params = parser.getParams();
-  ParamsServer server = ParamsServer(params, parser.sensorsSerialization(), parser.processorsSerialization());
-  EXPECT_EQ(server.getParam<double>("should_not_exist", "2.6"), 2.6);
-  EXPECT_EQ(server.getParam<bool>("my_proc_test/voting_active", "true"), false);
-  EXPECT_NE(server.getParam<unsigned int>("my_proc_test/time_tolerance", "23"), 23);
-  EXPECT_THROW({ server.getParam<unsigned int>("test error"); }, std::runtime_error);
-  EXPECT_NE(server.getParam<unsigned int>("my_proc_test/time_tolerance"), 23);
-  EXPECT_EQ(server.getParam<bool>("my_proc_test/voting_active"), false);
-}
+//TEST(ParamsServer, Default)
+//{
+//  auto parser = parse("test/yaml/params1.yaml", wolf_root);
+//  auto params = parser.getParams();
+//  ParamsServer server = ParamsServer(params, parser.sensorsSerialization(), parser.processorsSerialization());
+//  EXPECT_EQ(server.getParam<double>("should_not_exist", "2.6"), 2.6);
+//  EXPECT_EQ(server.getParam<bool>("my_proc_test/voting_active", "true"), false);
+//  EXPECT_NE(server.getParam<unsigned int>("my_proc_test/time_tolerance", "23"), 23);
+//  EXPECT_THROW({ server.getParam<unsigned int>("test error"); }, std::runtime_error);
+//  EXPECT_NE(server.getParam<unsigned int>("my_proc_test/time_tolerance"), 23);
+//  EXPECT_EQ(server.getParam<bool>("my_proc_test/voting_active"), false);
+//}
+
 int main(int argc, char **argv)
 {
   testing::InitGoogleTest(&argc, argv);
diff --git a/test/gtest_parser_yaml.cpp b/test/gtest_parser_yaml.cpp
index 985657de83d5bc1381a488d2ed5b6986c12f8f64..de005340e981a6d62a6b24cec3e190f52d09882f 100644
--- a/test/gtest_parser_yaml.cpp
+++ b/test/gtest_parser_yaml.cpp
@@ -22,7 +22,7 @@ TEST(ParserYAML, RegularParse)
   // for(auto it : params)
   //   cout << it.first << " %% " << it.second << endl;
   EXPECT_EQ(params["odom/intrinsic/k_rot_to_rot"], "0.1");
-  EXPECT_EQ(params["processor1/sensor name"], "odom");
+  EXPECT_EQ(params["processor1/sensor_name"], "odom");
 }
 TEST(ParserYAML, ParseMap)
 {
@@ -37,14 +37,14 @@ TEST(ParserYAML, JumpFile)
 {
   auto parser = parse("test/yaml/params3.yaml", wolf_root);
   auto params = parser.getParams();
-  EXPECT_EQ(params["my_proc_test/extern params/max_buff_length"], "100");
-  EXPECT_EQ(params["my_proc_test/extern params/voting_active"], "false");
+  EXPECT_EQ(params["my_proc_test/extern_params/max_buff_length"], "100");
+  EXPECT_EQ(params["my_proc_test/extern_params/voting_active"], "false");
 }
 TEST(ParserYAML, ProblemConfig)
 {
   auto parser = parse("test/yaml/params2.yaml", wolf_root);
   auto params = parser.getParams();
-  EXPECT_EQ(params["problem/frame structure"], "POV");
+  EXPECT_EQ(params["problem/frame_structure"], "POV");
   EXPECT_EQ(params["problem/dimension"], "2");
 }
 int main(int argc, char **argv)
diff --git a/test/yaml/params1.yaml b/test/yaml/params1.yaml
index d7d066b53a333d6beb27b20d7eef7468b29f505e..e23b1a484986615060eff7a8d3ad05c2d7116d6d 100644
--- a/test/yaml/params1.yaml
+++ b/test/yaml/params1.yaml
@@ -1,6 +1,6 @@
 config:
   problem:
-    frame structure: "POV"
+    frame_structure: "POV"
     dimension: 3
   sensors: 
     -
@@ -10,7 +10,7 @@ config:
         k_disp_to_disp: 0.1
         k_rot_to_rot: 0.1 
       extrinsic:
-        pos: [1,2,3]
+        pose: [1,2,3]
     -
       type: "RANGE BEARING"
       name: "rb"
@@ -18,15 +18,15 @@ config:
     -
       type: "ODOM 2D"
       name: "processor1"
-      sensor name: "odom"
+      sensor_name: "odom"
     -
       type: "RANGE BEARING"
       name: "rb_processor"
-      sensor name: "rb"
+      sensor_name: "rb"
     -
       type: "ODOM 2D"
       name: "my_proc_test"
-      sensor name: "odom"
+      sensor_name: "odom"
       follow: "test/yaml/params3.1.yaml"
 files:
   - "/home/jcasals/workspace/wip/wolf/lib/libsensor_odo.so"
diff --git a/test/yaml/params2.yaml b/test/yaml/params2.yaml
index 7830e8cb85f9fef0acea46e81fa293ed7528fc5c..5825166a88c5383b3d7cc4e3264cf51e9605aa5e 100644
--- a/test/yaml/params2.yaml
+++ b/test/yaml/params2.yaml
@@ -1,6 +1,6 @@
 config:
   problem:
-    frame structure: "POV"
+    frame_structure: "POV"
     dimension: 2
   sensors: 
     -
@@ -10,7 +10,7 @@ config:
         k_disp_to_disp: 0.1
         k_rot_to_rot: 0.1 
       extrinsic:
-        pos: [1,2,3]
+        pose: [1,2,3]
     -
       type: "RANGE BEARING"
       name: "rb"
@@ -18,7 +18,7 @@ config:
     -
       type: "ODOM 2D"
       name: "processor1"
-      sensor name: "odom"
+      sensor_name: "odom"
       $mymap:
         k1: v1
         k2: v2
@@ -26,11 +26,11 @@ config:
     -
       type: "RANGE BEARING"
       name: "rb_processor"
-      sensor name: "rb"
+      sensor_name: "rb"
     -
       type: "ODOM 2D"
       name: "my_proc_test"
-      sensor name: "odom"
+      sensor_name: "odom"
 files:
   - "/home/jcasals/workspace/wip/wolf/lib/libsensor_odo.so"
   - "/home/jcasals/workspace/wip/wolf/lib/librange_bearing.so"
\ No newline at end of file
diff --git a/test/yaml/params3.yaml b/test/yaml/params3.yaml
index 3e0d7a40f9fce04d9f6976518fe3bb900dabdbf9..222fd91b45a9846d0f6b571db36f2f8b680591ae 100644
--- a/test/yaml/params3.yaml
+++ b/test/yaml/params3.yaml
@@ -1,6 +1,6 @@
 config:
   # problem:
-  #   frame structure: "POV"
+  #   frame_structure: "POV"
   #   dimension: 2
   sensors:
     -
@@ -10,10 +10,10 @@ config:
         k_disp_to_disp: 0.1
         k_rot_to_rot: 0.1
       extrinsic:
-        pos: [1,2,3]
+        pose: [1,2,3]
   processors:
     -
       type: "ODOM 2D"
       name: "my_proc_test"
-      sensor name: "odom"
-      extern params: "@test/yaml/params3.1.yaml"
\ No newline at end of file
+      sensor_name: "odom"
+      extern_params: "@test/yaml/params3.1.yaml"
\ No newline at end of file
diff --git a/test/yaml/processor_odom_3D.yaml b/test/yaml/processor_odom_3D.yaml
index f501e333800ec1bbb4b7c751a32aa67a99bec74c..6e81ac08b2c815a81f079df37bb38dec0fe11fa1 100644
--- a/test/yaml/processor_odom_3D.yaml
+++ b/test/yaml/processor_odom_3D.yaml
@@ -1,8 +1,11 @@
-processor type: "ODOM 3D"              # This must match the KEY used in the SensorFactory. Otherwise it is an error.
-processor name: "Main odometer"        # This is ignored. The name provided to the SensorFactory prevails
-time tolerance:         0.01  # seconds
-keyframe vote:
-    max time span:      0.2   # seconds
-    max buffer length:  10    # motion deltas
-    dist traveled:      0.5   # meters
-    angle turned:       0.1   # radians (1 rad approx 57 deg, approx 60 deg)
\ No newline at end of file
+type: "ODOM 3D"              # This must match the KEY used in the SensorFactory. Otherwise it is an error.
+name: "Main odometer"        # This is ignored. The name provided to the SensorFactory prevails
+time_tolerance:         0.01  # seconds
+
+voting_active:        false
+voting_aux_active:    false
+max_time_span:          0.2   # seconds
+max_buff_length:        10    # motion deltas
+dist_traveled:          0.5   # meters
+angle_turned:           0.1   # radians (1 rad approx 57 deg, approx 60 deg)
+unmeasured_perturbation_std: 0.001
\ No newline at end of file
diff --git a/test/yaml/sensor_odom_3D.yaml b/test/yaml/sensor_odom_3D.yaml
index 9ea77803548cfd9d033f54e40b6d92a72710afb8..d555856890c58947df326e514c5a60695cd49f6e 100644
--- a/test/yaml/sensor_odom_3D.yaml
+++ b/test/yaml/sensor_odom_3D.yaml
@@ -1,8 +1,8 @@
-sensor type: "ODOM 3D"              # This must match the KEY used in the SensorFactory. Otherwise it is an error.
-sensor name: "Main odometer"        # This is ignored. The name provided to the SensorFactory prevails
-motion variances: 
-    disp_to_disp:   0.02  # m^2   / m
-    disp_to_rot:    0.02  # rad^2 / m
-    rot_to_rot:     0.01  # rad^2 / rad
-    min_disp_var:   0.01  # m^2
-    min_rot_var:    0.01  # rad^2
+type: "ODOM 3D"              # This must match the KEY used in the SensorFactory. Otherwise it is an error.
+name: "Main odometer"        # This is ignored. The name provided to the SensorFactory prevails
+
+k_disp_to_disp:   0.02  # m^2   / m
+k_disp_to_rot:    0.02  # rad^2 / m
+k_rot_to_rot:     0.01  # rad^2 / rad
+min_disp_var:   0.01  # m^2
+min_rot_var:    0.01  # rad^2