diff --git a/extensions/openpower-pels/user_header.cpp b/extensions/openpower-pels/user_header.cpp
index 9258e78..5aef28d 100644
--- a/extensions/openpower-pels/user_header.cpp
+++ b/extensions/openpower-pels/user_header.cpp
@@ -34,14 +34,14 @@
 {
     stream >> _header >> _eventSubsystem >> _eventScope >> _eventSeverity >>
         _eventType >> _reserved4Byte1 >> _problemDomain >> _problemVector >>
-        _actionFlags >> _reserved4Byte2;
+        _actionFlags >> _states;
 }
 
 void UserHeader::flatten(Stream& stream) const
 {
     stream << _header << _eventSubsystem << _eventScope << _eventSeverity
            << _eventType << _reserved4Byte1 << _problemDomain << _problemVector
-           << _actionFlags << _reserved4Byte2;
+           << _actionFlags << _states;
 }
 
 UserHeader::UserHeader(const message::Entry& entry,
@@ -89,7 +89,7 @@
     // These will be cleaned up later in pel_rules::check()
     _actionFlags = entry.actionFlags.value_or(0);
 
-    _reserved4Byte2 = 0;
+    _states = 0;
 
     _valid = true;
 }
diff --git a/extensions/openpower-pels/user_header.hpp b/extensions/openpower-pels/user_header.hpp
index 14407dc..f1fc66d 100644
--- a/extensions/openpower-pels/user_header.hpp
+++ b/extensions/openpower-pels/user_header.hpp
@@ -153,6 +153,51 @@
     }
 
     /**
+     * @brief Returns the host transmission state
+     *
+     * @return uint8_t - the host transmission state
+     */
+    uint8_t hostTransmissionState() const
+    {
+        return _states & 0xFF;
+    }
+
+    /**
+     * @brief Sets the host transmission state
+     *
+     * @param[in] state - the new state
+     */
+    void setHostTransmissionState(uint8_t state)
+    {
+        _states &= 0xFFFFFF00;
+        _states |= state;
+    }
+
+    /**
+     * @brief Returns the HMC transmission state
+     *
+     * (HMC = Hardware Management Console)
+     *
+     * @return uint8_t - the HMC transmission state
+     */
+    uint8_t hmcTransmissionState() const
+    {
+        return (_states & 0x0000FF00) >> 8;
+    }
+
+    /**
+     * @brief Sets the HMC transmission state
+     *
+     * @param[in] state - the new state
+     */
+    void setHMCTransmissionState(uint8_t state)
+    {
+        uint32_t newState = state << 8;
+        _states &= 0xFFFF00FF;
+        _states |= newState;
+    }
+
+    /**
      * @brief Returns the size of this section when flattened into a PEL
      *
      * @return size_t - the size of the section
@@ -163,7 +208,7 @@
                sizeof(_eventScope) + sizeof(_eventSeverity) +
                sizeof(_eventType) + sizeof(_reserved4Byte1) +
                sizeof(_problemDomain) + sizeof(_problemVector) +
-               sizeof(_actionFlags) + sizeof(_reserved4Byte2);
+               sizeof(_actionFlags) + sizeof(_states);
     }
 
     /**
@@ -228,9 +273,15 @@
     uint16_t _actionFlags;
 
     /**
-     * @brief The second reserved word placeholder.
+     * @brief The second reserved word that we are
+     *        using for storing state information.
+     *
+     * 0x0000AABB
+     *   Where:
+     *      0xAA = HMC transmission state
+     *      0xBB = Host transmission state
      */
-    uint32_t _reserved4Byte2;
+    uint32_t _states;
 };
 
 } // namespace pels
