diff --git a/src/associations.cpp b/src/associations.cpp
index 306afe5..75457d9 100644
--- a/src/associations.cpp
+++ b/src/associations.cpp
@@ -128,7 +128,7 @@
             // changed.
             boost::container::flat_set<std::string> toRemove;
 
-            for (auto& originalEndpoint : originalEndpoints)
+            for (const auto& originalEndpoint : originalEndpoints)
             {
                 if (std::find(newEndpoints->second.begin(),
                               newEndpoints->second.end(),
@@ -156,7 +156,7 @@
     auto& endpoints = std::get<endpointsPos>(iface);
 
     // Only add new endpoints
-    for (auto& e : endpointPaths)
+    for (const auto& e : endpointPaths)
     {
         if (std::find(endpoints.begin(), endpoints.end(), e) == endpoints.end())
         {
@@ -190,30 +190,30 @@
     {
         std::string forward;
         std::string reverse;
-        std::string endpoint;
-        std::tie(forward, reverse, endpoint) = association;
+        std::string objectPath;
+        std::tie(forward, reverse, objectPath) = association;
 
-        if (endpoint.empty())
+        if (objectPath.empty())
         {
             std::cerr << "Found invalid association on path " << path << "\n";
             continue;
         }
 
         // Can't create this association if the endpoint isn't on D-Bus.
-        if (interfaceMap.find(endpoint) == interfaceMap.end())
+        if (interfaceMap.find(objectPath) == interfaceMap.end())
         {
-            addPendingAssociation(endpoint, reverse, path, forward, owner,
+            addPendingAssociation(objectPath, reverse, path, forward, owner,
                                   assocMaps);
             continue;
         }
 
-        if (forward.size())
+        if (!forward.empty())
         {
-            objects[path + "/" + forward].emplace(endpoint);
+            objects[path + "/" + forward].emplace(objectPath);
         }
-        if (reverse.size())
+        if (!reverse.empty())
         {
-            objects[endpoint + "/" + reverse].emplace(path);
+            objects[objectPath + "/" + reverse].emplace(path);
         }
     }
     for (const auto& object : objects)
@@ -415,10 +415,9 @@
             // exception is thrown. mapper has no control of the interface/path
             // of the associations, so it has to catch the error and drop the
             // association request.
-            fprintf(stderr,
-                    "Error adding association: assocPath %s, endpointPath %s, "
-                    "what: %s\n",
-                    assocPath.c_str(), endpointPath.c_str(), e.what());
+            std::cerr << "Error adding association: assocPath " << assocPath
+                      << ", endpointPath " << endpointPath
+                      << ", what: " << e.what() << "\n";
         }
 
         // Not pending anymore
diff --git a/src/main.cpp b/src/main.cpp
index 69ab8e1..c969777 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -17,6 +17,7 @@
 #include <chrono>
 #include <iomanip>
 #include <iostream>
+#include <utility>
 
 AssociationMaps associationMaps;
 
@@ -61,6 +62,11 @@
 
 struct InProgressIntrospect
 {
+    InProgressIntrospect() = delete;
+    InProgressIntrospect(const InProgressIntrospect&) = delete;
+    InProgressIntrospect(InProgressIntrospect&&) = delete;
+    InProgressIntrospect& operator=(const InProgressIntrospect&) = delete;
+    InProgressIntrospect& operator=(InProgressIntrospect&&) = delete;
     InProgressIntrospect(
         sdbusplus::asio::connection* systemBus, boost::asio::io_context& io,
         const std::string& processName, AssociationMaps& am
@@ -74,7 +80,7 @@
         io(io), processName(processName), assocMaps(am)
 #ifdef DEBUG
         ,
-        globalStartTime(globalStartTime),
+        globalStartTime(std::move(globalStartTime)),
         processStartTime(std::chrono::steady_clock::now())
 #endif
     {}
@@ -142,10 +148,10 @@
 }
 
 void doIntrospect(sdbusplus::asio::connection* systemBus,
-                  std::shared_ptr<InProgressIntrospect> transaction,
+                  const std::shared_ptr<InProgressIntrospect>& transaction,
                   InterfaceMapType& interfaceMap,
                   sdbusplus::asio::object_server& objectServer,
-                  std::string path, int timeoutRetries = 0)
+                  const std::string& path, int timeoutRetries = 0)
 {
     constexpr int maxTimeoutRetries = 3;
     systemBus->async_method_call(
@@ -440,16 +446,16 @@
     {
         reqPath.pop_back();
     }
-    if (reqPath.size() && interfaceMap.find(reqPath) == interfaceMap.end())
+    if (!reqPath.empty() && interfaceMap.find(reqPath) == interfaceMap.end())
     {
         throw sdbusplus::xyz::openbmc_project::Common::Error::
             ResourceNotFound();
     }
 
     std::vector<InterfaceMapType::value_type> ret;
-    for (auto& objectPath : interfaceMap)
+    for (const auto& objectPath : interfaceMap)
     {
-        auto& thisPath = objectPath.first;
+        const auto& thisPath = objectPath.first;
         if (boost::starts_with(reqPath, thisPath) && (reqPath != thisPath))
         {
             if (interfaces.empty())
@@ -458,7 +464,7 @@
             }
             else
             {
-                for (auto& interfaceMap : objectPath.second)
+                for (const auto& interfaceMap : objectPath.second)
                 {
                     if (intersect(interfaces.begin(), interfaces.end(),
                                   interfaceMap.second.begin(),
@@ -494,7 +500,7 @@
     {
         return pathRef->second;
     }
-    for (auto& interfaceMap : pathRef->second)
+    for (const auto& interfaceMap : pathRef->second)
     {
         if (intersect(interfaces.begin(), interfaces.end(),
                       interfaceMap.second.begin(), interfaceMap.second.end()))
@@ -528,15 +534,15 @@
     {
         reqPath.pop_back();
     }
-    if (reqPath.size() && interfaceMap.find(reqPath) == interfaceMap.end())
+    if (!reqPath.empty() && interfaceMap.find(reqPath) == interfaceMap.end())
     {
         throw sdbusplus::xyz::openbmc_project::Common::Error::
             ResourceNotFound();
     }
 
-    for (auto& objectPath : interfaceMap)
+    for (const auto& objectPath : interfaceMap)
     {
-        auto& thisPath = objectPath.first;
+        const auto& thisPath = objectPath.first;
 
         if (thisPath == reqPath)
         {
@@ -550,7 +556,7 @@
                                            thisPath.end(), '/');
             if (thisDepth <= depth)
             {
-                for (auto& interfaceMap : objectPath.second)
+                for (const auto& interfaceMap : objectPath.second)
                 {
                     if (intersect(interfaces.begin(), interfaces.end(),
                                   interfaceMap.second.begin(),
@@ -583,15 +589,15 @@
     {
         reqPath.pop_back();
     }
-    if (reqPath.size() && interfaceMap.find(reqPath) == interfaceMap.end())
+    if (!reqPath.empty() && interfaceMap.find(reqPath) == interfaceMap.end())
     {
         throw sdbusplus::xyz::openbmc_project::Common::Error::
             ResourceNotFound();
     }
 
-    for (auto& objectPath : interfaceMap)
+    for (const auto& objectPath : interfaceMap)
     {
-        auto& thisPath = objectPath.first;
+        const auto& thisPath = objectPath.first;
 
         if (thisPath == reqPath)
         {
@@ -606,7 +612,7 @@
             if (thisDepth <= depth)
             {
                 bool add = interfaces.empty();
-                for (auto& interfaceMap : objectPath.second)
+                for (const auto& interfaceMap : objectPath.second)
                 {
                     if (intersect(interfaces.begin(), interfaces.end(),
                                   interfaceMap.second.begin(),
diff --git a/src/test/util/debug_output.hpp b/src/test/util/debug_output.hpp
index 3cdf42b..ea0ebf9 100644
--- a/src/test/util/debug_output.hpp
+++ b/src/test/util/debug_output.hpp
@@ -8,20 +8,20 @@
 {
     using namespace std;
     cout << "##### AssociationOwnersType #####" << endl;
-    for (auto i : assocOwners)
+    for (const auto& i : assocOwners)
     {
         cout << "------------------------------------" << endl;
         cout << setw(15) << left << "OBJ PATH:" << i.first << endl;
 
-        for (auto j : i.second)
+        for (const auto& j : i.second)
         {
             cout << setw(16) << left << "DBUS SERVICE:" << j.first << endl;
 
-            for (auto k : j.second)
+            for (const auto& k : j.second)
             {
                 cout << setw(17) << left << "ASSOC PATH:" << k.first << endl;
 
-                for (auto l : k.second)
+                for (const auto& l : k.second)
                 {
                     cout << setw(18) << left << "ENDPOINT:" << l << endl;
                 }
@@ -41,7 +41,7 @@
         cout << setw(15) << left << "OBJ PATH:" << i.first << endl;
         auto intfEndpoints = std::get<endpointsPos>(i.second);
 
-        for (auto k : intfEndpoints)
+        for (const auto& k : intfEndpoints)
         {
             cout << setw(16) << left << "ENDPOINTS:" << k << endl;
         }
@@ -53,16 +53,16 @@
 {
     using namespace std;
     cout << "##### interfaceMapType #####" << endl;
-    for (auto i : intfMap)
+    for (const auto& i : intfMap)
     {
         cout << "------------------------------------" << endl;
         cout << setw(15) << left << "OBJ PATH:" << i.first << endl;
 
-        for (auto j : i.second)
+        for (const auto& j : i.second)
         {
             cout << setw(16) << left << "DBUS SERVICE:" << j.first << endl;
 
-            for (auto k : j.second)
+            for (const auto& k : j.second)
             {
                 cout << setw(18) << left << "INTERFACE:" << k << endl;
             }
