diff --git a/include/kvm_websocket.hpp b/include/kvm_websocket.hpp
index e3131bb..d04c19f 100644
--- a/include/kvm_websocket.hpp
+++ b/include/kvm_websocket.hpp
@@ -14,7 +14,7 @@
 
 static constexpr const uint maxSessions = 4;
 
-class KvmSession
+class KvmSession : public std::enable_shared_from_this<KvmSession>
 {
   public:
     explicit KvmSession(crow::websocket::Connection& connIn) :
@@ -71,7 +71,13 @@
                          bytes);
         hostSocket.async_read_some(
             outputBuffer.prepare(outputBuffer.capacity() - outputBuffer.size()),
-            [this](const boost::system::error_code& ec, std::size_t bytesRead) {
+            [this, weak(weak_from_this())](const boost::system::error_code& ec,
+                                           std::size_t bytesRead) {
+            auto self = weak.lock();
+            if (self == nullptr)
+            {
+                return;
+            }
             BMCWEB_LOG_DEBUG("conn:{}, read done.  Read {} bytes",
                              logPtr(&conn), bytesRead);
             if (ec)
@@ -115,9 +121,15 @@
         }
 
         doingWrite = true;
-        hostSocket.async_write_some(inputBuffer.data(),
-                                    [this](const boost::system::error_code& ec,
+        hostSocket.async_write_some(
+            inputBuffer.data(),
+            [this, weak(weak_from_this())](const boost::system::error_code& ec,
                                            std::size_t bytesWritten) {
+            auto self = weak.lock();
+            if (self == nullptr)
+            {
+                return;
+            }
             BMCWEB_LOG_DEBUG("conn:{}, Wrote {}bytes", logPtr(&conn),
                              bytesWritten);
             doingWrite = false;
@@ -140,7 +152,7 @@
             }
 
             doWrite();
-        });
+            });
     }
 
     crow::websocket::Connection& conn;
@@ -151,7 +163,7 @@
 };
 
 using SessionMap = boost::container::flat_map<crow::websocket::Connection*,
-                                              std::unique_ptr<KvmSession>>;
+                                              std::shared_ptr<KvmSession>>;
 // NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
 static SessionMap sessions;
 
@@ -171,7 +183,7 @@
                 return;
             }
 
-            sessions[&conn] = std::make_unique<KvmSession>(conn);
+            sessions[&conn] = std::make_shared<KvmSession>(conn);
         })
         .onclose([](crow::websocket::Connection& conn, const std::string&) {
             sessions.erase(&conn);
