diff --git a/Makefile.am b/Makefile.am
index 8fa771c..28b5178 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -6,11 +6,13 @@
 	-lstdc++fs \
 	$(PHOSPHOR_LOGGING_LIBS) \
 	$(SDBUSPLUS_LIBS) \
+	$(SDEVENTPLUS_LIBS) \
 	$(PHOSPHOR_DBUS_INTERFACES_LIBS) \
 	$(OPENPOWER_DBUS_INTERFACES_LIBS)
 libpower_la_CXXFLAGS = \
 	$(PHOSPHOR_LOGGING_CFLAGS) \
 	$(SDBUSPLUS_CFLAGS) \
+	$(SDEVENTPLUS_CFLAGS) \
 	$(PHOSPHOR_DBUS_INTERFACES_CFLAGS) \
 	$(OPENPOWER_DBUS_INTERFACES_CFLAGS)
 
diff --git a/configure.ac b/configure.ac
index 94be4ee..3a6cff8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,6 +26,8 @@
 
 PKG_CHECK_MODULES([SDBUSPLUS], [sdbusplus],,
     AC_MSG_ERROR(["Requires sdbusplus package."]))
+PKG_CHECK_MODULES([SDEVENTPLUS], [sdeventplus],,
+    AC_MSG_ERROR(["Requires sdeventplus package."]))
 PKG_CHECK_MODULES([PHOSPHOR_LOGGING], [phosphor-logging],,\
     AC_MSG_ERROR(["Requires phosphor-logging package."]))
 PKG_CHECK_MODULES([PHOSPHOR_DBUS_INTERFACES], [phosphor-dbus-interfaces],,\
diff --git a/device_monitor.hpp b/device_monitor.hpp
index 3214afb..0813737 100644
--- a/device_monitor.hpp
+++ b/device_monitor.hpp
@@ -2,8 +2,8 @@
 #include <phosphor-logging/log.hpp>
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/server.hpp>
+#include <sdeventplus/event.hpp>
 #include "device.hpp"
-#include "event.hpp"
 #include "timer.hpp"
 
 namespace witherspoon
@@ -39,7 +39,7 @@
          * @param[in] i - polling interval in ms
          */
         DeviceMonitor(std::unique_ptr<Device>&& d,
-                      event::Event& e,
+                      const sdeventplus::Event& e,
                       std::chrono::milliseconds i) :
             device(std::move(d)),
             event(e),
@@ -57,15 +57,7 @@
         virtual int run()
         {
             timer.start(interval, Timer::TimerType::repeating);
-
-            auto r = sd_event_loop(event.get());
-            if (r < 0)
-            {
-                log<level::ERR>("sd_event_loop() failed",
-                                entry("ERROR=%s", strerror(-r)));
-            }
-
-            return r;
+            return event.loop();
         }
 
     protected:
@@ -88,9 +80,9 @@
         std::unique_ptr<Device> device;
 
         /**
-         * The sd_event structure used by the timer
+         * The event loop used by the timer
          */
-        event::Event& event;
+        sdeventplus::Event event;
 
         /**
          * The polling interval in milliseconds
diff --git a/event.hpp b/event.hpp
deleted file mode 100644
index 6b2c95f..0000000
--- a/event.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-#pragma once
-
-#include <memory>
-#include <systemd/sd-event.h>
-
-namespace witherspoon
-{
-namespace power
-{
-namespace event
-{
-
-/**
- * Custom deleter for sd_event_source
- */
-struct EventSourceDeleter
-{
-    void operator()(sd_event_source* eventSource) const
-    {
-        sd_event_source_unref(eventSource);
-    }
-};
-
-using EventSource = std::unique_ptr<sd_event_source, EventSourceDeleter>;
-
-/**
- * Customer deleter for sd_event
- */
-struct EventDeleter
-{
-    void operator()(sd_event* event) const
-    {
-        sd_event_unref(event);
-    }
-};
-
-using Event = std::unique_ptr<sd_event, EventDeleter>;
-
-}
-}
-}
diff --git a/gpio.cpp b/gpio.cpp
index 076dee4..a2f1f3e 100644
--- a/gpio.cpp
+++ b/gpio.cpp
@@ -13,6 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#include <cassert>
 #include <fcntl.h>
 #include <phosphor-logging/elog.hpp>
 #include <phosphor-logging/elog-errors.hpp>
