diff --git a/main.cpp b/main.cpp
index 611a6af..d79572c 100644
--- a/main.cpp
+++ b/main.cpp
@@ -32,6 +32,7 @@
         sol::Manager&> singletonPool(manager, table, loop, solManager);
 
 sd_bus* bus = nullptr;
+sd_event* events = nullptr;
 
 // Global timer for network changes
 std::unique_ptr<phosphor::ipmi::Timer> networkTimer = nullptr;
@@ -53,7 +54,7 @@
  */
 sd_event* ipmid_get_sd_event_connection()
 {
-    return loop.event;
+    return events;
 }
 
 /*
@@ -79,6 +80,14 @@
         goto finish;
     }
 
+    /* Get an sd event handler */
+    rc = sd_event_default(&events);
+    if (rc < 0)
+    {
+        std::cerr << "Failure to create sd_event" << strerror(-rc) <<"\n";
+        goto finish;
+    }
+
     // Register callback to update cache for a GUID change and cache the GUID
     command::registerGUIDChangeCallback();
     cache::guid = command::getSystemGUID();
@@ -94,10 +103,11 @@
     sol::command::registerCommands();
 
     // Start Event Loop
-    return std::get<eventloop::EventLoop&>(singletonPool).startEventLoop();
+    return std::get<eventloop::EventLoop&>(singletonPool).startEventLoop(events);
 
 finish:
     sd_bus_unref(bus);
+    sd_event_unref(events);
 
     return 0;
 }
diff --git a/sd_event_loop.cpp b/sd_event_loop.cpp
index 16a5403..3351da7 100644
--- a/sd_event_loop.cpp
+++ b/sd_event_loop.cpp
@@ -171,7 +171,7 @@
     return 0;
 }
 
-int EventLoop::startEventLoop()
+int EventLoop::startEventLoop(sd_event* events)
 {
     int fd = -1;
     int r = 0;
@@ -180,12 +180,7 @@
     sd_event_source* source = nullptr;
     auto bus = ipmid_get_sd_bus_connection();
 
-    r = sd_event_default(&event);
-    if (r < 0)
-    {
-        goto finish;
-    }
-
+    event = events;
     // Attach the bus to sd_event to service user requests
     r = sd_bus_attach_event(bus, event, SD_EVENT_PRIORITY_NORMAL);
     if (r < 0)
@@ -266,7 +261,6 @@
     r = sd_event_loop(event);
 
 finish:
-    event = sd_event_unref(event);
 
     if (fd >= 0)
     {
diff --git a/sd_event_loop.hpp b/sd_event_loop.hpp
index 87a12ff..2bb44d7 100644
--- a/sd_event_loop.hpp
+++ b/sd_event_loop.hpp
@@ -66,10 +66,11 @@
 
         /** @brief Initialise the event loop and add the handler for incoming
          *         IPMI packets.
+         *  @param[in] events- sd bus event;
          *
          *  @return EXIT_SUCCESS on success and EXIT_FAILURE on failure.
          */
-        int startEventLoop();
+        int startEventLoop(sd_event* events);
 
         /** @brief Add host console I/O event source to the event loop.
          *
