diff --git a/sd_event_loop.hpp b/sd_event_loop.hpp
new file mode 100644
index 0000000..0a3a2f1
--- /dev/null
+++ b/sd_event_loop.hpp
@@ -0,0 +1,147 @@
+#pragma once
+
+#include <systemd/sd-event.h>
+#include <chrono>
+#include <map>
+
+namespace eventloop
+{
+
+/** @struct EventSourceDeleter
+ *
+ *  Custom deleter for the sd_event_source*.
+ */
+struct EventSourceDeleter
+{
+    void operator()(sd_event_source* event) const
+    {
+        event = sd_event_source_unref(event);
+    }
+};
+
+using EventSource = std::unique_ptr<sd_event_source, EventSourceDeleter>;
+using IntervalType = std::chrono::microseconds;
+
+/** @enum Timers
+ *
+ *  For SOL functioning, there are two timers involved. The character accumulate
+ *  interval timer is the amount of time that the BMC will wait before
+ *  transmitting a partial SOL packet. The retry interval timer is the time that
+ *  BMC will wait before the first retry and the time between retries when
+ *  sending SOL packets to the remote console.
+ */
+enum class Timers
+{
+    ACCUMULATE,   /**< Character Accumulate Timer */
+    RETRY,        /**< Retry Interval Timer */
+};
+
+class EventLoop
+{
+    public:
+
+        EventLoop() = default;
+        ~EventLoop() = default;
+        EventLoop(const EventLoop&) = delete;
+        EventLoop& operator=(const EventLoop&) = delete;
+        EventLoop(EventLoop&&) = delete;
+        EventLoop& operator=(EventLoop&&) = delete;
+
+        /** @brief Timer Map
+         *
+         *  The key for the timer map is the timer type. There are two types of
+         *  timers, character accumulate timer and retry interval timer. The
+         *  entries in the values is the event source for the timer and the
+         *  interval.
+         */
+        using TimerMap = std::map<Timers, std::tuple<EventSource,
+                                                     IntervalType>>;
+
+        /** @brief SOL Payload Map.
+         *
+         *  The key for the payload map is the payload instance, the entries in
+         *  the value are a map of timers.
+         */
+        using PayloadMap = std::map<uint8_t, TimerMap>;
+
+        /** @brief Initialise the event loop and add the handler for incoming
+         *         IPMI packets.
+         *
+         *  @return EXIT_SUCCESS on success and EXIT_FAILURE on failure.
+         */
+        int startEventLoop();
+
+        /** @brief Remove host console I/O event source. */
+        void stopHostConsole();
+
+        /** @brief Initialize the timers for the SOL payload instance
+         *
+         *  This API would add the Character accumulate interval timer event
+         *  source and the retry interval timer event source for the SOL payload
+         *  instance to the event loop.
+         *
+         *  @param[in] payloadInst - SOL payload instance.
+         *  @param[in] accumulateInterval - Character accumulate interval.
+         *  @param[in] retryInterval - Retry interval.
+         */
+        void startSOLPayloadInstance(uint8_t payloadInst,
+                                     IntervalType accumulateInterval,
+                                     IntervalType retryInterval);
+
+        /** @brief Stop the timers for the SOL payload instance.
+         *
+         *  This would remove the character accumulate interval timer event
+         *  source and the retry interval timer event source from the event
+         *  loop.
+         *
+         *  @param[in] payloadInst - SOL payload instance
+         */
+        void stopSOLPayloadInstance(uint8_t payloadInst);
+
+        /** @brief Modify the timer event source to enable/disable.
+         *
+         *  When the timer is enabled, the timer it set to fire again at
+         *  timer's interval for the instance added to the event loop iteration
+         *  timestamp. When the timer is disabled, the event source for the
+         *  timer is disabled.
+         *
+         *  @param[in] payloadInst - SOL payload instance.
+         *  @param[in] type -  Timer type.
+         *  @param[in] status - on/off the event source.
+         */
+        void switchTimer(uint8_t payloadInst,
+                         Timers type,
+                         bool status);
+
+        /** @brief Modify the retry interval timer event source to enable/
+         *         disable
+         *
+         *  When the timer is enabled, the timer it set to fire again at
+         *  retry interval for the instance added to the event loop iteration
+         *  timestamp. When the timer is disabled the event source for the
+         *  retry interval timer is disabled.
+         *
+         *  @param[in] payloadInst - SOL payload instance.
+         *  @param[in] status - on/off the event source.
+         */
+        void switchRetryTimer(uint8_t payloadInst, bool status);
+
+    private:
+        /** @brief Event source object for host console. */
+        EventSource hostConsole = nullptr;
+
+        /** @brief Event source for the UDP socket listening on IPMI standard
+         *         port.
+         */
+        EventSource udpIPMI = nullptr;
+
+        /** @brief Map to keep information regarding IPMI payload instance and
+         *         timers for character accumulate interval and retry interval.
+         */
+        PayloadMap payloadInfo;
+
+        /** @brief Event loop object. */
+        sd_event* event = nullptr;
+};
+
+} // namespace eventloop
