diff --git a/fan_enclosure.hpp b/fan_enclosure.hpp
index da6f7e5..1c8d241 100644
--- a/fan_enclosure.hpp
+++ b/fan_enclosure.hpp
@@ -12,6 +12,9 @@
 namespace presence
 {
 
+/**
+ * @brief Specifies the defined presence states of a fan enclosure
+ */
 typedef enum presenceState
 {
     NOT_PRESENT,
@@ -19,6 +22,13 @@
     UNKNOWN
 } presenceState;
 
+/**
+ * @class FanEnclosure
+ * @brief OpenBMC fan enclosure inventory presence implementation
+ * @details Inventory is based on the fan enclosure being present or not. This
+ * class represents that fan enclosure and updates its presences status within
+ * its inventory object based on the status of all its sensors.
+ */
 class FanEnclosure
 {
     using Property = std::string;
@@ -40,6 +50,12 @@
         FanEnclosure& operator=(FanEnclosure&&) = delete;
         ~FanEnclosure() = default;
 
+        /**
+         * @brief Constructs Fan Enclosure Object
+         *
+         * @param[in] bus - Dbus bus object
+         * @param[in] fanProp - Fan enclosure properties
+         */
         FanEnclosure(sdbusplus::bus::bus& bus,
                      const phosphor::fan::Properties& fanProp) :
                         bus(bus),
@@ -50,20 +66,51 @@
             updInventory();
         }
 
+        /**
+         * @brief Update inventory when the determined presence of this fan
+         * enclosure has changed
+         */
         void updInventory();
+        /**
+         * @brief Add a sensor association to this fan enclosure
+         *
+         * @param[in] sensor - Sensor associated to this fan enclosure
+         */
         void addSensor(
             std::unique_ptr<Sensor>&& sensor);
 
     private:
+        /** @brief Connection for sdbusplus bus */
         sdbusplus::bus::bus& bus;
+        /** @brief Inventory path for this fan enclosure */
         const std::string invPath;
+        /** @brief Description used as 'PrettyName' on inventory object */
         const std::string fanDesc;
+        /** @brief List of sensors associated with this fan enclosure */
         std::vector<std::unique_ptr<Sensor>> sensors;
+        /** @brief Last known presence state of this fan enclosure */
         presenceState presState = UNKNOWN;
 
+        /**
+         * @brief Get the current presence state based on all sensors
+         *
+         * @return Current presence state determined from all sensors
+         */
         presenceState getCurPresState();
         //TODO openbmc/openbmc#1299 - Move getInvService() to a utility file
+        /**
+         * @brief Get the inventory service name from the mapper object
+         *
+         * @return The inventory manager service name
+         */
         std::string getInvService();
+        /**
+         * @brief Construct the inventory object map
+         *
+         * @param[in] Current presence state
+         *
+         * @return The inventory object map to update inventory
+         */
         ObjectMap getObjectMap(bool curPresState);
 
 };
