diff --git a/README.md b/README.md
index 77ac92e..e5e8ca1 100644
--- a/README.md
+++ b/README.md
@@ -46,7 +46,7 @@
 + Move most uses of std::unordered_map to boost::flat_map to lower memory consumption, and (in some cases) to improve memory locality.
 + Adjust the addHeaders mechanism to use a fixed string instead of a full map implementation to avoid unnecessary mallocs and reduce the number of scatter gather buffers on an http response.
 + Change server name header from Crow/0.1 to iBMC
-+ Starts the http server io_service inside the main thread, instead of creating a new thread.
++ Starts the http server io_context inside the main thread, instead of creating a new thread.
 + Removes all BMCWEB_MSVC_WORKAROUND flags.
 + Removes the behavior that causes a 301 redirect for paths that end in "/", and simply returns the endpoint requested.  This was done for redfish compatibility.
 + Removes the built in crow/json.hpp package and adds nlohmann json package as the first class json package for crow.
diff --git a/crow/include/crow/app.h b/crow/include/crow/app.h
index 428705d..9a2281a 100644
--- a/crow/include/crow/app.h
+++ b/crow/include/crow/app.h
@@ -36,8 +36,8 @@
     using server_t = Server<Crow, socket_t, Middlewares...>;
 
 #endif
-    explicit Crow(std::shared_ptr<boost::asio::io_service> io =
-                      std::make_shared<boost::asio::io_service>()) :
+    explicit Crow(std::shared_ptr<boost::asio::io_context> io =
+                      std::make_shared<boost::asio::io_context>()) :
         io(std::move(io))
     {
     }
@@ -225,7 +225,7 @@
     }
 
   private:
-    std::shared_ptr<asio::io_service> io;
+    std::shared_ptr<asio::io_context> io;
 #ifdef BMCWEB_ENABLE_SSL
     uint16_t portUint = 443;
 #else
diff --git a/crow/include/crow/http_connection.h b/crow/include/crow/http_connection.h
index 51bc9fe..297648e 100644
--- a/crow/include/crow/http_connection.h
+++ b/crow/include/crow/http_connection.h
@@ -4,7 +4,7 @@
 #include <atomic>
 #include <boost/algorithm/string.hpp>
 #include <boost/algorithm/string/predicate.hpp>
-#include <boost/asio/io_service.hpp>
+#include <boost/asio/io_context.hpp>
 #include <boost/asio/ip/tcp.hpp>
 #include <boost/beast/core/flat_static_buffer.hpp>
 #include <boost/beast/http.hpp>
