diff --git a/example/heartbeat.cpp b/example/heartbeat.cpp
index e45ae89..1840f60 100644
--- a/example/heartbeat.cpp
+++ b/example/heartbeat.cpp
@@ -30,6 +30,6 @@
     };
     Time<ClockId::RealTime> time(event, Clock<ClockId::RealTime>(event).now(),
                                  std::chrono::seconds{1}, std::move(hbFunc));
-    time.set_enabled(SD_EVENT_ON);
+    time.set_enabled(sdeventplus::source::Enabled::On);
     return event.loop();
 }
diff --git a/src/sdeventplus/source/base.cpp b/src/sdeventplus/source/base.cpp
index d63a03e..9915132 100644
--- a/src/sdeventplus/source/base.cpp
+++ b/src/sdeventplus/source/base.cpp
@@ -14,7 +14,7 @@
 {
     if (source)
     {
-        set_enabled(SD_EVENT_OFF);
+        set_enabled(Enabled::Off);
     }
 }
 
@@ -67,7 +67,7 @@
     return prepare;
 }
 
-int Base::get_pending() const
+bool Base::get_pending() const
 {
     int r = event.getSdEvent()->sd_event_source_get_pending(source.get());
     if (r < 0)
@@ -99,7 +99,7 @@
     }
 }
 
-int Base::get_enabled() const
+Enabled Base::get_enabled() const
 {
     int enabled;
     int r =
@@ -108,13 +108,13 @@
     {
         throw SdEventError(-r, "sd_event_source_get_enabled");
     }
-    return enabled;
+    return static_cast<Enabled>(enabled);
 }
 
-void Base::set_enabled(int enabled) const
+void Base::set_enabled(Enabled enabled) const
 {
-    int r =
-        event.getSdEvent()->sd_event_source_set_enabled(source.get(), enabled);
+    int r = event.getSdEvent()->sd_event_source_set_enabled(
+        source.get(), static_cast<int>(enabled));
     if (r < 0)
     {
         throw SdEventError(-r, "sd_event_source_set_enabled");
@@ -152,7 +152,7 @@
         // after it gets deleted in the move
         if (source)
         {
-            set_enabled(SD_EVENT_OFF);
+            set_enabled(Enabled::Off);
         }
 
         event = std::move(other.event);
diff --git a/src/sdeventplus/source/base.hpp b/src/sdeventplus/source/base.hpp
index 5a5d12b..dd2a715 100644
--- a/src/sdeventplus/source/base.hpp
+++ b/src/sdeventplus/source/base.hpp
@@ -15,6 +15,17 @@
 namespace source
 {
 
+/** @class Enabled
+ *  @brief Mapping of sdeventplus source enable values to the sd-event
+ *         equivalent
+ */
+enum class Enabled
+{
+    Off = SD_EVENT_OFF,
+    On = SD_EVENT_ON,
+    OneShot = SD_EVENT_ONESHOT,
+};
+
 /** @class Base
  *  @brief The base class for all sources implementing common source methods
  *         Not instantiated directly by end users
@@ -67,7 +78,7 @@
      *  @return 'true' if the source has pending events
      *          'false' otherwise
      */
-    int get_pending() const;
+    bool get_pending() const;
 
     /** @brief Gets the priority of the source relative to other sources
      *         The lower the priority the more important the source
@@ -90,14 +101,14 @@
      *  @throws SdEventError for underlying sd_event errors
      *  @return The enabled status of the source
      */
-    int get_enabled() const;
+    Enabled get_enabled() const;
 
     /** @brief Sets the enablement value of the source
      *
      *  @param[in] enabled - The new state of the source
      *  @throws SdEventError for underlying sd_event errors
      */
-    void set_enabled(int enabled) const;
+    void set_enabled(Enabled enabled) const;
 
   protected:
     Event event;
diff --git a/test/source/base.cpp b/test/source/base.cpp
index bc0eec0..df855c1 100644
--- a/test/source/base.cpp
+++ b/test/source/base.cpp
@@ -355,10 +355,10 @@
 {
     EXPECT_CALL(mock, sd_event_source_get_pending(expected_source))
         .WillOnce(Return(0));
-    EXPECT_EQ(0, base->get_pending());
+    EXPECT_FALSE(base->get_pending());
     EXPECT_CALL(mock, sd_event_source_get_pending(expected_source))
         .WillOnce(Return(4));
-    EXPECT_EQ(4, base->get_pending());
+    EXPECT_TRUE(base->get_pending());
 }
 
 TEST_F(BaseMethodTest, GetPendingError)
@@ -400,7 +400,7 @@
 {
     EXPECT_CALL(mock, sd_event_source_get_enabled(expected_source, testing::_))
         .WillOnce(DoAll(SetArgPointee<1>(SD_EVENT_ON), Return(0)));
-    EXPECT_EQ(SD_EVENT_ON, base->get_enabled());
+    EXPECT_EQ(Enabled::On, base->get_enabled());
 }
 
 TEST_F(BaseMethodTest, GetEnabledError)
@@ -414,14 +414,15 @@
 {
     EXPECT_CALL(mock, sd_event_source_set_enabled(expected_source, SD_EVENT_ON))
         .WillOnce(Return(0));
-    base->set_enabled(SD_EVENT_ON);
+    base->set_enabled(Enabled::On);
 }
 
 TEST_F(BaseMethodTest, SetEnabledError)
 {
-    EXPECT_CALL(mock, sd_event_source_set_enabled(expected_source, SD_EVENT_ON))
+    EXPECT_CALL(mock,
+                sd_event_source_set_enabled(expected_source, SD_EVENT_ONESHOT))
         .WillOnce(Return(-EINVAL));
-    EXPECT_THROW(base->set_enabled(SD_EVENT_ON), SdEventError);
+    EXPECT_THROW(base->set_enabled(Enabled::OneShot), SdEventError);
 }
 
 } // namespace
