diff --git a/manager.cpp b/manager.cpp
index bcc581c..36ff351 100644
--- a/manager.cpp
+++ b/manager.cpp
@@ -50,14 +50,6 @@
 const std::set<std::string>
 Manager::managedProperties = {PROPERTY_TIME_MODE, PROPERTY_TIME_OWNER};
 
-const std::map<std::string, Owner> Manager::ownerMap =
-{
-    { "BMC", Owner::BMC },
-    { "HOST", Owner::HOST },
-    { "SPLIT", Owner::SPLIT },
-    { "BOTH", Owner::BOTH },
-};
-
 Manager::Manager(sdbusplus::bus::bus& bus)
     : bus(bus),
       propertyChangeMatch(bus, MATCH_PROPERTY_CHANGE, onPropertyChanged, this),
@@ -89,12 +81,12 @@
     auto mode = utils::readData<std::string>(modeFile);
     if (!mode.empty())
     {
-        timeMode = convertToMode(mode);
+        timeMode = utils::strToMode(mode);
     }
     auto owner = utils::readData<std::string>(ownerFile);
     if (!owner.empty())
     {
-        timeOwner = convertToOwner(owner);
+        timeOwner = utils::strToOwner(owner);
     }
 }
 
@@ -291,7 +283,7 @@
 
 bool Manager::setCurrentTimeMode(const std::string& mode)
 {
-    auto newMode = convertToMode(mode);
+    auto newMode = utils::strToMode(mode);
     if (newMode != timeMode)
     {
         log<level::INFO>("Time mode is changed",
@@ -308,7 +300,7 @@
 
 bool Manager::setCurrentTimeOwner(const std::string& owner)
 {
-    auto newOwner = convertToOwner(owner);
+    auto newOwner = utils::strToOwner(owner);
     if (newOwner != timeOwner)
     {
         log<level::INFO>("Time owner is changed",
@@ -351,35 +343,5 @@
         value);
 }
 
-Mode Manager::convertToMode(const std::string& mode)
-{
-    if (mode == "NTP")
-    {
-        return Mode::NTP;
-    }
-    else if (mode == "MANUAL")
-    {
-        return Mode::MANUAL;
-    }
-    else
-    {
-        log<level::ERR>("Unrecognized mode",
-                        entry("%s", mode.c_str()));
-        return Mode::NTP;
-    }
-}
-
-Owner Manager::convertToOwner(const std::string& owner)
-{
-    auto it = ownerMap.find(owner);
-    if (it == ownerMap.end())
-    {
-        log<level::ERR>("Unrecognized owner",
-                        entry("%s", owner.c_str()));
-        return Owner::BMC;
-    }
-    return it->second;
-}
-
 }
 }
