diff --git a/algo/CMakeLists.txt b/algo/CMakeLists.txt
index 1ebaa65559c3f4dba35928d617ef6901e1e3cd8b..eabd850ac8d6239138405068a08ce7106a6a535f 100644
--- a/algo/CMakeLists.txt
+++ b/algo/CMakeLists.txt
@@ -77,6 +77,7 @@ target_link_libraries(Algo
             fmt::fmt
             Boost::program_options
             Boost::filesystem
+            Boost::headers
             xpu
             external::yaml-cpp
             external::fles_logging
@@ -88,6 +89,7 @@ xpu_attach(Algo ${DEVICE_SRCS})
 install(TARGETS Algo DESTINATION lib)
 install(DIRECTORY base/compat TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
 install(DIRECTORY base/config TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
+install(DIRECTORY base/util TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
 install(DIRECTORY base/gpu TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
 install(DIRECTORY data/sts TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
 
diff --git a/algo/base/util/SerializableEnum.h b/algo/base/util/SerializableEnum.h
index 8921b3ef7936048d695ae9e8872ff7091269eced..84ffd80482aa98e40c6b7e086a1556b829c28485 100644
--- a/algo/base/util/SerializableEnum.h
+++ b/algo/base/util/SerializableEnum.h
@@ -4,6 +4,8 @@
 #ifndef CBM_ALGO_BASE_UTIL_SERIALIZABLEENUM_H
 #define CBM_ALGO_BASE_UTIL_SERIALIZABLEENUM_H
 
+#include <boost/algorithm/string/predicate.hpp>
+
 #include <algorithm>
 #include <iostream>
 #include <optional>
@@ -59,10 +61,14 @@ namespace cbm::algo
   inline const EnumDict_t<T> EnumDict;
 
   template<typename T, typename = std::enable_if_t<EnumIsSerializable<T>::value>>
-  std::optional<T> FromString(std::string_view str)
+  std::optional<T> FromString(std::string_view str, bool caseSensitive = false)
   {
     const auto& set = EnumDict<T>;
-    auto it         = std::find_if(set.begin(), set.end(), [str](const auto& pair) { return pair.first == str; });
+    auto it         = std::find_if(set.begin(), set.end(), [&](const auto& pair) {
+      if (caseSensitive) return pair.first == str;
+      else
+        return boost::iequals(pair.first, str);
+    });
     if (it == set.end()) return std::nullopt;
     return it->second;
   }