diff --git a/include/ipmid/message.hpp b/include/ipmid/message.hpp
index 030618f..7f1ad7e 100644
--- a/include/ipmid/message.hpp
+++ b/include/ipmid/message.hpp
@@ -36,9 +36,10 @@
     Context() = default;
 
     Context(NetFn netFn, Cmd cmd, int channel, int userId, Privilege priv,
-            boost::asio::yield_context* yield = nullptr) :
+            int rqSA = 0, boost::asio::yield_context* yield = nullptr) :
         netFn(netFn),
-        cmd(cmd), channel(channel), userId(userId), priv(priv), yield(yield)
+        cmd(cmd), channel(channel), userId(userId), priv(priv), rqSA(rqSA),
+        yield(yield)
     {
     }
 
@@ -48,6 +49,9 @@
     int channel = 0;
     int userId = 0;
     Privilege priv = Privilege::None;
+    // srcAddr is only set on IPMB requests because
+    // Platform Event Message needs it to determine the incoming format
+    int rqSA = 0;
     // if non-null, use this to do blocking asynchronous asio calls
     boost::asio::yield_context* yield = nullptr;
 };
diff --git a/ipmid-new.cpp b/ipmid-new.cpp
index 403d4d1..2654d61 100644
--- a/ipmid-new.cpp
+++ b/ipmid-new.cpp
@@ -480,6 +480,7 @@
         };
     std::string sender = m.get_sender();
     Privilege privilege = Privilege::None;
+    int rqSA = 0;
     uint8_t userId = 0; // undefined user
 
     // figure out what channel the request came in on
@@ -516,15 +517,32 @@
         // get max privilege for session-less channels
         // For now, there is not a way to configure this, default to Admin
         privilege = Privilege::Admin;
+
+        // ipmb should supply rqSA
+        ChannelInfo chInfo;
+        getChannelInfo(channel, chInfo);
+        if (static_cast<EChannelMediumType>(chInfo.mediumType) ==
+            EChannelMediumType::ipmb)
+        {
+            const auto iter = options.find("rqSA");
+            if (iter != options.end())
+            {
+                if (std::holds_alternative<int>(iter->second))
+                {
+                    rqSA = std::get<int>(iter->second);
+                }
+            }
+        }
     }
     // check to see if the requested priv/username is valid
     log<level::DEBUG>("Set up ipmi context", entry("SENDER=%s", sender.c_str()),
                       entry("NETFN=0x%X", netFn), entry("CMD=0x%X", cmd),
                       entry("CHANNEL=%u", channel), entry("USERID=%u", userId),
-                      entry("PRIVILEGE=%u", static_cast<uint8_t>(privilege)));
+                      entry("PRIVILEGE=%u", static_cast<uint8_t>(privilege)),
+                      entry("RQSA=%x", rqSA));
 
     auto ctx = std::make_shared<ipmi::Context>(netFn, cmd, channel, userId,
-                                               privilege, &yield);
+                                               privilege, rqSA, &yield);
     auto request = std::make_shared<ipmi::message::Request>(
         ctx, std::forward<std::vector<uint8_t>>(data));
     message::Response::ptr response = executeIpmiCommand(request);
