diff --git a/include/appcommands.hpp b/include/appcommands.hpp
index d5b00b9..d350139 100644
--- a/include/appcommands.hpp
+++ b/include/appcommands.hpp
@@ -33,6 +33,8 @@
 
 static constexpr const char *versionPurposeBMC =
     "xyz.openbmc_project.Software.Version.VersionPurpose.BMC";
+static constexpr const char *versionPurposeME =
+    "xyz.openbmc_project.Software.Version.VersionPurpose.ME";
 
 extern int getActiveSoftwareVersionInfo(ipmi::Context::ptr ctx,
                                         const std::string &reqVersionPurpose,
diff --git a/src/oemcommands.cpp b/src/oemcommands.cpp
index 55f9568..b87a2ab 100644
--- a/src/oemcommands.cpp
+++ b/src/oemcommands.cpp
@@ -316,38 +316,22 @@
     }
 
     // step 2 : get ME Major and Minor numbers from its DBUS property
-    try
+    std::string meVersion;
+    if (getActiveSoftwareVersionInfo(ctx, versionPurposeME, meVersion))
     {
-        std::shared_ptr<sdbusplus::asio::connection> dbus = getSdBus();
-        std::string service =
-            getService(*dbus, "xyz.openbmc_project.Software.Version",
-                       "/xyz/openbmc_project/software/me");
-        Value variant =
-            getDbusProperty(*dbus, service, "/xyz/openbmc_project/software/me",
-                            "xyz.openbmc_project.Software.Version", "Version");
-
-        std::string& meVersion = std::get<std::string>(variant);
-
-        // get ME major number
-        std::regex pattern1("(\\d+?).(\\d+?).(\\d+?).(\\d+?).(\\d+?)");
-        constexpr size_t matchedPhosphor = 6;
-        std::smatch results;
-        if (std::regex_match(meVersion, results, pattern1))
-        {
-            if (results.size() == matchedPhosphor)
-            {
-                meMajor = static_cast<uint8_t>(std::stoi(results[1]));
-                meMinor = static_cast<uint8_t>(std::stoi(results[2]));
-            }
-        }
-    }
-    catch (sdbusplus::exception::SdBusError& e)
-    {
-        phosphor::logging::log<phosphor::logging::level::ERR>(
-            "Exception caught in ME version conversion",
-            phosphor::logging::entry("MSG=%s", e.what()));
         return false;
     }
+    std::regex pattern1("(\\d+?).(\\d+?).(\\d+?).(\\d+?).(\\d+?)");
+    constexpr size_t matchedPhosphor = 6;
+    std::smatch results;
+    if (std::regex_match(meVersion, results, pattern1))
+    {
+        if (results.size() == matchedPhosphor)
+        {
+            meMajor = static_cast<uint8_t>(std::stoi(results[1]));
+            meMinor = static_cast<uint8_t>(std::stoi(results[2]));
+        }
+    }
     return true;
 }
 
