diff --git a/vpd-manager/editor_impl.cpp b/vpd-manager/editor_impl.cpp
index 727afac..c24cc0f 100644
--- a/vpd-manager/editor_impl.cpp
+++ b/vpd-manager/editor_impl.cpp
@@ -65,10 +65,10 @@
         else
         {
             // Jump the record
-            std::advance(iterator, lengths::RECORD_NAME + sizeof(RecordType) +
-                                       sizeof(RecordOffset) +
-                                       sizeof(RecordLength) +
-                                       sizeof(ECCOffset) + sizeof(ECCLength));
+            std::advance(iterator,
+                         lengths::RECORD_NAME + sizeof(RecordType) +
+                             sizeof(RecordOffset) + sizeof(RecordLength) +
+                             sizeof(ECCOffset) + sizeof(ECCLength));
         }
     }
     // imples the record was not found
@@ -311,10 +311,9 @@
 }
 
 template <typename T>
-void EditorImpl::makeDbusCall(const std::string& object,
-                              const std::string& interface,
-                              const std::string& property,
-                              const std::variant<T>& data)
+void EditorImpl::makeDbusCall(
+    const std::string& object, const std::string& interface,
+    const std::string& property, const std::variant<T>& data)
 {
     auto bus = sdbusplus::bus::new_default();
     auto properties =
@@ -470,17 +469,17 @@
 
     if (locationCodeType == "fcs")
     {
-        propertyFCorTM = readBusProperty(SYSTEM_OBJECT, "com.ibm.ipzvpd.VCEN",
-                                         "FC");
-        propertySE = readBusProperty(SYSTEM_OBJECT, "com.ibm.ipzvpd.VCEN",
-                                     "SE");
+        propertyFCorTM =
+            readBusProperty(SYSTEM_OBJECT, "com.ibm.ipzvpd.VCEN", "FC");
+        propertySE =
+            readBusProperty(SYSTEM_OBJECT, "com.ibm.ipzvpd.VCEN", "SE");
     }
     else if (locationCodeType == "mts")
     {
-        propertyFCorTM = readBusProperty(SYSTEM_OBJECT, "com.ibm.ipzvpd.VSYS",
-                                         "TM");
-        propertySE = readBusProperty(SYSTEM_OBJECT, "com.ibm.ipzvpd.VSYS",
-                                     "SE");
+        propertyFCorTM =
+            readBusProperty(SYSTEM_OBJECT, "com.ibm.ipzvpd.VSYS", "TM");
+        propertySE =
+            readBusProperty(SYSTEM_OBJECT, "com.ibm.ipzvpd.VSYS", "SE");
     }
 
     const nlohmann::json& groupFRUS =
@@ -602,15 +601,15 @@
         enableRebootGuard();
 
         Binary completeVPDFile;
-        vpdFileStream.exceptions(std::ifstream::badbit |
-                                 std::ifstream::failbit);
+        vpdFileStream.exceptions(
+            std::ifstream::badbit | std::ifstream::failbit);
         try
         {
             vpdFileStream.open(vpdFilePath,
                                std::ios::in | std::ios::out | std::ios::binary);
 
-            auto vpdFileSize = std::min(std::filesystem::file_size(vpdFilePath),
-                                        MAX_VPD_SIZE);
+            auto vpdFileSize =
+                std::min(std::filesystem::file_size(vpdFilePath), MAX_VPD_SIZE);
             if (vpdFileSize == 0)
             {
                 std::cerr << "File size is 0 for " << vpdFilePath << std::endl;