@@ -247,7 +247,7 @@
 class Connection
 {
   public:
-    Connection(boost::asio::io_service& ioService, Handler* handler,
+    Connection(boost::asio::io_context& ioService, Handler* handler,
                const std::string& server_name,
                std::tuple<Middlewares...>* middlewares,
                std::function<std::string()>& get_cached_date_str_f,
diff --git a/crow/include/crow/http_request.h b/crow/include/crow/http_request.h
index e66ad4b..ac5f78d 100644
--- a/crow/include/crow/http_request.h
+++ b/crow/include/crow/http_request.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include <boost/asio/io_service.hpp>
+#include <boost/asio/io_context.hpp>
 #include <boost/beast/http.hpp>
 #include <boost/beast/websocket.hpp>
 
@@ -19,7 +19,7 @@
     const std::string& body;
 
     void* middlewareContext{};
-    boost::asio::io_service* ioService{};
+    boost::asio::io_context* ioService{};
 
     Request(boost::beast::http::request<boost::beast::http::string_body>& req) :
         req(req), body(req.body())
diff --git a/crow/include/crow/http_server.h b/crow/include/crow/http_server.h
index d8fedf3..ebf5570 100644
--- a/crow/include/crow/http_server.h
+++ b/crow/include/crow/http_server.h
@@ -32,8 +32,8 @@
     Server(Handler* handler, std::unique_ptr<tcp::acceptor>&& acceptor,
            std::tuple<Middlewares...>* middlewares = nullptr,
            typename Adaptor::context* adaptor_ctx = nullptr,
-           std::shared_ptr<boost::asio::io_service> io =
-               std::make_shared<boost::asio::io_service>()) :
+           std::shared_ptr<boost::asio::io_context> io =
+               std::make_shared<boost::asio::io_context>()) :
         ioService(std::move(io)),
         acceptor(std::move(acceptor)), signals(*ioService, SIGINT, SIGTERM),
         tickTimer(*ioService), handler(handler), middlewares(middlewares),
@@ -44,8 +44,8 @@
     Server(Handler* handler, const std::string& bindaddr, uint16_t port,
            std::tuple<Middlewares...>* middlewares = nullptr,
            typename Adaptor::context* adaptor_ctx = nullptr,
-           std::shared_ptr<boost::asio::io_service> io =
-               std::make_shared<boost::asio::io_service>()) :
+           std::shared_ptr<boost::asio::io_context> io =
+               std::make_shared<boost::asio::io_context>()) :
         Server(handler,
                std::make_unique<tcp::acceptor>(
                    *io,
@@ -58,8 +58,8 @@
     Server(Handler* handler, int existing_socket,
            std::tuple<Middlewares...>* middlewares = nullptr,
            typename Adaptor::context* adaptor_ctx = nullptr,
-           std::shared_ptr<boost::asio::io_service> io =
-               std::make_shared<boost::asio::io_service>()) :
+           std::shared_ptr<boost::asio::io_context> io =
+               std::make_shared<boost::asio::io_context>()) :
         Server(handler,
                std::make_unique<tcp::acceptor>(*io, boost::asio::ip::tcp::v6(),
                                                existing_socket),
@@ -181,7 +181,7 @@
     }
 
   private:
-    std::shared_ptr<asio::io_service> ioService;
+    std::shared_ptr<asio::io_context> ioService;
     detail::TimerQueue timerQueue;
     std::function<std::string()> getCachedDateStr;
     std::unique_ptr<tcp::acceptor> acceptor;
diff --git a/crow/include/crow/socket_adaptors.h b/crow/include/crow/socket_adaptors.h
index a47697f..16ebe1f 100644
--- a/crow/include/crow/socket_adaptors.h
+++ b/crow/include/crow/socket_adaptors.h
@@ -17,14 +17,14 @@
     using streamType = tcp::socket;
     using secure = std::false_type;
     using context = void;
-    SocketAdaptor(boost::asio::io_service& ioService, context* /*unused*/) :
+    SocketAdaptor(boost::asio::io_context& ioService, context* /*unused*/) :
         socketCls(ioService)
     {
     }
 
-    boost::asio::io_service& getIoService()
+    boost::asio::io_context& getIoService()
     {
-        return socketCls.get_io_service();
+        return socketCls.get_io_context();
     }
 
     tcp::socket& rawSocket()
@@ -71,14 +71,14 @@
 {
     using secure = std::false_type;
     using context = void;
-    TestSocketAdaptor(boost::asio::io_service& ioService, context* /*unused*/) :
+    TestSocketAdaptor(boost::asio::io_context& ioService, context* /*unused*/) :
         socketCls(ioService)
     {
     }
 
-    boost::asio::io_service& getIoService()
+    boost::asio::io_context& getIoService()
     {
-        return socketCls.get_io_service();
+        return socketCls.get_io_context();
     }
 
     tcp::socket& rawSocket()
@@ -121,7 +121,7 @@
     using secure = std::true_type;
     using context = boost::asio::ssl::context;
     using ssl_socket_t = boost::asio::ssl::stream<tcp::socket>;
-    SSLAdaptor(boost::asio::io_service& ioService, context* ctx) :
+    SSLAdaptor(boost::asio::io_context& ioService, context* ctx) :
         sslSocket(new ssl_socket_t(ioService, *ctx))
     {
     }
@@ -182,9 +182,9 @@
         this->sslSocket->lowest_layer().close();
     }
 
-    boost::asio::io_service& getIoService()
+    boost::asio::io_context& getIoService()
     {
-        return rawSocket().get_io_service();
+        return rawSocket().get_io_context();
     }
 
     template <typename F> void start(F f)
diff --git a/crow/include/crow/websocket.h b/crow/include/crow/websocket.h
index 1596b8d..c435d33 100644
--- a/crow/include/crow/websocket.h
+++ b/crow/include/crow/websocket.h
@@ -27,7 +27,7 @@
     virtual void sendText(const boost::beast::string_view msg) = 0;
     virtual void sendText(std::string&& msg) = 0;
     virtual void close(const boost::beast::string_view msg = "quit") = 0;
-    virtual boost::asio::io_service& getIoService() = 0;
+    virtual boost::asio::io_context& getIoService() = 0;
     virtual ~Connection() = default;
 
     void userdata(void* u)
@@ -65,7 +65,7 @@
         BMCWEB_LOG_DEBUG << "Creating new connection " << this;
     }
 
-    boost::asio::io_service& getIoService() override
+    boost::asio::io_context& getIoService() override
     {
         return adaptor.getIoService();
     }
diff --git a/include/ast_video_puller.hpp b/include/ast_video_puller.hpp
index 520fc68..c97ca48 100644
--- a/include/ast_video_puller.hpp
+++ b/include/ast_video_puller.hpp
@@ -141,7 +141,7 @@
   public:
     using video_callback = std::function<void(RawVideoBuffer &)>;
 
-    explicit AsyncVideoPuller(boost::asio::io_service &ioService) :
+    explicit AsyncVideoPuller(boost::asio::io_context &ioService) :
         imageInfo(), devVideo(ioService, open("/dev/video", O_RDWR))
     {
         videobuf = std::make_shared<RawVideoBuffer>();
diff --git a/src/crow_test.cpp b/src/crow_test.cpp
index 96b90b0..beefdee 100644
--- a/src/crow_test.cpp
+++ b/src/crow_test.cpp
@@ -398,7 +398,7 @@
     Server<SimpleApp> server(&app, LOCALHOST_ADDRESS, 45451);
     auto _ = async(launch::async, [&] { server.run(); });
     std::string sendmsg = "POX";
-    asio::io_service is;
+    asio::io_context is;
     {
         asio::ip::tcp::socket c(is);
         c.connect(asio::ip::tcp::endpoint(
@@ -436,7 +436,7 @@
 
     std::string sendmsg =
         "POST /\r\nContent-Length:3\r\nX-HeaderTest: 123\r\n\r\nA=b\r\n";
-    asio::io_service is;
+    asio::io_context is;
     {
         asio::ip::tcp::socket c(is);
         c.connect(asio::ip::tcp::endpoint(
@@ -645,7 +645,7 @@
     decltype(app)::server_t server(&app, LOCALHOST_ADDRESS, 45451);
     auto _ = async(launch::async, [&] { server.run(); });
     std::string sendmsg = "GET /\r\n\r\n";
-    asio::io_service is;
+    asio::io_context is;
     {
         asio::ip::tcp::socket c(is);
         c.connect(asio::ip::tcp::endpoint(
@@ -701,7 +701,7 @@
     decltype(app)::server_t server(&app, LOCALHOST_ADDRESS, 45451);
     auto _ = async(launch::async, [&] { server.run(); });
     std::string sendmsg = "GET / HTTP/1.1\r\nHost: localhost\r\n\r\n";
-    asio::io_service is;
+    asio::io_context is;
     {
         std::vector<std::future<void>> v;
         for (int i = 0; i < 5; i++)
@@ -744,7 +744,7 @@
 
     decltype(app)::server_t server(&app, LOCALHOST_ADDRESS, 45451);
     auto _ = async(launch::async, [&] { server.run(); });
-    asio::io_service is;
+    asio::io_context is;
     std::string sendmsg;
 
     // check empty params
diff --git a/src/kvm_websocket_test.cpp b/src/kvm_websocket_test.cpp
index 1ddaad9..40470a9 100644
--- a/src/kvm_websocket_test.cpp
+++ b/src/kvm_websocket_test.cpp
@@ -24,7 +24,7 @@
     BMCWEB_ROUTE(app, "/")([]() { return boost::beast::http::status::ok; });
     auto _ = async(std::launch::async, [&] { app.run(); });
     auto routes = app.getRoutes();
-    asio::io_service is;
+    asio::io_context is;
 
     {
         // Retry a couple of times waiting for the server to come up
diff --git a/src/security_headers_middleware_test.cpp b/src/security_headers_middleware_test.cpp
index 2af15c6..4fa3003 100644
--- a/src/security_headers_middleware_test.cpp
+++ b/src/security_headers_middleware_test.cpp
@@ -16,7 +16,7 @@
     BMCWEB_ROUTE(app, "/")([]() { return boost::beast::http::status::ok; });
     auto _ = async(launch::async, [&] { app.run(); });
 
-    asio::io_service is;
+    asio::io_context is;
     std::array<char, 2048> buf;
     std::string sendmsg;
 
diff --git a/src/token_authorization_middleware_test.cpp b/src/token_authorization_middleware_test.cpp
index 812a6d1..8f4c5c8 100644
--- a/src/token_authorization_middleware_test.cpp
+++ b/src/token_authorization_middleware_test.cpp
@@ -15,14 +15,14 @@
   public:
     TokenAuth() :
         lk(std::unique_lock<std::mutex>(m)),
-        io(std::make_shared<boost::asio::io_service>())
+        io(std::make_shared<boost::asio::io_context>())
     {
     }
 
     std::mutex m;
     std::condition_variable cv;
     std::unique_lock<std::mutex> lk;
-    std::shared_ptr<boost::asio::io_service> io;
+    std::shared_ptr<boost::asio::io_context> io;
     int testPort = 45451;
 };
 
@@ -38,7 +38,7 @@
         io->run();
     });
 
-    asio::io_service is;
+    asio::io_context is;
     std::string sendmsg;
 
     static char buf[2048];
@@ -80,7 +80,7 @@
     BMCWEB_ROUTE(app, "/")([]() { return boost::beast::http::status::ok; });
     auto _ = async(std::launch::async, [&] { app.run(); });
 
-    asio::io_service is;
+    asio::io_context is;
     static char buf[2048];
 
     // Other resources should not be passed
@@ -116,7 +116,7 @@
     BMCWEB_ROUTE(app, "/")([]() { return boost::beast::http::status::ok; });
     auto _ = async(std::launch::async, [&] { app.run(); });
 
-    asio::io_service is;
+    asio::io_context is;
     static char buf[2048];
 
     // Other resources should not be passed
@@ -152,7 +152,7 @@
     BMCWEB_ROUTE(app, "/")([]() { return boost::beast::http::status::ok; });
     auto _ = async(std::launch::async, [&] { app.run(); });
 
-    asio::io_service is;
+    asio::io_context is;
     std::array<char, 2048> buf;
     std::string sendmsg;
 
@@ -244,7 +244,7 @@
     BMCWEB_ROUTE(app, "/")([]() { return boost::beast::http::status::ok; });
     auto _ = async(std::launch::async, [&] { app.run(); });
 
-    asio::io_service is;
+    asio::io_context is;
     std::array<char, 2048> buf;
     std::string sendmsg;
 
diff --git a/src/webassets_test.cpp b/src/webassets_test.cpp
index a3106f2..3df7542 100644
--- a/src/webassets_test.cpp
+++ b/src/webassets_test.cpp
@@ -25,7 +25,7 @@
     // get the homepage
     std::string sendmsg = "GET /\r\n\r\n";
 
-    asio::io_service is;
+    asio::io_context is;
 
     asio::ip::tcp::socket c(is);
     c.connect(asio::ip::tcp::endpoint(
@@ -100,7 +100,7 @@
     // get the homepage
     std::string sendmsg = "GET /\r\n\r\n";
 
-    asio::io_service is;
+    asio::io_context is;
 
     asio::ip::tcp::socket c(is);
     c.connect(asio::ip::tcp::endpoint(
diff --git a/src/webserver_main.cpp b/src/webserver_main.cpp
index b4d36ef..7c64f4c 100644
--- a/src/webserver_main.cpp
+++ b/src/webserver_main.cpp
@@ -1,7 +1,7 @@
 #include <crow/app.h>
 #include <systemd/sd-daemon.h>
 
-#include <boost/asio/io_service.hpp>
+#include <boost/asio/io_context.hpp>
 #include <dbus_monitor.hpp>
 #include <dbus_singleton.hpp>
 #include <image_upload.hpp>
@@ -57,7 +57,7 @@
 {
     crow::logger::setLogLevel(crow::LogLevel::DEBUG);
 
-    auto io = std::make_shared<boost::asio::io_service>();
+    auto io = std::make_shared<boost::asio::io_context>();
     CrowApp app(io);
 
 #ifdef BMCWEB_ENABLE_SSL
