diff --git a/include/bridgingcommands.hpp b/include/bridgingcommands.hpp
index 6dbac02..e8be693 100644
--- a/include/bridgingcommands.hpp
+++ b/include/bridgingcommands.hpp
@@ -197,7 +197,7 @@
 
     void clearResponseQueue();
 
-    ipmi::Cc handleIpmbChannel(const uint8_t tracking,
+    ipmi::Cc handleIpmbChannel(ipmi::Context::ptr ctx, const uint8_t tracking,
                                const std::vector<uint8_t> &msgData,
                                std::vector<uint8_t> &rspData);
 
diff --git a/src/bridgingcommands.cpp b/src/bridgingcommands.cpp
index 0922438..4041474 100644
--- a/src/bridgingcommands.cpp
+++ b/src/bridgingcommands.cpp
@@ -238,7 +238,8 @@
     }
 }
 
-ipmi::Cc Bridging::handleIpmbChannel(const uint8_t tracking,
+ipmi::Cc Bridging::handleIpmbChannel(ipmi::Context::ptr ctx,
+                                     const uint8_t tracking,
                                      const std::vector<uint8_t> &msgData,
                                      std::vector<uint8_t> &rspData)
 {
@@ -292,20 +293,17 @@
 
     auto ipmbRequest = IpmbRequest(sendMsgReqData, msgLen);
 
-    std::tuple<int, uint8_t, uint8_t, uint8_t, uint8_t, std::vector<uint8_t>>
-        ipmbResponse;
+    typedef std::tuple<int, uint8_t, uint8_t, uint8_t, uint8_t,
+                       std::vector<uint8_t>>
+        IPMBResponse;
 
     // send request to IPMB
-    try
-    {
-        std::shared_ptr<sdbusplus::asio::connection> dbus = getSdBus();
-        auto mesg =
-            dbus->new_method_call(ipmbBus, ipmbObj, ipmbIntf, "sendRequest");
-        ipmbRequest.prepareRequest(mesg);
-        auto ret = dbus->call(mesg);
-        ret.read(ipmbResponse);
-    }
-    catch (sdbusplus::exception::SdBusError &e)
+    boost::system::error_code ec;
+    auto ipmbResponse = ctx->bus->yield_method_call<IPMBResponse>(
+        ctx->yield, ec, ipmbBus, ipmbObj, ipmbIntf, "sendRequest",
+        ipmbMeChannelNum, ipmbRequest.netFn, ipmbRequest.rqLun, ipmbRequest.cmd,
+        ipmbRequest.data);
+    if (ec)
     {
         phosphor::logging::log<phosphor::logging::level::ERR>(
             "handleIpmbChannel, dbus call exception");
@@ -388,7 +386,7 @@
  **/
 ipmi::RspType<std::vector<uint8_t> // responseData
               >
-    ipmiAppSendMessage(const uint4_t channelNumber,
+    ipmiAppSendMessage(ipmi::Context::ptr ctx, const uint4_t channelNumber,
                        const bool authenticationEnabled,
                        const bool encryptionEnabled, const uint2_t tracking,
                        ipmi::message::Payload &msg)
@@ -428,7 +426,7 @@
             }
 
             returnVal = bridging.handleIpmbChannel(
-                static_cast<const uint8_t>(tracking), unpackMsg, rspData);
+                ctx, static_cast<const uint8_t>(tracking), unpackMsg, rspData);
             break;
         // fall through to default
         case targetChannelIcmb10:
