diff --git a/include/dbus_monitor.hpp b/include/dbus_monitor.hpp
index 4cc5b06..9e22b9c 100644
--- a/include/dbus_monitor.hpp
+++ b/include/dbus_monitor.hpp
@@ -130,7 +130,7 @@
         .onmessage([&](crow::websocket::Connection& conn,
                        const std::string& data, bool is_binary) {
             DbusWebsocketSession& thisSession = sessions[&conn];
-            BMCWEB_LOG_DEBUG << "Connection " << &conn << " recevied " << data;
+            BMCWEB_LOG_DEBUG << "Connection " << &conn << " received " << data;
             nlohmann::json j = nlohmann::json::parse(data, nullptr, false);
             if (j.is_discarded())
             {
diff --git a/include/ibm/locks.hpp b/include/ibm/locks.hpp
index 6e9421f..cb9191f 100644
--- a/include/ibm/locks.hpp
+++ b/include/ibm/locks.hpp
@@ -149,7 +149,7 @@
      * This function implements the logic for acquiring a lock on a
      * resource if the incoming request is legitimate without any
      * conflicting requirements & without any conflicting requirement
-     * with the exsiting locks in the lock table.
+     * with the existing locks in the lock table.
      *
      */
 
@@ -387,7 +387,7 @@
         else
         {
             BMCWEB_LOG_DEBUG << "Removing the locks from the lock table "
-                                "failed, tranasction ID: "
+                                "failed, transaction ID: "
                              << id;
         }
     }
@@ -469,7 +469,7 @@
         }
         else
         {
-            BMCWEB_LOG_DEBUG << "Atleast 1 inValid Request id";
+            BMCWEB_LOG_DEBUG << "At least 1 inValid Request id";
             return false;
         }
     }
@@ -496,7 +496,7 @@
     if ((static_cast<int>(std::get<4>(refLockRecord).size()) > 6) ||
         (static_cast<int>(std::get<4>(refLockRecord).size()) < 2))
     {
-        BMCWEB_LOG_DEBUG << "Validation of Number of Segements Failed";
+        BMCWEB_LOG_DEBUG << "Validation of Number of Segments Failed";
         BMCWEB_LOG_DEBUG << "Number of Segments provied : "
                          << sizeof(std::get<4>(refLockRecord));
         return false;
@@ -642,11 +642,11 @@
 }
 
 // This function converts the provided uint64_t resource id's from the two
-// lock requests subjected for comparision, and this function also compares
+// lock requests subjected for comparison, and this function also compares
 // the content by bytes mentioned by a uint32_t number.
 
 // If all the elements in the lock requests which are subjected for comparison
-// are same, then the last comparision would be to check for the respective
+// are same, then the last comparison would be to check for the respective
 // bytes in the resourceid based on the segment length.
 
 inline bool Lock::checkByte(uint64_t resourceId1, uint64_t resourceId2,
@@ -729,7 +729,7 @@
                 // different resource So no conflict between the lock
                 // records.
                 // BMC is little endian , but the resourceID is formed by
-                // the Managament Console in such a way that, the first byte
+                // the Management Console in such a way that, the first byte
                 // from the MSB Position corresponds to the First Segment
                 // data. Therefore we need to convert the in-comming
                 // resourceID into Big Endian before processing further.
diff --git a/include/kvm_websocket.hpp b/include/kvm_websocket.hpp
index ed7c8cf..6db06fc 100644
--- a/include/kvm_websocket.hpp
+++ b/include/kvm_websocket.hpp
@@ -55,7 +55,7 @@
                          << " bytes from websocket";
         boost::asio::buffer_copy(inputBuffer.prepare(data.size()),
                                  boost::asio::buffer(data));
-        BMCWEB_LOG_DEBUG << "conn:" << &conn << ", Commiting " << data.size()
+        BMCWEB_LOG_DEBUG << "conn:" << &conn << ", Committing " << data.size()
                          << " bytes from websocket";
         inputBuffer.commit(data.size());
 
diff --git a/include/openbmc_dbus_rest.hpp b/include/openbmc_dbus_rest.hpp
index 456c768..ea7dc95 100644
--- a/include/openbmc_dbus_rest.hpp
+++ b/include/openbmc_dbus_rest.hpp
@@ -2079,7 +2079,7 @@
         .requires({"Login"})
         .methods("GET"_method)(
             [](const crow::Request& req, crow::Response& res) {
-                res.jsonValue = {{"busses", {{{"name", "system"}}}},
+                res.jsonValue = {{"buses", {{{"name", "system"}}}},
                                  {"status", "ok"}};
                 res.end();
             });
@@ -2253,7 +2253,7 @@
                 if (it->find(".") != std::string::npos)
                 {
                     break;
-                    // This check is neccesary as the trailing slash gets
+                    // This check is necessary as the trailing slash gets
                     // parsed as part of our <path> specifier above, which
                     // causes the normal trailing backslash redirector to
                     // fail.
