diff --git a/extensions/openpower-pels/manager.cpp b/extensions/openpower-pels/manager.cpp
index 9ce9b98..df8e50c 100644
--- a/extensions/openpower-pels/manager.cpp
+++ b/extensions/openpower-pels/manager.cpp
@@ -18,6 +18,7 @@
 #include "additional_data.hpp"
 #include "json_utils.hpp"
 #include "pel.hpp"
+#include "pel_entry.hpp"
 #include "service_indicators.hpp"
 
 #include <fmt/format.h>
@@ -808,11 +809,16 @@
         varData.emplace(
             std::string("Subsystem"),
             pv::getValue(attr.subsystem, pel_values::subsystemValues));
+
+        varData.emplace(
+            std::string("ManagementSystemAck"),
+            (attr.hmcState == TransmissionState::acked ? true : false));
+
         // Path to create PELEntry Interface is same as PEL
         auto path = std::string(OBJ_ENTRY) + '/' + std::to_string(obmcLogID);
         // Create Interface for PELEntry and set properties
-        auto pelEntry = std::make_unique<PELEntry>(_logManager.getBus(),
-                                                   path.c_str(), varData);
+        auto pelEntry = std::make_unique<PELEntry>(_logManager.getBus(), path,
+                                                   varData, obmcLogID, &_repo);
         _pelEntries.emplace(std::move(path), std::move(pelEntry));
     }
 }
diff --git a/extensions/openpower-pels/manager.hpp b/extensions/openpower-pels/manager.hpp
index 5923f00..a9476d5 100644
--- a/extensions/openpower-pels/manager.hpp
+++ b/extensions/openpower-pels/manager.hpp
@@ -26,9 +26,6 @@
 using PELInterface = sdbusplus::server::object::object<
     sdbusplus::org::open_power::Logging::server::PEL>;
 
-using PELEntry = sdbusplus::org::open_power::Logging::PEL::server::Entry;
-using PropertiesVariant = PELEntry::PropertiesVariant;
-
 /**
  * @brief PEL manager object
  */
diff --git a/extensions/openpower-pels/meson.build b/extensions/openpower-pels/meson.build
index 1c8ba49..82e86c4 100644
--- a/extensions/openpower-pels/meson.build
+++ b/extensions/openpower-pels/meson.build
@@ -128,6 +128,7 @@
     'extended_user_data.cpp',
     'host_notifier.cpp',
     'manager.cpp',
+    'pel_entry.cpp',
     'pldm_interface.cpp',
     'repository.cpp',
     'src.cpp',
