diff --git a/vpd-manager/include/backup_restore.hpp b/vpd-manager/include/backup_restore.hpp
index 12ec384..d3cd467 100644
--- a/vpd-manager/include/backup_restore.hpp
+++ b/vpd-manager/include/backup_restore.hpp
@@ -71,8 +71,8 @@
      *
      * @param[in] i_status - Status to set.
      */
-    static void
-        setBackupAndRestoreStatus(const BackupAndRestoreStatus& i_status);
+    static void setBackupAndRestoreStatus(
+        const BackupAndRestoreStatus& i_status);
 
   private:
     /**
diff --git a/vpd-manager/include/bios_handler.hpp b/vpd-manager/include/bios_handler.hpp
index 916811e..893a638 100644
--- a/vpd-manager/include/bios_handler.hpp
+++ b/vpd-manager/include/bios_handler.hpp
@@ -81,8 +81,8 @@
      * @param[in] attributeName - Attribute to be read.
      * @return - Bios attribute current value.
      */
-    types::BiosAttributeCurrentValue
-        readBiosAttribute(const std::string& attributeName);
+    types::BiosAttributeCurrentValue readBiosAttribute(
+        const std::string& attributeName);
 
     /**
      * @brief API to process "hb_field_core_override" attribute.
diff --git a/vpd-manager/include/ddimm_parser.hpp b/vpd-manager/include/ddimm_parser.hpp
index a53ed17..7289774 100644
--- a/vpd-manager/include/ddimm_parser.hpp
+++ b/vpd-manager/include/ddimm_parser.hpp
@@ -74,8 +74,8 @@
      * @param[in] i_iterator - iterator to buffer containing VPD
      * @return calculated size or 0 in case of any error.
      */
-    size_t
-        getDdr5BasedDdimmSize(types::BinaryVector::const_iterator i_iterator);
+    size_t getDdr5BasedDdimmSize(
+        types::BinaryVector::const_iterator i_iterator);
 
     /**
      * @brief This function calculates DDR4 based DDIMM's capacity
@@ -83,8 +83,8 @@
      * @param[in] i_iterator - iterator to buffer containing VPD
      * @return calculated size or 0 in case of any error.
      */
-    size_t
-        getDdr4BasedDdimmSize(types::BinaryVector::const_iterator i_iterator);
+    size_t getDdr4BasedDdimmSize(
+        types::BinaryVector::const_iterator i_iterator);
 
     /**
      * @brief This function calculates DDR5 based die per package
diff --git a/vpd-manager/include/ipz_parser.hpp b/vpd-manager/include/ipz_parser.hpp
index 2d50ddd..b41b7b6 100644
--- a/vpd-manager/include/ipz_parser.hpp
+++ b/vpd-manager/include/ipz_parser.hpp
@@ -87,8 +87,8 @@
      *
      * @return On success return the value read. On failure throw exception.
      */
-    types::DbusVariantType
-        readKeywordFromHardware(const types::ReadVpdParams i_paramsToReadData);
+    types::DbusVariantType readKeywordFromHardware(
+        const types::ReadVpdParams i_paramsToReadData);
 
     /**
      * @brief API to write keyword's value on hardware.
@@ -174,8 +174,8 @@
      * @param[in] iterator - pointer to the start of keywords under the record.
      * @return keyword-value map of keywords under that record.
      */
-    types::IPZVpdMap::mapped_type
-        readKeywords(types::BinaryVector::const_iterator& itrToKwds);
+    types::IPZVpdMap::mapped_type readKeywords(
+        types::BinaryVector::const_iterator& itrToKwds);
 
     /**
      * @brief API to process a record.
@@ -211,9 +211,9 @@
      * @return On success return record's details, on failure return empty
      * buffer.
      */
-    types::RecordData
-        getRecordDetailsFromVTOC(const types::Record& l_recordName,
-                                 const types::RecordOffset& i_vtocOffset);
+    types::RecordData getRecordDetailsFromVTOC(
+        const types::Record& l_recordName,
+        const types::RecordOffset& i_vtocOffset);
 
     /**
      * @brief API to update record's ECC
diff --git a/vpd-manager/include/isdimm_parser.hpp b/vpd-manager/include/isdimm_parser.hpp
index 5cd3d87..4a6d21b 100644
--- a/vpd-manager/include/isdimm_parser.hpp
+++ b/vpd-manager/include/isdimm_parser.hpp
@@ -49,8 +49,8 @@
      * @param[in] i_iterator - iterator to buffer containing SPD
      * @return- map of kwd:value
      */
