diff --git a/version.hpp b/version.hpp
index 507d4d0..d2c0624 100644
--- a/version.hpp
+++ b/version.hpp
@@ -15,39 +15,39 @@
 class ItemUpdater;
 
 using VersionInherit = sdbusplus::server::object::object<
-    sdbusplus::xyz::openbmc_project::Software::server::Version,
-    sdbusplus::xyz::openbmc_project::Object::server::Delete,
-    sdbusplus::xyz::openbmc_project::Common::server::FilePath>;
+        sdbusplus::xyz::openbmc_project::Software::server::Version,
+        sdbusplus::xyz::openbmc_project::Object::server::Delete,
+        sdbusplus::xyz::openbmc_project::Common::server::FilePath>;
 
 /** @class Version
  *  @brief OpenBMC version software management implementation.
  *  @details A concrete implementation for xyz.openbmc_project.Software.Version
- *  DBus API.
+ *  D-Bus API.
  */
 class Version : public VersionInherit
 {
     public:
         /** @brief Constructs Version Software Manager.
          *
-         * @param[in] bus            - The Dbus bus object
-         * @param[in] objPath        - The Dbus object path
-         * @param[in] versionId      - The version identifier
+         * @param[in] bus            - The D-Bus bus object
+         * @param[in] objPath        - The D-Bus object path
+         * @param[in] versionString  - The version string
          * @param[in] versionPurpose - The version purpose
          * @param[in] filePath       - The image filesystem path
          * @param[in] parent         - The version's parent
          */
         Version(sdbusplus::bus::bus& bus,
                 const std::string& objPath,
-                const std::string& versionId,
+                const std::string& versionString,
                 VersionPurpose versionPurpose,
                 const std::string& filePath,
-                ItemUpdater& parent) : VersionInherit(
-                    bus, (objPath).c_str(), true),
-                parent(parent)
+                ItemUpdater& parent) :
+                        VersionInherit(bus, (objPath).c_str(), true),
+                        parent(parent)
         {
             // Set properties.
             purpose(versionPurpose);
-            version(versionId);
+            version(versionString);
             path(filePath);
 
             // Emit deferred signal.
@@ -57,7 +57,7 @@
         /**
          * @brief Read the manifest file to get the value of the key.
          *
-         * @param[in] filePath - The path to file which contains the value
+         * @param[in] filePath - The path to the file which contains the value
          *                       of keys.
          * @param[in] keys     - A map of keys with empty values.
          *
@@ -68,15 +68,18 @@
                 std::map<std::string, std::string> keys);
 
         /**
-         * @brief Get the Version id.
+         * @brief Calculate the version id from the version string.
          *
-         * @param[in] version     - The image version.
+         * @details The version id is a unique 8 hexadecimal digit id
+         *          calculated from the version string.
+         *
+         * @param[in] version - The image version string (e.g. v1.99.10-19).
          *
          * @return The id.
          */
         static std::string getId(const std::string& version);
 
-        /** @brief Deletes the d-bus object and removes image.
+        /** @brief Deletes the D-Bus object and removes image.
          *
          */
         void delete_() override;
