diff --git a/.clang-format b/.clang-format
index 945adae..00e2e25 100644
--- a/.clang-format
+++ b/.clang-format
@@ -77,7 +77,7 @@
 IndentCaseLabels: true
 IndentWidth:     4
 IndentWrappedFunctionNames: true
-KeepEmptyLinesAtTheStartOfBlocks: true
+KeepEmptyLinesAtTheStartOfBlocks: false
 MacroBlockBegin: ''
 MacroBlockEnd:   ''
 MaxEmptyLinesToKeep: 1
diff --git a/common/flight_recorder.hpp b/common/flight_recorder.hpp
index db6314d..2f8ea7d 100644
--- a/common/flight_recorder.hpp
+++ b/common/flight_recorder.hpp
@@ -33,7 +33,6 @@
   private:
     FlightRecorder() : index(0)
     {
-
         flightRecorderPolicy = FLIGHT_RECORDER_MAX_ENTRIES ? true : false;
         if (flightRecorderPolicy)
         {
diff --git a/common/test/pldm_utils_test.cpp b/common/test/pldm_utils_test.cpp
index 0014bb5..11bf027 100644
--- a/common/test/pldm_utils_test.cpp
+++ b/common/test/pldm_utils_test.cpp
@@ -82,7 +82,6 @@
 
 TEST(FindStateEffecterPDR, testOneMatch)
 {
-
     auto repo = pldm_pdr_init();
     uint8_t tid = 1;
     uint16_t entityID = 33;
@@ -116,7 +115,6 @@
 
 TEST(FindStateEffecterPDR, testNoMatch)
 {
-
     auto repo = pldm_pdr_init();
     uint8_t tid = 1;
     uint16_t entityID = 44;
@@ -150,7 +148,6 @@
 
 TEST(FindStateEffecterPDR, testEmptyRepo)
 {
-
     auto repo = pldm_pdr_init();
     uint8_t tid = 1;
     uint16_t entityID = 33;
@@ -169,7 +166,6 @@
 
 TEST(FindStateEffecterPDR, testMoreMatch)
 {
-
     auto repo = pldm_pdr_init();
     uint8_t tid = 1;
 
@@ -225,7 +221,6 @@
 
 TEST(FindStateEffecterPDR, testManyNoMatch)
 {
-
     auto repo = pldm_pdr_init();
     uint8_t tid = 1;
     uint16_t entityID = 33;
@@ -495,7 +490,6 @@
 
 TEST(FindStateSensorPDR, testOneMatch)
 {
-
     auto repo = pldm_pdr_init();
     uint8_t tid = 1;
     uint16_t entityID = 5;
@@ -529,7 +523,6 @@
 
 TEST(FindStateSensorPDR, testNoMatch)
 {
-
     auto repo = pldm_pdr_init();
     uint8_t tid = 1;
     uint16_t entityID = 5;
@@ -563,7 +556,6 @@
 
 TEST(FindStateSensorPDR, testEmptyRepo)
 {
-
     auto repo = pldm_pdr_init();
     uint8_t tid = 1;
     uint16_t entityID = 5;
@@ -582,7 +574,6 @@
 
 TEST(FindStateSensorPDR, testMoreMatch)
 {
-
     auto repo = pldm_pdr_init();
     uint8_t tid = 1;
 
@@ -638,7 +629,6 @@
 
 TEST(FindStateSensorPDR, testManyNoMatch)
 {
-
     auto repo = pldm_pdr_init();
     uint8_t tid = 1;
     uint16_t entityID = 5;
diff --git a/common/utils.cpp b/common/utils.cpp
index 0b74833..6c82db7 100644
--- a/common/utils.cpp
+++ b/common/utils.cpp
@@ -235,7 +235,6 @@
     DBusHandler::getSubtree(const std::string& searchPath, int depth,
                             const std::vector<std::string>& ifaceList) const
 {
-
     auto& bus = pldm::utils::DBusHandler::getBus();
     auto method = bus.new_method_call(mapperBusName, mapperPath,
                                       mapperInterface, "GetSubTree");
diff --git a/fw-update/manager.hpp b/fw-update/manager.hpp
index 4f86876..9bdcbe2 100644
--- a/fw-update/manager.hpp
+++ b/fw-update/manager.hpp
@@ -28,7 +28,6 @@
  */
 class Manager
 {
-
   public:
     Manager() = delete;
     Manager(const Manager&) = delete;
diff --git a/fw-update/update_manager.cpp b/fw-update/update_manager.cpp
index 5e9e98a..e526ba1 100644
--- a/fw-update/update_manager.cpp
+++ b/fw-update/update_manager.cpp
@@ -32,7 +32,6 @@
     // package processing
     if (activation)
     {
-
         if (activation->activation() ==
             software::Activation::Activations::Activating)
         {
diff --git a/libpldmresponder/bios.cpp b/libpldmresponder/bios.cpp
index 07e6d40..e6f4a6c 100644
--- a/libpldmresponder/bios.cpp
+++ b/libpldmresponder/bios.cpp
@@ -185,7 +185,6 @@
     }
     catch (const std::exception& e)
     {
-
         std::cerr << "Error Setting time,PATH=" << setTimePath
                   << "TIME INTERFACE=" << setTimeInterface
                   << "ERROR=" << e.what() << "\n";
diff --git a/libpldmresponder/bios_integer_attribute.cpp b/libpldmresponder/bios_integer_attribute.cpp
index c025d9a..29d309a 100644
--- a/libpldmresponder/bios_integer_attribute.cpp
+++ b/libpldmresponder/bios_integer_attribute.cpp
@@ -104,7 +104,6 @@
     const BIOSStringTable& stringTable, Table& attrTable, Table& attrValueTable,
     std::optional<std::variant<int64_t, std::string>> optAttributeValue)
 {
-
     pldm_bios_table_attr_entry_integer_info info = {
         stringTable.findHandle(name), readOnly,
         integerInfo.lowerBound,       integerInfo.upperBound,
diff --git a/libpldmresponder/fru.cpp b/libpldmresponder/fru.cpp
index ce0121b..418c831 100644
--- a/libpldmresponder/fru.cpp
+++ b/libpldmresponder/fru.cpp
@@ -21,7 +21,6 @@
 
 void FruImpl::buildFRUTable()
 {
-
     if (isBuilt)
     {
         return;
@@ -170,7 +169,6 @@
         uint8_t numFRUFields = 0;
         for (auto const& [intf, prop, propType, fieldTypeNum] : fieldInfos)
         {
-
             try
             {
                 pldm::responder::dbus::Value propValue;
diff --git a/libpldmresponder/fru.hpp b/libpldmresponder/fru.hpp
index 986a3d2..3c5b7a4 100644
--- a/libpldmresponder/fru.hpp
+++ b/libpldmresponder/fru.hpp
@@ -197,7 +197,6 @@
 
 class Handler : public CmdHandler
 {
-
   public:
     Handler(const std::string& configPath,
             const std::filesystem::path& fruMasterJsonPath, pldm_pdr* pdrRepo,
diff --git a/libpldmresponder/fru_parser.cpp b/libpldmresponder/fru_parser.cpp
index 8c7ff86..aa85dc8 100644
--- a/libpldmresponder/fru_parser.cpp
+++ b/libpldmresponder/fru_parser.cpp
@@ -50,7 +50,6 @@
     auto data = Json::parse(jsonFile, nullptr, false);
     if (data.is_discarded())
     {
-
         std::cerr << "Parsing FRU Dbus Lookup Map config file failed, FILE="
                   << masterJsonPath;
         std::abort();
@@ -119,7 +118,6 @@
         auto data = Json::parse(jsonFile, nullptr, false);
         if (data.is_discarded())
         {
-
             std::cerr << "Parsing FRU config file failed, FILE=" << file.path();
             throw InternalFailure();
         }
diff --git a/libpldmresponder/fru_parser.hpp b/libpldmresponder/fru_parser.hpp
index 2ca18cf..f9be6f3 100644
--- a/libpldmresponder/fru_parser.hpp
+++ b/libpldmresponder/fru_parser.hpp
@@ -67,7 +67,6 @@
  */
 class FruParser
 {
-
   public:
     FruParser() = delete;
     explicit FruParser(const std::string& dirPath,
diff --git a/libpldmresponder/platform_numeric_effecter.hpp b/libpldmresponder/platform_numeric_effecter.hpp
index 7b0f7d4..d07edda 100644
--- a/libpldmresponder/platform_numeric_effecter.hpp
+++ b/libpldmresponder/platform_numeric_effecter.hpp
@@ -311,7 +311,6 @@
         }
         try
         {
-
             dBusIntf.setDbusProperty(dbusMapping, dbusValue.value());
         }
         catch (const std::exception& e)
diff --git a/oem/ibm/libpldmresponder/oem_ibm_handler.cpp b/oem/ibm/libpldmresponder/oem_ibm_handler.cpp
index efa4790..1b803dd 100644
--- a/oem/ibm/libpldmresponder/oem_ibm_handler.cpp
+++ b/oem/ibm/libpldmresponder/oem_ibm_handler.cpp
@@ -433,7 +433,6 @@
     }
     catch (const std::exception& e)
     {
-
         std::cerr << "Chassis State transition to Off failed,"
                   << "unable to set property RequestedPowerTransition"
                   << "ERROR=" << e.what() << "\n";
diff --git a/oem/ibm/libpldmresponder/utils.cpp b/oem/ibm/libpldmresponder/utils.cpp
index 370e8b5..44c6874 100644
--- a/oem/ibm/libpldmresponder/utils.cpp
+++ b/oem/ibm/libpldmresponder/utils.cpp
@@ -92,7 +92,6 @@
 
     for (i = 0; i < blockSize; i = i + nwrite)
     {
-
         fd_set wfd;
         struct timeval tv;
         tv.tv_sec = 1;
diff --git a/oem/ibm/requester/dbus_to_file_handler.cpp b/oem/ibm/requester/dbus_to_file_handler.cpp
index 5f0d7b8..7b4e83f 100644
--- a/oem/ibm/requester/dbus_to_file_handler.cpp
+++ b/oem/ibm/requester/dbus_to_file_handler.cpp
@@ -92,7 +92,6 @@
 
 void DbusToFileHandler::reportResourceDumpFailure()
 {
-
     pldm::utils::reportError("xyz.openbmc_project.bmc.pldm.InternalFailure");
 
     PropertyValue value{resDumpStatus};
diff --git a/pldmd/pldmd.cpp b/pldmd/pldmd.cpp
index d64751d..8e39a1f 100644
--- a/pldmd/pldmd.cpp
+++ b/pldmd/pldmd.cpp
@@ -154,7 +154,6 @@
 
 int main(int argc, char** argv)
 {
-
     bool verbose = false;
     static struct option long_options[] = {
         {"verbose", required_argument, 0, 'v'}, {0, 0, 0, 0}};
diff --git a/pldmtool/oem/ibm/pldm_oem_ibm.cpp b/pldmtool/oem/ibm/pldm_oem_ibm.cpp
index 4773f8a..11b0b5d 100644
--- a/pldmtool/oem/ibm/pldm_oem_ibm.cpp
+++ b/pldmtool/oem/ibm/pldm_oem_ibm.cpp
@@ -106,7 +106,6 @@
 
     std::pair<int, std::vector<uint8_t>> createRequestMsg() override
     {
-
         return {PLDM_ERROR, {}};
     }
 
diff --git a/pldmtool/pldm_base_cmd.cpp b/pldmtool/pldm_base_cmd.cpp
index 8315640..a8df376 100644
--- a/pldmtool/pldm_base_cmd.cpp
+++ b/pldmtool/pldm_base_cmd.cpp
@@ -307,7 +307,6 @@
         ordered_json output;
         for (int i = 0; i < PLDM_MAX_CMDS_PER_TYPE; i++)
         {
-
             ordered_json cmdinfo;
             bitfield8_t b = cmdTypes[i / 8];
             if (b.byte & (1 << i % 8))
diff --git a/pldmtool/pldm_bios_cmd.cpp b/pldmtool/pldm_bios_cmd.cpp
index 03e5d9c..687be1f 100644
--- a/pldmtool/pldm_bios_cmd.cpp
+++ b/pldmtool/pldm_bios_cmd.cpp
@@ -695,7 +695,6 @@
         auto handle = findAttrHandleByName(attrName, *attrTable, *stringTable);
         if (!handle)
         {
-
             std::cerr << "Can not find the attribute " << attrName << std::endl;
             return;
         }
diff --git a/pldmtool/pldm_cmd_helper.cpp b/pldmtool/pldm_cmd_helper.cpp
index f58894f..b8a4b6d 100644
--- a/pldmtool/pldm_cmd_helper.cpp
+++ b/pldmtool/pldm_cmd_helper.cpp
@@ -25,7 +25,6 @@
 int mctpSockSendRecv(const std::vector<uint8_t>& requestMsg,
                      std::vector<uint8_t>& responseMsg, bool pldmVerbose)
 {
-
     const char devPath[] = "\0mctp-mux";
     int returnCode = 0;
 
@@ -179,7 +178,6 @@
 int CommandInterface::pldmSendRecv(std::vector<uint8_t>& requestMsg,
                                    std::vector<uint8_t>& responseMsg)
 {
-
     // Insert the PLDM message type and EID at the beginning of the
     // msg.
     requestMsg.insert(requestMsg.begin(), MCTP_MSG_TYPE_PLDM);
diff --git a/pldmtool/pldm_cmd_helper.hpp b/pldmtool/pldm_cmd_helper.hpp
index 51dcd12..e3bb900 100644
--- a/pldmtool/pldm_cmd_helper.hpp
+++ b/pldmtool/pldm_cmd_helper.hpp
@@ -76,7 +76,6 @@
 
 class CommandInterface
 {
-
   public:
     explicit CommandInterface(const char* type, const char* name,
                               CLI::App* app) :
diff --git a/pldmtool/pldmtool.cpp b/pldmtool/pldmtool.cpp
index 45cd9f8..5456221 100644
--- a/pldmtool/pldmtool.cpp
+++ b/pldmtool/pldmtool.cpp
@@ -64,7 +64,6 @@
 
 int main(int argc, char** argv)
 {
-
     CLI::App app{"PLDM requester tool for OpenBMC"};
     app.require_subcommand(1)->ignore_case();
 
diff --git a/requester/handler.hpp b/requester/handler.hpp
index ff7f33d..2d0343a 100644
--- a/requester/handler.hpp
+++ b/requester/handler.hpp
@@ -79,7 +79,6 @@
 template <class RequestInterface>
 class Handler
 {
-
   public:
     Handler() = delete;
     Handler(const Handler&) = delete;