diff --git a/power-sequencer/Makefile.am b/power-sequencer/Makefile.am
index 8806a78..02f6466 100644
--- a/power-sequencer/Makefile.am
+++ b/power-sequencer/Makefile.am
@@ -16,9 +16,11 @@
 	$(top_builddir)/libpower.la \
 	$(PHOSPHOR_LOGGING_LIBS) \
 	${PHOSPHOR_DBUS_INTERFACES_LIBS} \
-	$(SDBUSPLUS_LIBS)
+	$(SDBUSPLUS_LIBS) \
+	$(SDEVENTPLUS_LIBS)
 
 witherspoon_pseq_monitor_CXXFLAGS = \
 	$(PHOSPHOR_LOGGING_CFLAGS) \
 	${PHOSPHOR_DBUS_INTERFACES_CFLAGS} \
-	$(SDBUSPLUS_CFLAGS)
+	$(SDBUSPLUS_CFLAGS) \
+	$(SDEVENTPLUS_CFLAGS)
diff --git a/power-sequencer/main.cpp b/power-sequencer/main.cpp
index 87b8070..e383fc1 100644
--- a/power-sequencer/main.cpp
+++ b/power-sequencer/main.cpp
@@ -16,6 +16,7 @@
 #include <chrono>
 #include <iostream>
 #include <phosphor-logging/log.hpp>
+#include <sdeventplus/event.hpp>
 #include "argument.hpp"
 #include "pgood_monitor.hpp"
 #include "runtime_monitor.hpp"
@@ -45,16 +46,7 @@
 
     std::chrono::milliseconds interval{i};
 
-    sd_event* e = nullptr;
-    auto r = sd_event_default(&e);
-    if (r < 0)
-    {
-        log<level::ERR>("sd_event_default() failed",
-                        entry("ERROR=%s", strerror(-r)));
-        exit(EXIT_FAILURE);
-    }
-
-    event::Event event{e};
+	auto event = sdeventplus::Event::get_default();
     auto bus = sdbusplus::bus::new_default();
     bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
 
diff --git a/power-sequencer/pgood_monitor.cpp b/power-sequencer/pgood_monitor.cpp
index 02f1725..b9995c6 100644
--- a/power-sequencer/pgood_monitor.cpp
+++ b/power-sequencer/pgood_monitor.cpp
@@ -66,16 +66,6 @@
 }
 
 
-void PGOODMonitor::exitEventLoop()
-{
-    auto r = sd_event_exit(event.get(), EXIT_SUCCESS);
-    if (r < 0)
-    {
-        log<level::ERR>("sd_event_exit failed",
-                entry("RC = %d", r));
-    }
-}
-
 void PGOODMonitor::analyze()
 {
     //Timer callback.
@@ -93,8 +83,7 @@
 
     //The pgood-wait service (with a longer timeout)
     //will handle powering off the system.
-
-    exitEventLoop();
+    event.exit(EXIT_SUCCESS);
 }
 
 void PGOODMonitor::propertyChanged()
@@ -104,8 +93,7 @@
     if (!pgoodPending())
     {
         //PGOOD is on, or system is off, so we are done.
-        timer.stop();
-        exitEventLoop();
+        event.exit(EXIT_SUCCESS);
     }
 }
 
@@ -134,13 +122,7 @@
         }
 
         timer.start(interval);
