diff --git a/example/get-all-properties.cpp b/example/get-all-properties.cpp
index fec7f6d..1b3c508 100644
--- a/example/get-all-properties.cpp
+++ b/example/get-all-properties.cpp
@@ -64,12 +64,10 @@
         return fatalErrors_;
     }
 
-    auto logSystemErrorCode()
+    auto logSystemErrorCode(boost::system::error_code ec)
     {
-        return [this](boost::system::error_code ec) {
-            std::cerr << "Error: " << ec << "\n";
-            ++fatalErrors_;
-        };
+        std::cerr << "Error: " << ec << "\n";
+        ++fatalErrors_;
     }
 
     void logException(const std::exception& e)
@@ -90,10 +88,15 @@
     {
         sdbusplus::asio::getAllProperties(
             bus_, xyz::demo::name, xyz::demo::path, xyz::demo::interface,
-            logSystemErrorCode(),
-            [this](std::vector<std::pair<
+            [this](boost::system::error_code ec,
+                   std::vector<std::pair<
                        std::string, std::variant<std::monostate, std::string>>>&
-                       properties) {
+                       properties) -> void {
+                if (ec)
+                {
+                    logSystemErrorCode(ec);
+                    return;
+                }
                 try
                 {
                     std::string greetings;
@@ -130,11 +133,16 @@
     {
         sdbusplus::asio::getAllProperties(
             bus_, xyz::demo::name, xyz::demo::path, xyz::demo::interface,
-            logSystemErrorCode(),
-            [this](
-                std::vector<std::pair<std::string,
-                                      std::variant<std::monostate, std::string,
-                                                   uint32_t>>>& properties) {
+            [this](boost::system::error_code ec,
+                   std::vector<std::pair<
+                       std::string,
+                       std::variant<std::monostate, std::string, uint32_t>>>&
+                       properties) -> void {
+                if (ec)
+                {
+                    logSystemErrorCode(ec);
+                    return;
+                }
                 try
                 {
                     std::string greetings;
diff --git a/example/register-property.cpp b/example/register-property.cpp
index 6fd4c89..a95181c 100644
--- a/example/register-property.cpp
+++ b/example/register-property.cpp
@@ -39,20 +39,18 @@
         service_(service), path_(path), interface_(interface), name_(name)
     {}
 
-    template <class OnError, class OnSuccess>
-    void async_get(OnError&& onError, OnSuccess&& onSuccess)
+    template <class Handler>
+    void async_get(Handler&& handler)
     {
         sdbusplus::asio::getProperty<T>(bus_, service_, path_, interface_,
-                                        name_, std::forward<OnError>(onError),
-                                        std::forward<OnSuccess>(onSuccess));
+                                        name_, std::forward<Handler>(handler));
     }
 
-    template <class OnError, class OnSuccess>
-    void async_set(const T& value, OnError&& onError, OnSuccess&& onSuccess)
+    template <class Handler>
+    void async_set(const T& value, Handler&& handler)
     {
         sdbusplus::asio::setProperty(bus_, service_, path_, interface_, name_,
-                                     value, std::forward<OnError>(onError),
-                                     std::forward<OnSuccess>(onSuccess));
+                                     value, std::forward<Handler>(handler));
     }
 
   private:
@@ -112,12 +110,15 @@
             name::greetings};
 
         propertyWithWrongType.async_get(
-            [](boost::system::error_code error) {
-                std::cout
-                    << "As expected failed to getProperty with wrong type: "
-                    << error << "\n";
-            },
-            [this](uint32_t) {
+            [this](boost::system::error_code error, uint32_t) {
+                if (error)
+                {
+                    std::cout
+                        << "As expected failed to getProperty with wrong type: "
+                        << error << "\n";
+                    return;
+                }
+
                 std::cerr << "Error: it was expected to fail getProperty due "
                              "to wrong type\n";
                 ++fatalErrors_;
@@ -126,38 +127,55 @@
 
     void asyncReadProperties()
     {
-        propertyGreetings.async_get(getFailed(), [](std::string value) {
-            std::cout << "Greetings value is: " << value << "\n";
-        });
+        propertyGreetings.async_get(
+            [this](boost::system::error_code ec, std::string value) {
+                if (ec)
+                {
+                    getFailed();
+                    return;
+                }
+                std::cout << "Greetings value is: " << value << "\n";
+            });
 
-        propertyGoodbyes.async_get(getFailed(), [](std::string value) {
-            std::cout << "Goodbyes value is: " << value << "\n";
-        });
+        propertyGoodbyes.async_get(
+            [this](boost::system::error_code ec, std::string value) {
+                if (ec)
+                {
+                    getFailed();
+                    return;
+                }
+                std::cout << "Goodbyes value is: " << value << "\n";
+            });
     }
 
     void asyncChangeProperty()
     {
         propertyGreetings.async_set(
-            "Hi, hey, hello",
-            [](const boost::system::error_code& error) {
-                std::cout << "As expected, failed to set greetings property: "
-                          << error << "\n";
-            },
-            [this]() {
+            "Hi, hey, hello", [this](const boost::system::error_code& error) {
+                if (error)
+                {
+                    std::cout
+                        << "As expected, failed to set greetings property: "
+                        << error << "\n";
+                    return;
+                }
+
                 std::cout
                     << "Error: it was expected to fail to change greetings\n";
                 ++fatalErrors_;
             });
 
         propertyGoodbyes.async_set(
-            "Bye bye",
-            [this](const boost::system::error_code& error) {
-                std::cout << "Error: it supposed to be ok to change goodbyes "
-                             "property: "
-                          << error << "\n";
-                ++fatalErrors_;
-            },
-            [this]() {
+            "Bye bye", [this](const boost::system::error_code& error) {
+                if (error)
+                {
+                    std::cout
+                        << "Error: it supposed to be ok to change goodbyes "
+                           "property: "
+                        << error << "\n";
+                    ++fatalErrors_;
+                    return;
+                }
                 std::cout << "Changed goodbyes property as expected\n";
                 boost::asio::post(ioc_, [this] { asyncReadProperties(); });
             });
