diff --git a/storageaddsel.cpp b/storageaddsel.cpp
index 41f813c..4ed22fc 100644
--- a/storageaddsel.cpp
+++ b/storageaddsel.cpp
@@ -151,11 +151,9 @@
 
 int create_esel_association(const uint8_t* buffer, std::string& inventoryPath)
 {
-    uint8_t sensor;
-
     auto p = reinterpret_cast<const ipmi_add_sel_request_t*>(buffer);
 
-    sensor = p->sensornumber;
+    uint8_t sensor = p->sensornumber;
 
     inventoryPath = {};
 
@@ -163,13 +161,13 @@
      * Search the sensor number to inventory path mapping to figure out the
      * inventory associated with the ESEL.
      */
-    for (auto const& iter : invSensors)
+    auto found = std::find_if(invSensors.begin(), invSensors.end(),
+                              [&sensor](const auto& iter) {
+                                  return (iter.second.sensorID == sensor);
+                              });
+    if (found != invSensors.end())
     {
-        if (iter.second.sensorID == sensor)
-        {
-            inventoryPath = iter.first;
-            break;
-        }
+        inventoryPath = found->first;
     }
 
     return 0;
diff --git a/utils.cpp b/utils.cpp
index 225b1cc..06c26e8 100644
--- a/utils.cpp
+++ b/utils.cpp
@@ -4,6 +4,7 @@
 #include <dirent.h>
 #include <net/if.h>
 
+#include <algorithm>
 #include <phosphor-logging/elog-errors.hpp>
 #include <phosphor-logging/log.hpp>
 #include <xyz/openbmc_project/Common/error.hpp>
@@ -74,25 +75,20 @@
     }
 
     // else search the match string in the object path
-    auto objectFound = false;
-    for (auto& object : objectTree)
-    {
-        if (object.first.find(match) != std::string::npos)
-        {
-            objectFound = true;
-            objectInfo = make_pair(object.first,
-                                   std::move(object.second.begin()->first));
-            break;
-        }
-    }
+    auto found = std::find_if(
+        objectTree.begin(), objectTree.end(), [&match](const auto& object) {
+            return (object.first.find(match) != std::string::npos);
+        });
 
-    if (!objectFound)
+    if (found == objectTree.end())
     {
         log<level::ERR>("Failed to find object which matches",
                         entry("MATCH=%s", match.c_str()));
         elog<InternalFailure>();
+        // elog<> throws an exception.
     }
-    return objectInfo;
+
+    return make_pair(found->first, std::move(found->second.begin()->first));
 }
 
 DbusObjectInfo getIPObject(sdbusplus::bus::bus& bus,