-
-        auto r = sd_event_loop(event.get());
-        if (r < 0)
-        {
-            log<level::ERR>("sd_event_loop() failed",
-                    entry("ERROR=%d", r));
-        }
+        return event.loop();
     }
     catch (std::exception& e)
     {
diff --git a/power-sequencer/pgood_monitor.hpp b/power-sequencer/pgood_monitor.hpp
index 9cbda60..14a2735 100644
--- a/power-sequencer/pgood_monitor.hpp
+++ b/power-sequencer/pgood_monitor.hpp
@@ -2,8 +2,8 @@
 
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/server.hpp>
+#include <sdeventplus/event.hpp>
 #include "device.hpp"
-#include "event.hpp"
 #include "device_monitor.hpp"
 #include "timer.hpp"
 
@@ -45,7 +45,7 @@
          */
         PGOODMonitor(std::unique_ptr<witherspoon::power::Device>&& d,
                 sdbusplus::bus::bus& b,
-                witherspoon::power::event::Event& e,
+                const sdeventplus::Event& e,
                 std::chrono::milliseconds& t) :
             DeviceMonitor(std::move(d), e, t),
             bus(b)
diff --git a/power-sequencer/runtime_monitor.hpp b/power-sequencer/runtime_monitor.hpp
index de71dcf..d37cdc0 100644
--- a/power-sequencer/runtime_monitor.hpp
+++ b/power-sequencer/runtime_monitor.hpp
@@ -2,8 +2,8 @@
 
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/server.hpp>
+#include <sdeventplus/event.hpp>
 #include "device.hpp"
-#include "event.hpp"
 #include "device_monitor.hpp"
 #include "timer.hpp"
 
@@ -51,7 +51,7 @@
          */
         RuntimeMonitor(std::unique_ptr<witherspoon::power::Device>&& d,
                 sdbusplus::bus::bus& b,
-                witherspoon::power::event::Event& e,
+                const sdeventplus::Event& e,
                 std::chrono::milliseconds& i) :
             DeviceMonitor(std::move(d), e, i),
             bus(b),
diff --git a/power-supply/main.cpp b/power-supply/main.cpp
index ee93f74..62249c5 100644
--- a/power-supply/main.cpp
+++ b/power-supply/main.cpp
@@ -15,10 +15,9 @@
  */
 #include <iostream>
 #include <phosphor-logging/log.hpp>
-#include <systemd/sd-daemon.h>
+#include <sdeventplus/event.hpp>
 #include "argument.hpp"
 #include "config.h"
-#include "event.hpp"
 #include "power_supply.hpp"
 #include "device_monitor.hpp"
 
@@ -57,22 +56,12 @@
         return -4;
     }
 
-    sd_event* events = nullptr;
-
-    auto r = sd_event_default(&events);
-    if (r < 0)
-    {
-        log<level::ERR>("Failed call to sd_event_default()",
-                        entry("ERROR=%s", strerror(-r)));
-        return -5;
-    }
-
     auto bus = sdbusplus::bus::new_default();
-    witherspoon::power::event::Event eventPtr{events};
+    auto event = sdeventplus::Event::get_default();
 
-    //Attach the event object to the bus object so we can
-    //handle both sd_events (for the timers) and dbus signals.
-    bus.attach_event(eventPtr.get(), SD_EVENT_PRIORITY_NORMAL);
+    // Attach the event object to the bus object so we can
+    // handle both sd_events (for the timers) and dbus signals.
+    bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
 
     auto objname = "power_supply" + instnum;
     auto instance = std::stoul(instnum);
@@ -94,7 +83,7 @@
                                                         std::move(objpath),
                                                         std::move(invpath),
                                                         bus,
-                                                        eventPtr,
+                                                        event,
                                                         powerOnDelay,
                                                         presentDelay);
 
@@ -151,8 +140,5 @@
     }
 
     auto pollInterval = std::chrono::milliseconds(1000);
-    DeviceMonitor mainloop(std::move(psuDevice), eventPtr, pollInterval);
-    mainloop.run();
-
-    return 0;
+    return DeviceMonitor(std::move(psuDevice), event, pollInterval).run();
 }
diff --git a/power-supply/power_supply.cpp b/power-supply/power_supply.cpp
index d4c5f74..f5187f0 100644
--- a/power-supply/power_supply.cpp
+++ b/power-supply/power_supply.cpp
@@ -68,11 +68,11 @@
                          const std::string& objpath,
                          const std::string& invpath,
                          sdbusplus::bus::bus& bus,
-                         event::Event& e,
+                         const sdeventplus::Event& e,
                          std::chrono::seconds& t,
                          std::chrono::seconds& p)
     : Device(name, inst), monitorPath(objpath), pmbusIntf(objpath),
