diff --git a/http/http_server.hpp b/http/http_server.hpp
index b48137f..a7c2459 100644
--- a/http/http_server.hpp
+++ b/http/http_server.hpp
@@ -38,10 +38,10 @@
   public:
     Server(Handler* handlerIn, boost::asio::ip::tcp::acceptor&& acceptorIn,
            std::shared_ptr<boost::asio::ssl::context> adaptorCtxIn,
-           std::shared_ptr<boost::asio::io_context> io) :
-        ioService(std::move(io)), acceptor(std::move(acceptorIn)),
+           boost::asio::io_context& io) :
+        ioService(io), acceptor(std::move(acceptorIn)),
         // NOLINTNEXTLINE(misc-include-cleaner)
-        signals(*ioService, SIGINT, SIGTERM, SIGHUP), handler(handlerIn),
+        signals(ioService, SIGINT, SIGTERM, SIGHUP), handler(handlerIn),
         adaptorCtx(std::move(adaptorCtxIn))
     {}
 
@@ -120,7 +120,7 @@
 
     void stop()
     {
-        ioService->stop();
+        ioService.stop();
     }
     using Socket = boost::beast::lowest_layer_type<Adaptor>;
     using SocketPtr = std::unique_ptr<Socket>;
@@ -133,7 +133,7 @@
             return;
         }
 
-        boost::asio::steady_timer timer(*ioService);
+        boost::asio::steady_timer timer(ioService);
         std::shared_ptr<Connection<Adaptor, Handler>> connection;
 
         if constexpr (std::is_same<Adaptor,
@@ -157,20 +157,14 @@
                 Adaptor(std::move(*socket)));
         }
 
-        boost::asio::post(*ioService, [connection] { connection->start(); });
+        boost::asio::post(ioService, [connection] { connection->start(); });
 
         doAccept();
     }
 
     void doAccept()
     {
-        if (ioService == nullptr)
-        {
-            BMCWEB_LOG_CRITICAL("IoService was null");
-            return;
-        }
-
-        SocketPtr socket = std::make_unique<Socket>(*ioService);
+        SocketPtr socket = std::make_unique<Socket>(ioService);
         // Keep a raw pointer so when the socket is moved, the pointer is still
         // valid
         Socket* socketPtr = socket.get();
@@ -181,7 +175,7 @@
     }
 
   private:
-    std::shared_ptr<boost::asio::io_context> ioService;
+    boost::asio::io_context& ioService;
     std::function<std::string()> getCachedDateStr;
     boost::asio::ip::tcp::acceptor acceptor;
     boost::asio::signal_set signals;
