diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7b44aa9a1e1c984009d1678124e4407eb7dd0963..3f01f3a66f94d788656f3b1f47356e9d5c3f686a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -216,6 +216,7 @@ SET(SRCS_DTASSC
 SET(SRCS_SOLVER
   )
 SET(SRCS_YAML
+  src/yaml/processor_odom_ICP_yaml.cpp
   src/yaml/sensor_laser_2D_yaml.cpp
   )
 #OPTIONALS
diff --git a/demos/processor_odom_ICP.yaml b/demos/processor_odom_ICP.yaml
deleted file mode 100644
index eb285cccdf416654f0d6c6f7d7bd639262b58cd6..0000000000000000000000000000000000000000
--- a/demos/processor_odom_ICP.yaml
+++ /dev/null
@@ -1,24 +0,0 @@
-type                        : "ODOM ICP"
-
-# from processor base
-time_tolerance              : 0.1
-voting_active               : true
-voting_aux_active           : false
-
-# from  processor tracker
-min_features_for_keyframe   : 0
-max_new_features            : 0
-
-# from processor odom ICP
-use_point_to_line_distance  : true
-max_correspondence_dist     : 1
-max_iterations              : 5
-use_corr_tricks             : 1
-outliers_maxPerc            : 1
-outliers_adaptive_order     : 1
-outliers_adaptive_mult      : 1
-vfk_min_dist                : 1
-vfk_min_angle               : 1
-vfk_min_time                : 1
-vfk_min_error               : 1
-vfk_max_points              : 1
diff --git a/src/yaml/processor_odom_ICP_yaml.cpp b/src/yaml/processor_odom_ICP_yaml.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9a5557abad838122c9239b038e964f2cc66faa0d
--- /dev/null
+++ b/src/yaml/processor_odom_ICP_yaml.cpp
@@ -0,0 +1,64 @@
+/**
+ * \file processor_odom_ICP_yaml.cpp
+ *
+ *  Created on: Aug 6, 2019
+ *      \author: jsola
+ */
+
+
+// wolf
+#include "laser/processor/processor_odom_icp.h"
+#include "core/common/factory.h"
+
+// wolf yaml
+#include "core/yaml/yaml_conversion.h"
+
+// yaml library
+#include <yaml-cpp/yaml.h>
+
+namespace wolf
+{
+namespace {
+// intrinsics creator
+ProcessorParamsBasePtr createProcessorParamsOdomICP(const std::string& _filename_dot_yaml)
+{
+    WOLF_INFO("ProcessorParamsOdomICP: Parsing file: ", _filename_dot_yaml);
+
+    YAML::Node config = YAML::LoadFile(_filename_dot_yaml);
+
+    if (config["type"].as<std::string>() == "ODOM ICP")
+    {
+        ProcessorParamsOdomICPPtr params = std::make_shared<ProcessorParamsOdomICP>();
+
+        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->min_features_for_keyframe   = config["min_features_for_keyframe"]   .as<Scalar>();
+        params->max_new_features            = config["max_new_features"]            .as<SizeEigen  >();
+
+        params->use_point_to_line_distance  = config["use_point_to_line_distance"]  .as<int>();
+        params->max_correspondence_dist     = config["max_correspondence_dist"]     .as<int>();
+        params->max_iterations              = config["max_iterations"]              .as<int>();
+        params->use_corr_tricks             = config["use_corr_tricks"]             .as<int>();
+        params->outliers_maxPerc            = config["outliers_maxPerc"]            .as<Scalar>();
+        params->outliers_adaptive_order     = config["outliers_adaptive_order"]     .as<Scalar>();
+        params->outliers_adaptive_mult      = config["outliers_adaptive_mult"]      .as<Scalar>();
+        params->vfk_min_dist                = config["vfk_min_dist"]                .as<Scalar>();
+        params->vfk_min_angle               = config["vfk_min_angle"]               .as<Scalar>();
+        params->vfk_min_time                = config["vfk_min_time"]                .as<Scalar>();
+        params->vfk_min_error               = config["vfk_min_error"]               .as<Scalar>();
+        params->vfk_max_points              = config["vfk_max_points"]              .as<int>();
+
+        return params;
+    }
+
+    std::cout << "Bad configuration file. No processor type found." << std::endl;
+    return nullptr;
+}
+
+// register into factory
+const bool WOLF_UNUSED registered_odom_ICP_params = ProcessorParamsFactory::get().registerCreator("ODOM ICP", createProcessorParamsOdomICP);
+
+} // namespace [void]
+} // namespace wolf
diff --git a/test/gtest_processor_odom_icp.cpp b/test/gtest_processor_odom_icp.cpp
index 286a03e0c7325bb59ef1deeeace9906bd04a717c..30eb70c4760024cf161b040604a90af9c3e9adfe 100644
--- a/test/gtest_processor_odom_icp.cpp
+++ b/test/gtest_processor_odom_icp.cpp
@@ -6,7 +6,7 @@
  */
 
 #include "laser/processor/processor_odom_icp.h"
-
+#include "laser/internal/config.h"
 #include "core/utils/utils_gtest.h"
 
 using namespace wolf;
@@ -33,6 +33,19 @@ TEST(ProcessorOdomIcp, Constructor)
     ASSERT_EQ(prc->getType(), "ODOM ICP");
 }
 
+TEST(ProcessorOdomIcp, Constructor_yaml)
+{
+    std::string wolf_root = _WOLF_LASER_ROOT_DIR;
+
+    auto params = std::static_pointer_cast<ProcessorParamsOdomICP>(ProcessorParamsFactory::get().create("ODOM ICP", wolf_root + "/test/yaml/processor_odom_ICP.yaml"));
+    auto prc    = std::make_shared<ProcessorOdomICP>(params);
+
+    ASSERT_TRUE(prc); // not nullptr
+    ASSERT_EQ(prc->getType(), "ODOM ICP");
+}
+
+
+
 int main(int argc, char **argv)
 {
   testing::InitGoogleTest(&argc, argv);
diff --git a/test/yaml/processor_odom_ICP.yaml b/test/yaml/processor_odom_ICP.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..0a5677cca6dff3b53cce67225035c8e2f536b1fc
--- /dev/null
+++ b/test/yaml/processor_odom_ICP.yaml
@@ -0,0 +1,24 @@
+type                        : "ODOM ICP"
+
+# from processor base
+time_tolerance              : 0.1
+voting_active               : true
+voting_aux_active           : false
+
+# from  processor tracker
+min_features_for_keyframe   : 0
+max_new_features            : 0
+
+# from processor odom ICP
+use_point_to_line_distance  : 1
+max_correspondence_dist     : 2
+max_iterations              : 3
+use_corr_tricks             : 4
+outliers_maxPerc            : 5
+outliers_adaptive_order     : 6
+outliers_adaptive_mult      : 7
+vfk_min_dist                : 8
+vfk_min_angle               : 9
+vfk_min_time                : 10
+vfk_min_error               : 11
+vfk_max_points              : 12