diff --git a/vpd-manager/server.cpp b/vpd-manager/server.cpp
index 7ca72f6..8fd8476 100644
--- a/vpd-manager/server.cpp
+++ b/vpd-manager/server.cpp
@@ -42,19 +42,21 @@
                 return o->writeKeyword(path, record, keyword, value);
             }));
     }
-    catch (sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument& e)
+    catch (
+        const sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument&
+            e)
     {
         return o->_intf->sd_bus_error_set(error, e.name(), e.description());
     }
-    catch (sdbusplus::com::ibm::VPD::Error::PathNotFound& e)
+    catch (const sdbusplus::com::ibm::VPD::Error::PathNotFound& e)
     {
         return o->_intf->sd_bus_error_set(error, e.name(), e.description());
     }
-    catch (sdbusplus::com::ibm::VPD::Error::RecordNotFound& e)
+    catch (const sdbusplus::com::ibm::VPD::Error::RecordNotFound& e)
     {
         return o->_intf->sd_bus_error_set(error, e.name(), e.description());
     }
-    catch (sdbusplus::com::ibm::VPD::Error::KeywordNotFound& e)
+    catch (const sdbusplus::com::ibm::VPD::Error::KeywordNotFound& e)
     {
         return o->_intf->sd_bus_error_set(error, e.name(), e.description());
     }
@@ -90,15 +92,17 @@
                                                               nodeNumber);
                 }));
     }
-    catch (sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument& e)
+    catch (
+        const sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument&
+            e)
     {
         return o->_intf->sd_bus_error_set(error, e.name(), e.description());
     }
-    catch (sdbusplus::com::ibm::VPD::Error::LocationNotFound& e)
+    catch (const sdbusplus::com::ibm::VPD::Error::LocationNotFound& e)
     {
         return o->_intf->sd_bus_error_set(error, e.name(), e.description());
     }
-    catch (sdbusplus::com::ibm::VPD::Error::NodeNotFound& e)
+    catch (const sdbusplus::com::ibm::VPD::Error::NodeNotFound& e)
     {
         return o->_intf->sd_bus_error_set(error, e.name(), e.description());
     }
@@ -132,15 +136,17 @@
                 return o->getFRUsByExpandedLocationCode(locationCode);
             }));
     }
-    catch (sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument& e)
+    catch (
+        const sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument&
+            e)
     {
         return o->_intf->sd_bus_error_set(error, e.name(), e.description());
     }
-    catch (sdbusplus::com::ibm::VPD::Error::LocationNotFound& e)
+    catch (const sdbusplus::com::ibm::VPD::Error::LocationNotFound& e)
     {
         return o->_intf->sd_bus_error_set(error, e.name(), e.description());
     }
-    catch (sdbusplus::com::ibm::VPD::Error::NodeNotFound& e)
+    catch (const sdbusplus::com::ibm::VPD::Error::NodeNotFound& e)
     {
         return o->_intf->sd_bus_error_set(error, e.name(), e.description());
     }
@@ -175,15 +181,17 @@
                     return o->getExpandedLocationCode(locationCode, nodeNumber);
                 }));
     }
-    catch (sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument& e)
+    catch (
+        const sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument&
+            e)
     {
         return o->_intf->sd_bus_error_set(error, e.name(), e.description());
     }
-    catch (sdbusplus::com::ibm::VPD::Error::LocationNotFound& e)
+    catch (const sdbusplus::com::ibm::VPD::Error::LocationNotFound& e)
     {
         return o->_intf->sd_bus_error_set(error, e.name(), e.description());
     }
-    catch (sdbusplus::com::ibm::VPD::Error::NodeNotFound& e)
+    catch (const sdbusplus::com::ibm::VPD::Error::NodeNotFound& e)
     {
         return o->_intf->sd_bus_error_set(error, e.name(), e.description());
     }
@@ -214,7 +222,9 @@
             msg, o->_intf, error,
             std::function([=]() { return o->performVPDRecollection(); }));
     }
-    catch (sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument& e)
+    catch (
+        const sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument&
+            e)
     {
         return o->_intf->sd_bus_error_set(error, e.name(), e.description());
     }
