diff --git a/src/system_configuration.cpp b/src/system_configuration.cpp
index bccdb02..58b6dfc 100644
--- a/src/system_configuration.cpp
+++ b/src/system_configuration.cpp
@@ -2,6 +2,7 @@
 
 #include <phosphor-logging/elog-errors.hpp>
 #include <phosphor-logging/log.hpp>
+#include <stdplus/pinned.hpp>
 #include <xyz/openbmc_project/Common/error.hpp>
 
 namespace phosphor
@@ -22,40 +23,43 @@
     "interface='org.freedesktop.DBus.Properties',member='PropertiesChanged',"
     "arg0='org.freedesktop.hostname1'";
 
-SystemConfiguration::SystemConfiguration(sdbusplus::bus_t& bus,
-                                         stdplus::const_zstring objPath) :
+SystemConfiguration::SystemConfiguration(
+    stdplus::PinnedRef<sdbusplus::bus_t> bus, stdplus::const_zstring objPath) :
     Iface(bus, objPath.c_str(), Iface::action::defer_emit),
-    bus(bus), hostnamePropMatch(bus, propMatch, [&](sdbusplus::message_t& m) {
-        std::string intf;
-        std::unordered_map<std::string, std::variant<std::string>> values;
-        try
-        {
-            m.read(intf, values);
-            auto it = values.find("Hostname");
-            if (it == values.end())
+    bus(bus),
+    hostnamePropMatch(
+        bus, propMatch,
+        [sc = stdplus::PinnedRef(*this)](sdbusplus::message_t& m) {
+            std::string intf;
+            std::unordered_map<std::string, std::variant<std::string>> values;
+            try
             {
-                return;
+                m.read(intf, values);
+                auto it = values.find("Hostname");
+                if (it == values.end())
+                {
+                    return;
+                }
+                sc.get().Iface::hostName(std::get<std::string>(it->second));
             }
-            Iface::hostName(std::get<std::string>(it->second));
-        }
-        catch (const std::exception& e)
-        {
-            log<level::ERR>(
-                fmt::format("Hostname match parsing failed: {}", e.what())
-                    .c_str(),
-                entry("ERROR=%s", e.what()));
-        }
-    })
+            catch (const std::exception& e)
+            {
+                log<level::ERR>(
+                    fmt::format("Hostname match parsing failed: {}", e.what())
+                        .c_str(),
+                    entry("ERROR=%s", e.what()));
+            }
+        })
 {
     try
     {
         std::variant<std::string> name;
         auto req =
-            bus.new_method_call(HOSTNAMED_SVC, HOSTNAMED_OBJ,
-                                "org.freedesktop.DBus.Properties", "Get");
+            bus.get().new_method_call(HOSTNAMED_SVC, HOSTNAMED_OBJ,
+                                      "org.freedesktop.DBus.Properties", "Get");
 
         req.append(HOSTNAMED_INTF, "Hostname");
-        auto reply = bus.call(req);
+        auto reply = req.call();
         reply.read(name);
         SystemConfigIntf::hostName(std::get<std::string>(name), true);
     }
@@ -76,10 +80,10 @@
     }
     try
     {
-        auto method = bus.new_method_call(HOSTNAMED_SVC, HOSTNAMED_OBJ,
-                                          HOSTNAMED_INTF, "SetStaticHostname");
+        auto method = bus.get().new_method_call(
+            HOSTNAMED_SVC, HOSTNAMED_OBJ, HOSTNAMED_INTF, "SetStaticHostname");
         method.append(name, /*interactive=*/false);
-        bus.call_noreply(method);
+        bus.get().call_noreply(method);
         return SystemConfigIntf::hostName(std::move(name));
     }
     catch (const std::exception& e)