-      inventoryPath(INVENTORY_OBJ_PATH + invpath), bus(bus), event(e),
+      inventoryPath(INVENTORY_OBJ_PATH + invpath), bus(bus),
       presentInterval(p),
       presentTimer(e, [this]()
                    {
diff --git a/power-supply/power_supply.hpp b/power-supply/power_supply.hpp
index e88e257..30f660f 100644
--- a/power-supply/power_supply.hpp
+++ b/power-supply/power_supply.hpp
@@ -1,5 +1,6 @@
 #pragma once
 #include <sdbusplus/bus/match.hpp>
+#include <sdeventplus/event.hpp>
 #include "average.hpp"
 #include "device.hpp"
 #include "maximum.hpp"
@@ -51,7 +52,7 @@
                     const std::string& objpath,
                     const std::string& invpath,
                     sdbusplus::bus::bus& bus,
-                    event::Event& e,
+                    const sdeventplus::Event& e,
                     std::chrono::seconds& t,
                     std::chrono::seconds& p);
 
@@ -126,10 +127,6 @@
         /** @brief Used to subscribe to D-Bus property changes for Present */
         std::unique_ptr<sdbusplus::bus::match_t> presentMatch;
 
-        /** @brief The sd_event structure used by the power on and present
-         *  timers. */
-        event::Event& event;
-
         /**
          * @brief Interval for setting present to true.
          *
diff --git a/timer.cpp b/timer.cpp
index 7039338..fba2845 100644
--- a/timer.cpp
+++ b/timer.cpp
@@ -30,17 +30,15 @@
 using InternalFailure = sdbusplus::xyz::openbmc_project::Common::
                             Error::InternalFailure;
 
-Timer::Timer(event::Event& events,
+Timer::Timer(const sdeventplus::Event& event,
              std::function<void()> callbackFunc) :
-    timeEvent(events),
+    eventSource(nullptr),
     callback(callbackFunc),
     timeout(0)
 {
-    sd_event_source* source = nullptr;
-
     // Start with an infinite expiration time
-    auto r = sd_event_add_time(timeEvent.get(),
-                               &source,
+    auto r = sd_event_add_time(event.get(),
+                               &eventSource,
                                CLOCK_MONOTONIC, // Time base
                                UINT64_MAX,      // Expire time - way long time
                                0,               // Use default event accuracy
@@ -53,8 +51,6 @@
         elog<InternalFailure>();
     }
 
-    eventSource.reset(source);
-
     //Ensure timer isn't running
     setTimer(SD_EVENT_OFF);
 }
@@ -63,6 +59,7 @@
 Timer::~Timer()
 {
     setTimer(SD_EVENT_OFF);
+    sd_event_source_unref(eventSource);
 }
 
 
@@ -93,7 +90,7 @@
 
 void Timer::setTimer(int action)
 {
-    auto r = sd_event_source_set_enabled(eventSource.get(), action);
+    auto r = sd_event_source_set_enabled(eventSource, action);
     if (r < 0)
     {
         log<level::ERR>("Failed call to sd_event_source_set_enabled",
@@ -115,7 +112,7 @@
     int status = 0;
 
     //returns SD_EVENT_OFF, SD_EVENT_ON, or SD_EVENT_ONESHOT
-    auto r = sd_event_source_get_enabled(eventSource.get(), &status);
+    auto r = sd_event_source_get_enabled(eventSource, &status);
     if (r < 0)
     {
         log<level::ERR>("Failed call to sd_event_source_get_enabled",
@@ -140,7 +137,7 @@
     auto expireTime = getTime() + timeout;
 
     //Set the time
-    auto r = sd_event_source_set_time(eventSource.get(), expireTime.count());
+    auto r = sd_event_source_set_time(eventSource, expireTime.count());
     if (r < 0)
     {
         log<level::ERR>("Failed call to sd_event_source_set_time",
diff --git a/timer.hpp b/timer.hpp
index 0f46de7..600fe42 100644
--- a/timer.hpp
+++ b/timer.hpp
@@ -3,7 +3,8 @@
 #include <chrono>
 #include <functional>
 #include <memory>
-#include "event.hpp"
+#include <sdeventplus/event.hpp>
+#include <systemd/sd-event.h>
 
 namespace witherspoon
 {
@@ -44,10 +45,10 @@
         /**
          * @brief Constructs timer object
          *
-         * @param[in] events - sd_event pointer, previously created
+         * @param[in] event - sd_event pointer, previously created
          * @param[in] callbackFunc - The function to call on timer expiration
          */
-        Timer(event::Event& events,
+        Timer(const sdeventplus::Event& event,
               std::function<void()> callbackFunc);
 
         /**
@@ -130,14 +131,9 @@
         void setTimeout();
 
         /**
-         * @brief The sd_event structure
-         */
-        event::Event& timeEvent;
-
-        /**
          * @brief Source of events
          */
-        event::EventSource eventSource;
+        sd_event_source* eventSource;
 
         /**
          * @brief Either 'repeating' or 'oneshot'