diff --git a/extensions/openpower-pels/pel_entry.cpp b/extensions/openpower-pels/pel_entry.cpp
new file mode 100644
index 0000000..403befd
--- /dev/null
+++ b/extensions/openpower-pels/pel_entry.cpp
@@ -0,0 +1,39 @@
+#include "pel_entry.hpp"
+
+#include <iostream>
+#include <xyz/openbmc_project/Common/error.hpp>
+
+namespace openpower
+{
+namespace pels
+{
+
+namespace common_error = sdbusplus::xyz::openbmc_project::Common::Error;
+
+bool PELEntry::managementSystemAck(bool value)
+{
+    auto current = sdbusplus::org::open_power::Logging::PEL::server::Entry::
+        managementSystemAck();
+    if (value != current)
+    {
+        current = sdbusplus::org::open_power::Logging::PEL::server::Entry::
+            managementSystemAck(value);
+
+        Repository::LogID id{Repository::LogID::Obmc(getMyId())};
+        if (auto logId = _repo->getLogID(id); logId.has_value())
+        {
+            // Update HMC acknowledge bit in PEL
+            _repo->setPELHMCTransState(
+                logId->pelID.id,
+                (value ? TransmissionState::acked : TransmissionState::newPEL));
+        }
+        else
+        {
+            throw common_error::InvalidArgument();
+        }
+    }
+    return current;
+}
+
+} // namespace pels
+} // namespace openpower
diff --git a/extensions/openpower-pels/pel_entry.hpp b/extensions/openpower-pels/pel_entry.hpp
new file mode 100644
index 0000000..7decb42
--- /dev/null
+++ b/extensions/openpower-pels/pel_entry.hpp
@@ -0,0 +1,68 @@
+#pragma once
+
+#include "manager.hpp"
+namespace openpower
+{
+namespace pels
+{
+
+using PELEntryIface = sdbusplus::org::open_power::Logging::PEL::server::Entry;
+using PropertiesVariant = PELEntryIface::PropertiesVariant;
+
+class PELEntry : public PELEntryIface
+{
+
+  public:
+    PELEntry() = delete;
+    PELEntry(const PELEntry&) = delete;
+    PELEntry& operator=(const PELEntry&) = delete;
+    PELEntry(PELEntry&&) = delete;
+    PELEntry& operator=(PELEntry&&) = delete;
+    virtual ~PELEntry() = default;
+
+    /** @brief Constructor to put an object onto the bus at a dbus path.
+     *  @param[in] bus - Bus to attach to.
+     *  @param[in] path - Path to attach at.
+     *  @param[in] prop - Default property values to be set when this interface
+     * is added to the bus.
+     *  @param[in] id - obmc id for this instance.
+     *  @param[in] repo - Repository pointer to lookup PEL to set appropriate
+     * attributes.
+     */
+
+    PELEntry(sdbusplus::bus::bus& bus, const std::string& path,
+             const std::map<std::string, PropertiesVariant>& prop, uint32_t id,
+             Repository* repo) :
+        PELEntryIface(bus, path.c_str(), prop),
+        _obmcId(id), _repo(repo)
+    {
+    }
+
+    /** @brief Update managementSystemAck flag.
+     *  @param[in] value - A true value says HMC acknowledged the PEL.
+     *  @returns New property value
+     */
+    bool managementSystemAck(bool value) override;
+
+    /**
+     * @brief Returns OpenBMC event log ID associated with this interface.
+     */
+    uint32_t getMyId(void) const
+    {
+        return _obmcId;
+    }
+
+  private:
+    /**
+     * @brief Corresponding OpenBMC event log id of this interface.
+     */
+    uint32_t _obmcId;
+
+    /**
+     * @brief Repository pointer to look for updating PEL fields.
+     */
+    Repository* _repo;
+};
+
+} // namespace pels
+} // namespace openpower
\ No newline at end of file
diff --git a/extensions/openpower-pels/user_header.cpp b/extensions/openpower-pels/user_header.cpp
index a1b6194..34e2fa1 100644
--- a/extensions/openpower-pels/user_header.cpp
+++ b/extensions/openpower-pels/user_header.cpp
@@ -230,12 +230,19 @@
         pv::getValuesBitwise(_actionFlags, pel_values::actionFlagsValues);
 
     std::string hostState{"Invalid"};
+    std::string hmcState{"Invalid"};
     auto iter = pv::transmissionStates.find(
         static_cast<TransmissionState>(hostTransmissionState()));
     if (iter != pv::transmissionStates.end())
     {
         hostState = iter->second;
     }
+    auto iter1 = pv::transmissionStates.find(
+        static_cast<TransmissionState>(hmcTransmissionState()));
+    if (iter1 != pv::transmissionStates.end())
+    {
+        hmcState = iter1->second;
+    }
 
     std::string uh;
     jsonInsert(uh, pv::sectionVer, getNumberString("%d", userHeaderVersion), 1);
@@ -248,6 +255,7 @@
     jsonInsert(uh, "Event Type", eventType, 1);
     jsonInsertArray(uh, "Action Flags", actionFlags, 1);
     jsonInsert(uh, "Host Transmission", hostState, 1);
+    jsonInsert(uh, "HMC Transmission", hmcState, 1);
     uh.erase(uh.size() - 2);
     return uh;
 }
