diff --git a/example/calculator-client.cpp b/example/calculator-client.cpp
index 78c8880..56e9fb4 100644
--- a/example/calculator-client.cpp
+++ b/example/calculator-client.cpp
@@ -8,35 +8,35 @@
     constexpr auto service = "net.poettering.Calculator";
     constexpr auto path = "/net/poettering/calculator";
 
-    auto c =
-        sdbusplus::client::net::poettering::Calculator().service(service).path(
-            path);
+    auto c = sdbusplus::client::net::poettering::Calculator(ctx)
+                 .service(service)
+                 .path(path);
 
     // Alternatively, sdbusplus::async::client_t<Calculator, ...>() could have
     // been used to combine multiple interfaces into a single client-proxy.
 
     {
-        auto _ = co_await c.multiply(ctx, 7, 6);
+        auto _ = co_await c.multiply(7, 6);
         std::cout << "Should be 42: " << _ << std::endl;
     }
 
     {
-        auto _ = co_await c.get_property<int64_t>(ctx, "LastResult");
+        auto _ = co_await c.get_property<int64_t>("LastResult");
         std::cout << "Should be 42: " << _ << std::endl;
     }
 
     {
-        co_await c.clear(ctx);
+        co_await c.clear();
     }
 
     {
-        auto _ = co_await c.get_property<int64_t>(ctx, "LastResult");
+        auto _ = co_await c.get_property<int64_t>("LastResult");
         std::cout << "Should be 0: " << _ << std::endl;
     }
 
     {
-        co_await c.set_property<int64_t>(ctx, "LastResult", 1234);
-        auto _ = co_await c.get_property<int64_t>(ctx, "LastResult");
+        co_await c.set_property<int64_t>("LastResult", 1234);
+        auto _ = co_await c.get_property<int64_t>("LastResult");
         std::cout << "Should be 1234: " << _ << std::endl;
     }
 
diff --git a/include/sdbusplus/async/client.hpp b/include/sdbusplus/async/client.hpp
index ae78b80..5290894 100644
--- a/include/sdbusplus/async/client.hpp
+++ b/include/sdbusplus/async/client.hpp
@@ -21,38 +21,40 @@
     public Types<sdbusplus::async::proxy_ns::proxy<S, P, false, Preserved>>...
 {
   private:
+    sdbusplus::async::context& ctx{};
     sdbusplus::async::proxy_ns::proxy<S, P, false, Preserved> proxy{};
 
   public:
+    constexpr client() = delete;
     /* Delete default constructor if Service or Path have been provided. */
-    constexpr client()
+    explicit client(sdbusplus::async::context& ctx)
         requires(S || P)
     = delete;
     /* Default (empty) constructor only when Service and Path are missing. */
-    constexpr client()
+    explicit client(sdbusplus::async::context& ctx)
         requires(!S && !P)
-        : Types<decltype(proxy)>(proxy)...
+        : Types<decltype(proxy)>(ctx, proxy)..., ctx(ctx)
     {}
 
     /* Conversion constructor for a non-empty (Service and/or Path) proxy. */
-    constexpr explicit client(
-        sdbusplus::async::proxy_ns::proxy<S, P, false, Preserved> p)
+    explicit client(sdbusplus::async::context& ctx,
+                    sdbusplus::async::proxy_ns::proxy<S, P, false, Preserved> p)
         requires(S || P)
-        : Types<decltype(proxy)>(p)..., proxy(p)
+        : Types<decltype(proxy)>(ctx, p)..., ctx(ctx), proxy(p)
     {}
 
     /* Convert a non-Service instance to a Service instance. */
-    constexpr auto service(auto& s) const noexcept
+    auto service(auto& s) const noexcept
         requires(!S)
     {
-        return client<true, P, Preserved, Types...>(proxy.service(s));
+        return client<true, P, Preserved, Types...>(ctx, proxy.service(s));
     }
 
     /* Convert a non-Path instance to a Path instance. */
-    constexpr auto path(auto& p) const noexcept
+    auto path(auto& p) const noexcept
         requires(!P)
     {
-        return client<S, true, Preserved, Types...>(proxy.path(p));
+        return client<S, true, Preserved, Types...>(ctx, proxy.path(p));
     }
 };
 
diff --git a/tools/sdbusplus/templates/interface.client.hpp.mako b/tools/sdbusplus/templates/interface.client.hpp.mako
index 879e415..bbb8538 100644
--- a/tools/sdbusplus/templates/interface.client.hpp.mako
+++ b/tools/sdbusplus/templates/interface.client.hpp.mako
@@ -41,15 +41,14 @@
 
     // To be replaced by generators...
     template <typename T>
-    auto get_property(sdbusplus::async::context& ctx, auto& property) const
+    auto get_property(auto& property) const
     {
         return proxy.template get_property<T>(ctx, property);
     }
 
     // To be replaced by generators...
     template <typename T>
-    auto set_property(sdbusplus::async::context& ctx, auto& property,
-                      T&& value) const
+    auto set_property(auto& property, T&& value) const
     {
         return proxy.template set_property<T>(ctx, property,
                                               std::forward<T>(value));
@@ -57,9 +56,10 @@
 
   private:
     // Conversion constructor from proxy used by client_t.
-    constexpr explicit ${interface.classname}(Proxy p) :
-        proxy(p.interface(interface)) {}
+    constexpr ${interface.classname}(sdbusplus::async::context& ctx, Proxy p) :
+        ctx(ctx), proxy(p.interface(interface)) {}
 
+    sdbusplus::async::context& ctx{};
     decltype(std::declval<Proxy>().interface(interface)) proxy = {};
 };
 
diff --git a/tools/sdbusplus/templates/method.client.hpp.mako b/tools/sdbusplus/templates/method.client.hpp.mako
index ca1c5a2..6d035ca 100644
--- a/tools/sdbusplus/templates/method.client.hpp.mako
+++ b/tools/sdbusplus/templates/method.client.hpp.mako
@@ -14,21 +14,20 @@
         % endfor
     % endif
      */
-    auto ${method.camelCase}(
-            sdbusplus::async::context& ctx\
+    auto ${method.camelCase}(\
     % if len(method.parameters) != 0:
-,
-    % else:
 
+            ${method.get_parameters_str(interface)}\
+    % else:
     % endif
-            ${method.get_parameters_str(interface)})
+)
     {
         return proxy.template call<${method.returns_as_list(interface)}>(
             ctx, "${method.name}"\
     % if len(method.parameters) != 0:
 ,
+            ${method.parameters_as_list()}\
     % else:
-
     % endif
-            ${method.parameters_as_list()});
+);
     }
