diff --git a/host-bmc/dbus/availability.cpp b/host-bmc/dbus/availability.cpp
new file mode 100644
index 0000000..c4f10e1
--- /dev/null
+++ b/host-bmc/dbus/availability.cpp
@@ -0,0 +1,21 @@
+#include "availability.hpp"
+
+namespace pldm
+{
+namespace dbus
+{
+
+bool Availability::available() const
+{
+    return sdbusplus::xyz::openbmc_project::State::Decorator::server::
+        Availability::available();
+}
+
+bool Availability::available(bool value)
+{
+    return sdbusplus::xyz::openbmc_project::State::Decorator::server::
+        Availability::available(value);
+}
+
+} // namespace dbus
+} // namespace pldm
diff --git a/host-bmc/dbus/availability.hpp b/host-bmc/dbus/availability.hpp
new file mode 100644
index 0000000..5788f70
--- /dev/null
+++ b/host-bmc/dbus/availability.hpp
@@ -0,0 +1,42 @@
+#pragma once
+
+#include <sdbusplus/bus.hpp>
+#include <sdbusplus/server.hpp>
+#include <sdbusplus/server/object.hpp>
+#include <xyz/openbmc_project/State/Decorator/Availability/server.hpp>
+
+#include <string>
+
+namespace pldm
+{
+namespace dbus
+{
+using AvailabilityIntf = sdbusplus::server::object_t<
+    sdbusplus::xyz::openbmc_project::State::Decorator::server::Availability>;
+
+class Availability : public AvailabilityIntf
+{
+  public:
+    Availability() = delete;
+    ~Availability() = default;
+    Availability(const Availability&) = delete;
+    Availability& operator=(const Availability&) = delete;
+    Availability(Availability&&) = delete;
+    Availability& operator=(Availability&&) = delete;
+
+    Availability(sdbusplus::bus_t& bus, const std::string& objPath) :
+        AvailabilityIntf(bus, objPath.c_str()), path(objPath)
+    {}
+
+    /** Get value of Available */
+    bool available() const override;
+
+    /** Set value of Available */
+    bool available(bool value) override;
+
+  private:
+    std::string path;
+};
+
+} // namespace dbus
+} // namespace pldm
diff --git a/host-bmc/dbus/custom_dbus.cpp b/host-bmc/dbus/custom_dbus.cpp
index f5dd592..f4581d8 100644
--- a/host-bmc/dbus/custom_dbus.cpp
+++ b/host-bmc/dbus/custom_dbus.cpp
@@ -166,5 +166,18 @@
     }
 }
 
+void CustomDBus::setAvailabilityState(const std::string& path,
+                                      const bool& state)
+{
+    if (!availabilityState.contains(path))
+    {
+        availabilityState.emplace(
+            path, std::make_unique<Availability>(
+                      pldm::utils::DBusHandler::getBus(), path.c_str()));
+    }
+
+    availabilityState.at(path)->available(state);
+}
+
 } // namespace dbus
 } // namespace pldm
diff --git a/host-bmc/dbus/custom_dbus.hpp b/host-bmc/dbus/custom_dbus.hpp
index 7988bd9..281f928 100644
--- a/host-bmc/dbus/custom_dbus.hpp
+++ b/host-bmc/dbus/custom_dbus.hpp
@@ -1,6 +1,7 @@
 #pragma once
 
 #include "asset.hpp"
+#include "availability.hpp"
 #include "cable.hpp"
 #include "chassis.hpp"
 #include "common/utils.hpp"
@@ -165,8 +166,18 @@
      */
     void implementAssetInterface(const std::string& path);
 
+    /** @brief Set the availability state property
+     *
+     *  @param[in] path   - The object path
+     *
+     *  @param[in] state  - Availability state
+     */
+    void setAvailabilityState(const std::string& path, const bool& state);
+
   private:
     std::unordered_map<ObjectPath, std::unique_ptr<Asset>> asset;
+    std::unordered_map<ObjectPath, std::unique_ptr<Availability>>
+        availabilityState;
     std::unordered_map<ObjectPath, std::unique_ptr<LocationIntf>> location;
     std::unordered_map<ObjectPath, std::unique_ptr<CPUCore>> cpuCore;
     std::unordered_map<ObjectPath, std::unique_ptr<ItemChassis>> chassis;
