diff --git a/extensions/openpower-pels/pel.cpp b/extensions/openpower-pels/pel.cpp
index 3b7ecf5..4e16fc5 100644
--- a/extensions/openpower-pels/pel.cpp
+++ b/extensions/openpower-pels/pel.cpp
@@ -64,11 +64,11 @@
 #ifdef PEL_ENABLE_PHAL
     // Add sbe ffdc processed data into ffdcfiles.
     namespace sbe = openpower::pels::sbe;
-    auto processReq =
-        std::any_of(ffdcFiles.begin(), ffdcFiles.end(), [](const auto& file) {
-            return file.format == UserDataFormat::custom &&
-                   file.subType == sbe::sbeFFDCSubType;
-        });
+    auto processReq = std::any_of(ffdcFiles.begin(), ffdcFiles.end(),
+                                  [](const auto& file) {
+        return file.format == UserDataFormat::custom &&
+               file.subType == sbe::sbeFFDCSubType;
+    });
     // sbeFFDC can't be destroyed until the end of the PEL constructor
     // because it needs to keep around the FFDC Files to be used below.
     std::unique_ptr<sbe::SbeFFDC> sbeFFDCPtr;
@@ -309,11 +309,11 @@
 
 std::optional<SRC*> PEL::primarySRC() const
 {
-    auto src = std::find_if(
-        _optionalSections.begin(), _optionalSections.end(), [](auto& section) {
-            return section->header().id ==
-                   static_cast<uint16_t>(SectionID::primarySRC);
-        });
+    auto src = std::find_if(_optionalSections.begin(), _optionalSections.end(),
+                            [](auto& section) {
+        return section->header().id ==
+               static_cast<uint16_t>(SectionID::primarySRC);
+    });
     if (src != _optionalSections.end())
     {
         return static_cast<SRC*>(src->get());
@@ -554,11 +554,11 @@
     {
         // Get the ED section from PEL
         auto op = std::find_if(_optionalSections.begin(),
-                               _optionalSections.end(), [](auto& section) {
-                                   return section->header().id ==
-                                          static_cast<uint16_t>(
-                                              SectionID::extUserData);
-                               });
+                               _optionalSections.end(),
+                               [](auto& section) {
+            return section->header().id ==
+                   static_cast<uint16_t>(SectionID::extUserData);
+        });
 
         // Check for ED section found and its not the last section of PEL
         if (op != _optionalSections.end())
