diff --git a/manager.cpp b/manager.cpp
index 0c2a76d..a05d2bc 100644
--- a/manager.cpp
+++ b/manager.cpp
@@ -127,15 +127,16 @@
     }
 }
 
-void Manager::notify(std::string path, Object object)
+void Manager::notify(sdbusplus::message::object_path path, Object object)
 {
     try
     {
+
         if (object.cbegin() == object.cend())
             throw std::runtime_error(
-                "No interfaces in " + path);
+                "No interfaces in " + path.str);
 
-        path.insert(0, _root);
+        path.str.insert(0, _root);
 
         auto obj = _refs.find(path);
         if (obj != _refs.end())
@@ -156,7 +157,7 @@
                     "Unimplemented interface: " + x.first);
 
             ref.emplace(x.first,
-                        (maker->second)(_bus, path.c_str()));
+                        (maker->second)(_bus, path.str.c_str()));
         }
 
         // Hang on to a reference to the object (interfaces)
diff --git a/manager.hpp b/manager.hpp
index 24173e2..0c89017 100644
--- a/manager.hpp
+++ b/manager.hpp
@@ -22,7 +22,7 @@
 using ServerObject = typename sdbusplus::server::object::object<T>;
 
 using ManagerIface =
-    sdbusplus::server::xyz::openbmc_project::Inventory::Manager;
+    sdbusplus::xyz::openbmc_project::Inventory::server::Manager;
 
 /** @struct MakeInterface
  *  @brief Adapt an sdbusplus interface proxy.
@@ -77,7 +77,7 @@
 
         using Object = std::map <
                        std::string, std::map <
-                       std::string, sdbusplus::message::variant<std::string >>>;
+                       std::string, sdbusplus::message::variant<int64_t, std::string >>>;
         using EventInfo = std::tuple <
                           std::vector<details::EventBasePtr>,
                           std::vector<details::ActionBasePtr >>;
@@ -89,7 +89,7 @@
         void shutdown() noexcept;
 
         /** @brief sd_bus Notify method implementation callback. */
