diff --git a/sdbusplus/bus.hpp b/sdbusplus/bus.hpp
index 8ca107d..168099c 100644
--- a/sdbusplus/bus.hpp
+++ b/sdbusplus/bus.hpp
@@ -2,6 +2,7 @@
 
 #include <memory>
 #include <systemd/sd-bus.h>
+#include <sdbusplus/message.hpp>
 
 namespace sdbusplus
 {
@@ -107,7 +108,7 @@
         sd_bus_message_new_method_call(_bus.get(), &m, service, objpath,
                                        interf, method);
 
-        return m;
+        return message::message(m);
     }
 
     /** @brief Perform a message call.
@@ -117,10 +118,10 @@
      *
      *  @return The response message.
      */
-    auto call(sd_bus_message* m, uint64_t timeout_us = 0)
+    auto call(message::message& m, uint64_t timeout_us = 0)
     {
         sd_bus_message* reply = nullptr;
-        sd_bus_call(_bus.get(), m, timeout_us, nullptr, &reply);
+        sd_bus_call(_bus.get(), m.get(), timeout_us, nullptr, &reply);
 
         return reply;
     }
@@ -130,9 +131,9 @@
      *  @param[in] m - The method_call message.
      *  @param[in] timeout_us - The timeout for the method call.
      */
-    void call_noreply(sd_bus_message* m, uint64_t timeout_us = 0)
+    void call_noreply(message::message& m, uint64_t timeout_us = 0)
     {
-        sd_bus_call(_bus.get(), m, timeout_us, nullptr, nullptr);
+        sd_bus_call(_bus.get(), m.get(), timeout_us, nullptr, nullptr);
     }
 
     private:
diff --git a/test/message/append.cpp b/test/message/append.cpp
index c9c2e47..1cc56ff 100644
--- a/test/message/append.cpp
+++ b/test/message/append.cpp
@@ -1,6 +1,6 @@
 #include <iostream>
-#include <sdbusplus/message/append.hpp>
 #include <cassert>
+#include <sdbusplus/message.hpp>
 #include <sdbusplus/bus.hpp>
 
 // Global to share the dbus type string between client and server.
@@ -53,66 +53,66 @@
     }
 }
 
-void newMethodCall__test(sdbusplus::bus::bus& b, sd_bus_message** m)
+auto newMethodCall__test(sdbusplus::bus::bus& b)
 {
     // Allocate a method-call message for INTERFACE,TEST_METHOD.
-    *m = b.new_method_call(SERVICE, "/", INTERFACE, TEST_METHOD);
+    return b.new_method_call(SERVICE, "/", INTERFACE, TEST_METHOD);
 }
 
 void runTests()
 {
     using namespace std::literals;
 
-    sd_bus_message* m = nullptr;
     auto b = sdbusplus::bus::new_default();
 
     // Test r-value int.
     {
-        newMethodCall__test(b, &m);
-        sdbusplus::message::append(m, 1);
+        auto m = newMethodCall__test(b);
+        m.append(1);
         verifyTypeString = "i";
         b.call_noreply(m);
     }
-
     // Test l-value int.
     {
-        newMethodCall__test(b, &m);
+        auto m = newMethodCall__test(b);
         int a = 1;
-        sdbusplus::message::append(m, a, a);
+        m.append(a, a);
         verifyTypeString = "ii";
         b.call_noreply(m);
     }
 
     // Test multiple ints.
     {
-        newMethodCall__test(b, &m);
-        sdbusplus::message::append(m, 1, 2, 3, 4, 5);
+        auto m = newMethodCall__test(b);
+        m.append(1, 2, 3, 4, 5);
         verifyTypeString = "iiiii";
         b.call_noreply(m);
     }
 
     // Test r-value string.
     {
-        newMethodCall__test(b, &m);
-        sdbusplus::message::append(m, "asdf"s);
+        auto m = newMethodCall__test(b);
+        m.append("asdf"s);
         verifyTypeString = "s";
         b.call_noreply(m);
     }
 
     // Test multiple strings, various forms.
     {
-        newMethodCall__test(b, &m);
+        auto m = newMethodCall__test(b);
         auto str = "jkl;"s;
         auto str2 = "JKL:"s;
-        sdbusplus::message::append(m, 1, "asdf", "ASDF"s, str,
-                                   std::move(str2), 5);
+        m.append(1, "asdf", "ASDF"s, str,
+                 std::move(str2), 5);
         verifyTypeString = "issssi";
         b.call_noreply(m);
     }
 
     // Shutdown server.
-    m = b.new_method_call(SERVICE, "/", INTERFACE, QUIT_METHOD);
-    b.call_noreply(m);
+    {
+        auto m = b.new_method_call(SERVICE, "/", INTERFACE, QUIT_METHOD);
+        b.call_noreply(m);
+    }
 }
 
 int main()
