diff --git a/sdevent/source.hpp b/sdevent/source.hpp
new file mode 100644
index 0000000..e9e2a0c
--- /dev/null
+++ b/sdevent/source.hpp
@@ -0,0 +1,92 @@
+#pragma once
+
+#include <memory>
+#include <systemd/sd-event.h>
+
+// TODO: openbmc/openbmc#1720 - add error handling for sd_event API failures
+
+namespace sdevent
+{
+namespace source
+{
+
+using SourcePtr = sd_event_source*;
+
+namespace details
+{
+
+/** @brief unique_ptr functor to release a source reference. */
+struct SourceDeleter
+{
+    void operator()(sd_event_source* ptr) const
+    {
+        deleter(ptr);
+    }
+
+    decltype(&sd_event_source_unref) deleter = sd_event_source_unref;
+};
+
+/* @brief Alias 'source' to a unique_ptr type for auto-release. */
+using source = std::unique_ptr<sd_event_source, SourceDeleter>;
+
+} // namespace details
+
+/** @class Source
+ *  @brief Provides C++ bindings to the sd_event_source* functions.
+ */
+class Source
+{
+    public:
+        /* Define all of the basic class operations:
+         *     Not allowed:
+         *         - Default constructor to avoid nullptrs.
+         *         - Copy operations due to internal unique_ptr.
+         *     Allowed:
+         *         - Move operations.
+         *         - Destructor.
+         */
+        Source() = delete;
+        Source(const Source&) = delete;
+        Source& operator=(const Source&) = delete;
+        Source(Source&&) = default;
+        Source& operator=(Source&&) = default;
+        ~Source() = default;
+
+        /** @brief Conversion constructor from 'SourcePtr'.
+         *
+         *  Increments ref-count of the source-pointer and releases it
+         *  when done.
+         */
+        explicit Source(SourcePtr s) : src(sd_event_source_ref(s)) {}
+
+        /** @brief Constructor for 'source'.
+         *
+         *  Takes ownership of the source-pointer and releases it when done.
+         */
+        Source(SourcePtr s, std::false_type) : src(s) {}
+
+        /** @brief Check if source contains a real pointer. (non-nullptr). */
+        explicit operator bool() const
+        {
+            return bool(src);
+        }
+
+        /** @brief Test whether or not the source can generate events. */
+        auto enabled()
+        {
+            int enabled;
+            sd_event_source_get_enabled(src.get(), &enabled);
+            return enabled;
+        }
+
+        /** @brief Allow the source to generate events. */
+        void enable(int enable)
+        {
+            sd_event_source_set_enabled(src.get(), enable);
+        }
+
+    private:
+        details::source src;
+};
+} // namespace source
+} // namespace sdevent
