diff --git a/src/cpuinfo_main.cpp b/src/cpuinfo_main.cpp
index 7670bbd..9860a00 100644
--- a/src/cpuinfo_main.cpp
+++ b/src/cpuinfo_main.cpp
@@ -80,8 +80,8 @@
 
 /**
  * List of properties we want to set on other D-Bus objects. This list is kept
- * around so that if any target objects are removed+readded, then we can set the
- * values again.
+ * around so that if any target objects are removed+re-added, then we can set
+ * the values again.
  */
 static std::list<CpuProperty> propertiesToSet;
 
diff --git a/src/mdrv2.cpp b/src/mdrv2.cpp
index 8067dc7..6886c8f 100644
--- a/src/mdrv2.cpp
+++ b/src/mdrv2.cpp
@@ -259,7 +259,7 @@
                                      uint8_t remainingEntries,
                                      std::vector<uint8_t> dirEntry)
 {
-    bool teminate = false;
+    bool terminate = false;
     if ((dirIndex >= maxDirEntries) || (returnedEntries < 1))
     {
         phosphor::logging::log<phosphor::logging::level::ERR>(
@@ -277,17 +277,17 @@
     }
     if (dirVersion == smbiosDir.dirVersion)
     {
-        teminate = true;
+        terminate = true;
     }
     else
     {
         if (remainingEntries > 0)
         {
-            teminate = false;
+            terminate = false;
         }
         else
         {
-            teminate = true;
+            terminate = true;
             smbiosDir.dirVersion = dirVersion;
         }
         uint8_t idIndex = dirIndex;
@@ -306,7 +306,7 @@
             pData += sizeof(DataIdStruct);
         }
     }
-    return teminate;
+    return terminate;
 }
 
 bool MDRV2::sendDataInformation(uint8_t idIndex, uint8_t /* flag */,
@@ -922,9 +922,9 @@
             record["Configured voltage"] =
                 uint16_t(memoryInfo->configuredVoltage);
             record["Memory Technology"] = memoryInfo->memoryTechnology;
-            record["Memory Operating Mode Capabilty"] =
+            record["Memory Operating Mode Capability"] =
                 uint16_t(memoryInfo->memoryOperatingModeCap);
-            record["Firmare Version"] = memoryInfo->firwareVersion;
+            record["Firmware Version"] = memoryInfo->firwareVersion;
             record["Module Manufacturer ID"] =
                 uint16_t(memoryInfo->modelManufId);
             record["Module Product ID"] = uint16_t(memoryInfo->modelProdId);
diff --git a/src/smbios-ipmi-blobs/handler.cpp b/src/smbios-ipmi-blobs/handler.cpp
index fb8111a..28d3a00 100644
--- a/src/smbios-ipmi-blobs/handler.cpp
+++ b/src/smbios-ipmi-blobs/handler.cpp
@@ -181,7 +181,7 @@
         return false;
     }
 
-    /* If a blob is committing or commited, return true directly. But if last
+    /* If a blob is committing or committed, return true directly. But if last
      * commit fails, may try to commit again.
      */
     if (blobPtr->state &
diff --git a/src/speed_select.cpp b/src/speed_select.cpp
index d393e4a..b4f4890 100644
--- a/src/speed_select.cpp
+++ b/src/speed_select.cpp
@@ -299,7 +299,7 @@
 
     /**
      * Emit the interface added signals which were deferred. This is required
-     * for ObjectMapper to pick up the objects, if we initially defered the
+     * for ObjectMapper to pick up the objects, if we initially deferred the
      * signal emitting.
      */
     void finalize()
diff --git a/src/sst_mailbox.cpp b/src/sst_mailbox.cpp
index d31f6dc..00bdc9d 100644
--- a/src/sst_mailbox.cpp
+++ b/src/sst_mailbox.cpp
@@ -27,7 +27,7 @@
  * Local accesses to the OS Mailbox require the package to pop up to PC2. Also
  * provides PCode OS Mailbox routine.
  *
- * Since multiple applications may be modifing WOP, we'll use this algorithm:
+ * Since multiple applications may be modifying WOP, we'll use this algorithm:
  * Whenever a PECI command fails with associated error code, set WOP bit and
  * retry command. Upon manager destruction, clear WOP bit only if we previously
  * set it.
