diff --git a/sdbusplus/asio/connection.hpp b/sdbusplus/asio/connection.hpp
index 4c447f8..8dbd568 100644
--- a/sdbusplus/asio/connection.hpp
+++ b/sdbusplus/asio/connection.hpp
@@ -102,7 +102,7 @@
      *                       continuation for the async dbus method call. The
      *                       arguments to parse on the return are deduced from
      *                       the handler's signature and then passed in along
-     *                       with an error code.
+     *                       with an error code and optional message::message
      *  @param[in] service - The service to call.
      *  @param[in] objpath - The object's path for the call.
      *  @param[in] interf - The object's interface to call.
@@ -128,8 +128,20 @@
                           message::message& r) mutable {
             using FunctionTuple =
                 boost::callable_traits::args_t<MessageHandler>;
-            using UnpackType = typename utility::strip_first_arg<
-                typename utility::decay_tuple<FunctionTuple>::type>::type;
+            using FunctionTupleType =
+                typename utility::decay_tuple<FunctionTuple>::type;
+            constexpr bool returnWithMsg = []() {
+                if constexpr (std::tuple_size_v<FunctionTupleType>> 1)
+                {
+                    return std::is_same_v<
+                        std::tuple_element_t<1, FunctionTupleType>,
+                        sdbusplus::message::message>;
+                }
+                return false;
+            }();
+            using UnpackType =
+                typename utility::strip_first_n_args<returnWithMsg ? 2 : 1,
+                                                     FunctionTupleType>::type;
             UnpackType responseData;
             if (!ec)
             {
@@ -146,8 +158,19 @@
             }
             // Note.  Callback is called whether or not the unpack was
             // successful to allow the user to implement their own handling
-            auto response = std::tuple_cat(std::make_tuple(ec), responseData);
-            std::apply(handler, response);
+            if constexpr (returnWithMsg)
+            {
+                auto response = std::tuple_cat(std::make_tuple(ec),
+                                               std::forward_as_tuple(r),
+                                               std::move(responseData));
+                std::apply(handler, response);
+            }
+            else
+            {
+                auto response = std::tuple_cat(std::make_tuple(ec),
+                                               std::move(responseData));
+                std::apply(handler, response);
+            }
         });
     }
 