-    types::JedecSpdMap
-        readKeywords(types::BinaryVector::const_iterator& i_iterator);
+    types::JedecSpdMap readKeywords(
+        types::BinaryVector::const_iterator& i_iterator);
 
     /**
      * @brief This function calculates DIMM size from DDR4 SPD
@@ -66,8 +66,8 @@
      * @param[in] i_iterator - iterator to buffer containing SPD
      * @return calculated part number or a default value.
      */
-    std::string_view
-        getDDR4PartNumber(types::BinaryVector::const_iterator& i_iterator);
+    std::string_view getDDR4PartNumber(
+        types::BinaryVector::const_iterator& i_iterator);
 
     /**
      * @brief This function calculates serial number from DDR4 SPD
@@ -75,8 +75,8 @@
      * @param[in] i_iterator - iterator to buffer containing SPD
      * @return calculated serial number or a default value.
      */
-    std::string
-        getDDR4SerialNumber(types::BinaryVector::const_iterator& i_iterator);
+    std::string getDDR4SerialNumber(
+        types::BinaryVector::const_iterator& i_iterator);
 
     /**
      * @brief This function allocates FRU number based on part number
@@ -88,9 +88,9 @@
      * @param[in] i_iterator - iterator to buffer containing SPD
      * @return allocated FRU number or a default value
      */
-    std::string_view
-        getDDR4FruNumber(const std::string& i_partNumber,
-                         types::BinaryVector::const_iterator& i_iterator);
+    std::string_view getDDR4FruNumber(
+        const std::string& i_partNumber,
+        types::BinaryVector::const_iterator& i_iterator);
 
     /**
      * @brief This function allocates CCIN based on part number for DDR4 SPD
diff --git a/vpd-manager/include/manager.hpp b/vpd-manager/include/manager.hpp
index 73d82c2..4a6a9ef 100644
--- a/vpd-manager/include/manager.hpp
+++ b/vpd-manager/include/manager.hpp
@@ -107,9 +107,9 @@
      * @return On success returns the read value in variant of array of bytes.
      * On failure throws exception.
      */
-    types::DbusVariantType
-        readKeyword(const types::Path i_fruPath,
-                    const types::ReadVpdParams i_paramsToReadData);
+    types::DbusVariantType readKeyword(
+        const types::Path i_fruPath,
+        const types::ReadVpdParams i_paramsToReadData);
 
     /**
      * @brief Collect single FRU VPD
@@ -214,8 +214,8 @@
      *
      * @return Location code in unexpanded format and its node number.
      */
-    std::tuple<std::string, uint16_t>
-        getUnexpandedLocationCode(const std::string& i_expandedLocationCode);
+    std::tuple<std::string, uint16_t> getUnexpandedLocationCode(
+        const std::string& i_expandedLocationCode);
 
   private:
 #ifdef IBM_SYSTEM
diff --git a/vpd-manager/include/parser_factory.hpp b/vpd-manager/include/parser_factory.hpp
index 819ec59..22e5d3b 100644
--- a/vpd-manager/include/parser_factory.hpp
+++ b/vpd-manager/include/parser_factory.hpp
@@ -43,8 +43,8 @@
      *
      * @return - Pointer to concrete parser class object.
      */
-    static std::shared_ptr<ParserInterface>
-        getParser(const types::BinaryVector& i_vpdVector,
-                  const std::string& i_vpdFilePath, size_t i_vpdStartOffset);
+    static std::shared_ptr<ParserInterface> getParser(
+        const types::BinaryVector& i_vpdVector,
+        const std::string& i_vpdFilePath, size_t i_vpdStartOffset);
 };
 } // namespace vpd
diff --git a/vpd-manager/include/parser_interface.hpp b/vpd-manager/include/parser_interface.hpp
index 0ff2862..3b12089 100644
--- a/vpd-manager/include/parser_interface.hpp
+++ b/vpd-manager/include/parser_interface.hpp
@@ -33,8 +33,8 @@
      *
      * @return keyword's value on successful read. Exception on failure.
      */
-    virtual types::DbusVariantType
-        readKeywordFromHardware(const types::ReadVpdParams)
+    virtual types::DbusVariantType readKeywordFromHardware(
+        const types::ReadVpdParams)
     {
         return types::DbusVariantType();
     }
@@ -54,8 +54,8 @@
      * @return On success returns number of bytes written on hardware, On
      * failure returns -1.
      */
