diff --git a/configure.ac b/configure.ac
index 593fbb7..6bc253f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -21,6 +21,11 @@
 PKG_CHECK_MODULES([PHOSPHOR_DBUS_INTERFACES], [phosphor-dbus-interfaces],, AC_MSG_ERROR(["Requires phosphor-dbus-interfaces package."]))
 PKG_CHECK_MODULES([PHOSPHOR_LOGGING], [phosphor-logging],, AC_MSG_ERROR(["Requires phosphor-logging."]))
 
+# Check for sdbus++
+AC_PATH_PROG([SDBUSPLUSPLUS], [sdbus++])
+AS_IF([test "x$SDBUSPLUSPLUS" == "x"],
+    AC_MSG_ERROR(["Requires sdbus++"]))
+
 # Checks for typedefs, structures, and compiler characteristics.
 AX_CXX_COMPILE_STDCXX_14([noext])
 AX_APPEND_COMPILE_FLAGS([-fpic -Wall -Werror], [CXXFLAGS])
@@ -50,6 +55,14 @@
     AC_SUBST([OESDK_TESTCASE_FLAGS], [$testcase_flags])
 )
 
+AC_ARG_VAR(OBJ_EVENT, [The event manager D-Bus object path])
+AS_IF([test "x$OBJ_EVENT" == "x"], [OBJ_EVENT="/xyz/openbmc_project/events"])
+AC_DEFINE_UNQUOTED([OBJ_EVENT], ["$OBJ_EVENT"], [The event manager D-Bus object path])
+
+AC_ARG_VAR(BUSNAME_EVENT, [The D-Bus busname to own])
+AS_IF([test "x$BUSNAME_EVENT" == "x"], [BUSNAME_EVENT="xyz.openbmc_project.Events"])
+AC_DEFINE_UNQUOTED([BUSNAME_EVENT], ["$BUSNAME_EVENT"], [The D-Bus busname to own])
+
 AC_ARG_VAR(YAML_PATH, [The path to the yaml config files.])
 AS_IF([test "x$YAML_PATH" == "x"], [YAML_PATH="\${top_srcdir}/src/example"])
 
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();
