diff --git a/redfish-core/lib/certificate_service.hpp b/redfish-core/lib/certificate_service.hpp
index 4831617..7a94935 100644
--- a/redfish-core/lib/certificate_service.hpp
+++ b/redfish-core/lib/certificate_service.hpp
@@ -56,7 +56,7 @@
         Node(app, "/redfish/v1/CertificateService/")
     {
         // TODO: Issue#61 No entries are available for Certificate
-        // sevice at https://www.dmtf.org/standards/redfish
+        // service at https://www.dmtf.org/standards/redfish
         // "redfish standard registries". Need to modify after DMTF
         // publish Privilege details for certificate service
         entityPrivileges = {
@@ -500,7 +500,7 @@
 }; // CertificateActionGenerateCSR
 
 /**
- * @brief Parse and update Certficate Issue/Subject property
+ * @brief Parse and update Certificate Issue/Subject property
  *
  * @param[in] asyncResp Shared pointer to the response message
  * @param[in] str  Issuer/Subject value in key=value pairs
diff --git a/redfish-core/lib/chassis.hpp b/redfish-core/lib/chassis.hpp
index d1119cd..4a18028 100644
--- a/redfish-core/lib/chassis.hpp
+++ b/redfish-core/lib/chassis.hpp
@@ -96,7 +96,7 @@
                                   const std::variant<std::string>& value) {
             if (ec)
             {
-                // do not add err msg in redfish response, becaues this is not
+                // do not add err msg in redfish response, because this is not
                 //     mandatory property
                 BMCWEB_LOG_ERROR << "DBUS response error " << ec << "\n";
                 return;
@@ -131,7 +131,7 @@
                 subtree) {
             if (ec)
             {
-                // do not add err msg in redfish response, becaues this is not
+                // do not add err msg in redfish response, because this is not
                 //     mandatory property
                 BMCWEB_LOG_ERROR << "DBUS error: no matched iface " << ec
                                  << "\n";
diff --git a/redfish-core/lib/ethernet.hpp b/redfish-core/lib/ethernet.hpp
index a76b01b..b1a9f69 100644
--- a/redfish-core/lib/ethernet.hpp
+++ b/redfish-core/lib/ethernet.hpp
@@ -880,7 +880,7 @@
         }
     };
     // Passing null for gateway, as per redfish spec IPv6StaticAddresses object
-    // does not have assosiated gateway property
+    // does not have associated gateway property
     crow::connections::systemBus->async_method_call(
         std::move(createIpHandler), "xyz.openbmc_project.Network",
         "/xyz/openbmc_project/network/" + ifaceId,
@@ -936,7 +936,7 @@
             }
 
             extractIPV6Data(ethiface_id, resp, ipv6Data);
-            // Finally make a callback with usefull data
+            // Finally make a callback with useful data
             callback(true, ethData, ipv4Data, ipv6Data);
         },
         "xyz.openbmc_project.Network", "/xyz/openbmc_project/network",
@@ -978,7 +978,7 @@
                     if (interface.first ==
                         "xyz.openbmc_project.Network.EthernetInterface")
                     {
-                        // Cut out everyting until last "/", ...
+                        // Cut out everything until last "/", ...
                         const std::string& iface_id = objpath.first.str;
                         std::size_t last_pos = iface_id.rfind("/");
                         if (last_pos != std::string::npos)
diff --git a/redfish-core/lib/event_service.hpp b/redfish-core/lib/event_service.hpp
index da537bf..b27c6e0 100644
--- a/redfish-core/lib/event_service.hpp
+++ b/redfish-core/lib/event_service.hpp
@@ -246,7 +246,7 @@
         // Format: <protocol>://<host>:<port>/<uri>
         // protocol: http/https
         // host: Exclude ' ', ':', '#', '?'
-        // port: Empty or numeric value with ':' seperator.
+        // port: Empty or numeric value with ':' separator.
         // uri: Start with '/' and Exclude '#', ' '
         //      Can include query params(ex: '/event?test=1')
         // TODO: Need to validate hostname extensively(as per rfc)
diff --git a/redfish-core/lib/log_services.hpp b/redfish-core/lib/log_services.hpp
index 52a51a6..baef92f 100644
--- a/redfish-core/lib/log_services.hpp
+++ b/redfish-core/lib/log_services.hpp
@@ -2729,7 +2729,7 @@
             continue;
         }
 
-        // skip if a sepcific codeIndex is specified and does not match the
+        // skip if a specific codeIndex is specified and does not match the
         // currentIndex
         if ((codeIndex > 0) && (currentCodeIndex != codeIndex))
         {
diff --git a/redfish-core/lib/managers.hpp b/redfish-core/lib/managers.hpp
index 2ff65bf..2056d10 100644
--- a/redfish-core/lib/managers.hpp
+++ b/redfish-core/lib/managers.hpp
@@ -1497,7 +1497,7 @@
 
                 if (createNewObject && it.value() == nullptr)
                 {
-                    // can't delete a non-existant object
+                    // can't delete a non-existent object
                     messages::invalidObject(response->res, name);
                     continue;
                 }
diff --git a/redfish-core/lib/systems.hpp b/redfish-core/lib/systems.hpp
index e9e5280..422b2f7 100644
--- a/redfish-core/lib/systems.hpp
+++ b/redfish-core/lib/systems.hpp
@@ -49,7 +49,7 @@
     }
     BMCWEB_LOG_DEBUG << "Dimm Functional: " << *isDimmFunctional;
 
-    // Set it as Enabled if atleast one DIMM is functional
+    // Set it as Enabled if at least one DIMM is functional
     // Update STATE only if previous State was DISABLED and current Dimm is
     // ENABLED.
     nlohmann::json& prevMemSummary =
@@ -122,7 +122,7 @@
     nlohmann::json& prevProcState =
         aResp->res.jsonValue["ProcessorSummary"]["Status"]["State"];
 
-    // Set it as Enabled if atleast one CPU is functional
+    // Set it as Enabled if at least one CPU is functional
     // Update STATE only if previous State was Non_Functional and current CPU is
     // Functional.
     if (prevProcState == "Disabled")
diff --git a/redfish-core/lib/task.hpp b/redfish-core/lib/task.hpp
index fe1468f..fb2d0be 100644
--- a/redfish-core/lib/task.hpp
+++ b/redfish-core/lib/task.hpp
@@ -174,7 +174,7 @@
             [self = shared_from_this()](boost::system::error_code ec) {
                 if (ec == boost::asio::error::operation_aborted)
                 {
-                    return; // completed succesfully
+                    return; // completed successfully
                 }
                 if (!ec)
                 {
diff --git a/redfish-core/lib/update_service.hpp b/redfish-core/lib/update_service.hpp
index 8dae2fb..0b151d9 100644
--- a/redfish-core/lib/update_service.hpp
+++ b/redfish-core/lib/update_service.hpp
@@ -400,8 +400,8 @@
         BMCWEB_LOG_DEBUG << "Enter UpdateService.SimpleUpdate doPost";
 
         // User can pass in both TransferProtocol and ImageURI parameters or
-        // they can pass in just the ImageURI with the transfer protocl embedded
-        // within it.
+        // they can pass in just the ImageURI with the transfer protocol
+        // embedded within it.
         // 1) TransferProtocol:TFTP ImageURI:1.1.1.1/myfile.bin
         // 2) ImageURI:tftp://1.1.1.1/myfile.bin
 
diff --git a/redfish-core/lib/virtual_media.hpp b/redfish-core/lib/virtual_media.hpp
index 552e255..0b5eb1a 100644
--- a/redfish-core/lib/virtual_media.hpp
+++ b/redfish-core/lib/virtual_media.hpp
@@ -559,7 +559,7 @@
                                 std::optional<bool> writeProtected = true;
                                 std::optional<bool> inserted;
 
-                                // Read obligatory paramters (url of image)
+                                // Read obligatory parameters (url of image)
                                 if (!json_util::readJson(
                                         req, aResp->res, "Image", imageUrl,
                                         "WriteProtected", writeProtected,