-    virtual int
-        writeKeywordOnHardware(const types::WriteVpdParams i_paramsToWriteData)
+    virtual int writeKeywordOnHardware(
+        const types::WriteVpdParams i_paramsToWriteData)
     {
         (void)i_paramsToWriteData;
         return -1;
diff --git a/vpd-manager/include/utility/dbus_utility.hpp b/vpd-manager/include/utility/dbus_utility.hpp
index 4c81815..27014df 100644
--- a/vpd-manager/include/utility/dbus_utility.hpp
+++ b/vpd-manager/include/utility/dbus_utility.hpp
@@ -127,9 +127,9 @@
  *           success. If failed, empty map.
  */
 
-inline types::MapperGetSubTree
-    getObjectSubTree(const std::string& i_objectPath, const int& i_depth,
-                     const std::vector<std::string>& i_interfaces)
+inline types::MapperGetSubTree getObjectSubTree(
+    const std::string& i_objectPath, const int& i_depth,
+    const std::vector<std::string>& i_interfaces)
 {
     types::MapperGetSubTree l_subTreeMap;
 
@@ -343,8 +343,8 @@
  * @return Tuple of PLDM attribute Type, current attribute value and pending
  * attribute value.
  */
-inline types::BiosAttributeCurrentValue
-    biosGetAttributeMethodCall(const std::string& i_attributeName)
+inline types::BiosAttributeCurrentValue biosGetAttributeMethodCall(
+    const std::string& i_attributeName)
 {
     auto l_bus = sdbusplus::bus::new_default();
     auto l_method = l_bus.new_method_call(
diff --git a/vpd-manager/include/utility/json_utility.hpp b/vpd-manager/include/utility/json_utility.hpp
index a43682c..764fb66 100644
--- a/vpd-manager/include/utility/json_utility.hpp
+++ b/vpd-manager/include/utility/json_utility.hpp
@@ -730,8 +730,8 @@
  *
  * @return list of FRUs parameters that needs polling.
  */
-inline std::vector<std::string>
-    getListOfGpioPollingFrus(const nlohmann::json& i_sysCfgJsonObj)
+inline std::vector<std::string> getListOfGpioPollingFrus(
+    const nlohmann::json& i_sysCfgJsonObj)
 {
     if (i_sysCfgJsonObj.empty())
     {
@@ -1006,8 +1006,8 @@
  *
  * @return - List of FRUs replaceable at standby.
  */
-inline std::vector<std::string>
-    getListOfFrusReplaceableAtStandby(const nlohmann::json& i_sysCfgJsonObj)
+inline std::vector<std::string> getListOfFrusReplaceableAtStandby(
+    const nlohmann::json& i_sysCfgJsonObj)
 {
     std::vector<std::string> l_frusReplaceableAtStandby;
 
diff --git a/vpd-manager/include/utility/vpd_specific_utility.hpp b/vpd-manager/include/utility/vpd_specific_utility.hpp
index 9e679a7..3253105 100644
--- a/vpd-manager/include/utility/vpd_specific_utility.hpp
+++ b/vpd-manager/include/utility/vpd_specific_utility.hpp
@@ -225,9 +225,9 @@
  * @return Expanded location code. In case of any error, unexpanded is returned
  * as it is.
  */
-inline std::string
-    getExpandedLocationCode(const std::string& unexpandedLocationCode,
-                            const types::VPDMapVariant& parsedVpdMap)
+inline std::string getExpandedLocationCode(
+    const std::string& unexpandedLocationCode,
+    const types::VPDMapVariant& parsedVpdMap)
 {
     auto expanded{unexpandedLocationCode};
 
diff --git a/vpd-manager/include/worker.hpp b/vpd-manager/include/worker.hpp
index a9725c3..f364964 100644
--- a/vpd-manager/include/worker.hpp
+++ b/vpd-manager/include/worker.hpp
@@ -174,8 +174,8 @@
      * @return Tuple of status and file path. Status, true if successfull else
      * false.
      */
-    std::tuple<bool, std::string>
-        parseAndPublishVPD(const std::string& i_vpdFilePath);
+    std::tuple<bool, std::string> parseAndPublishVPD(
+        const std::string& i_vpdFilePath);
 
     /**
      * @brief An API to set appropriate device tree and JSON.
@@ -495,8 +495,8 @@
      *
      * @return - Formed asset tag string.
      */
-    std::string
-        createAssetTagString(const types::VPDMapVariant& i_parsedVpdMap);
+    std::string createAssetTagString(
+        const types::VPDMapVariant& i_parsedVpdMap);
 
     /**
      * @brief API to prime system blueprint.
