diff --git a/src/Makefile.am b/src/Makefile.am
index cf91619..94f81b8 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -10,7 +10,8 @@
 	elog.cpp \
 	main.cpp \
 	propertywatch.cpp \
-	resolve_errors.cpp
+	resolve_errors.cpp \
+	event_manager.cpp
 phosphor_dbus_monitor_LDADD = \
 	$(SDBUSPLUS_LIBS) \
 	$(PHOSPHOR_DBUS_INTERFACES_LIBS) \
diff --git a/src/event_manager.cpp b/src/event_manager.cpp
new file mode 100644
index 0000000..ef2098a
--- /dev/null
+++ b/src/event_manager.cpp
@@ -0,0 +1,41 @@
+/**
+ * Copyright © 2017 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "event.hpp"
+#include "event_manager.hpp"
+#include "config.h"
+
+namespace phosphor
+{
+namespace events
+{
+
+void Manager::create(
+    const std::string& eventName,
+    const std::string& objectPath,
+    const std::string& propertyName,
+    const std::string& propertyvalue)
+{
+    // TODO Implement it in later commit.
+}
+
+Manager& getManager()
+{
+    static Manager mgr;
+    return mgr;
+}
+
+} // namespace events
+} // namespace phosphor
diff --git a/src/event_manager.hpp b/src/event_manager.hpp
new file mode 100644
index 0000000..3d1f8d1
--- /dev/null
+++ b/src/event_manager.hpp
@@ -0,0 +1,42 @@
+#pragma once
+
+#include <sdbusplus/bus.hpp>
+
+namespace phosphor
+{
+namespace events
+{
+
+/** @class Manager
+ *  @brief OpenBMC Event manager implementation.
+ */
+class Manager
+{
+    public:
+        Manager() = default;
+        Manager(const Manager&) = delete;
+        Manager& operator=(const Manager&) = delete;
+        Manager(Manager&&) = default;
+        Manager& operator=(Manager&&) = default;
+        virtual ~Manager() = default;
+
+        /** @brief Create the D-Bus Event object.
+         *  @detail Add the objectPath,propertyName, propertyValue
+         *          as additional data of the event object.
+         *  @param[in] eventName - Name of the event.
+         *  @param[in] objectPath - Path of the D-Bus object.
+         *  @param[in] propertyName - Name of the property.
+         *  @param[in] propertyValue - Value of the property.
+         */
+        void create(
+            const std::string& eventName,
+            const std::string& objectPath,
+            const std::string& propertyName,
+            const std::string& propertyValue);
+
+};
+
+Manager& getManager();
+
+} // namespace events
+} // namespace phosphor
diff --git a/src/main.cpp b/src/main.cpp
index 08cd849..5e191e1 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -13,8 +13,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include "sdbusplus.hpp"
+
+#include "config.h"
 #include "generated.hpp"
+#include "sdbusplus.hpp"
+
+#include <sdbusplus/bus.hpp>
+#include <sdbusplus/server/manager.hpp>
 
 using namespace phosphor::dbus::monitoring;
 
@@ -32,6 +37,12 @@
 
 int main(void)
 {
+    auto& bus = SDBusPlus::getBus();
+
+    // Add sdbusplus Object Manager for the 'root' path of events.
+    sdbusplus::server::manager::manager objManager(bus, OBJ_EVENT);
+    bus.request_name(BUSNAME_EVENT);
+
     for (auto& watch : ConfigPropertyWatches::get())
     {
         watch->start();
