diff --git a/sessions_manager.hpp b/sessions_manager.hpp
new file mode 100644
index 0000000..71bb7e4
--- /dev/null
+++ b/sessions_manager.hpp
@@ -0,0 +1,96 @@
+#pragma once
+
+#include <map>
+#include <memory>
+#include <mutex>
+
+#include "session.hpp"
+
+namespace session
+{
+
+enum class RetrieveOption
+{
+    BMC_SESSION_ID,
+    RC_SESSION_ID,
+};
+
+constexpr size_t SESSION_ZERO = 0;
+constexpr size_t MAX_SESSIONLESS_COUNT = 1;
+constexpr size_t MAX_SESSION_COUNT = 5;
+
+/*
+ * @class Manager
+ *
+ * Manager class acts a manager for the IPMI sessions and provides interfaces
+ * to start a session, stop a session and get reference to the session objects.
+ *
+ */
+
+class Manager
+{
+    public:
+
+        // BMC Session ID is the key for the map
+        using SessionMap = std::map<SessionID, std::shared_ptr<Session>>;
+
+        Manager();
+        ~Manager() = default;
+        Manager(const Manager&) = delete;
+        Manager& operator=(const Manager&) = delete;
+        Manager(Manager&&) = default;
+        Manager& operator=(Manager&&) = default;
+
+        /*
+         * @brief Start an IPMI session
+         *
+         * @param[in] remoteConsoleSessID - Remote Console Session ID mentioned
+         *            in the Open SessionRequest Command
+         * @param[in] priv - Privilege level requested
+         * @param[in] authAlgo - Authentication Algorithm
+         *
+         * @return session handle on success and nullptr on failure
+         *
+         */
+        std::weak_ptr<Session> startSession(SessionID remoteConsoleSessID,
+                Privilege priv, cipher::rakp_auth::Algorithms authAlgo);
+
+        /*
+         * @brief Stop IPMI Session
+         *
+         * @param[in] bmcSessionID - BMC Session ID
+         *
+         */
+        void stopSession(SessionID bmcSessionID);
+
+        /*
+         * @brief Get Session Handle
+         *
+         * @param[in] sessionID - Session ID
+         * @param[in] option - Select between BMC Session ID and Remote Console
+         *            Session ID, Default option is BMC Session ID
+         *
+         * @return session handle on success and nullptr on failure
+         *
+         */
+        std::weak_ptr<Session> getSession(
+               SessionID sessionID,
+               RetrieveOption option = RetrieveOption::BMC_SESSION_ID);
+
+    private:
+
+        /*
+         * @brief Session Manager keeps the session objects as a sorted
+         *        associative container with Session ID as the unique key
+         */
+        SessionMap sessionsMap;
+
+        /*
+         * @brief Clean Session Stale Entries
+         *
+         *  Removes the inactive sessions entries from the Session Map
+         */
+        void cleanStaleEntries();
+};
+
+} // namespace session
