diff --git a/xyz.openbmc_project.Inventory.Manager.cpp b/xyz.openbmc_project.Inventory.Manager.cpp
new file mode 100644
index 0000000..bbe5667
--- /dev/null
+++ b/xyz.openbmc_project.Inventory.Manager.cpp
@@ -0,0 +1,71 @@
+#include <sdbusplus/server.hpp>
+#include <xyz/openbmc_project/Inventory/Manager/server.hpp>
+
+namespace sdbusplus
+{
+namespace server
+{
+namespace xyz
+{
+namespace openbmc_project
+{
+namespace Inventory
+{
+
+Manager::Manager(bus::bus& bus, const char* path)
+        : _xyz_openbmc_project_Inventory_Manager_interface(
+                bus, path, _interface, _vtable, this)
+{
+}
+
+
+int Manager::_callback_Notify(
+        sd_bus_message* msg, void* context, sd_bus_error* error)
+{
+    auto m = message::message(sd_bus_message_ref(msg));
+
+    std::string path{};
+    std::map<std::string, std::map<std::string, sdbusplus::message::variant<std::string>>> object{};
+
+    m.read(path, object);
+
+    auto o = static_cast<Manager*>(context);
+    o->notify(path, object);
+
+    auto reply = m.new_method_return();
+    // No data to append on reply.
+
+    reply.method_return();
+
+    return 0;
+}
+
+namespace details
+{
+namespace Manager
+{
+static const auto _param_Notify =
+        utility::tuple_to_array(message::types::type_id<
+                std::string, std::map<std::string, std::map<std::string, sdbusplus::message::variant<std::string>>>>());
+}
+}
+
+
+
+const vtable::vtable_t Manager::_vtable[] = {
+    vtable::start(),
+
+    vtable::method("Notify",
+                   details::Manager::_param_Notify
+                        .data(),
+                   nullptr,
+                   _callback_Notify),
+    vtable::end()
+};
+
+} // namespace Inventory
+} // namespace openbmc_project
+} // namespace xyz
+} // namespace server
+} // namespace sdbusplus
+
