diff --git a/src/Makefile.am b/src/Makefile.am
index d4e7906..130c8e5 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -24,6 +24,9 @@
 nobase_include_HEADERS += sdeventplus/source/base.hpp
 libsdeventplus_la_SOURCES += sdeventplus/source/base.cpp
 
+nobase_include_HEADERS += sdeventplus/source/event.hpp
+libsdeventplus_la_SOURCES += sdeventplus/source/event.cpp
+
 nobase_include_HEADERS += sdeventplus/source/time.hpp
 libsdeventplus_la_SOURCES += sdeventplus/source/time.cpp
 
diff --git a/src/sdeventplus/internal/sdevent.hpp b/src/sdeventplus/internal/sdevent.hpp
index 9a6ec07..a24c73c 100644
--- a/src/sdeventplus/internal/sdevent.hpp
+++ b/src/sdeventplus/internal/sdevent.hpp
@@ -22,6 +22,15 @@
                                   uint64_t accuracy,
                                   sd_event_time_handler_t callback,
                                   void* userdata) const = 0;
+    virtual int sd_event_add_defer(sd_event* event, sd_event_source** source,
+                                   sd_event_handler_t callback,
+                                   void* userdata) const = 0;
+    virtual int sd_event_add_post(sd_event* event, sd_event_source** source,
+                                  sd_event_handler_t callback,
+                                  void* userdata) const = 0;
+    virtual int sd_event_add_exit(sd_event* event, sd_event_source** source,
+                                  sd_event_handler_t callback,
+                                  void* userdata) const = 0;
 
     virtual int sd_event_prepare(sd_event* event) const = 0;
     virtual int sd_event_wait(sd_event* event, uint64_t usec) const = 0;
@@ -105,6 +114,27 @@
                                    callback, userdata);
     }
 
+    int sd_event_add_defer(sd_event* event, sd_event_source** source,
+                           sd_event_handler_t callback,
+                           void* userdata) const override
+    {
+        return ::sd_event_add_defer(event, source, callback, userdata);
+    }
+
+    int sd_event_add_post(sd_event* event, sd_event_source** source,
+                          sd_event_handler_t callback,
+                          void* userdata) const override
+    {
+        return ::sd_event_add_post(event, source, callback, userdata);
+    }
+
+    int sd_event_add_exit(sd_event* event, sd_event_source** source,
+                          sd_event_handler_t callback,
+                          void* userdata) const override
+    {
+        return ::sd_event_add_exit(event, source, callback, userdata);
+    }
+
     int sd_event_prepare(sd_event* event) const override
     {
         return ::sd_event_prepare(event);
diff --git a/src/sdeventplus/source/event.cpp b/src/sdeventplus/source/event.cpp
new file mode 100644
index 0000000..694c50a
--- /dev/null
+++ b/src/sdeventplus/source/event.cpp
@@ -0,0 +1,60 @@
+#include <sdeventplus/internal/sdevent.hpp>
+#include <sdeventplus/source/event.hpp>
+#include <utility>
+
+namespace sdeventplus
+{
+namespace source
+{
+
+Event::Event(const char* name, CreateFunc create,
+             const sdeventplus::Event& event, Callback&& callback) :
+    Base(event, create_source(name, create, event), std::false_type()),
+    callback(std::move(callback))
+{
+}
+
+const Event::Callback& Event::get_callback() const
+{
+    return callback;
+}
+
+sd_event_source* Event::create_source(const char* name, CreateFunc create,
+                                      const sdeventplus::Event& event)
+{
+    sd_event_source* source;
+    int r = (event.getSdEvent()->*create)(event.get(), &source, eventCallback,
+                                          nullptr);
+    if (r < 0)
+    {
+        throw SdEventError(-r, name);
+    }
+    return source;
+}
+
+int Event::eventCallback(sd_event_source* source, void* userdata)
+{
+    return sourceCallback<Callback, Event, &Event::get_callback>(
+        "eventCallback", source, userdata);
+}
+
+Defer::Defer(const sdeventplus::Event& event, Callback&& callback) :
+    Event("sd_event_add_defer", &internal::SdEvent::sd_event_add_defer, event,
+          std::move(callback))
+{
+}
+
+Post::Post(const sdeventplus::Event& event, Callback&& callback) :
+    Event("sd_event_add_post", &internal::SdEvent::sd_event_add_post, event,
+          std::move(callback))
+{
+}
+
+Exit::Exit(const sdeventplus::Event& event, Callback&& callback) :
+    Event("sd_event_add_exit", &internal::SdEvent::sd_event_add_exit, event,
+          std::move(callback))
+{
+}
+
+} // namespace source
+} // namespace sdeventplus
diff --git a/src/sdeventplus/source/event.hpp b/src/sdeventplus/source/event.hpp
new file mode 100644
index 0000000..6375d7c
--- /dev/null
+++ b/src/sdeventplus/source/event.hpp
@@ -0,0 +1,54 @@
+#pragma once
+
+#include <functional>
+#include <sdeventplus/internal/sdevent.hpp>
+#include <sdeventplus/source/base.hpp>
+#include <systemd/sd-event.h>
+
+namespace sdeventplus
+{
+namespace source
+{
+
+class Event : public Base
+{
+  public:
+    using Callback = std::function<void(Event& source)>;
+
+  protected:
+    using CreateFunc = decltype(&internal::SdEvent::sd_event_add_exit);
+
+    Event(const char* name, CreateFunc create, const sdeventplus::Event& event,
+          Callback&& callback);
+
+  private:
+    Callback callback;
+
+    const Callback& get_callback() const;
+
+    static sd_event_source* create_source(const char* name, CreateFunc create,
+                                          const sdeventplus::Event& event);
+
+    static int eventCallback(sd_event_source* source, void* userdata);
+};
+
+class Defer : public Event
+{
+  public:
+    Defer(const sdeventplus::Event& event, Callback&& Callback);
+};
+
+class Post : public Event
+{
+  public:
+    Post(const sdeventplus::Event& event, Callback&& callback);
+};
+
+class Exit : public Event
+{
+  public:
+    Exit(const sdeventplus::Event& event, Callback&& callback);
+};
+
+} // namespace source
+} // namespace sdeventplus
diff --git a/src/sdeventplus/test/sdevent.hpp b/src/sdeventplus/test/sdevent.hpp
index 1e90bc7..ce386d6 100644
--- a/src/sdeventplus/test/sdevent.hpp
+++ b/src/sdeventplus/test/sdevent.hpp
@@ -20,6 +20,12 @@
     MOCK_CONST_METHOD7(sd_event_add_time,
                        int(sd_event*, sd_event_source**, clockid_t, uint64_t,
                            uint64_t, sd_event_time_handler_t, void*));
+    MOCK_CONST_METHOD4(sd_event_add_defer, int(sd_event*, sd_event_source**,
+                                               sd_event_handler_t, void*));
+    MOCK_CONST_METHOD4(sd_event_add_post, int(sd_event*, sd_event_source**,
+                                              sd_event_handler_t, void*));
+    MOCK_CONST_METHOD4(sd_event_add_exit, int(sd_event*, sd_event_source**,
+                                              sd_event_handler_t, void*));
 
     MOCK_CONST_METHOD1(sd_event_prepare, int(sd_event*));
     MOCK_CONST_METHOD2(sd_event_wait, int(sd_event*, uint64_t));
