diff --git a/http/http2_connection.hpp b/http/http2_connection.hpp
index 5399bd4..9cc1194 100644
--- a/http/http2_connection.hpp
+++ b/http/http2_connection.hpp
@@ -281,9 +281,6 @@
             }
         }
         crow::Request& thisReq = *it->second.req;
-        thisReq.ioService = static_cast<decltype(thisReq.ioService)>(
-            &adaptor.get_executor().context());
-
         it->second.accept = thisReq.getHeaderValue("Accept");
 
         BMCWEB_LOG_DEBUG("Handling {} \"{}\"", logPtr(&thisReq),
diff --git a/http/http_connection.hpp b/http/http_connection.hpp
index c9eb2ae..bfbe580 100644
--- a/http/http_connection.hpp
+++ b/http/http_connection.hpp
@@ -421,9 +421,6 @@
                         req->methodString(), req->target(),
                         req->ipAddress.to_string());
 
-        req->ioService = static_cast<decltype(req->ioService)>(
-            &adaptor.get_executor().context());
-
         if (res.completed)
         {
             completeRequest(res);
diff --git a/http/http_request.hpp b/http/http_request.hpp
index 160216b..bfbe2e3 100644
--- a/http/http_request.hpp
+++ b/http/http_request.hpp
@@ -5,7 +5,6 @@
 #include "http_body.hpp"
 #include "sessions.hpp"
 
-#include <boost/asio/io_context.hpp>
 #include <boost/asio/ip/address.hpp>
 #include <boost/beast/http/field.hpp>
 #include <boost/beast/http/fields.hpp>
@@ -34,7 +33,6 @@
     boost::urls::url urlBase;
 
   public:
-    boost::asio::io_context* ioService = nullptr;
     boost::asio::ip::address ipAddress;
 
     std::shared_ptr<persistent_data::UserSession> session;
@@ -74,7 +72,6 @@
     {
         req.clear();
         urlBase.clear();
-        ioService = nullptr;
         ipAddress = boost::asio::ip::address();
         session = nullptr;
         userRole = "";
diff --git a/http/server_sent_event.hpp b/http/server_sent_event.hpp
index a0105f1..31db6ff 100644
--- a/http/server_sent_event.hpp
+++ b/http/server_sent_event.hpp
@@ -4,11 +4,11 @@
 #include "boost_formatters.hpp"
 #include "http_body.hpp"
 #include "http_request.hpp"
+#include "io_context_singleton.hpp"
 #include "logging.hpp"
 
 #include <boost/asio/buffer.hpp>
 #include <boost/asio/error.hpp>
-#include <boost/asio/io_context.hpp>
 #include <boost/asio/steady_timer.hpp>
 #include <boost/beast/core/error.hpp>
 #include <boost/beast/core/multi_buffer.hpp>
@@ -42,7 +42,6 @@
     Connection& operator=(const Connection&&) = delete;
     virtual ~Connection() = default;
 
-    virtual boost::asio::io_context& getIoContext() = 0;
     virtual void close(std::string_view msg = "quit") = 0;
     virtual void sendSseEvent(std::string_view id, std::string_view msg) = 0;
 };
@@ -55,9 +54,7 @@
         Adaptor&& adaptorIn,
         std::function<void(Connection&, const Request&)> openHandlerIn,
         std::function<void(Connection&)> closeHandlerIn) :
-        adaptor(std::move(adaptorIn)),
-        timer(static_cast<boost::asio::io_context&>(
-            adaptor.get_executor().context())),
+        adaptor(std::move(adaptorIn)), timer(getIoContext()),
         openHandler(std::move(openHandlerIn)),
         closeHandler(std::move(closeHandlerIn))
 
@@ -75,12 +72,6 @@
         BMCWEB_LOG_DEBUG("SSE ConnectionImpl: SSE destructor {}", logPtr(this));
     }
 
-    boost::asio::io_context& getIoContext() override
-    {
-        return static_cast<boost::asio::io_context&>(
-            adaptor.get_executor().context());
-    }
-
     void start(const Request& req)
     {
         BMCWEB_LOG_DEBUG("Starting SSE connection");
diff --git a/http/websocket.hpp b/http/websocket.hpp
index 1f22890..e55725a 100644
--- a/http/websocket.hpp
+++ b/http/websocket.hpp
@@ -12,7 +12,6 @@
 
 #include <boost/asio/buffer.hpp>
 #include <boost/asio/error.hpp>
-#include <boost/asio/io_context.hpp>
 #include <boost/asio/ssl/error.hpp>
 #include <boost/beast/core/error.hpp>
 #include <boost/beast/core/multi_buffer.hpp>
@@ -64,7 +63,6 @@
     virtual void close(std::string_view msg = "quit") = 0;
     virtual void deferRead() = 0;
     virtual void resumeRead() = 0;
-    virtual boost::asio::io_context& getIoContext() = 0;
     virtual ~Connection() = default;
     virtual boost::urls::url_view url() = 0;
 };
@@ -100,12 +98,6 @@
         BMCWEB_LOG_DEBUG("Creating new connection {}", logPtr(this));
     }
 
-    boost::asio::io_context& getIoContext() override
-    {
-        return static_cast<boost::asio::io_context&>(
-            ws.get_executor().context());
-    }
-
     void start(const crow::Request& req)
     {
         BMCWEB_LOG_DEBUG("starting connection {}", logPtr(this));