-        void notify(std::string path, Object) override;
+        void notify(sdbusplus::message::object_path, Object) override;
 
         /** @brief sd_bus signal callback. */
         void signal(sdbusplus::message::message&,
diff --git a/test/test.cpp b/test/test.cpp
index 7f72721..89e46b9 100644
--- a/test/test.cpp
+++ b/test/test.cpp
@@ -76,8 +76,6 @@
                std::string,
                sdbusplus::message::variant<T... >>>;
 
-using ObjectPath = std::string;
-
 /**@brief Find a subset of interfaces and properties in an object. */
 template <typename ...T>
 auto hasProperties(const Object<T...>& l, const Object<T...>& r)
@@ -149,8 +147,8 @@
 
     // Make sure the notify method works.
     {
-        ObjectPath relPath{"/foo"};
-        ObjectPath path{root + relPath};
+        sdbusplus::message::object_path relPath{"/foo"};
+        std::string path(root + relPath.str);
 
         SignalQueue queue(
             "path='" + root + "',member='InterfacesAdded'");
@@ -162,7 +160,7 @@
 
         auto sig{queue.pop()};
         assert(sig);
-        ObjectPath signalPath;
+        sdbusplus::message::object_path signalPath;
         Object<std::string> signalObject;
         sig.read(signalPath);
         assert(path == signalPath);
@@ -174,12 +172,12 @@
 
     // Make sure DBus signals are handled.
     {
-        ObjectPath relDeleteMeOne{"/deleteme1"};
-        ObjectPath relDeleteMeTwo{"/deleteme2"};
-        ObjectPath relTriggerOne{"/trigger1"};
-        ObjectPath deleteMeOne{root + relDeleteMeOne};
-        ObjectPath deleteMeTwo{root + relDeleteMeTwo};
-        ObjectPath triggerOne{root + relTriggerOne};
+        sdbusplus::message::object_path relDeleteMeOne{"/deleteme1"};
+        sdbusplus::message::object_path relDeleteMeTwo{"/deleteme2"};
+        sdbusplus::message::object_path relTriggerOne{"/trigger1"};
+        std::string deleteMeOne{root + relDeleteMeOne.str};
+        std::string deleteMeTwo{root + relDeleteMeTwo.str};
+        std::string triggerOne{root + relTriggerOne.str};
 
         // Create some objects to be deleted by an action.
         {
@@ -227,7 +225,7 @@
             m.append(sdbusplus::message::variant<std::string>("xxxyyy"));
             b.call(m);
 
-            ObjectPath sigpath;
+            sdbusplus::message::object_path sigpath;
             std::vector<std::string> interfaces;
             {
                 std::vector<std::string> interfaces;
@@ -259,10 +257,10 @@
 
     // Validate the set property action.
     {
-        ObjectPath relChangeMe{"/changeme"};
-        ObjectPath relTriggerTwo{"/trigger2"};
-        ObjectPath changeMe{root + relChangeMe};
-        ObjectPath triggerTwo{root + relTriggerTwo};
+        sdbusplus::message::object_path relChangeMe{"/changeme"};
+        sdbusplus::message::object_path relTriggerTwo{"/trigger2"};
+        std::string changeMe{root + relChangeMe.str};
+        std::string triggerTwo{root + relTriggerTwo.str};
 
         // Create an object to be updated by the set property action.
         {
diff --git a/xyz.openbmc_project.Inventory.Manager.cpp b/xyz.openbmc_project.Inventory.Manager.cpp
index bbe5667..787b65f 100644
--- a/xyz.openbmc_project.Inventory.Manager.cpp
+++ b/xyz.openbmc_project.Inventory.Manager.cpp
@@ -1,16 +1,19 @@
+#include <algorithm>
 #include <sdbusplus/server.hpp>
+#include <sdbusplus/exception.hpp>
 #include <xyz/openbmc_project/Inventory/Manager/server.hpp>
 
+
 namespace sdbusplus
 {
-namespace server
-{
 namespace xyz
 {
 namespace openbmc_project
 {
 namespace Inventory
 {
+namespace server
+{
 
 Manager::Manager(bus::bus& bus, const char* path)
         : _xyz_openbmc_project_Inventory_Manager_interface(
@@ -22,22 +25,32 @@
 int Manager::_callback_Notify(
         sd_bus_message* msg, void* context, sd_bus_error* error)
 {
-    auto m = message::message(sd_bus_message_ref(msg));
+    using sdbusplus::server::binding::details::convertForMessage;
 
-    std::string path{};
-    std::map<std::string, std::map<std::string, sdbusplus::message::variant<std::string>>> object{};
+    try
+    {
+        auto m = message::message(msg);
 
-    m.read(path, object);
+        sdbusplus::message::object_path path{};
+    std::map<std::string, std::map<std::string, sdbusplus::message::variant<int64_t, std::string>>> object{};
 
-    auto o = static_cast<Manager*>(context);
-    o->notify(path, object);
+        m.read(path, object);
 
-    auto reply = m.new_method_return();
-    // No data to append on reply.
+        auto o = static_cast<Manager*>(context);
+        o->notify(path, object);
 
-    reply.method_return();
+        auto reply = m.new_method_return();
+        // No data to append on reply.
 
-    return 0;
+        reply.method_return();
+    }
+    catch(sdbusplus::internal_exception_t& e)
+    {
+        sd_bus_error_set_const(error, e.name(), e.description());
+        return -EINVAL;
+    }
+
+    return true;
 }
 
 namespace details
@@ -46,26 +59,30 @@
 {
 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>>>>());
+                sdbusplus::message::object_path, std::map<std::string, std::map<std::string, sdbusplus::message::variant<int64_t, std::string>>>>());
+static const auto _return_Notify =
+        utility::tuple_to_array(std::make_tuple('\0'));
 }
 }
 
 
 
+
 const vtable::vtable_t Manager::_vtable[] = {
     vtable::start(),
 
     vtable::method("Notify",
                    details::Manager::_param_Notify
                         .data(),
-                   nullptr,
+                   details::Manager::_return_Notify
+                        .data(),
                    _callback_Notify),
     vtable::end()
 };
 
+} // namespace server
 } // namespace Inventory
 } // namespace openbmc_project
 } // namespace xyz
-} // namespace server
 } // namespace sdbusplus
 
diff --git a/xyz/openbmc_project/Inventory/Manager/server.hpp b/xyz/openbmc_project/Inventory/Manager/server.hpp
index 9c3118b..302bee5 100644
--- a/xyz/openbmc_project/Inventory/Manager/server.hpp
+++ b/xyz/openbmc_project/Inventory/Manager/server.hpp
@@ -5,14 +5,14 @@
 
 namespace sdbusplus
 {
-namespace server
-{
 namespace xyz
 {
 namespace openbmc_project
 {
 namespace Inventory
 {
+namespace server
+{
 
 class Manager
 {
@@ -21,15 +21,16 @@
          *     Not allowed:
          *         - Default constructor to avoid nullptrs.
          *         - Copy operations due to internal unique_ptr.
+         *         - Move operations due to 'this' being registered as the
+         *           'context' with sdbus.
          *     Allowed:
-         *         - Move operations.
          *         - Destructor.
          */
         Manager() = delete;
         Manager(const Manager&) = delete;
         Manager& operator=(const Manager&) = delete;
-        Manager(Manager&&) = default;
-        Manager& operator=(Manager&&) = default;
+        Manager(Manager&&) = delete;
+        Manager& operator=(Manager&&) = delete;
         virtual ~Manager() = default;
 
         /** @brief Constructor to put object onto bus at a dbus path.
@@ -39,6 +40,7 @@
         Manager(bus::bus& bus, const char* path);
 
 
+
         /** @brief Implementation for Notify
          *  Signal the implementing service that an item is ready to have its state managed.
          *
@@ -46,8 +48,9 @@
          *  @param[in] object - The fully enumerated item to be managed.
          */
         virtual void notify(
-            std::string path,
-            std::map<std::string, std::map<std::string, sdbusplus::message::variant<std::string>>> object) = 0;
+            sdbusplus::message::object_path path,
+            std::map<std::string, std::map<std::string, sdbusplus::message::variant<int64_t, std::string>>> object) = 0;
+
 
 
 
@@ -61,14 +64,16 @@
 
         static constexpr auto _interface = "xyz.openbmc_project.Inventory.Manager";
         static const vtable::vtable_t _vtable[];
-        interface::interface _xyz_openbmc_project_Inventory_Manager_interface;
+        sdbusplus::server::interface::interface
+                _xyz_openbmc_project_Inventory_Manager_interface;
 
 
 };
 
+
+} // namespace server
 } // namespace Inventory
 } // namespace openbmc_project
 } // namespace xyz
-} // namespace server
 } // namespace sdbusplus
 
