diff --git a/src/sdeventplus/source/base.cpp b/src/sdeventplus/source/base.cpp
index 78ae406..cab2c7a 100644
--- a/src/sdeventplus/source/base.cpp
+++ b/src/sdeventplus/source/base.cpp
@@ -42,11 +42,16 @@
     }
 }
 
+const Event& Base::get_event() const
+{
+    return event;
+}
+
 const char* Base::get_description() const
 {
     const char* description;
-    int r =
-        sdevent->sd_event_source_get_description(source.get(), &description);
+    int r = event.getSdEvent()->sd_event_source_get_description(source.get(),
+                                                                &description);
     if (r < 0)
     {
         throw SdEventError(-r, "sd_event_source_get_description");
@@ -56,7 +61,8 @@
 
 void Base::set_description(const char* description) const
 {
-    int r = sdevent->sd_event_source_set_description(source.get(), description);
+    int r = event.getSdEvent()->sd_event_source_set_description(source.get(),
+                                                                description);
     if (r < 0)
     {
         throw SdEventError(-r, "sd_event_source_set_description");
@@ -75,7 +81,7 @@
 
 void Base::set_prepare(Callback&& callback)
 {
-    int r = sdevent->sd_event_source_set_prepare(
+    int r = event.getSdEvent()->sd_event_source_set_prepare(
         source.get(), callback ? prepare_callback : nullptr);
     if (r < 0)
     {
@@ -87,7 +93,7 @@
 
 int Base::get_pending() const
 {
-    int r = sdevent->sd_event_source_get_pending(source.get());
+    int r = event.getSdEvent()->sd_event_source_get_pending(source.get());
     if (r < 0)
     {
         throw SdEventError(-r, "sd_event_source_get_pending");
@@ -98,7 +104,8 @@
 int64_t Base::get_priority() const
 {
     int64_t priority;
-    int r = sdevent->sd_event_source_get_priority(source.get(), &priority);
+    int r = event.getSdEvent()->sd_event_source_get_priority(source.get(),
+                                                             &priority);
     if (r < 0)
     {
         throw SdEventError(-r, "sd_event_source_get_priority");
@@ -108,7 +115,8 @@
 
 void Base::set_priority(int64_t priority) const
 {
-    int r = sdevent->sd_event_source_set_priority(source.get(), priority);
+    int r = event.getSdEvent()->sd_event_source_set_priority(source.get(),
+                                                             priority);
     if (r < 0)
     {
         throw SdEventError(-r, "sd_event_source_set_priority");
@@ -118,7 +126,8 @@
 int Base::get_enabled() const
 {
     int enabled;
-    int r = sdevent->sd_event_source_get_enabled(source.get(), &enabled);
+    int r =
+        event.getSdEvent()->sd_event_source_get_enabled(source.get(), &enabled);
     if (r < 0)
     {
         throw SdEventError(-r, "sd_event_source_get_enabled");
@@ -128,25 +137,25 @@
 
 void Base::set_enabled(int enabled) const
 {
-    int r = sdevent->sd_event_source_set_enabled(source.get(), enabled);
+    int r =
+        event.getSdEvent()->sd_event_source_set_enabled(source.get(), enabled);
     if (r < 0)
     {
         throw SdEventError(-r, "sd_event_source_set_enabled");
     }
 }
 
-Base::Base(sd_event_source* source, internal::SdEvent* sdevent) :
-    sdevent(sdevent), source(source, &internal::SdEvent::sd_event_source_ref,
-                             &internal::SdEvent::sd_event_source_unref, sdevent)
+Base::Base(const Event& event, sd_event_source* source) :
+    event(event),
+    source(source, &internal::SdEvent::sd_event_source_ref,
+           &internal::SdEvent::sd_event_source_unref, event.getSdEvent())
 {
 }
 
-Base::Base(sd_event_source* source, std::false_type,
-           internal::SdEvent* sdevent) :
-    sdevent(sdevent),
-    source(source, &internal::SdEvent::sd_event_source_ref,
-           &internal::SdEvent::sd_event_source_unref, std::false_type(),
-           sdevent)
+Base::Base(const Event& event, sd_event_source* source, std::false_type) :
+    event(event), source(source, &internal::SdEvent::sd_event_source_ref,
+                         &internal::SdEvent::sd_event_source_unref,
+                         std::false_type(), event.getSdEvent())
 {
 }
 
diff --git a/src/sdeventplus/source/base.hpp b/src/sdeventplus/source/base.hpp
index 3b237db..f8db620 100644
--- a/src/sdeventplus/source/base.hpp
+++ b/src/sdeventplus/source/base.hpp
@@ -2,7 +2,7 @@
 
 #include <cstdint>
 #include <functional>
-#include <sdeventplus/internal/sdevent.hpp>
+#include <sdeventplus/event.hpp>
 #include <sdeventplus/internal/sdref.hpp>
 #include <systemd/sd-bus.h>
 #include <type_traits>
@@ -27,6 +27,8 @@
 
     int prepareCallback();
 
+    const Event& get_event() const;
+
     const char* get_description() const;
     void set_description(const char* description) const;
     void set_prepare(Callback&& callback);
@@ -37,14 +39,12 @@
     void set_enabled(int enabled) const;
 
   protected:
-    const internal::SdEvent* const sdevent;
+    const Event event;
     const internal::SdRef<sd_event_source> source;
 
     // Base sources cannot be directly constructed.
-    Base(sd_event_source* source,
-         internal::SdEvent* sdevent = &internal::sdevent_impl);
-    Base(sd_event_source* source, std::false_type,
-         internal::SdEvent* sdevent = &internal::sdevent_impl);
+    Base(const Event& event, sd_event_source* source);
+    Base(const Event& event, sd_event_source* source, std::false_type);
 
   private:
     Callback prepare;
diff --git a/test/source/base.cpp b/test/source/base.cpp
index 13c534a..3b6a63f 100644
--- a/test/source/base.cpp
+++ b/test/source/base.cpp
@@ -1,12 +1,15 @@
 #include <cerrno>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
+#include <memory>
+#include <sdeventplus/event.hpp>
 #include <sdeventplus/exception.hpp>
 #include <sdeventplus/internal/sdevent.hpp>
 #include <sdeventplus/source/base.hpp>
 #include <sdeventplus/test/sdevent.hpp>
 #include <string>
 #include <system_error>
+#include <systemd/sd-event.h>
 #include <type_traits>
 
 namespace sdeventplus
@@ -24,13 +27,11 @@
 class BaseImpl : public Base
 {
   public:
-    BaseImpl(sd_event_source* source, internal::SdEvent* sdevent) :
-        Base(source, sdevent)
+    BaseImpl(const Event& event, sd_event_source* source) : Base(event, source)
     {
     }
-    BaseImpl(sd_event_source* source, std::false_type,
-             internal::SdEvent* sdevent) :
-        Base(source, std::false_type(), sdevent)
+    BaseImpl(const Event& event, sd_event_source* source, std::false_type) :
+        Base(event, source, std::false_type())
     {
     }
 };
@@ -39,15 +40,30 @@
 {
   protected:
     testing::StrictMock<test::SdEventMock> mock;
-    sd_event_source* const expected_source =
-        reinterpret_cast<sd_event_source*>(1234);
+    sd_event_source* expected_source = reinterpret_cast<sd_event_source*>(1234);
+    sd_event* expected_event = reinterpret_cast<sd_event*>(2345);
+    std::unique_ptr<Event> event;
+
+    virtual void SetUp()
+    {
+        event =
+            std::make_unique<Event>(expected_event, std::false_type(), &mock);
+    }
+    virtual void TearDown()
+    {
+        EXPECT_CALL(mock, sd_event_unref(expected_event))
+            .WillOnce(Return(nullptr));
+        event.reset();
+    }
 };
 
 TEST_F(BaseTest, NewBaseRef)
 {
+    EXPECT_CALL(mock, sd_event_ref(expected_event))
+        .WillOnce(Return(expected_event));
     EXPECT_CALL(mock, sd_event_source_ref(expected_source))
         .WillOnce(Return(expected_source));
-    BaseImpl source(expected_source, &mock);
+    BaseImpl source(*event, expected_source);
 
     {
         testing::InSequence seq;
@@ -57,11 +73,14 @@
         EXPECT_CALL(mock, sd_event_source_unref(expected_source))
             .WillOnce(Return(nullptr));
     }
+    EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
 }
 
 TEST_F(BaseTest, NewBaseNoRef)
 {
-    BaseImpl source(expected_source, std::false_type(), &mock);
+    EXPECT_CALL(mock, sd_event_ref(expected_event))
+        .WillOnce(Return(expected_event));
+    BaseImpl source(*event, expected_source, std::false_type());
 
     {
         testing::InSequence seq;
@@ -71,6 +90,7 @@
         EXPECT_CALL(mock, sd_event_source_unref(expected_source))
             .WillOnce(Return(nullptr));
     }
+    EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
 }
 
 class BaseMethodTest : public BaseTest
@@ -78,13 +98,16 @@
   protected:
     std::unique_ptr<BaseImpl> base;
 
-    void SetUp()
+    void SetUp() override
     {
-        base = std::make_unique<BaseImpl>(expected_source, std::false_type(),
-                                          &mock);
+        BaseTest::SetUp();
+        EXPECT_CALL(mock, sd_event_ref(expected_event))
+            .WillOnce(Return(expected_event));
+        base = std::make_unique<BaseImpl>(*event, expected_source,
+                                          std::false_type());
     }
 
-    void TearDown()
+    void TearDown() override
     {
         {
             testing::InSequence seq;
@@ -94,9 +117,19 @@
             EXPECT_CALL(mock, sd_event_source_unref(expected_source))
                 .WillOnce(Return(nullptr));
         }
+        EXPECT_CALL(mock, sd_event_unref(expected_event))
+            .WillOnce(Return(nullptr));
+        base.reset();
+        BaseTest::TearDown();
     }
 };
 
+TEST_F(BaseMethodTest, GetEvent)
+{
+    EXPECT_NE(event.get(), &base->get_event());
+    EXPECT_EQ(event->get(), base->get_event().get());
+}
+
 TEST_F(BaseMethodTest, GetDescriptionSuccess)
 {
     const char* expected = "test_desc";
