diff --git a/src/mdrv2.cpp b/src/mdrv2.cpp
index 9a73c65..c1bc09d 100644
--- a/src/mdrv2.cpp
+++ b/src/mdrv2.cpp
@@ -35,8 +35,9 @@
     if (dirIndex > smbiosDir.dirEntries)
     {
         responseDir.push_back(0);
-        throw sdbusplus::xyz::openbmc_project::Smbios::MDR_V2::Error::
-            InvalidParameter();
+        phosphor::logging::log<phosphor::logging::level::ERR>(
+            "getDirectoryInformation: Invalid Parameter");
+        return responseDir;
     }
     responseDir.push_back(mdr2Version);
     responseDir.push_back(smbiosDir.dirVersion);
@@ -117,8 +118,6 @@
     {
         phosphor::logging::log<phosphor::logging::level::ERR>(
             "smbios is not ready for update");
-        throw sdbusplus::xyz::openbmc_project::Smbios::MDR_V2::Error::
-            UpdateInProgress();
     }
     return offer;
 }
@@ -173,8 +172,9 @@
 
     if (idIndex >= maxDirEntries)
     {
-        throw sdbusplus::xyz::openbmc_project::Smbios::MDR_V2::Error::
-            InvalidParameter();
+        phosphor::logging::log<phosphor::logging::level::ERR>(
+            "getDataInformation: Invalid Parameter");
+        return responseInfo;
     }
 
     for (uint8_t index = 0; index < sizeof(DataIdStruct); index++)
@@ -253,15 +253,13 @@
     {
         phosphor::logging::log<phosphor::logging::level::ERR>(
             "Send Dir info failed - input parameter invalid");
-        throw sdbusplus::xyz::openbmc_project::Smbios::MDR_V2::Error::
-            InvalidParameter();
+        return teminate;
     }
     if (dirEntry.size() < sizeof(Mdr2DirEntry))
     {
         phosphor::logging::log<phosphor::logging::level::ERR>(
             "Directory size invalid");
-        throw sdbusplus::xyz::openbmc_project::Smbios::MDR_V2::Error::
-            InvalidParameter();
+        return teminate;
     }
     if (dirVersion == smbiosDir.dirVersion)
     {
@@ -307,8 +305,9 @@
 {
     if (idIndex >= maxDirEntries)
     {
-        throw sdbusplus::xyz::openbmc_project::Smbios::MDR_V2::Error::
-            InvalidParameter();
+        phosphor::logging::log<phosphor::logging::level::ERR>(
+            "sendDataInformation:  Invalid Parameter");
+        return false;
     }
     int entryChanged = 0;
     if (smbiosDir.dir[idIndex].common.dataSetSize != dataLen)
@@ -341,8 +340,7 @@
     {
         phosphor::logging::log<phosphor::logging::level::ERR>(
             "Length of dataInfo invalid");
-        throw sdbusplus::xyz::openbmc_project::Smbios::MDR_V2::Error::
-            InvalidParameter();
+        return -1;
     }
     std::array<uint8_t, 16> arrayDataInfo;
 
@@ -364,7 +362,9 @@
             return index;
         }
     }
-    throw sdbusplus::xyz::openbmc_project::Smbios::MDR_V2::Error::InvalidId();
+    phosphor::logging::log<phosphor::logging::level::ERR>(
+        "findIdIndex: Invalid ID");
+    return -1;
 }
 
 uint8_t MDR_V2::directoryEntries(uint8_t value)
@@ -546,7 +546,9 @@
 
         if (dataIn == nullptr)
         {
-            throw std::runtime_error("Data not populated");
+            phosphor::logging::log<phosphor::logging::level::ERR>(
+                "Data not populated");
+            return ret;
         }
 
         do
@@ -617,7 +619,8 @@
         return ret;
     }
 
-    throw std::invalid_argument("Invalid record type");
+    phosphor::logging::log<phosphor::logging::level::ERR>(
+        "Invalid record type");
     return ret;
 }
 
