diff --git a/extensions/openpower-pels/data_interface.hpp b/extensions/openpower-pels/data_interface.hpp
index 2469bb5..fc902a0 100644
--- a/extensions/openpower-pels/data_interface.hpp
+++ b/extensions/openpower-pels/data_interface.hpp
@@ -362,7 +362,7 @@
                 {
                     func(_hostUp);
                 }
-                catch (std::exception& e)
+                catch (const std::exception& e)
                 {
                     using namespace phosphor::logging;
                     log<level::ERR>("A host state change callback threw "
diff --git a/extensions/openpower-pels/event_logger.hpp b/extensions/openpower-pels/event_logger.hpp
index d1736cc..eed2b81 100644
--- a/extensions/openpower-pels/event_logger.hpp
+++ b/extensions/openpower-pels/event_logger.hpp
@@ -140,7 +140,7 @@
             _creator(std::get<msgPos>(event), std::get<levelPos>(event),
                      std::get<adPos>(event).getData());
         }
-        catch (std::exception& e)
+        catch (const std::exception& e)
         {
             phosphor::logging::log<phosphor::logging::level::ERR>(
                 "EventLogger's create function threw an exception",
diff --git a/extensions/openpower-pels/failing_mtms.cpp b/extensions/openpower-pels/failing_mtms.cpp
index 386f496..0e82bd0 100644
--- a/extensions/openpower-pels/failing_mtms.cpp
+++ b/extensions/openpower-pels/failing_mtms.cpp
@@ -49,7 +49,7 @@
         unflatten(pel);
         validate();
     }
-    catch (std::exception& e)
+    catch (const std::exception& e)
     {
         log<level::ERR>("Cannot unflatten failing MTM section",
                         entry("ERROR=%s", e.what()));
diff --git a/extensions/openpower-pels/manager.cpp b/extensions/openpower-pels/manager.cpp
index facaabb..751d15d 100644
--- a/extensions/openpower-pels/manager.cpp
+++ b/extensions/openpower-pels/manager.cpp
@@ -181,7 +181,7 @@
             auto policy = service_indicators::getPolicy(*_dataIface);
             policy->activate(*pel);
         }
-        catch (std::exception& e)
+        catch (const std::exception& e)
         {
             // Probably a full or r/o filesystem, not much we can do.
             log<level::ERR>("Unable to add PEL to Repository",
@@ -236,7 +236,7 @@
     {
         data = std::move(eselToRawData(esel));
     }
-    catch (std::exception& e)
+    catch (const std::exception& e)
     {
         // Try to add it below anyway, so it follows the usual bad data path.
         log<level::ERR>("Problems converting ESEL string to a byte vector");
@@ -407,7 +407,7 @@
     {
         fd = _repo.getPELFD(id);
     }
-    catch (std::exception& e)
+    catch (const std::exception& e)
     {
         throw common_error::InternalFailure();
     }
@@ -446,7 +446,7 @@
     {
         data = _repo.getPELData(id);
     }
-    catch (std::exception& e)
+    catch (const std::exception& e)
     {
         throw common_error::InternalFailure();
     }
diff --git a/extensions/openpower-pels/pel.cpp b/extensions/openpower-pels/pel.cpp
index a6e4d3d..891436d 100644
--- a/extensions/openpower-pels/pel.cpp
+++ b/extensions/openpower-pels/pel.cpp
@@ -619,7 +619,7 @@
             }
         }
     }
-    catch (std::exception& e)
+    catch (const std::exception& e)
     {
     }
 
diff --git a/extensions/openpower-pels/registry.cpp b/extensions/openpower-pels/registry.cpp
index 34ff268..3f4462f 100644
--- a/extensions/openpower-pels/registry.cpp
+++ b/extensions/openpower-pels/registry.cpp
@@ -694,7 +694,7 @@
 
             return entry;
         }
-        catch (std::exception& e)
+        catch (const std::exception& e)
         {
             log<level::ERR>("Found invalid message registry field",
                             entry("ERROR=%s", e.what()));
@@ -726,7 +726,7 @@
     {
         registry = nlohmann::json::parse(file);
     }
-    catch (std::exception& e)
+    catch (const std::exception& e)
     {
         log<level::ERR>("Error parsing message registry JSON",
                         entry("JSON_ERROR=%s", e.what()));
diff --git a/extensions/openpower-pels/repository.cpp b/extensions/openpower-pels/repository.cpp
index 6b9408f..1e9bd6f 100644
--- a/extensions/openpower-pels/repository.cpp
+++ b/extensions/openpower-pels/repository.cpp
@@ -105,7 +105,7 @@
                     {
                         write(pel, dirEntry.path());
                     }
-                    catch (std::exception& e)
+                    catch (const std::exception& e)
                     {
                         log<level::ERR>(
                             "Failed to save PEL after updating host state",
@@ -138,7 +138,7 @@
                 fs::remove(dirEntry.path());
             }
         }
-        catch (std::exception& e)
+        catch (const std::exception& e)
         {
             log<level::ERR>("Hit exception while restoring PEL File",
                             entry("FILENAME=%s", dirEntry.path().c_str()),
@@ -334,7 +334,7 @@
                 break;
             }
         }
-        catch (std::exception& e)
+        catch (const std::exception& e)
         {
             log<level::ERR>("Repository::for_each function exception",
                             entry("ERROR=%s", e.what()));
@@ -350,7 +350,7 @@
         {
             func(pel);
         }
-        catch (std::exception& e)
+        catch (const std::exception& e)
         {
             log<level::ERR>("PEL Repository add callback exception",
                             entry("NAME=%s", name.c_str()),
@@ -367,7 +367,7 @@
         {
             func(id);
         }
-        catch (std::exception& e)
+        catch (const std::exception& e)
         {
             log<level::ERR>("PEL Repository delete callback exception",
                             entry("NAME=%s", name.c_str()),
@@ -406,7 +406,7 @@
 
             attr->second.hostState = state;
         }
-        catch (std::exception& e)
+        catch (const std::exception& e)
         {
             log<level::ERR>("Unable to update PEL host transmission state",
                             entry("PATH=%s", attr->second.path.c_str()),
@@ -433,7 +433,7 @@
 
             attr->second.hmcState = state;
         }
-        catch (std::exception& e)
+        catch (const std::exception& e)
         {
             log<level::ERR>("Unable to update PEL HMC transmission state",
                             entry("PATH=%s", attr->second.path.c_str()),
diff --git a/extensions/openpower-pels/sbe_ffdc_handler.cpp b/extensions/openpower-pels/sbe_ffdc_handler.cpp
index 4415028..2fe5261 100644
--- a/extensions/openpower-pels/sbe_ffdc_handler.cpp
+++ b/extensions/openpower-pels/sbe_ffdc_handler.cpp
@@ -56,7 +56,7 @@
     {
         procPos = std::stoi((src6.value()).substr(0, 4));
     }
-    catch (std::exception& err)
+    catch (const std::exception& err)
     {
         log<level::ERR>(
             fmt::format("Conversion failure errormsg({})", err.what()).c_str());
diff --git a/extensions/openpower-pels/src.cpp b/extensions/openpower-pels/src.cpp
index a9f1b7f..a8694f2 100644
--- a/extensions/openpower-pels/src.cpp
+++ b/extensions/openpower-pels/src.cpp
@@ -218,7 +218,7 @@
                         return prettyJSON(json);
                     }
                 }
-                catch (std::exception& e)
+                catch (const std::exception& e)
                 {
                     log<level::ERR>("Bad JSON from parser",
                                     entry("ERROR=%s", e.what()),
@@ -420,7 +420,7 @@
             ccin = std::stoi(ccinString, 0, 16);
         }
     }
-    catch (std::exception& e)
+    catch (const std::exception& e)
     {
         log<level::WARNING>("Could not convert motherboard CCIN to a number",
                             entry("CCIN=%s", ccinString.c_str()));
@@ -953,7 +953,7 @@
             }
         }
     }
-    catch (std::exception& e)
+    catch (const std::exception& e)
     {
         std::string msg =
             "Error parsing PEL message registry callout JSON: "s + e.what();
diff --git a/extensions/openpower-pels/tools/peltool.cpp b/extensions/openpower-pels/tools/peltool.cpp
index 5a2abf7..1e8c5b4 100644
--- a/extensions/openpower-pels/tools/peltool.cpp
+++ b/extensions/openpower-pels/tools/peltool.cpp
@@ -85,7 +85,7 @@
         {
             tmp.yearMSB = std::stoul(token.substr(i, 2), 0, 16);
         }
-        catch (std::exception& err)
+        catch (const std::exception& err)
         {
             std::cout << "Conversion failure: " << err.what() << std::endl;
         }
@@ -94,7 +94,7 @@
         {
             tmp.yearLSB = std::stoul(token.substr(i, 2), 0, 16);
         }
-        catch (std::exception& err)
+        catch (const std::exception& err)
         {
             std::cout << "Conversion failure: " << err.what() << std::endl;
         }
@@ -103,7 +103,7 @@
         {
             tmp.month = std::stoul(token.substr(i, 2), 0, 16);
         }
-        catch (std::exception& err)
+        catch (const std::exception& err)
         {
             std::cout << "Conversion failure: " << err.what() << std::endl;
         }
@@ -112,7 +112,7 @@
         {
             tmp.day = std::stoul(token.substr(i, 2), 0, 16);
         }
-        catch (std::exception& err)
+        catch (const std::exception& err)
         {
             std::cout << "Conversion failure: " << err.what() << std::endl;
         }
@@ -121,7 +121,7 @@
         {
             tmp.hour = std::stoul(token.substr(i, 2), 0, 16);
         }
-        catch (std::exception& err)
+        catch (const std::exception& err)
         {
             std::cout << "Conversion failure: " << err.what() << std::endl;
         }
@@ -130,7 +130,7 @@
         {
             tmp.minutes = std::stoul(token.substr(i, 2), 0, 16);
         }
-        catch (std::exception& err)
+        catch (const std::exception& err)
         {
             std::cout << "Conversion failure: " << err.what() << std::endl;
         }
@@ -139,7 +139,7 @@
         {
             tmp.seconds = std::stoul(token.substr(i, 2), 0, 16);
         }
-        catch (std::exception& err)
+        catch (const std::exception& err)
         {
             std::cout << "Conversion failure: " << err.what() << std::endl;
         }
@@ -148,7 +148,7 @@
         {
             tmp.hundredths = std::stoul(token.substr(i, 2), 0, 16);
         }
-        catch (std::exception& err)
+        catch (const std::exception& err)
         {
             std::cout << "Conversion failure: " << err.what() << std::endl;
         }
@@ -168,7 +168,7 @@
     {
         num = std::stoul(fileName.substr(fileName.find("_") + 1), 0, 16);
     }
-    catch (std::exception& err)
+    catch (const std::exception& err)
     {
         std::cout << "Conversion failure: " << err.what() << std::endl;
     }
@@ -428,7 +428,7 @@
             foundPEL = true;
         }
     }
-    catch (std::exception& e)
+    catch (const std::exception& e)
     {
         log<level::ERR>("Hit exception while reading PEL File",
                         entry("FILENAME=%s", fileName.c_str()),
@@ -575,7 +575,7 @@
                         func(pel, hexDump);
                         break;
                     }
-                    catch (std::exception& e)
+                    catch (const std::exception& e)
                     {
                         std::cerr << " Internal function threw an exception: "
                                   << e.what() << "\n";
@@ -755,7 +755,7 @@
         std::regex scrubRegex(pattern, std::regex::icase);
         return scrubRegex;
     }
-    catch (std::regex_error& e)
+    catch (const std::regex_error& e)
     {
         if (e.code() == std::regex_constants::error_collate)
             std::cerr << "Invalid collating element request\n";
diff --git a/extensions/openpower-pels/user_data_json.cpp b/extensions/openpower-pels/user_data_json.cpp
index 9d331a3..107e026 100644
--- a/extensions/openpower-pels/user_data_json.cpp
+++ b/extensions/openpower-pels/user_data_json.cpp
@@ -344,7 +344,7 @@
                         return prettyJSON(componentID, subType, version, json);
                     }
                 }
-                catch (std::exception& e)
+                catch (const std::exception& e)
                 {
                     log<level::ERR>("Bad JSON from parser",
                                     entry("ERROR=%s", e.what()),
@@ -414,7 +414,7 @@
                                  creatorID);
         }
     }
-    catch (std::exception& e)
+    catch (const std::exception& e)
     {
         log<level::ERR>("Failed parsing UserData", entry("ERROR=%s", e.what()),
                         entry("COMP_ID=0x%X", componentID),
