diff --git a/example/asio-example.cpp b/example/asio-example.cpp
index 29b605f..61916a5 100644
--- a/example/asio-example.cpp
+++ b/example/asio-example.cpp
@@ -174,7 +174,7 @@
 int server()
 {
     // setup connection to dbus
-    boost::asio::io_service io;
+    boost::asio::io_context io;
     auto conn = std::make_shared<sdbusplus::asio::connection>(io);
 
     // test object server
@@ -254,7 +254,7 @@
     using message = sdbusplus::message::message;
 
     // setup connection to dbus
-    boost::asio::io_service io;
+    boost::asio::io_context io;
     auto conn = std::make_shared<sdbusplus::asio::connection>(io);
 
     int ready = 0;
diff --git a/sdbusplus/asio/connection.hpp b/sdbusplus/asio/connection.hpp
index 8fbd08a..bafa4c6 100644
--- a/sdbusplus/asio/connection.hpp
+++ b/sdbusplus/asio/connection.hpp
@@ -46,13 +46,13 @@
 {
   public:
     // default to system bus
-    connection(boost::asio::io_service& io) :
+    connection(boost::asio::io_context& io) :
         sdbusplus::bus::bus(sdbusplus::bus::new_default()), io_(io), socket(io_)
     {
         socket.assign(get_fd());
         read_wait();
     }
-    connection(boost::asio::io_service& io, sd_bus* bus) :
+    connection(boost::asio::io_context& io, sd_bus* bus) :
         sdbusplus::bus::bus(bus), io_(io), socket(io_)
     {
         socket.assign(get_fd());
@@ -202,13 +202,13 @@
         }
     }
 
-    boost::asio::io_service& get_io_service()
+    boost::asio::io_context& get_io_context()
     {
         return io_;
     }
 
   private:
-    boost::asio::io_service& io_;
+    boost::asio::io_context& io_;
     boost::asio::posix::stream_descriptor socket;
 
     void read_wait()
@@ -228,7 +228,7 @@
     }
     void read_immediate()
     {
-        io_.post([&] {
+        boost::asio::post(io_, [&] {
             if (process_discard())
             {
                 read_immediate();
diff --git a/sdbusplus/asio/object_server.hpp b/sdbusplus/asio/object_server.hpp
index 5e367c8..5db004d 100644
--- a/sdbusplus/asio/object_server.hpp
+++ b/sdbusplus/asio/object_server.hpp
@@ -188,7 +188,7 @@
 class coroutine_method_instance : public callback
 {
   public:
-    coroutine_method_instance(boost::asio::io_service& io,
+    coroutine_method_instance(boost::asio::io_context& io,
                               CallbackType&& func) :
         io_(io),
         func_(std::move(func))
@@ -212,7 +212,7 @@
     using InputTupleType =
         typename utility::decay_tuple<CallbackSignature>::type;
     using ResultType = boost::callable_traits::return_type_t<CallbackType>;
-    boost::asio::io_service& io_;
+    boost::asio::io_context& io_;
     CallbackType func_;
     template <typename T>
     std::enable_if_t<!std::is_void<T>::value, void>
@@ -526,7 +526,7 @@
         {
             callbacksMethod_[name] =
                 std::make_unique<coroutine_method_instance<CallbackType>>(
-                    conn_->get_io_service(), std::move(handler));
+                    conn_->get_io_context(), std::move(handler));
         }
         else
         {
diff --git a/sdbusplus/asio/sd_event.hpp b/sdbusplus/asio/sd_event.hpp
index b4a2ae3..747c240 100644
--- a/sdbusplus/asio/sd_event.hpp
+++ b/sdbusplus/asio/sd_event.hpp
@@ -24,13 +24,13 @@
 
 namespace asio
 {
-/* A simple class to integrate the sd_event_loop into the boost::asio io_service
+/* A simple class to integrate the sd_event_loop into the boost::asio io_context
  * in case a boost::asio user needs sd_events
  */
 class sd_event_wrapper
 {
   public:
-    sd_event_wrapper(boost::asio::io_service& io) :
+    sd_event_wrapper(boost::asio::io_context& io) :
         evt(nullptr), descriptor(io), io(io)
     {
         sd_event_default(&evt);
@@ -40,7 +40,7 @@
             async_run();
         }
     }
-    sd_event_wrapper(sd_event* evt, boost::asio::io_service& io) :
+    sd_event_wrapper(sd_event* evt, boost::asio::io_context& io) :
         evt(evt), descriptor(io), io(io)
     {
         if (evt)
@@ -117,7 +117,7 @@
     }
     sd_event* evt;
     boost::asio::posix::stream_descriptor descriptor;
-    boost::asio::io_service& io;
+    boost::asio::io_context& io;
 };
 
 } // namespace asio
