diff --git a/interfaces/internal_interface.cpp b/interfaces/internal_interface.cpp
index 95a61e9..917b8ec 100644
--- a/interfaces/internal_interface.cpp
+++ b/interfaces/internal_interface.cpp
@@ -31,36 +31,21 @@
     bus(bus), serverInterface(bus, path, internalInterface, vtable.data(), this)
 {}
 
-void InternalInterface::getLedDescr(const std::string& name, LedDescr& ledDescr)
-{
-    std::vector<std::string> words;
-    boost::split(words, name, boost::is_any_of(":"));
-    try
-    {
-        ledDescr.devicename = words.at(0);
-        ledDescr.color = words.at(1);
-        ledDescr.function = words.at(2);
-    }
-    catch (const std::out_of_range& e)
-    {
-        lg2::warning("LED description {DESC} not well formed, error {ERR}",
-                     "DESC", name, "ERR", e.what());
-        throw e;
-    }
-}
-
 std::string InternalInterface::getDbusName(const LedDescr& ledDescr)
 {
     std::vector<std::string> words;
-    words.emplace_back(ledDescr.devicename);
-    if (!ledDescr.function.empty())
+    if (ledDescr.devicename.has_value())
     {
-        words.emplace_back(ledDescr.function);
+        words.emplace_back(ledDescr.devicename.value());
+    }
+    if (ledDescr.function.has_value())
+    {
+        words.emplace_back(ledDescr.function.value());
     }
 
-    if (!ledDescr.color.empty())
+    if (ledDescr.color.has_value())
     {
-        words.emplace_back(ledDescr.color);
+        words.emplace_back(ledDescr.color.value());
     }
 
     std::string s = boost::join(words, "_");
@@ -81,17 +66,11 @@
         return;
     }
 
+    auto sled = std::make_unique<phosphor::led::SysfsLed>(fs::path(path));
+
     // Convert LED name in sysfs into DBus name
-    LedDescr ledDescr;
-    try
-    {
-        getLedDescr(ledName, ledDescr);
-    }
-    catch (...)
-    {
-        // Ignore the error, for simple LED which was not added in 3-part form.
-        // The simple LED can appear with it's plain name
-    }
+    const LedDescr ledDescr = sled->getLedDescr();
+
     name = getDbusName(ledDescr);
 
     lg2::debug("LED {NAME} receives dbus name {DBUSNAME}", "NAME", ledName,
@@ -106,10 +85,9 @@
         return;
     }
 
-    auto sled = std::make_unique<phosphor::led::SysfsLed>(fs::path(path));
-
     leds.emplace(objPath, std::make_unique<phosphor::led::Physical>(
-                              bus, objPath, std::move(sled), ledDescr.color));
+                              bus, objPath, std::move(sled),
+                              ledDescr.color.value_or("")));
 }
 
 void InternalInterface::addLED(const std::string& name)
diff --git a/interfaces/internal_interface.hpp b/interfaces/internal_interface.hpp
index 25d530d..a588226 100644
--- a/interfaces/internal_interface.hpp
+++ b/interfaces/internal_interface.hpp
@@ -13,7 +13,6 @@
 static constexpr auto busName = "xyz.openbmc_project.LED.Controller";
 static constexpr auto ledPath = "/xyz/openbmc_project/led";
 static constexpr auto physParent = "/xyz/openbmc_project/led/physical";
-static constexpr auto devParent = "/sys/class/leds/";
 static constexpr auto internalInterface =
     "xyz.openbmc_project.Led.Sysfs.Internal";
 static constexpr auto ledAddMethod = "AddLED";
@@ -73,17 +72,6 @@
         leds;
 
     /**
-     *  @brief Structure to define the LED sysfs name
-     */
-
-    struct LedDescr
-    {
-        std::string devicename;
-        std::string color;
-        std::string function;
-    };
-
-    /**
      *  @brief sdbusplus D-Bus connection.
      */
 
@@ -125,18 +113,6 @@
 
     void createLEDPath(const std::string& ledName);
 
-    /** @brief Parse LED name in sysfs
-     *
-     *  Parse sysfs LED name in format "devicename:colour:function"
-     *  or "devicename:colour" or "devicename" and sets corresponding
-     *  fields in LedDescr struct.
-     *
-     *  @param[in] name      - LED name in sysfs
-     *  @param[out] ledDescr - LED description
-     */
-
-    static void getLedDescr(const std::string& name, LedDescr& ledDescr);
-
     /** @brief Generates LED DBus name from LED description
      *
      *  @param[in] name      - LED description
